From 43dcf4d39553df77bd6eba1cfa383324ef948424 Mon Sep 17 00:00:00 2001 From: Umberto Pepato Date: Wed, 20 Mar 2024 17:57:18 +0100 Subject: [PATCH 01/90] [RAM] Fix rule settings subfeature privileges check (#171084) ## Summary Changes the authorization checks on rule settings to correctly account for subfeature privileges. ## Verification steps 1. Temporarily enable the features locally > If you're testing in serverless, this step is not necessary ```diff diff --git a/x-pack/plugins/alerting/server/plugin.ts b/x-pack/plugins/alerting/server/plugin.ts index 34472ed6066..b974d8ce048 100644 --- a/x-pack/plugins/alerting/server/plugin.ts +++ b/x-pack/plugins/alerting/server/plugin.ts @@ -255,7 +255,7 @@ export class AlertingPlugin { }; }); - plugins.features.registerKibanaFeature(getRulesSettingsFeature(!!plugins.serverless)); + plugins.features.registerKibanaFeature(getRulesSettingsFeature(true)); plugins.features.registerKibanaFeature(maintenanceWindowFeature); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/rules_setting/rules_settings_modal.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/rules_setting/rules_settings_modal.tsx index 4431f059759..124ebbef439 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/rules_setting/rules_settings_modal.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/rules_setting/rules_settings_modal.tsx @@ -228,7 +228,7 @@ export const RulesSettingsModal = memo((props: RulesSettingsModalProps) => { hasError={hasFlappingError} /> )} - {isServerless && queryDelaySettings && ( + {queryDelaySettings && ( <> `Stack management` > `Roles` > `Create role` 3. Edit the Kibana privileges (select a space) 4. Under `Management` > `Rules settings` activate `Customize sub-feature privileges` 5. Enable/disable sub-feature overrides 6. Create a user with this role assigned 7. In a separate window, log in as the new user 8. Go to `Management` > `Stack management` > `Rules` 9. Open the `Settings` modal from the page header 10. Check that the query delay and flapping settings are visible/hidden and writable/readonly according to the chosen sub-feature privileges Closes #168718 Co-authored-by: Xavier Mouligneau --- .../components/rules_setting/rules_settings_modal.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/rules_setting/rules_settings_modal.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/rules_setting/rules_settings_modal.tsx index c9b6ea19dec5b..4431f05975906 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/rules_setting/rules_settings_modal.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/rules_setting/rules_settings_modal.tsx @@ -96,8 +96,6 @@ export const RulesSettingsModal = memo((props: RulesSettingsModalProps) => { } = useKibana().services; const { rulesSettings: { - show, - save, writeFlappingSettingsUI, readFlappingSettingsUI, writeQueryDelaySettingsUI, @@ -156,10 +154,10 @@ export const RulesSettingsModal = memo((props: RulesSettingsModalProps) => { // In the future when we have more settings sub-features, we should // disassociate the rule settings capabilities (save, show) from the // sub-feature capabilities (writeXSettingsUI). - const canWriteFlappingSettings = save && writeFlappingSettingsUI && !hasFlappingError; - const canShowFlappingSettings = show && readFlappingSettingsUI; - const canWriteQueryDelaySettings = save && writeQueryDelaySettingsUI && !hasQueryDelayError; - const canShowQueryDelaySettings = show && readQueryDelaySettingsUI; + const canWriteFlappingSettings = writeFlappingSettingsUI && !hasFlappingError; + const canShowFlappingSettings = readFlappingSettingsUI; + const canWriteQueryDelaySettings = writeQueryDelaySettingsUI && !hasQueryDelayError; + const canShowQueryDelaySettings = readQueryDelaySettingsUI; const handleSettingsChange = ( setting: keyof RulesSettingsProperties, From de0c289d5a9ccb5e5856825b93aa789ca56913de Mon Sep 17 00:00:00 2001 From: Yuliia Naumenko Date: Wed, 20 Mar 2024 10:00:38 -0700 Subject: [PATCH 02/90] [Security AI Assistant] Fixed bug with converting message timestamp (#179007) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Current PR resolving the bug with AI conversation messages timestamp conversion from the locale date string format to ISO date. Due to that issue creating conversation from the Kibana UI, thrown an error in some timezones: ![image (14)](https://github.com/elastic/kibana/assets/55110838/2842bd35-0f24-4440-bdf5-388bd9752596) After changes we use date local format only for rendering in UI: Screenshot 2024-03-19 at 1 39 43 PM --- .../connector_setup/index.test.tsx | 4 +- .../connectorland/connector_setup/index.tsx | 8 +- .../impl/mock/conversation.ts | 6 +- .../append_conversation_messages.ts | 2 +- .../conversations/create_conversation.ts | 2 +- .../conversations/transforms.ts | 2 +- .../conversations/update_conversation.test.ts | 91 ++++++++++- .../conversations/update_conversation.ts | 2 +- .../assistant/get_comments/index.test.tsx | 9 +- .../public/assistant/get_comments/index.tsx | 4 +- .../public/assistant/provider.test.tsx | 154 ++++++++++++++++++ .../public/assistant/provider.tsx | 118 ++++++++------ 12 files changed, 339 insertions(+), 63 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/assistant/provider.test.tsx diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.test.tsx index 4abb8998cf18f..4d30ab549f4c8 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.test.tsx @@ -65,11 +65,11 @@ describe('useConnectorSetup', () => { ).toEqual([ { username: 'You', - timestamp: 'at: 7/17/2023, 1:00:36 PM', + timestamp: `at: ${new Date('2024-03-18T18:59:18.174Z').toLocaleString()}`, }, { username: 'Assistant', - timestamp: 'at: 7/17/2023, 1:00:40 PM', + timestamp: `at: ${new Date('2024-03-19T18:59:18.174Z').toLocaleString()}`, }, ]); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.tsx index 2d02e96c7372e..b4db98b62d953 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.tsx @@ -117,7 +117,7 @@ export const useConnectorSetup = ({ conversation.messages[index].timestamp == null || conversation.messages[index].timestamp.length === 0 ) { - conversation.messages[index].timestamp = new Date().toLocaleString(); + conversation.messages[index].timestamp = new Date().toISOString(); } const isLastMessage = index === length - 1; const enableStreaming = @@ -151,7 +151,9 @@ export const useConnectorSetup = ({ () => conversation.messages.slice(0, currentMessageIndex + 1).map((message, index) => { const isUser = message.role === 'user'; - + const timestamp = `${i18n.CONNECTOR_SETUP_TIMESTAMP_AT}: ${new Date( + message.timestamp + ).toLocaleString()}`; const commentProps: EuiCommentProps = { username: isUser ? i18n.CONNECTOR_SETUP_USER_YOU : i18n.CONNECTOR_SETUP_USER_ASSISTANT, children: commentBody(message, index, conversation.messages.length), @@ -163,7 +165,7 @@ export const useConnectorSetup = ({ iconType={AssistantAvatar} /> ), - timestamp: `${i18n.CONNECTOR_SETUP_TIMESTAMP_AT}: ${message.timestamp}`, + timestamp, }; return commentProps; }), diff --git a/x-pack/packages/kbn-elastic-assistant/impl/mock/conversation.ts b/x-pack/packages/kbn-elastic-assistant/impl/mock/conversation.ts index fc466a1f462fa..46625512a5fca 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/mock/conversation.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/mock/conversation.ts @@ -18,7 +18,7 @@ export const alertConvo: Conversation = { content: 'You are a helpful, expert assistant who answers questions about Elastic Security. Do not answer questions unrelated to Elastic Security.\nIf you answer a question related to KQL or EQL, it should be immediately usable within an Elastic Security timeline; please always format the output correctly with back ticks. Any answer provided for Query DSL should also be usable in a security timeline. This means you should only ever include the "filter" portion of the query.\nUse the following context to answer questions:\n\nCONTEXT:\n"""\ndestination.ip,67bf8338-261a-4de6-b43e-d30b59e884a7\nhost.name,0b2e352b-35fc-47bd-a8d4-43019ed38a25\nkibana.alert.rule.name,critical hosts\nsource.ip,94277492-11f8-493b-9c52-c1c9ecd330d2\n"""\n\nEvaluate the event from the context above and format your output neatly in markdown syntax for my Elastic Security case.\nAdd your description, recommended actions and bulleted triage steps. Use the MITRE ATT&CK data provided to add more context and recommendations from MITRE, and hyperlink to the relevant pages on MITRE\'s website. Be sure to include the user and host risk score data from the context. Your response should include steps that point to Elastic Security specific features, including endpoint response actions, the Elastic Agent OSQuery manager integration (with example osquery queries), timelines and entity analytics and link to all the relevant Elastic Security documentation.', role: 'user', - timestamp: '7/18/2023, 10:39:11 AM', + timestamp: '2023-03-19T18:59:18.174Z', }, ], apiConfig: { @@ -54,13 +54,13 @@ export const welcomeConvo: Conversation = { content: 'You are a helpful, expert assistant who answers questions about Elastic Security. Do not answer questions unrelated to Elastic Security.\nIf you answer a question related to KQL or EQL, it should be immediately usable within an Elastic Security timeline; please always format the output correctly with back ticks. Any answer provided for Query DSL should also be usable in a security timeline. This means you should only ever include the "filter" portion of the query.\nUse the following context to answer questions:\n\n\n\nhow do i write host.name: * in EQL?', role: 'user', - timestamp: '7/17/2023, 1:00:36 PM', + timestamp: '2024-03-18T18:59:18.174Z', }, { role: 'assistant', content: "In EQL (Event Query Language), you can write the equivalent of `host.name: *` using the `exists` operator. Here's how you can write it:\n\n```\nexists(host.name)\n```\n\nThis query will match all events where the `host.name` field exists, effectively giving you the same result as `host.name: *`.", - timestamp: '7/17/2023, 1:00:40 PM', + timestamp: '2024-03-19T18:59:18.174Z', }, ], }; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/append_conversation_messages.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/append_conversation_messages.ts index 227e462d7a408..37b4805afe206 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/append_conversation_messages.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/append_conversation_messages.ts @@ -95,7 +95,7 @@ export const transformToUpdateScheme = (updatedAt: string, messages: Message[]) return { updated_at: updatedAt, messages: messages?.map((message) => ({ - '@timestamp': new Date(message.timestamp).toISOString(), + '@timestamp': message.timestamp, content: message.content, is_error: message.isError, reader: message.reader, diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.ts index 6558d6c5123dc..6c50a1d44bbd7 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.ts @@ -95,7 +95,7 @@ export const transformToCreateScheme = ( exclude_from_last_conversation_storage: excludeFromLastConversationStorage, is_default: isDefault, messages: messages?.map((message) => ({ - '@timestamp': new Date(message.timestamp).toISOString(), + '@timestamp': message.timestamp, content: message.content, is_error: message.isError, reader: message.reader, diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/transforms.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/transforms.ts index b9d745dc0b625..05e1ae8d71f8a 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/transforms.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/transforms.ts @@ -49,7 +49,7 @@ export const transformESToConversations = ( messages: // eslint-disable-next-line @typescript-eslint/no-explicit-any conversationSchema.messages?.map((message: Record) => ({ - timestamp: new Date(message['@timestamp']).toLocaleString(), + timestamp: message['@timestamp'], // always return anonymized data from the client content: replaceOriginalValuesWithUuidValues({ messageContent: message.content, diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts index 3b1983d5f77e8..271b74d2b01c5 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts @@ -7,7 +7,11 @@ import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; import { loggerMock } from '@kbn/logging-mocks'; -import { updateConversation } from './update_conversation'; +import { + UpdateConversationSchema, + transformToUpdateScheme, + updateConversation, +} from './update_conversation'; import { getConversation } from './get_conversation'; import { ConversationResponse, ConversationUpdateProps } from '@kbn/elastic-assistant-common'; import { AuthenticatedUser } from '@kbn/security-plugin-types-common'; @@ -47,7 +51,18 @@ export const getConversationResponseMock = (): ConversationResponse => ({ }, category: 'assistant', excludeFromLastConversationStorage: false, - messages: [], + messages: [ + { + content: 'Message 3', + role: 'user', + timestamp: '2024-02-14T22:29:43.862Z', + }, + { + content: 'Message 4', + role: 'user', + timestamp: '2024-02-14T22:29:43.862Z', + }, + ], replacements: [], createdAt: '2020-04-20T15:25:31.830Z', namespace: 'default', @@ -113,3 +128,75 @@ describe('updateConversation', () => { expect(updatedList).toEqual(null); }); }); + +describe('transformToUpdateScheme', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('it returns a transformed conversation with converted string datetime to ISO from the client', async () => { + const conversation: ConversationUpdateProps = getUpdateConversationOptionsMock(); + const existingConversation = getConversationResponseMock(); + (getConversation as unknown as jest.Mock).mockResolvedValueOnce(existingConversation); + + const updateAt = new Date().toISOString(); + const transformed = transformToUpdateScheme(updateAt, { + ...conversation, + messages: [ + { + content: 'Message 3', + role: 'user', + timestamp: '2011-10-05T14:48:00.000Z', + }, + { + content: 'Message 4', + role: 'user', + timestamp: '2011-10-06T14:48:00.000Z', + }, + ], + }); + const expected: UpdateConversationSchema = { + id: conversation.id, + title: 'test', + api_config: { + connector_id: '1', + connector_type_title: 'test-connector', + default_system_prompt_id: 'default-system-prompt', + model: 'test-model', + provider: 'OpenAI', + }, + exclude_from_last_conversation_storage: false, + replacements: [], + updated_at: updateAt, + messages: [ + { + '@timestamp': '2011-10-05T14:48:00.000Z', + content: 'Message 3', + is_error: undefined, + reader: undefined, + role: 'user', + trace_data: { + trace_id: undefined, + transaction_id: undefined, + }, + }, + { + '@timestamp': '2011-10-06T14:48:00.000Z', + content: 'Message 4', + is_error: undefined, + reader: undefined, + role: 'user', + trace_data: { + trace_id: undefined, + transaction_id: undefined, + }, + }, + ], + }; + expect(transformed).toEqual(expected); + }); +}); diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts index 933a8c08a51fe..348b2ae15aeba 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts @@ -126,7 +126,7 @@ export const transformToUpdateScheme = ( exclude_from_last_conversation_storage: excludeFromLastConversationStorage, replacements, messages: messages?.map((message) => ({ - '@timestamp': new Date(message.timestamp).toISOString(), + '@timestamp': message.timestamp, content: message.content, is_error: message.isError, reader: message.reader, diff --git a/x-pack/plugins/security_solution/public/assistant/get_comments/index.test.tsx b/x-pack/plugins/security_solution/public/assistant/get_comments/index.test.tsx index 278a72de88894..c99d5c1e0d105 100644 --- a/x-pack/plugins/security_solution/public/assistant/get_comments/index.test.tsx +++ b/x-pack/plugins/security_solution/public/assistant/get_comments/index.test.tsx @@ -24,7 +24,7 @@ const currentConversation = { { role: user, content: 'Hello {name}', - timestamp: '2022-01-01', + timestamp: '2024-03-19T18:59:18.174Z', isError: false, }, ], @@ -67,4 +67,11 @@ describe('getComments', () => { }); expect(result[0].eventColor).toEqual('danger'); }); + + it('It transforms message timestamp from server side ISO format to local date string', () => { + const result = getComments(testProps); + expect(result[0].timestamp).toEqual( + `at: ${new Date('2024-03-19T18:59:18.174Z').toLocaleString()}` + ); + }); }); diff --git a/x-pack/plugins/security_solution/public/assistant/get_comments/index.tsx b/x-pack/plugins/security_solution/public/assistant/get_comments/index.tsx index 0329e5f6f3889..0b4a2a600a5d1 100644 --- a/x-pack/plugins/security_solution/public/assistant/get_comments/index.tsx +++ b/x-pack/plugins/security_solution/public/assistant/get_comments/index.tsx @@ -96,7 +96,9 @@ export const getComments = ({ ), timestamp: i18n.AT( - message.timestamp.length === 0 ? new Date().toLocaleString() : message.timestamp + message.timestamp.length === 0 + ? new Date().toLocaleString() + : new Date(message.timestamp).toLocaleString() ), username: isUser ? i18n.YOU : i18n.ASSISTANT, eventColor: message.isError ? 'danger' : undefined, diff --git a/x-pack/plugins/security_solution/public/assistant/provider.test.tsx b/x-pack/plugins/security_solution/public/assistant/provider.test.tsx new file mode 100644 index 0000000000000..78c07c847f017 --- /dev/null +++ b/x-pack/plugins/security_solution/public/assistant/provider.test.tsx @@ -0,0 +1,154 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { act, renderHook } from '@testing-library/react-hooks'; +import { httpServiceMock, type HttpSetupMock } from '@kbn/core-http-browser-mocks'; +import type { Storage } from '@kbn/kibana-utils-plugin/public'; +import { createConversations } from './provider'; +import { coreMock } from '@kbn/core/public/mocks'; + +let http: HttpSetupMock = coreMock.createSetup().http; +const conversations = { + 'Alert summary': { + id: 'Alert summary', + isDefault: true, + apiConfig: { + connectorId: 'my-bedrock', + connectorTypeTitle: 'Amazon Bedrock', + defaultSystemPromptId: 'default-system-prompt', + }, + replacements: { + '2a39da36-f5f4-4265-90ff-a0b2df2eb932': '192.168.0.4', + 'c960d0e7-96b4-4b7a-b287-65f33fc7a812': '142.250.72.78', + '76d4a1d1-dbc3-4427-927e-b31b36856dc2': 'Test-MacBook-Pro.local', + '7bb8a91c-fcbb-4430-9742-cfaad2917d37': + '9d628163346d084eb8b3926cbf10cdee034b48e0cf83f0edf6921bc0dc83f0dd', + }, + messages: [ + { + content: + 'You are a helpful, expert assistant who answers questions about Elastic Security. Do not answer questions unrelated to Elastic Security.\nIf you answer a question related to KQL, EQL, or ES|QL, it should be immediately usable within an Elastic Security timeline; please always format the output correctly with back ticks. Any answer provided for Query DSL should also be usable in a security timeline. This means you should only ever include the "filter" portion of the query.\nUse the following context to answer questions:\n\nCONTEXT:\n"""\n@timestamp,2024-01-23T19:15:59.194Z\n_id,7bb8a91c-fcbb-4430-9742-cfaad2917d37\ndestination.ip,c960d0e7-96b4-4b7a-b287-65f33fc7a812\nevent.action,network_flow\nevent.category,network\nevent.dataset,flow\nevent.type,connection\nhost.name,76d4a1d1-dbc3-4427-927e-b31b36856dc2\nkibana.alert.last_detected,2024-01-23T19:15:59.230Z\nkibana.alert.risk_score,21\nkibana.alert.rule.description,a\nkibana.alert.rule.name,a\nkibana.alert.severity,low\nkibana.alert.workflow_status,open\nsource.ip,2a39da36-f5f4-4265-90ff-a0b2df2eb932\n"""\n\nEvaluate the event from the context above and format your output neatly in markdown syntax for my Elastic Security case.\nAdd your description, recommended actions and bulleted triage steps. Use the MITRE ATT&CK data provided to add more context and recommendations from MITRE, and hyperlink to the relevant pages on MITRE\'s website. Be sure to include the user and host risk score data from the context. Your response should include steps that point to Elastic Security specific features, including endpoint response actions, the Elastic Agent OSQuery manager integration (with example osquery queries), timelines and entity analytics and link to all the relevant Elastic Security documentation.', + role: 'user', + timestamp: '1/23/2024, 12:23:44 PM', + }, + { + role: 'assistant', + reader: {}, + timestamp: '1/23/2024, 3:29:46 PM', + isError: false, + content: '', + }, + ], + }, + 'Data Quality dashboard': { + id: 'Data Quality dashboard', + isDefault: true, + apiConfig: { + connectorId: 'my-gen-ai', + connectorTypeTitle: 'OpenAI', + defaultSystemPromptId: 'default-system-prompt', + }, + messages: [ + { + content: + 'You are a helpful, expert assistant who answers questions about Elastic Security. ', + role: 'user', + timestamp: '18/03/2024, 12:05:03', + }, + { + role: 'assistant', + reader: {}, + timestamp: '19/03/2024, 12:05:03', + isError: false, + content: + 'Sure, here is an example of a KQL (Kibana Query Language) query that finds records where the `event.action` field contains the word "failure":\n\n```js\nevent.action: "failure"\n```\n\nIn Kibana, there are a variety of operators and techniques you can use to further enhance your search. For instance, you can combine multiple search terms or use wildcards.\n\nHere is an advanced example showing a combined search:\n\n```js\n(event.action: "failure") AND (user.name: "testuser")\n```\nThis will return only the events where `event.action` is "failure" and `user.name` is "testuser".\n\nFor more detailed information, you can check the official [Elasticsearch KQL documentation](https://www.elastic.co/guide/en/kibana/current/kuery-query.html)', + }, + ], + }, + 'Detection Rules': { + id: 'Detection Rules', + isDefault: true, + messages: [], + apiConfig: {}, + }, + 'Event summary': { + id: 'Event summary', + isDefault: true, + messages: [], + apiConfig: {}, + }, + Timeline: { + excludeFromLastConversationStorage: true, + id: 'Timeline', + isDefault: true, + messages: [], + apiConfig: {}, + }, + Welcome: { + id: 'Welcome', + isDefault: true, + theme: { + title: 'Elastic AI Assistant', + titleIcon: 'logoSecurity', + assistant: { + name: 'Elastic AI Assistant', + icon: 'logoSecurity', + }, + system: { + icon: 'logoElastic', + }, + user: {}, + }, + apiConfig: { + connectorId: 'my-gen-ai', + connectorTypeTitle: 'OpenAI', + defaultSystemPromptId: 'default-system-prompt', + }, + messages: [], + }, +}; +const getItemStorageMock = jest.fn().mockReturnValue(conversations); +const mockStorage = { + store: jest.fn(), + set: jest.fn(), + remove: jest.fn(), + clear: jest.fn(), + get: getItemStorageMock, + getItem: jest.fn(), + setItem: jest.fn(), + removeItem: jest.fn(), +}; + +describe('createConversations', () => { + beforeEach(() => { + jest.clearAllMocks(); + http = httpServiceMock.createStartContract(); + }); + + it('should call bulk conversations with the transformed conversations from the local storage', async () => { + await act(async () => { + const { waitForNextUpdate } = renderHook(() => + createConversations( + [], + coreMock.createStart().notifications, + http, + mockStorage as unknown as Storage + ) + ); + await waitForNextUpdate(); + expect(http.fetch.mock.calls[0][0]).toBe( + '/api/elastic_assistant/current_user/conversations/_bulk_action' + ); + expect( + http.fetch.mock.calls[0].length > 1 + ? // eslint-disable-next-line @typescript-eslint/no-explicit-any + JSON.parse((http.fetch.mock.calls[0] as any[])[1]?.body).create.length + : 0 + ).toBe(2); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/assistant/provider.tsx b/x-pack/plugins/security_solution/public/assistant/provider.tsx index 614b747b2f8c3..5cee36334542e 100644 --- a/x-pack/plugins/security_solution/public/assistant/provider.tsx +++ b/x-pack/plugins/security_solution/public/assistant/provider.tsx @@ -5,8 +5,10 @@ * 2.0. */ import React, { useCallback } from 'react'; +import { parse } from '@kbn/datemath'; +import type { Storage } from '@kbn/kibana-utils-plugin/public'; import { i18n } from '@kbn/i18n'; -import type { IToasts } from '@kbn/core-notifications-browser'; +import type { IToasts, NotificationsStart } from '@kbn/core-notifications-browser'; import type { Conversation } from '@kbn/elastic-assistant'; import { AssistantProvider as ElasticAssistantProvider, @@ -17,6 +19,8 @@ import { import type { FetchConversationsResponse } from '@kbn/elastic-assistant/impl/assistant/api'; import { once } from 'lodash/fp'; +import type { HttpSetup } from '@kbn/core-http-browser'; +import type { Message } from '@kbn/elastic-assistant-common'; import { useBasePath, useKibana } from '../common/lib/kibana'; import { useAssistantTelemetry } from './use_assistant_telemetry'; import { getComments } from './get_comments'; @@ -42,6 +46,70 @@ const LOCAL_CONVERSATIONS_MIGRATION_STATUS_TOAST_TITLE = i18n.translate( } ); +export const createConversations = async ( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + conversationsData: Record, + notifications: NotificationsStart, + http: HttpSetup, + storage: Storage +) => { + // migrate conversations with messages from the local storage + // won't happen next time + const conversations = storage.get(`securitySolution.${LOCAL_STORAGE_KEY}`); + + if ( + conversationsData && + Object.keys(conversationsData).length === 0 && + conversations && + Object.keys(conversations).length > 0 + ) { + const conversationsToCreate = Object.values(conversations).filter( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (c: any) => c.messages && c.messages.length > 0 + ); + + const transformMessage = (m: Message) => { + const timestamp = parse(m.timestamp ?? '')?.toISOString(); + return { + ...m, + timestamp: timestamp == null ? new Date().toISOString() : timestamp, + }; + }; + + // post bulk create + const bulkResult = await bulkChangeConversations( + http, + { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + create: conversationsToCreate.reduce((res: Record, c: any) => { + res[c.id] = { + ...c, + messages: (c.messages ?? []).map(transformMessage), + title: c.id, + replacements: c.replacements + ? Object.keys(c.replacements).map((uuid) => ({ + uuid, + value: c.replacements[uuid], + })) + : [], + }; + return res; + }, {}), + }, + notifications.toasts + ); + if (bulkResult && bulkResult.success) { + storage.remove(`securitySolution.${LOCAL_STORAGE_KEY}`); + notifications.toasts?.addSuccess({ + iconType: 'check', + title: LOCAL_CONVERSATIONS_MIGRATION_STATUS_TOAST_TITLE, + }); + return true; + } + return false; + } +}; + /** * This component configures the Elastic AI Assistant context provider for the Security Solution app. */ @@ -60,52 +128,8 @@ export const AssistantProvider: React.FC = ({ children }) => { const assistantTelemetry = useAssistantTelemetry(); const migrateConversationsFromLocalStorage = once( - async (conversationsData: Record) => { - // migrate conversations with messages from the local storage - // won't happen next time - const conversations = storage.get(`securitySolution.${LOCAL_STORAGE_KEY}`); - if ( - conversationsData && - Object.keys(conversationsData).length === 0 && - conversations && - Object.keys(conversations).length > 0 - ) { - const conversationsToCreate = Object.values(conversations).filter( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (c: any) => c.messages && c.messages.length > 0 - ); - // post bulk create - const bulkResult = await bulkChangeConversations( - http, - { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - create: conversationsToCreate.reduce((res: Record, c: any) => { - res[c.id] = { - ...c, - title: c.id, - replacements: c.replacements - ? Object.keys(c.replacements).map((uuid) => ({ - uuid, - value: c.replacements[uuid], - })) - : [], - }; - return res; - }, {}), - }, - notifications.toasts - ); - if (bulkResult && bulkResult.success) { - storage.remove(`securitySolution.${LOCAL_STORAGE_KEY}`); - notifications.toasts?.addSuccess({ - iconType: 'check', - title: LOCAL_CONVERSATIONS_MIGRATION_STATUS_TOAST_TITLE, - }); - return true; - } - return false; - } - } + (conversationsData: Record) => + createConversations(conversationsData, notifications, http, storage) ); const onFetchedConversations = useCallback( (conversationsData: FetchConversationsResponse): Record => { From f72c959286894b1ff35d7f667b6d3f0e7c0bf820 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 20 Mar 2024 17:29:55 +0000 Subject: [PATCH 03/90] skip flaky suite (#179083) --- .../apm/ftr_e2e/cypress/e2e/dependencies/dependencies.cy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/dependencies/dependencies.cy.ts b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/dependencies/dependencies.cy.ts index 11741c3d3066b..fc559b0d7fb37 100644 --- a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/dependencies/dependencies.cy.ts +++ b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/dependencies/dependencies.cy.ts @@ -122,7 +122,8 @@ describe('Dependencies', () => { }); }); -describe('Dependencies with high volume of data', () => { +// FLAKY: https://github.com/elastic/kibana/issues/179083 +describe.skip('Dependencies with high volume of data', () => { before(() => { synthtrace.index( generateManyDependencies({ From 76cc2b0be05ca5f67275c53c905dc0b59f61bc42 Mon Sep 17 00:00:00 2001 From: Gloria Hornero Date: Wed, 20 Mar 2024 18:33:40 +0100 Subject: [PATCH 04/90] [Security Solution] Adds Explore and EA Cypress tests to the security solution mki pipelines (#179054) ## Summary Adds Explore and EA Cypress executions to the Security Solution MKI pipelines. --- .../security_solution_cypress.yml | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/.buildkite/pipelines/security_solution/security_solution_cypress.yml b/.buildkite/pipelines/security_solution/security_solution_cypress.yml index fb744e8af9313..4d27fd954c110 100644 --- a/.buildkite/pipelines/security_solution/security_solution_cypress.yml +++ b/.buildkite/pipelines/security_solution/security_solution_cypress.yml @@ -26,17 +26,17 @@ steps: depends_on: build_image key: test_execution steps: - # - command: .buildkite/scripts/pipelines/security_solution_quality_gate/security_solution_cypress/mki_security_solution_cypress.sh cypress:run:qa:serverless:explore - # label: 'Serverless MKI QA Explore - Security Solution Cypress Tests' - # agents: - # queue: n2-4-spot - # # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. - # timeout_in_minutes: 300 - # parallelism: 4 - # retry: - # automatic: - # - exit_status: '*' - # limit: 1 + - command: .buildkite/scripts/pipelines/security_solution_quality_gate/security_solution_cypress/mki_security_solution_cypress.sh cypress:run:qa:serverless:explore + label: 'Serverless MKI QA Explore - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. + timeout_in_minutes: 300 + parallelism: 4 + retry: + automatic: + - exit_status: '*' + limit: 1 - command: .buildkite/scripts/pipelines/security_solution_quality_gate/security_solution_cypress/mki_security_solution_cypress.sh cypress:run:qa:serverless:investigations label: 'Serverless MKI QA Investigations - Security Solution Cypress Tests' @@ -110,14 +110,14 @@ steps: - exit_status: '*' limit: 1 - # - command: .buildkite/scripts/pipelines/security_solution_quality_gate/security_solution_cypress/mki_security_solution_cypress.sh cypress:run:qa:serverless:entity_analytics - # label: 'Serverless MKI QA Entity Analytics - Security Solution Cypress Tests' - # agents: - # queue: n2-4-spot - # # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. - # timeout_in_minutes: 300 - # parallelism: 2 - # retry: - # automatic: - # - exit_status: '*' - # limit: 1 \ No newline at end of file + - command: .buildkite/scripts/pipelines/security_solution_quality_gate/security_solution_cypress/mki_security_solution_cypress.sh cypress:run:qa:serverless:entity_analytics + label: 'Serverless MKI QA Entity Analytics - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + # TODO : Revise the timeout when the pipeline will be officially integrated with the quality gate. + timeout_in_minutes: 300 + parallelism: 2 + retry: + automatic: + - exit_status: '*' + limit: 1 \ No newline at end of file From 2e305417c3b26e2055f6fbbd76e4625027800d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Zaffarano?= Date: Wed, 20 Mar 2024 18:47:58 +0100 Subject: [PATCH 05/90] Fix flaky tests (#179072) --- .../server/integration_tests/lib/helpers.ts | 2 +- .../server/integration_tests/telemetry.test.ts | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/security_solution/server/integration_tests/lib/helpers.ts b/x-pack/plugins/security_solution/server/integration_tests/lib/helpers.ts index 20d98303a62a7..418c984fc777b 100644 --- a/x-pack/plugins/security_solution/server/integration_tests/lib/helpers.ts +++ b/x-pack/plugins/security_solution/server/integration_tests/lib/helpers.ts @@ -20,7 +20,7 @@ const asyncUnlink = Util.promisify(Fs.unlink); */ export async function eventually( cb: () => Promise, - duration: number = 10000, + duration: number = 30000, interval: number = 200 ) { let elapsed = 0; diff --git a/x-pack/plugins/security_solution/server/integration_tests/telemetry.test.ts b/x-pack/plugins/security_solution/server/integration_tests/telemetry.test.ts index a5892e4f24906..e2357d6d614ed 100644 --- a/x-pack/plugins/security_solution/server/integration_tests/telemetry.test.ts +++ b/x-pack/plugins/security_solution/server/integration_tests/telemetry.test.ts @@ -50,8 +50,7 @@ const telemetrySenderStartSpy = jest.spyOn(SecuritySolutionPlugin.prototype, 'st const mockedAxiosGet = jest.spyOn(axios, 'get'); const mockedAxiosPost = jest.spyOn(axios, 'post'); -// FLAKY: https://github.com/elastic/kibana/issues/178918 -describe.skip('telemetry tasks', () => { +describe('telemetry tasks', () => { let esServer: TestElasticsearchUtils; let kibanaServer: TestKibanaUtils; let taskManagerPlugin: TaskManagerStartContract; @@ -113,8 +112,7 @@ describe.skip('telemetry tasks', () => { await cleanupMockedEndpointAlerts(kibanaServer.coreStart.elasticsearch.client.asInternalUser); }); - // FLAKY: https://github.com/elastic/kibana/issues/178591 - describe.skip('detection-rules', () => { + describe('detection-rules', () => { it('should execute when scheduled', async () => { await mockAndScheduleDetectionRulesTask(); From 62aa3279dfdfb12112827826b6ff2d76b50fbe96 Mon Sep 17 00:00:00 2001 From: Brandon Morelli Date: Wed, 20 Mar 2024 11:43:41 -0700 Subject: [PATCH 06/90] Make in-product APM alerting links smart (stateful vs serverless) (#176252) ## Summary This is a part of https://github.com/elastic/observability-docs/issues/3622. Before this PR, all four in-product APM alerting documentation links pointed to https://www.elastic.co/guide/en/kibana/master/apm-alerts.html. This PR updates our in-product links to point to either our Serverless or Stateful documentation, depending on the product type. Closes https://github.com/elastic/observability-docs/issues/3586. --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Caue Marcondes --- packages/kbn-doc-links/src/get_doc_links.ts | 13 ++++++++++++- packages/kbn-doc-links/src/types.ts | 5 ++++- .../cypress/e2e/dependencies/dependencies.cy.ts | 5 +---- .../alerting/rule_types/register_apm_rule_types.ts | 8 ++++---- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index bfa2953310e0c..d0a78b272128c 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -599,7 +599,18 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D actionTypes: isServerless ? `${SERVERLESS_DOCS}action-connectors` : `${KIBANA_DOCS}action-types.html`, - apmRules: `${KIBANA_DOCS}apm-alerts.html`, + apmRulesErrorCount: isServerless + ? `${SERVERLESS_OBSERVABILITY_DOCS}create-error-count-threshold-alert-rule` + : `${KIBANA_DOCS}apm-alerts.html`, + apmRulesTransactionDuration: isServerless + ? `${SERVERLESS_OBSERVABILITY_DOCS}create-latency-threshold-alert-rule` + : `${KIBANA_DOCS}apm-alerts.html`, + apmRulesTransactionError: isServerless + ? `${SERVERLESS_OBSERVABILITY_DOCS}create-failed-transaction-rate-threshold-alert-rule` + : `${KIBANA_DOCS}apm-alerts.html`, + apmRulesAnomaly: isServerless + ? `${SERVERLESS_OBSERVABILITY_DOCS}create-anomaly-alert-rule` + : `${KIBANA_DOCS}apm-alerts.html`, emailAction: `${KIBANA_DOCS}email-action-type.html`, emailActionConfig: `${KIBANA_DOCS}email-action-type.html`, emailExchangeClientSecretConfig: `${KIBANA_DOCS}email-action-type.html#exchange-client-secret`, diff --git a/packages/kbn-doc-links/src/types.ts b/packages/kbn-doc-links/src/types.ts index 6120d6f30f425..df39d8e33e77c 100644 --- a/packages/kbn-doc-links/src/types.ts +++ b/packages/kbn-doc-links/src/types.ts @@ -436,7 +436,10 @@ export interface DocLinks { readonly alerting: Readonly<{ guide: string; actionTypes: string; - apmRules: string; + apmRulesErrorCount: string; + apmRulesTransactionDuration: string; + apmRulesTransactionError: string; + apmRulesAnomaly: string; emailAction: string; emailActionConfig: string; emailExchangeClientSecretConfig: string; diff --git a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/dependencies/dependencies.cy.ts b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/dependencies/dependencies.cy.ts index fc559b0d7fb37..3040f7650dc08 100644 --- a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/dependencies/dependencies.cy.ts +++ b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/dependencies/dependencies.cy.ts @@ -143,10 +143,7 @@ describe.skip('Dependencies with high volume of data', () => { it('shows dependencies inventory page', () => { cy.visitKibana( - `/app/apm/dependencies/inventory?${new URLSearchParams({ - ...timeRange, - kuery: 'elasticsearch*', - })}` + `/app/apm/dependencies/inventory?${new URLSearchParams(timeRange)}` ); cy.getByTestSubj('dependenciesTable'); diff --git a/x-pack/plugins/observability_solution/apm/public/components/alerting/rule_types/register_apm_rule_types.ts b/x-pack/plugins/observability_solution/apm/public/components/alerting/rule_types/register_apm_rule_types.ts index 86465817689fd..f95b5503fd5ec 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/alerting/rule_types/register_apm_rule_types.ts +++ b/x-pack/plugins/observability_solution/apm/public/components/alerting/rule_types/register_apm_rule_types.ts @@ -47,7 +47,7 @@ export function registerApmRuleTypes( }, iconClass: 'bell', documentationUrl(docLinks) { - return `${docLinks.links.alerting.apmRules}`; + return `${docLinks.links.alerting.apmRulesErrorCount}`; }, ruleParamsExpression: lazy(() => import('./error_count_rule_type')), validate: () => ({ @@ -80,7 +80,7 @@ export function registerApmRuleTypes( }, iconClass: 'bell', documentationUrl(docLinks) { - return `${docLinks.links.alerting.apmRules}`; + return `${docLinks.links.alerting.apmRulesTransactionDuration}`; }, ruleParamsExpression: lazy( () => import('./transaction_duration_rule_type') @@ -116,7 +116,7 @@ export function registerApmRuleTypes( }), iconClass: 'bell', documentationUrl(docLinks) { - return `${docLinks.links.alerting.apmRules}`; + return `${docLinks.links.alerting.apmRulesTransactionError}`; }, ruleParamsExpression: lazy( () => import('./transaction_error_rate_rule_type') @@ -146,7 +146,7 @@ export function registerApmRuleTypes( }), iconClass: 'bell', documentationUrl(docLinks) { - return `${docLinks.links.alerting.apmRules}`; + return `${docLinks.links.alerting.apmRulesAnomaly}`; }, ruleParamsExpression: lazy(() => import('./anomaly_rule_type')), validate: validateAnomalyRule, From 38be4d736df14093dbc69111ed6c4c38127624b4 Mon Sep 17 00:00:00 2001 From: Alexi Doak <109488926+doakalexi@users.noreply.github.com> Date: Wed, 20 Mar 2024 12:15:11 -0700 Subject: [PATCH 07/90] [ResponseOps] Rename some alert -> rule terminology in the code (#178988) Related to https://github.com/elastic/kibana/issues/168861 ## Summary This is a tech debt issue that I made a little progress on, I made some changes to rename alert -> rule. It's an ongoing task, but I made a PR for my changes so I can release the issue back to the iteration. Nothing to verify, just make sure that the build passes. --- x-pack/plugins/alerting/common/index.ts | 2 +- .../public/hooks/use_get_rule_types.ts | 2 +- .../create_maintenance_windows_form.test.tsx | 4 +- x-pack/plugins/alerting/public/plugin.test.ts | 4 +- x-pack/plugins/alerting/public/plugin.ts | 2 +- .../{alert_api.test.ts => rule_api.test.ts} | 2 +- .../services/{alert_api.ts => rule_api.ts} | 0 .../rule/methods/create/create_rule.test.ts | 38 ++--- .../rule/methods/create/create_rule.ts | 6 +- .../rule/methods/mute_alert/mute_instance.ts | 13 +- .../authorization/alerting_authorization.ts | 8 +- x-pack/plugins/alerting/server/plugin.ts | 4 +- ...rule_type_registry_deprecated_consumers.ts | 138 +++++++++--------- .../lib/create_rule_saved_object.ts | 2 +- .../rules_client_conflict_retries.test.ts | 40 ++--- .../pages/rule_details/rule_details.tsx | 4 +- .../public/pages/rules/rules.test.tsx | 26 ++-- .../public/pages/rules/rules.tsx | 6 +- .../hooks/use_load_rule_types_query.ts | 6 +- .../application/lib/action_variables.test.ts | 4 +- .../lib/rule_api/rule_types.test.ts | 4 +- .../sections/rule_details/components/rule.tsx | 4 +- .../components/rule_definition.test.tsx | 14 +- .../components/rule_details.test.tsx | 8 +- .../components/rule_event_log_list.test.tsx | 6 +- .../rule_execution_summary_and_chart.test.tsx | 6 +- .../sections/rule_form/rule_add.test.tsx | 10 +- .../sections/rule_form/rule_edit.test.tsx | 6 +- .../sections/rule_form/rule_form.test.tsx | 42 +++--- .../sections/rule_form/rule_form.tsx | 6 +- .../rule_form/rule_notify_when.test.tsx | 4 +- .../rules_list/components/rules_list.tsx | 4 +- .../rules_list/components/test_helpers.ts | 10 +- 33 files changed, 218 insertions(+), 217 deletions(-) rename x-pack/plugins/alerting/public/services/{alert_api.test.ts => rule_api.test.ts} (99%) rename x-pack/plugins/alerting/public/services/{alert_api.ts => rule_api.ts} (100%) diff --git a/x-pack/plugins/alerting/common/index.ts b/x-pack/plugins/alerting/common/index.ts index f9c9724fbb3b2..2c71a3a17379f 100644 --- a/x-pack/plugins/alerting/common/index.ts +++ b/x-pack/plugins/alerting/common/index.ts @@ -90,6 +90,6 @@ export const INTERNAL_ALERTING_API_MAINTENANCE_WINDOW_PATH = export const INTERNAL_ALERTING_API_GET_ACTIVE_MAINTENANCE_WINDOWS_PATH = `${INTERNAL_ALERTING_API_MAINTENANCE_WINDOW_PATH}/_active` as const; -export const ALERTS_FEATURE_ID = 'alerts'; +export const ALERTING_FEATURE_ID = 'alerts'; export const MONITORING_HISTORY_LIMIT = 200; export const ENABLE_MAINTENANCE_WINDOWS = true; diff --git a/x-pack/plugins/alerting/public/hooks/use_get_rule_types.ts b/x-pack/plugins/alerting/public/hooks/use_get_rule_types.ts index b0871f89cc5df..d7fdd51bd1132 100644 --- a/x-pack/plugins/alerting/public/hooks/use_get_rule_types.ts +++ b/x-pack/plugins/alerting/public/hooks/use_get_rule_types.ts @@ -8,7 +8,7 @@ import { useQuery } from '@tanstack/react-query'; import { i18n } from '@kbn/i18n'; import { useKibana } from '../utils/kibana_react'; -import { loadRuleTypes } from '../services/alert_api'; +import { loadRuleTypes } from '../services/rule_api'; export const useGetRuleTypes = () => { const { diff --git a/x-pack/plugins/alerting/public/pages/maintenance_windows/components/create_maintenance_windows_form.test.tsx b/x-pack/plugins/alerting/public/pages/maintenance_windows/components/create_maintenance_windows_form.test.tsx index a354e47975baf..acf926ac7ff2d 100644 --- a/x-pack/plugins/alerting/public/pages/maintenance_windows/components/create_maintenance_windows_form.test.tsx +++ b/x-pack/plugins/alerting/public/pages/maintenance_windows/components/create_maintenance_windows_form.test.tsx @@ -14,11 +14,11 @@ import { } from './create_maintenance_windows_form'; jest.mock('../../../utils/kibana_react'); -jest.mock('../../../services/alert_api', () => ({ +jest.mock('../../../services/rule_api', () => ({ loadRuleTypes: jest.fn(), })); -const { loadRuleTypes } = jest.requireMock('../../../services/alert_api'); +const { loadRuleTypes } = jest.requireMock('../../../services/rule_api'); const { useKibana, useUiSetting } = jest.requireMock('../../../utils/kibana_react'); const formProps: CreateMaintenanceWindowFormProps = { diff --git a/x-pack/plugins/alerting/public/plugin.test.ts b/x-pack/plugins/alerting/public/plugin.test.ts index a37ab89af03c0..3d6165cf18f6e 100644 --- a/x-pack/plugins/alerting/public/plugin.test.ts +++ b/x-pack/plugins/alerting/public/plugin.test.ts @@ -12,7 +12,7 @@ import { managementPluginMock, } from '@kbn/management-plugin/public/mocks'; -jest.mock('./services/alert_api', () => ({ +jest.mock('./services/rule_api', () => ({ loadRule: jest.fn(), loadRuleType: jest.fn(), })); @@ -24,7 +24,7 @@ const mockSection = createManagementSectionMock(); describe('Alerting Public Plugin', () => { describe('start()', () => { it(`should fallback to the viewInAppRelativeUrl part of the rule object if navigation isn't registered`, async () => { - const { loadRule, loadRuleType } = jest.requireMock('./services/alert_api'); + const { loadRule, loadRuleType } = jest.requireMock('./services/rule_api'); loadRule.mockResolvedValue({ alertTypeId: 'foo', consumer: 'abc', diff --git a/x-pack/plugins/alerting/public/plugin.ts b/x-pack/plugins/alerting/public/plugin.ts index d044919ea293e..5d2f96680ca90 100644 --- a/x-pack/plugins/alerting/public/plugin.ts +++ b/x-pack/plugins/alerting/public/plugin.ts @@ -14,7 +14,7 @@ import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import { AlertNavigationRegistry, AlertNavigationHandler } from './alert_navigation_registry'; -import { loadRule, loadRuleType } from './services/alert_api'; +import { loadRule, loadRuleType } from './services/rule_api'; import { ENABLE_MAINTENANCE_WINDOWS, Rule, MAINTENANCE_WINDOWS_APP_ID } from '../common'; export interface PluginSetupContract { diff --git a/x-pack/plugins/alerting/public/services/alert_api.test.ts b/x-pack/plugins/alerting/public/services/rule_api.test.ts similarity index 99% rename from x-pack/plugins/alerting/public/services/alert_api.test.ts rename to x-pack/plugins/alerting/public/services/rule_api.test.ts index 13c118bb1e78f..d9131221be11a 100644 --- a/x-pack/plugins/alerting/public/services/alert_api.test.ts +++ b/x-pack/plugins/alerting/public/services/rule_api.test.ts @@ -7,7 +7,7 @@ import { Rule, RuleType } from '../../common'; import { httpServiceMock } from '@kbn/core/public/mocks'; -import { loadRule, loadRuleType, loadRuleTypes } from './alert_api'; +import { loadRule, loadRuleType, loadRuleTypes } from './rule_api'; const http = httpServiceMock.createStartContract(); diff --git a/x-pack/plugins/alerting/public/services/alert_api.ts b/x-pack/plugins/alerting/public/services/rule_api.ts similarity index 100% rename from x-pack/plugins/alerting/public/services/alert_api.ts rename to x-pack/plugins/alerting/public/services/rule_api.ts diff --git a/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.test.ts index 21a7b170e2871..07063b4fee4af 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.test.ts @@ -226,7 +226,7 @@ describe('create()', () => { return rulesClient.create(options); } - test('ensures user is authorised to create this type of alert under the consumer', async () => { + test('ensures user is authorised to create this type of rule under the consumer', async () => { const data = getMockData({ alertTypeId: 'myType', consumer: 'myApp', @@ -242,18 +242,18 @@ describe('create()', () => { }); }); - test('throws when user is not authorised to create this type of alert', async () => { + test('throws when user is not authorised to create this type of rule', async () => { const data = getMockData({ alertTypeId: 'myType', consumer: 'myApp', }); authorization.ensureAuthorized.mockRejectedValue( - new Error(`Unauthorized to create a "myType" alert for "myApp"`) + new Error(`Unauthorized to create a "myType" rule for "myApp"`) ); await expect(tryToExecuteOperation({ data })).rejects.toMatchInlineSnapshot( - `[Error: Unauthorized to create a "myType" alert for "myApp"]` + `[Error: Unauthorized to create a "myType" rule for "myApp"]` ); expect(authorization.ensureAuthorized).toHaveBeenCalledWith({ @@ -325,7 +325,7 @@ describe('create()', () => { }); }); - test('creates an alert', async () => { + test('creates an rule', async () => { const data = getMockData(); const createdAttributes = { ...data, @@ -556,7 +556,7 @@ describe('create()', () => { expect(actionsClient.isActionTypeEnabled).toHaveBeenCalledWith('test', { notifyUsage: true }); }); - test('creates an alert with a custom id', async () => { + test('creates an rule with a custom id', async () => { const data = getMockData(); const createdAttributes = { ...data, @@ -736,7 +736,7 @@ describe('create()', () => { `); }); - test('creates an alert with multiple actions', async () => { + test('creates an rule with multiple actions', async () => { const data = getMockData({ actions: [ { @@ -1443,7 +1443,7 @@ describe('create()', () => { expect(actionsClient.isSystemAction).toHaveBeenCalledTimes(3); }); - test('creates a disabled alert', async () => { + test('creates a disabled rule', async () => { const data = getMockData({ enabled: false }); unsecuredSavedObjectsClient.create.mockResolvedValueOnce({ id: '1', @@ -1893,14 +1893,14 @@ describe('create()', () => { `); }); - test('should trim alert name when creating API key', async () => { - const data = getMockData({ name: ' my alert name ' }); + test('should trim rule name when creating API key', async () => { + const data = getMockData({ name: ' my rule name ' }); unsecuredSavedObjectsClient.create.mockResolvedValueOnce({ id: '1', type: RULE_SAVED_OBJECT_TYPE, attributes: { enabled: false, - name: ' my alert name ', + name: ' my rule name ', alertTypeId: '123', schedule: { interval: 10000 }, params: { @@ -1931,10 +1931,10 @@ describe('create()', () => { }); await rulesClient.create({ data }); - expect(rulesClientParams.createAPIKey).toHaveBeenCalledWith('Alerting: 123/my alert name'); + expect(rulesClientParams.createAPIKey).toHaveBeenCalledWith('Alerting: 123/my rule name'); }); - test('should create alert with given notifyWhen value if notifyWhen is not null', async () => { + test('should create rule with given notifyWhen value if notifyWhen is not null', async () => { const data = getMockData({ notifyWhen: 'onActionGroupChange', throttle: '10m' }); const createdAttributes = { ...data, @@ -2075,7 +2075,7 @@ describe('create()', () => { `); }); - test('should create alert with notifyWhen = onThrottleInterval if notifyWhen is null and throttle is set', async () => { + test('should create rule with notifyWhen = onThrottleInterval if notifyWhen is null and throttle is set', async () => { const data = getMockData({ throttle: '10m' }); const createdAttributes = { ...data, @@ -2216,7 +2216,7 @@ describe('create()', () => { `); }); - test('should create alert with notifyWhen = onActiveAlert if notifyWhen is null and throttle is null', async () => { + test('should create rule with notifyWhen = onActiveAlert if notifyWhen is null and throttle is null', async () => { const data = getMockData(); const createdAttributes = { ...data, @@ -2357,7 +2357,7 @@ describe('create()', () => { `); }); - test('should create alerts with mapped_params', async () => { + test('should create rules with mapped_params', async () => { const data = getMockData({ params: { bar: true, @@ -2742,11 +2742,11 @@ describe('create()', () => { `"Task manager error"` ); expect(rulesClientParams.logger.error).toHaveBeenCalledWith( - 'Failed to cleanup alert "1" after scheduling task failed. Error: Saved object delete error' + 'Failed to cleanup rule "1" after scheduling task failed. Error: Saved object delete error' ); }); - test('throws an error if alert type not registered', async () => { + test('throws an error if rule type not registered', async () => { const data = getMockData(); ruleTypeRegistry.get.mockImplementation(() => { throw new Error('Invalid type'); @@ -2865,7 +2865,7 @@ describe('create()', () => { ); }); - test(`doesn't create API key for disabled alerts`, async () => { + test(`doesn't create API key for disabled rules`, async () => { const data = getMockData({ enabled: false }); unsecuredSavedObjectsClient.create.mockResolvedValueOnce({ id: '1', diff --git a/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.ts b/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.ts index b9e4dedf4d133..ef55b67ef08db 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.ts @@ -114,10 +114,10 @@ export async function createRule( context.ruleTypeRegistry.ensureRuleTypeEnabled(data.alertTypeId); - // Throws an error if alert type isn't registered + // Throws an error if rule type isn't registered const ruleType = context.ruleTypeRegistry.get(data.alertTypeId); - const validatedAlertTypeParams = validateRuleTypeParams(data.params, ruleType.validate.params); + const validatedRuleTypeParams = validateRuleTypeParams(data.params, ruleType.validate.params); const username = await context.getUserName(); let createdAPIKey = null; @@ -161,7 +161,7 @@ export async function createRule( params: updatedParams, actions, } = await withSpan({ name: 'extractReferences', type: 'rules' }, () => - extractReferences(context, ruleType, data.actions, validatedAlertTypeParams) + extractReferences(context, ruleType, data.actions, validatedRuleTypeParams) ); const createTime = Date.now(); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/mute_instance.ts b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/mute_instance.ts index 5758794b550fb..d49af9aba93b6 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/mute_instance.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/mute_instance.ts @@ -21,6 +21,7 @@ export async function muteInstance( context: RulesClientContext, params: MuteAlertParams ): Promise { + const ruleId = params.alertId; try { muteAlertParamsSchema.validate(params); } catch (error) { @@ -29,18 +30,18 @@ export async function muteInstance( return await retryIfConflicts( context.logger, - `rulesClient.muteInstance('${params.alertId}')`, + `rulesClient.muteInstance('${ruleId}')`, async () => await muteInstanceWithOCC(context, params) ); } async function muteInstanceWithOCC( context: RulesClientContext, - { alertId, alertInstanceId }: MuteAlertParams + { alertId: ruleId, alertInstanceId }: MuteAlertParams ) { const { attributes, version } = await context.unsecuredSavedObjectsClient.get( RULE_SAVED_OBJECT_TYPE, - alertId + ruleId ); try { @@ -58,7 +59,7 @@ async function muteInstanceWithOCC( context.auditLogger?.log( ruleAuditEvent({ action: RuleAuditAction.MUTE_ALERT, - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: alertId }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: ruleId }, error, }) ); @@ -69,7 +70,7 @@ async function muteInstanceWithOCC( ruleAuditEvent({ action: RuleAuditAction.MUTE_ALERT, outcome: 'unknown', - savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: alertId }, + savedObject: { type: RULE_SAVED_OBJECT_TYPE, id: ruleId }, }) ); @@ -81,7 +82,7 @@ async function muteInstanceWithOCC( await updateRuleSo({ savedObjectsClient: context.unsecuredSavedObjectsClient, savedObjectsUpdateOptions: { version }, - id: alertId, + id: ruleId, updateRuleAttributes: updateMeta(context, { mutedInstanceIds, updatedBy: await context.getUserName(), diff --git a/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts b/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts index 90f4b189b1197..68edc6667aeed 100644 --- a/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts +++ b/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts @@ -14,7 +14,7 @@ import { SecurityPluginSetup } from '@kbn/security-plugin/server'; import { PluginStartContract as FeaturesPluginStart } from '@kbn/features-plugin/server'; import { Space } from '@kbn/spaces-plugin/server'; import { RegistryRuleType } from '../rule_type_registry'; -import { ALERTS_FEATURE_ID, RuleTypeRegistry } from '../types'; +import { ALERTING_FEATURE_ID, RuleTypeRegistry } from '../types'; import { asFiltersByRuleTypeAndConsumer, asFiltersBySpaceId, @@ -130,7 +130,7 @@ export class AlertingAuthorization { this.allPossibleConsumers = this.featuresIds.then((featuresIds) => { return featuresIds.size - ? asAuthorizedConsumers([ALERTS_FEATURE_ID, ...featuresIds], { + ? asAuthorizedConsumers([ALERTING_FEATURE_ID, ...featuresIds], { read: true, all: true, }) @@ -338,7 +338,7 @@ export class AlertingAuthorization { >(); const allPossibleConsumers = await this.allPossibleConsumers; const addLegacyConsumerPrivileges = (legacyConsumer: string) => - legacyConsumer === ALERTS_FEATURE_ID || isEmpty(featuresIds); + legacyConsumer === ALERTING_FEATURE_ID || isEmpty(featuresIds); for (const feature of fIds) { const featureDef = this.features .getKibanaFeatures() @@ -504,6 +504,6 @@ export const getValidConsumer = ({ legacyConsumer: string; producer: string; }): string => - legacyConsumer === ALERTS_FEATURE_ID || validLegacyConsumers.includes(legacyConsumer) + legacyConsumer === ALERTING_FEATURE_ID || validLegacyConsumers.includes(legacyConsumer) ? producer : legacyConsumer; diff --git a/x-pack/plugins/alerting/server/plugin.ts b/x-pack/plugins/alerting/server/plugin.ts index 34472ed6066d9..f5850abf5f99f 100644 --- a/x-pack/plugins/alerting/server/plugin.ts +++ b/x-pack/plugins/alerting/server/plugin.ts @@ -64,7 +64,7 @@ import { RulesClientFactory } from './rules_client_factory'; import { RulesSettingsClientFactory } from './rules_settings_client_factory'; import { MaintenanceWindowClientFactory } from './maintenance_window_client_factory'; import { ILicenseState, LicenseState } from './lib/license_state'; -import { AlertingRequestHandlerContext, ALERTS_FEATURE_ID, RuleAlertData } from './types'; +import { AlertingRequestHandlerContext, ALERTING_FEATURE_ID, RuleAlertData } from './types'; import { defineRoutes } from './routes'; import { AlertInstanceContext, @@ -320,7 +320,7 @@ export class AlertingPlugin { } // Usage counter for telemetry - this.usageCounter = plugins.usageCollection?.createUsageCounter(ALERTS_FEATURE_ID); + this.usageCounter = plugins.usageCollection?.createUsageCounter(ALERTING_FEATURE_ID); const getSearchSourceMigrations = plugins.data.search.searchSource.getAllMigrations.bind( plugins.data.search.searchSource diff --git a/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.ts b/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.ts index ecb96f0248a35..e91e99203e8d4 100644 --- a/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.ts +++ b/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.ts @@ -5,77 +5,77 @@ * 2.0. */ -import { ALERTS_FEATURE_ID } from './types'; +import { ALERTING_FEATURE_ID } from './types'; export const ruleTypeIdWithValidLegacyConsumers: Record = { - 'example.always-firing': [ALERTS_FEATURE_ID], - 'example.people-in-space': [ALERTS_FEATURE_ID], - transform_health: [ALERTS_FEATURE_ID], - '.index-threshold': [ALERTS_FEATURE_ID], - '.geo-containment': [ALERTS_FEATURE_ID], - '.es-query': [ALERTS_FEATURE_ID, 'discover'], - 'xpack.ml.anomaly_detection_alert': [ALERTS_FEATURE_ID], - 'xpack.ml.anomaly_detection_jobs_health': [ALERTS_FEATURE_ID], - 'xpack.synthetics.alerts.monitorStatus': [ALERTS_FEATURE_ID], - 'xpack.synthetics.alerts.tls': [ALERTS_FEATURE_ID], - 'xpack.uptime.alerts.monitorStatus': [ALERTS_FEATURE_ID], - 'xpack.uptime.alerts.tlsCertificate': [ALERTS_FEATURE_ID], - 'xpack.uptime.alerts.durationAnomaly': [ALERTS_FEATURE_ID], - 'xpack.uptime.alerts.tls': [ALERTS_FEATURE_ID], - 'siem.eqlRule': [ALERTS_FEATURE_ID], - 'siem.savedQueryRule': [ALERTS_FEATURE_ID], - 'siem.indicatorRule': [ALERTS_FEATURE_ID], - 'siem.mlRule': [ALERTS_FEATURE_ID], - 'siem.queryRule': [ALERTS_FEATURE_ID], - 'siem.thresholdRule': [ALERTS_FEATURE_ID], - 'siem.newTermsRule': [ALERTS_FEATURE_ID], - 'siem.notifications': [ALERTS_FEATURE_ID], - 'slo.rules.burnRate': [ALERTS_FEATURE_ID], - 'logs.alert.document.count': [ALERTS_FEATURE_ID], - 'metrics.alert.inventory.threshold': [ALERTS_FEATURE_ID], - 'metrics.alert.threshold': [ALERTS_FEATURE_ID], - monitoring_alert_cluster_health: [ALERTS_FEATURE_ID], - monitoring_alert_license_expiration: [ALERTS_FEATURE_ID], - monitoring_alert_cpu_usage: [ALERTS_FEATURE_ID], - monitoring_alert_missing_monitoring_data: [ALERTS_FEATURE_ID], - monitoring_alert_disk_usage: [ALERTS_FEATURE_ID], - monitoring_alert_thread_pool_search_rejections: [ALERTS_FEATURE_ID], - monitoring_alert_thread_pool_write_rejections: [ALERTS_FEATURE_ID], - monitoring_alert_jvm_memory_usage: [ALERTS_FEATURE_ID], - monitoring_alert_nodes_changed: [ALERTS_FEATURE_ID], - monitoring_alert_logstash_version_mismatch: [ALERTS_FEATURE_ID], - monitoring_alert_kibana_version_mismatch: [ALERTS_FEATURE_ID], - monitoring_alert_elasticsearch_version_mismatch: [ALERTS_FEATURE_ID], - monitoring_ccr_read_exceptions: [ALERTS_FEATURE_ID], - monitoring_shard_size: [ALERTS_FEATURE_ID], - 'apm.transaction_duration': [ALERTS_FEATURE_ID], - 'apm.anomaly': [ALERTS_FEATURE_ID], - 'apm.error_rate': [ALERTS_FEATURE_ID], - 'apm.transaction_error_rate': [ALERTS_FEATURE_ID], - 'test.always-firing': [ALERTS_FEATURE_ID], - 'test.always-firing-alert-as-data': [ALERTS_FEATURE_ID], - 'test.authorization': [ALERTS_FEATURE_ID], - 'test.cancellableRule': [ALERTS_FEATURE_ID], - 'test.cumulative-firing': [ALERTS_FEATURE_ID], - 'test.exceedsAlertLimit': [ALERTS_FEATURE_ID], - 'test.failing': [ALERTS_FEATURE_ID], - 'test.gold.noop': [ALERTS_FEATURE_ID], - 'test.longRunning': [ALERTS_FEATURE_ID], - 'test.multipleSearches': [ALERTS_FEATURE_ID], - 'test.never-firing': [ALERTS_FEATURE_ID], - 'test.noop': [ALERTS_FEATURE_ID], - 'test.onlyContextVariables': [ALERTS_FEATURE_ID], - 'test.onlyStateVariables': [ALERTS_FEATURE_ID], - 'test.patternFiring': [ALERTS_FEATURE_ID], - 'test.patternFiringAad': [ALERTS_FEATURE_ID], - 'test.patternFiringAutoRecoverFalse': [ALERTS_FEATURE_ID], - 'test.patternLongRunning': [ALERTS_FEATURE_ID], - 'test.patternLongRunning.cancelAlertsOnRuleTimeout': [ALERTS_FEATURE_ID], - 'test.patternSuccessOrFailure': [ALERTS_FEATURE_ID], - 'test.restricted-noop': [ALERTS_FEATURE_ID], - 'test.throw': [ALERTS_FEATURE_ID], - 'test.unrestricted-noop': [ALERTS_FEATURE_ID], - 'test.validation': [ALERTS_FEATURE_ID], + 'example.always-firing': [ALERTING_FEATURE_ID], + 'example.people-in-space': [ALERTING_FEATURE_ID], + transform_health: [ALERTING_FEATURE_ID], + '.index-threshold': [ALERTING_FEATURE_ID], + '.geo-containment': [ALERTING_FEATURE_ID], + '.es-query': [ALERTING_FEATURE_ID, 'discover'], + 'xpack.ml.anomaly_detection_alert': [ALERTING_FEATURE_ID], + 'xpack.ml.anomaly_detection_jobs_health': [ALERTING_FEATURE_ID], + 'xpack.synthetics.alerts.monitorStatus': [ALERTING_FEATURE_ID], + 'xpack.synthetics.alerts.tls': [ALERTING_FEATURE_ID], + 'xpack.uptime.alerts.monitorStatus': [ALERTING_FEATURE_ID], + 'xpack.uptime.alerts.tlsCertificate': [ALERTING_FEATURE_ID], + 'xpack.uptime.alerts.durationAnomaly': [ALERTING_FEATURE_ID], + 'xpack.uptime.alerts.tls': [ALERTING_FEATURE_ID], + 'siem.eqlRule': [ALERTING_FEATURE_ID], + 'siem.savedQueryRule': [ALERTING_FEATURE_ID], + 'siem.indicatorRule': [ALERTING_FEATURE_ID], + 'siem.mlRule': [ALERTING_FEATURE_ID], + 'siem.queryRule': [ALERTING_FEATURE_ID], + 'siem.thresholdRule': [ALERTING_FEATURE_ID], + 'siem.newTermsRule': [ALERTING_FEATURE_ID], + 'siem.notifications': [ALERTING_FEATURE_ID], + 'slo.rules.burnRate': [ALERTING_FEATURE_ID], + 'logs.alert.document.count': [ALERTING_FEATURE_ID], + 'metrics.alert.inventory.threshold': [ALERTING_FEATURE_ID], + 'metrics.alert.threshold': [ALERTING_FEATURE_ID], + monitoring_alert_cluster_health: [ALERTING_FEATURE_ID], + monitoring_alert_license_expiration: [ALERTING_FEATURE_ID], + monitoring_alert_cpu_usage: [ALERTING_FEATURE_ID], + monitoring_alert_missing_monitoring_data: [ALERTING_FEATURE_ID], + monitoring_alert_disk_usage: [ALERTING_FEATURE_ID], + monitoring_alert_thread_pool_search_rejections: [ALERTING_FEATURE_ID], + monitoring_alert_thread_pool_write_rejections: [ALERTING_FEATURE_ID], + monitoring_alert_jvm_memory_usage: [ALERTING_FEATURE_ID], + monitoring_alert_nodes_changed: [ALERTING_FEATURE_ID], + monitoring_alert_logstash_version_mismatch: [ALERTING_FEATURE_ID], + monitoring_alert_kibana_version_mismatch: [ALERTING_FEATURE_ID], + monitoring_alert_elasticsearch_version_mismatch: [ALERTING_FEATURE_ID], + monitoring_ccr_read_exceptions: [ALERTING_FEATURE_ID], + monitoring_shard_size: [ALERTING_FEATURE_ID], + 'apm.transaction_duration': [ALERTING_FEATURE_ID], + 'apm.anomaly': [ALERTING_FEATURE_ID], + 'apm.error_rate': [ALERTING_FEATURE_ID], + 'apm.transaction_error_rate': [ALERTING_FEATURE_ID], + 'test.always-firing': [ALERTING_FEATURE_ID], + 'test.always-firing-alert-as-data': [ALERTING_FEATURE_ID], + 'test.authorization': [ALERTING_FEATURE_ID], + 'test.cancellableRule': [ALERTING_FEATURE_ID], + 'test.cumulative-firing': [ALERTING_FEATURE_ID], + 'test.exceedsAlertLimit': [ALERTING_FEATURE_ID], + 'test.failing': [ALERTING_FEATURE_ID], + 'test.gold.noop': [ALERTING_FEATURE_ID], + 'test.longRunning': [ALERTING_FEATURE_ID], + 'test.multipleSearches': [ALERTING_FEATURE_ID], + 'test.never-firing': [ALERTING_FEATURE_ID], + 'test.noop': [ALERTING_FEATURE_ID], + 'test.onlyContextVariables': [ALERTING_FEATURE_ID], + 'test.onlyStateVariables': [ALERTING_FEATURE_ID], + 'test.patternFiring': [ALERTING_FEATURE_ID], + 'test.patternFiringAad': [ALERTING_FEATURE_ID], + 'test.patternFiringAutoRecoverFalse': [ALERTING_FEATURE_ID], + 'test.patternLongRunning': [ALERTING_FEATURE_ID], + 'test.patternLongRunning.cancelAlertsOnRuleTimeout': [ALERTING_FEATURE_ID], + 'test.patternSuccessOrFailure': [ALERTING_FEATURE_ID], + 'test.restricted-noop': [ALERTING_FEATURE_ID], + 'test.throw': [ALERTING_FEATURE_ID], + 'test.unrestricted-noop': [ALERTING_FEATURE_ID], + 'test.validation': [ALERTING_FEATURE_ID], }; const getRuleTypeIdValidLegacyConsumers = (ruleTypeId: string): string[] => { diff --git a/x-pack/plugins/alerting/server/rules_client/lib/create_rule_saved_object.ts b/x-pack/plugins/alerting/server/rules_client/lib/create_rule_saved_object.ts index cc0d6a895dcc0..938d421e79554 100644 --- a/x-pack/plugins/alerting/server/rules_client/lib/create_rule_saved_object.ts +++ b/x-pack/plugins/alerting/server/rules_client/lib/create_rule_saved_object.ts @@ -108,7 +108,7 @@ export async function createRuleSavedObject ({ let rulesClient: RulesClient; -const MockAlertId = 'alert-id'; +const MockRuleId = 'rule-id'; const ConflictAfterRetries = RetryForConflictsAttempts + 1; @@ -120,7 +120,7 @@ async function update(success: boolean) { rulesClientParams.uiSettings.asScopedToClient = uiSettingsServiceMock.createStartContract().asScopedToClient; await rulesClient.update({ - id: MockAlertId, + id: MockRuleId, data: { schedule: { interval: '1m' }, name: 'cba', @@ -133,18 +133,18 @@ async function update(success: boolean) { }); } catch (err) { // only checking the warn messages in this test - expect(logger.warn).lastCalledWith(`rulesClient.update('alert-id') conflict, exceeded retries`); + expect(logger.warn).lastCalledWith(`rulesClient.update('rule-id') conflict, exceeded retries`); return expectConflict(success, err, 'create'); } expectSuccess(success, 2, 'create'); // only checking the debug messages in this test - expect(logger.debug).nthCalledWith(1, `rulesClient.update('alert-id') conflict, retrying ...`); + expect(logger.debug).nthCalledWith(1, `rulesClient.update('rule-id') conflict, retrying ...`); } async function updateApiKey(success: boolean) { try { - await rulesClient.updateApiKey({ id: MockAlertId }); + await rulesClient.updateApiKey({ id: MockRuleId }); } catch (err) { return expectConflict(success, err); } @@ -153,10 +153,10 @@ async function updateApiKey(success: boolean) { } async function enable(success: boolean) { - setupRawAlertMocks({}, { enabled: false }); + setupRawRuleMocks({}, { enabled: false }); try { - await rulesClient.enable({ id: MockAlertId }); + await rulesClient.enable({ id: MockRuleId }); } catch (err) { return expectConflict(success, err); } @@ -168,7 +168,7 @@ async function enable(success: boolean) { async function disable(success: boolean) { try { - await rulesClient.disable({ id: MockAlertId }); + await rulesClient.disable({ id: MockRuleId }); } catch (err) { return expectConflict(success, err); } @@ -178,7 +178,7 @@ async function disable(success: boolean) { async function muteAll(success: boolean) { try { - await rulesClient.muteAll({ id: MockAlertId }); + await rulesClient.muteAll({ id: MockRuleId }); } catch (err) { return expectConflict(success, err); } @@ -188,7 +188,7 @@ async function muteAll(success: boolean) { async function unmuteAll(success: boolean) { try { - await rulesClient.unmuteAll({ id: MockAlertId }); + await rulesClient.unmuteAll({ id: MockRuleId }); } catch (err) { return expectConflict(success, err); } @@ -198,7 +198,7 @@ async function unmuteAll(success: boolean) { async function muteInstance(success: boolean) { try { - await rulesClient.muteInstance({ alertId: MockAlertId, alertInstanceId: 'instance-id' }); + await rulesClient.muteInstance({ alertId: MockRuleId, alertInstanceId: 'instance-id' }); } catch (err) { return expectConflict(success, err); } @@ -207,9 +207,9 @@ async function muteInstance(success: boolean) { } async function unmuteInstance(success: boolean) { - setupRawAlertMocks({}, { mutedInstanceIds: ['instance-id'] }); + setupRawRuleMocks({}, { mutedInstanceIds: ['instance-id'] }); try { - await rulesClient.unmuteInstance({ alertId: MockAlertId, alertInstanceId: 'instance-id' }); + await rulesClient.unmuteInstance({ alertId: MockRuleId, alertInstanceId: 'instance-id' }); } catch (err) { return expectConflict(success, err); } @@ -233,7 +233,7 @@ function expectSuccess( function expectConflict(success: boolean, err: Error, method: 'update' | 'create' = 'update') { const conflictErrorMessage = SavedObjectsErrorHelpers.createConflictError( RULE_SAVED_OBJECT_TYPE, - MockAlertId + MockRuleId ).message; expect(`${err}`).toBe(`Error: ${conflictErrorMessage}`); @@ -253,7 +253,7 @@ function testFn(fn: (success: boolean) => unknown, success: boolean) { function mockSavedObjectUpdateConflictErrorTimes(times: number) { // default success value const mockUpdateValue = { - id: MockAlertId, + id: MockRuleId, type: RULE_SAVED_OBJECT_TYPE, attributes: { actions: [], @@ -268,21 +268,21 @@ function mockSavedObjectUpdateConflictErrorTimes(times: number) { // queue up specified number of errors before a success call for (let i = 0; i < times; i++) { unsecuredSavedObjectsClient.update.mockRejectedValueOnce( - SavedObjectsErrorHelpers.createConflictError(RULE_SAVED_OBJECT_TYPE, MockAlertId) + SavedObjectsErrorHelpers.createConflictError(RULE_SAVED_OBJECT_TYPE, MockRuleId) ); unsecuredSavedObjectsClient.create.mockRejectedValueOnce( - SavedObjectsErrorHelpers.createConflictError(RULE_SAVED_OBJECT_TYPE, MockAlertId) + SavedObjectsErrorHelpers.createConflictError(RULE_SAVED_OBJECT_TYPE, MockRuleId) ); } } // set up mocks needed to get the tested methods to run -function setupRawAlertMocks( +function setupRawRuleMocks( overrides: Record = {}, attributeOverrides: Record = {} ) { const rawRule = { - id: MockAlertId, + id: MockRuleId, type: RULE_SAVED_OBJECT_TYPE, attributes: { enabled: true, @@ -405,5 +405,5 @@ beforeEach(() => { rulesClient = new RulesClient(rulesClientParams); - setupRawAlertMocks(); + setupRawRuleMocks(); }); diff --git a/x-pack/plugins/observability_solution/observability/public/pages/rule_details/rule_details.tsx b/x-pack/plugins/observability_solution/observability/public/pages/rule_details/rule_details.tsx index 90ed7866a1560..23d93b35ad330 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/rule_details/rule_details.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/rule_details/rule_details.tsx @@ -9,7 +9,7 @@ import React, { useState, useEffect, useRef } from 'react'; import { useParams, useLocation } from 'react-router-dom'; import { EuiSpacer, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { ALERTS_FEATURE_ID, RuleExecutionStatusErrorReasons } from '@kbn/alerting-plugin/common'; +import { ALERTING_FEATURE_ID, RuleExecutionStatusErrorReasons } from '@kbn/alerting-plugin/common'; import type { BoolQuery } from '@kbn/es-query'; import type { AlertConsumers } from '@kbn/rule-data-utils'; import { useBreadcrumbs } from '@kbn/observability-shared-plugin/public'; @@ -186,7 +186,7 @@ export function RuleDetailsPage() { const isEditable = isRuleEditable({ capabilities, rule, ruleType, ruleTypeRegistry }); const featureIds = - rule?.consumer === ALERTS_FEATURE_ID && ruleType?.producer + rule?.consumer === ALERTING_FEATURE_ID && ruleType?.producer ? [ruleType.producer as AlertConsumers] : rule ? [rule.consumer as AlertConsumers] diff --git a/x-pack/plugins/observability_solution/observability/public/pages/rules/rules.test.tsx b/x-pack/plugins/observability_solution/observability/public/pages/rules/rules.test.tsx index b7652dbe3422a..9fe1f6030d239 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/rules/rules.test.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/rules/rules.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; +import { ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; import { AppMountParameters, CoreStart } from '@kbn/core/public'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; @@ -85,10 +85,10 @@ describe('RulesPage with all capabilities', () => { recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, actionVariables: { context: [], state: [] }, defaultActionGroupId: 'default', - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, minimumLicenseRequired: 'basic', authorizedConsumers: { - [ALERTS_FEATURE_ID]: { all: true }, + [ALERTING_FEATURE_ID]: { all: true }, }, ruleTaskTimeout: '1m', }, @@ -100,10 +100,10 @@ describe('RulesPage with all capabilities', () => { recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, actionVariables: { context: [], state: [] }, defaultActionGroupId: 'default', - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, minimumLicenseRequired: 'basic', authorizedConsumers: { - [ALERTS_FEATURE_ID]: { all: true }, + [ALERTING_FEATURE_ID]: { all: true }, }, ruleTaskTimeout: '1m', }, @@ -115,10 +115,10 @@ describe('RulesPage with all capabilities', () => { recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, actionVariables: { context: [], state: [] }, defaultActionGroupId: 'default', - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, minimumLicenseRequired: 'basic', authorizedConsumers: { - [ALERTS_FEATURE_ID]: { all: true }, + [ALERTING_FEATURE_ID]: { all: true }, }, ruleTaskTimeout: '1m', }, @@ -166,10 +166,10 @@ describe('RulesPage with show only capability', () => { recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, actionVariables: { context: [], state: [] }, defaultActionGroupId: 'default', - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, minimumLicenseRequired: 'basic', authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: false }, + [ALERTING_FEATURE_ID]: { read: true, all: false }, }, ruleTaskTimeout: '1m', }, @@ -179,10 +179,10 @@ describe('RulesPage with show only capability', () => { recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, actionVariables: { context: [], state: [] }, defaultActionGroupId: 'default', - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, minimumLicenseRequired: 'basic', authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: false }, + [ALERTING_FEATURE_ID]: { read: true, all: false }, }, ruleTaskTimeout: '1m', id: '2', @@ -196,10 +196,10 @@ describe('RulesPage with show only capability', () => { recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, actionVariables: { context: [], state: [] }, defaultActionGroupId: 'default', - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, minimumLicenseRequired: 'basic', authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: false }, + [ALERTING_FEATURE_ID]: { read: true, all: false }, }, ruleTaskTimeout: '1m', }, diff --git a/x-pack/plugins/observability_solution/observability/public/pages/rules/rules.tsx b/x-pack/plugins/observability_solution/observability/public/pages/rules/rules.tsx index 1b8d20d580d30..e15818e8ea3ae 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/rules/rules.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/rules/rules.tsx @@ -6,7 +6,7 @@ */ import { EuiButton, EuiButtonEmpty, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; +import { ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { useBreadcrumbs } from '@kbn/observability-shared-plugin/public'; @@ -64,7 +64,7 @@ export function RulesPage({ activeTab = RULES_TAB_NAME }: RulesPageProps) { const authorizedRuleTypes = [...ruleTypes.values()]; const authorizedToCreateAnyRules = authorizedRuleTypes.some( - (ruleType) => ruleType.authorizedConsumers[ALERTS_FEATURE_ID]?.all + (ruleType) => ruleType.authorizedConsumers[ALERTING_FEATURE_ID]?.all ); const tabs = [ @@ -143,7 +143,7 @@ export function RulesPage({ activeTab = RULES_TAB_NAME }: RulesPageProps) { {addRuleFlyoutVisibility && ( 0; const authorizedRuleTypes = useMemo(() => [...filteredIndex.values()], [filteredIndex]); const authorizedToCreateAnyRules = authorizedRuleTypes.some( - (ruleType) => ruleType.authorizedConsumers[ALERTS_FEATURE_ID]?.all + (ruleType) => ruleType.authorizedConsumers[ALERTING_FEATURE_ID]?.all ); const authorizedToReadAnyRules = authorizedToCreateAnyRules || - authorizedRuleTypes.some((ruleType) => ruleType.authorizedConsumers[ALERTS_FEATURE_ID]?.read); + authorizedRuleTypes.some((ruleType) => ruleType.authorizedConsumers[ALERTING_FEATURE_ID]?.read); return { ruleTypesState: { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts index 04ecb66e1692e..ac9f64ee7eae7 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts @@ -7,7 +7,7 @@ import { RuleType, ActionVariables } from '../../types'; import { transformActionVariables } from './action_variables'; -import { ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; +import { ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; beforeEach(() => jest.resetAllMocks()); @@ -325,7 +325,7 @@ function getAlertType(actionVariables: ActionVariables): RuleType { defaultActionGroupId: 'default', recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, authorizedConsumers: {}, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, minimumLicenseRequired: 'basic', enabledInLicense: true, }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rule_types.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rule_types.test.ts index 05f21f9a53231..cd9e829c8045e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rule_types.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rule_types.test.ts @@ -8,7 +8,7 @@ import { RuleType } from '../../../types'; import { httpServiceMock } from '@kbn/core/public/mocks'; import { loadRuleTypes } from './rule_types'; -import { ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; +import { ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; const http = httpServiceMock.createStartContract(); @@ -23,7 +23,7 @@ describe('loadRuleTypes', () => { state: [{ name: 'var2', description: 'val2' }], params: [{ name: 'var3', description: 'val3' }], }, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, actionGroups: [{ id: 'default', name: 'Default' }], recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, defaultActionGroupId: 'default', diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule.tsx index b80a158ae9828..c6598becec313 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule.tsx @@ -8,7 +8,7 @@ import React, { lazy, useCallback } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiSpacer, EuiFlexGroup, EuiFlexItem, EuiTabbedContent } from '@elastic/eui'; -import { AlertStatusValues, ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; +import { AlertStatusValues, ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; import { ALERT_RULE_UUID, AlertConsumers } from '@kbn/rule-data-utils'; import { ALERT_TABLE_GENERIC_CONFIG_ID } from '../../../constants'; import { AlertTableConfigRegistry } from '../../../alert_table_config_registry'; @@ -104,7 +104,7 @@ export function RuleComponent({ alertsTableConfigurationRegistry as AlertTableConfigRegistry } featureIds={ - (rule.consumer === ALERTS_FEATURE_ID + (rule.consumer === ALERTING_FEATURE_ID ? [ruleType.producer] : [rule.consumer]) as AlertConsumers[] } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_definition.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_definition.test.tsx index 49c07a698c6b3..91a77d18009c5 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_definition.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_definition.test.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { mount, ReactWrapper } from 'enzyme'; import { act } from 'react-dom/test-utils'; -import { ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; +import { ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; import { nextTick } from '@kbn/test-jest-helpers'; import { RuleDefinition } from './rule_definition'; import { actionTypeRegistryMock } from '../../../action_type_registry.mock'; @@ -44,10 +44,10 @@ const mockedRuleTypeIndex = new Map( recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, actionVariables: { context: [], state: [] }, defaultActionGroupId: 'default', - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, minimumLicenseRequired: 'basic', authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: false }, + [ALERTING_FEATURE_ID]: { read: true, all: false }, }, ruleTaskTimeout: '1m', }, @@ -59,10 +59,10 @@ const mockedRuleTypeIndex = new Map( recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, actionVariables: { context: [], state: [] }, defaultActionGroupId: 'default', - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, minimumLicenseRequired: 'basic', authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: false }, + [ALERTING_FEATURE_ID]: { read: true, all: false }, }, ruleTaskTimeout: '1m', }, @@ -74,10 +74,10 @@ const mockedRuleTypeIndex = new Map( recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, actionVariables: { context: [], state: [] }, defaultActionGroupId: 'default', - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, minimumLicenseRequired: 'basic', authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: false }, + [ALERTING_FEATURE_ID]: { read: true, all: false }, }, ruleTaskTimeout: '1m', }, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.test.tsx index 7d292c5dee3cb..8a54ba8e4a8e3 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.test.tsx @@ -17,7 +17,7 @@ import { ActionGroup, RuleExecutionStatusErrorReasons, RuleExecutionStatusWarningReasons, - ALERTS_FEATURE_ID, + ALERTING_FEATURE_ID, } from '@kbn/alerting-plugin/common'; import { useKibana } from '../../../../common/lib/kibana'; import { ruleTypeRegistryMock } from '../../../rule_type_registry.mock'; @@ -70,7 +70,7 @@ const mockRuleApis = { }; const authorizedConsumers = { - [ALERTS_FEATURE_ID]: { read: true, all: true }, + [ALERTING_FEATURE_ID]: { read: true, all: true }, }; const recoveryActionGroup: ActionGroup<'recovered'> = { id: 'recovered', name: 'Recovered' }; @@ -82,7 +82,7 @@ const ruleType: RuleType = { actionVariables: { context: [], state: [], params: [] }, defaultActionGroupId: 'default', minimumLicenseRequired: 'basic', - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers, enabledInLicense: true, }; @@ -821,7 +821,7 @@ describe('rule_details', () => { name: `rule-${uuidv4()}`, tags: [], ruleTypeId: '.noop', - consumer: ALERTS_FEATURE_ID, + consumer: ALERTING_FEATURE_ID, schedule: { interval: '1m' }, actions: [], params: {}, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_event_log_list.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_event_log_list.test.tsx index ee860db2de387..151a5805835fb 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_event_log_list.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_event_log_list.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { render, screen, waitFor, cleanup } from '@testing-library/react'; import { useKibana } from '../../../../common/lib/kibana'; -import { ActionGroup, ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; +import { ActionGroup, ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { RuleEventLogList, RuleEventLogListProps } from './rule_event_log_list'; import { mockRule, mockRuleType, mockRuleSummary, mockLogResponse } from './test_helpers'; @@ -50,13 +50,13 @@ const loadActionErrorLogMock = loadActionErrorLog as unknown as jest.MockedFunct const ruleMock = mockRule(); const authorizedConsumers = { - [ALERTS_FEATURE_ID]: { read: true, all: true }, + [ALERTING_FEATURE_ID]: { read: true, all: true }, }; const recoveryActionGroup: ActionGroup<'recovered'> = { id: 'recovered', name: 'Recovered' }; const ruleType: RuleType = mockRuleType({ - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers, recoveryActionGroup, }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_execution_summary_and_chart.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_execution_summary_and_chart.test.tsx index 89f330515091e..54390adae41cf 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_execution_summary_and_chart.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_execution_summary_and_chart.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { act } from 'react-dom/test-utils'; import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; -import { ActionGroup, ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; +import { ActionGroup, ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; import { RuleExecutionSummaryAndChart } from './rule_execution_summary_and_chart'; import { useKibana } from '../../../../common/lib/kibana'; import { mockRule, mockRuleType, mockRuleSummary } from './test_helpers'; @@ -24,13 +24,13 @@ const onChangeDurationMock = jest.fn(); const ruleMock = mockRule(); const authorizedConsumers = { - [ALERTS_FEATURE_ID]: { read: true, all: true }, + [ALERTING_FEATURE_ID]: { read: true, all: true }, }; const recoveryActionGroup: ActionGroup<'recovered'> = { id: 'recovered', name: 'Recovered' }; const ruleType: RuleType = mockRuleType({ - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers, recoveryActionGroup, }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.test.tsx index 5458f03ebeaad..93de0a6aafdbc 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.test.tsx @@ -29,7 +29,7 @@ import { } from '../../../types'; import { ruleTypeRegistryMock } from '../../rule_type_registry.mock'; import { ReactWrapper } from 'enzyme'; -import { ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; +import { ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; import { useKibana } from '../../../common/lib/kibana'; import { triggersActionsUiConfig } from '../../../common/lib/config_api'; import { triggersActionsUiHealth } from '../../../common/lib/health_api'; @@ -127,9 +127,9 @@ describe.skip('rule_add', () => { defaultScheduleInterval, minimumLicenseRequired: 'basic', recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: true }, + [ALERTING_FEATURE_ID]: { read: true, all: true }, test: { read: true, all: true }, }, actionVariables: { @@ -196,7 +196,7 @@ describe.skip('rule_add', () => { wrapper = mountWithIntl( { @@ -407,7 +407,7 @@ describe.skip('rule_add', () => { defaultActionGroupId: 'threshold.fired', minimumLicenseRequired: 'basic', recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { logs: { read: true, all: true }, }, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.test.tsx index ee64a408dcb37..f202a98a8cc96 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.test.tsx @@ -15,7 +15,7 @@ import { ruleTypeRegistryMock } from '../../rule_type_registry.mock'; import { ReactWrapper } from 'enzyme'; import RuleEdit from './rule_edit'; import { useKibana } from '../../../common/lib/kibana'; -import { ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; +import { ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; jest.mock('../../../common/lib/kibana'); const actionTypeRegistry = actionTypeRegistryMock.create(); @@ -102,9 +102,9 @@ describe('rule_edit', () => { defaultActionGroupId: 'testActionGroup', minimumLicenseRequired: 'basic', recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: true }, + [ALERTING_FEATURE_ID]: { read: true, all: true }, test: { read: true, all: true }, }, actionVariables: { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.test.tsx index e050e7746008f..8b12245f0599b 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.test.tsx @@ -26,7 +26,7 @@ import { } from '../../../types'; import { RuleForm } from './rule_form'; import { coreMock } from '@kbn/core/public/mocks'; -import { ALERTS_FEATURE_ID, RecoveredActionGroup } from '@kbn/alerting-plugin/common'; +import { ALERTING_FEATURE_ID, RecoveredActionGroup } from '@kbn/alerting-plugin/common'; import { useKibana } from '../../../common/lib/kibana'; const toMapById = [ @@ -143,9 +143,9 @@ describe('rule_form', () => { defaultActionGroupId: 'testActionGroup', minimumLicenseRequired: 'basic', recoveryActionGroup: RecoveredActionGroup, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: true }, + [ALERTING_FEATURE_ID]: { read: true, all: true }, test: { read: true, all: true }, }, actionVariables: { @@ -166,9 +166,9 @@ describe('rule_form', () => { defaultActionGroupId: 'testActionGroup', minimumLicenseRequired: 'gold', recoveryActionGroup: RecoveredActionGroup, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: true }, + [ALERTING_FEATURE_ID]: { read: true, all: true }, test: { read: true, all: true }, }, actionVariables: { @@ -212,7 +212,7 @@ describe('rule_form', () => { const initialRule = { name: 'test', params: {}, - consumer: ALERTS_FEATURE_ID, + consumer: ALERTING_FEATURE_ID, schedule: { interval: schedule, }, @@ -298,9 +298,9 @@ describe('rule_form', () => { defaultActionGroupId: 'testActionGroup', minimumLicenseRequired: 'basic', recoveryActionGroup: RecoveredActionGroup, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: true }, + [ALERTING_FEATURE_ID]: { read: true, all: true }, test: { read: true, all: true }, }, actionVariables: { @@ -321,9 +321,9 @@ describe('rule_form', () => { defaultActionGroupId: 'testActionGroup', minimumLicenseRequired: 'gold', recoveryActionGroup: RecoveredActionGroup, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: true }, + [ALERTING_FEATURE_ID]: { read: true, all: true }, test: { read: true, all: true }, }, actionVariables: { @@ -365,7 +365,7 @@ describe('rule_form', () => { const initialRule = { name: 'test', params: {}, - consumer: ALERTS_FEATURE_ID, + consumer: ALERTING_FEATURE_ID, schedule: { interval: schedule, }, @@ -556,7 +556,7 @@ describe('rule_form', () => { defaultActionGroupId: 'threshold.fired', minimumLicenseRequired: 'basic', recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { alerts: { read: true, all: true }, apm: { read: true, all: true }, @@ -629,7 +629,7 @@ describe('rule_form', () => { defaultActionGroupId: 'threshold.fired', minimumLicenseRequired: 'basic', recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { infrastructure: { read: true, all: true }, logs: { read: true, all: true }, @@ -707,7 +707,7 @@ describe('rule_form', () => { defaultActionGroupId: 'threshold.fired', minimumLicenseRequired: 'basic', recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { infrastructure: { read: true, all: true }, logs: { read: true, all: true }, @@ -766,7 +766,7 @@ describe('rule_form', () => { defaultActionGroupId: 'threshold.fired', minimumLicenseRequired: 'basic', recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { infrastructure: { read: true, all: true }, logs: { read: true, all: true }, @@ -825,7 +825,7 @@ describe('rule_form', () => { defaultActionGroupId: 'threshold.fired', minimumLicenseRequired: 'basic', recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { infrastructure: { read: true, all: true }, logs: { read: true, all: true }, @@ -943,7 +943,7 @@ describe('rule_form', () => { defaultActionGroupId: 'threshold.fired', minimumLicenseRequired: 'basic', recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { infrastructure: { read: true, all: true }, logs: { read: true, all: true }, @@ -1021,9 +1021,9 @@ describe('rule_form', () => { defaultActionGroupId: 'testActionGroup', minimumLicenseRequired: 'basic', recoveryActionGroup: RecoveredActionGroup, - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: true }, + [ALERTING_FEATURE_ID]: { read: true, all: true }, test: { read: true, all: true }, }, }, @@ -1041,7 +1041,7 @@ describe('rule_form', () => { recoveryActionGroup: RecoveredActionGroup, producer: 'test', authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: true }, + [ALERTING_FEATURE_ID]: { read: true, all: true }, test: { read: true, all: true }, }, }, @@ -1152,7 +1152,7 @@ describe('rule_form', () => { name: 'test', ruleTypeId: ruleType.id, params: {}, - consumer: ALERTS_FEATURE_ID, + consumer: ALERTING_FEATURE_ID, schedule: { interval: '1m', }, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx index 0f200410f7d54..83035607cb725 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx @@ -54,7 +54,7 @@ import { } from '@kbn/alerting-plugin/common/parse_duration'; import { RuleActionParam, - ALERTS_FEATURE_ID, + ALERTING_FEATURE_ID, RecoveredActionGroup, isActionGroupDisabledForActionTypeId, RuleActionAlertsFilterProperty, @@ -262,7 +262,7 @@ export const RuleForm = ({ }) ) .filter((item) => - rule.consumer === ALERTS_FEATURE_ID + rule.consumer === ALERTING_FEATURE_ID ? !item.ruleTypeModel.requiresAppContext : item.ruleType!.producer === rule.consumer ); @@ -438,7 +438,7 @@ export const RuleForm = ({ const authorizedConsumers = useMemo(() => { // If the app context provides a consumer, we assume that consumer is // is what we set for all rules that is created in that context - if (rule.consumer !== ALERTS_FEATURE_ID) { + if (rule.consumer !== ALERTING_FEATURE_ID) { return []; } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_notify_when.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_notify_when.test.tsx index f092475b18e08..f5f2509f570fd 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_notify_when.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_notify_when.test.tsx @@ -10,7 +10,7 @@ import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; import { ReactWrapper } from 'enzyme'; import { act } from 'react-dom/test-utils'; import { Rule } from '../../../types'; -import { ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; +import { ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; import { RuleNotifyWhen } from './rule_notify_when'; describe('rule_notify_when', () => { @@ -28,7 +28,7 @@ describe('rule_notify_when', () => { const initialRule = { name: 'test', params: {}, - consumer: ALERTS_FEATURE_ID, + consumer: ALERTING_FEATURE_ID, schedule: { interval: '1m', }, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx index b381035fbfc61..b1cdc5330401f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx @@ -36,7 +36,7 @@ import { useHistory } from 'react-router-dom'; import { RuleExecutionStatus, - ALERTS_FEATURE_ID, + ALERTING_FEATURE_ID, RuleExecutionStatusErrorReasons, RuleLastRunOutcomeValues, } from '@kbn/alerting-plugin/common'; @@ -999,7 +999,7 @@ export const RulesList = ({ {ruleFlyoutVisible && ( }> { setRuleFlyoutVisibility(false); }} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/test_helpers.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/test_helpers.ts index 545b7d7141a92..17ebb4c78b9f1 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/test_helpers.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/test_helpers.ts @@ -6,7 +6,7 @@ */ import { - ALERTS_FEATURE_ID, + ALERTING_FEATURE_ID, RuleExecutionStatusErrorReasons, RuleExecutionStatusWarningReasons, } from '@kbn/alerting-plugin/common'; @@ -262,11 +262,11 @@ export const ruleTypeFromApi = { recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, actionVariables: { context: [], state: [] }, defaultActionGroupId: 'default', - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, minimumLicenseRequired: 'basic', enabledInLicense: true, authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: true }, + [ALERTING_FEATURE_ID]: { read: true, all: true }, }, ruleTaskTimeout: '1m', }; @@ -278,11 +278,11 @@ export const getDisabledByLicenseRuleTypeFromApi = (authorized: boolean = true) recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, actionVariables: { context: [], state: [] }, defaultActionGroupId: 'default', - producer: ALERTS_FEATURE_ID, + producer: ALERTING_FEATURE_ID, minimumLicenseRequired: 'platinum', enabledInLicense: false, authorizedConsumers: { - [ALERTS_FEATURE_ID]: { read: true, all: authorized }, + [ALERTING_FEATURE_ID]: { read: true, all: authorized }, }, }); From 2011293891832a3861fffdac883652be6953d9b0 Mon Sep 17 00:00:00 2001 From: Alexi Doak <109488926+doakalexi@users.noreply.github.com> Date: Wed, 20 Mar 2024 12:16:37 -0700 Subject: [PATCH 08/90] [ResponseOps][Task manager] Enhance release claim failure message (#178462) Resolves https://github.com/elastic/kibana/issues/175987 ## Summary This PR fixes the release claim failure log message logging `[object Object]` that is the result of a 409 saved object conflict error shown below. Saved object error: ``` { type: 'type', id: 'id', error: { statusCode: 409, error: 'Conflict', message: 'Saved object [type/id] conflict', }, } ``` Log message: `[Task Runner] Task ... failed to release claim after failure: [object Object]` ### 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 ### To verify This error is hard to replicate locally, so I am sorry for the weird verification steps. 1. Run the telemetry test server ``` node scripts/functional_tests_server.js --config x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/telemetry/config.ts ``` 3. Make a change in the server code to trigger the test server to reload. I just added a comment to `x-pack/plugins/task_manager/server/task_running/task_runner.ts` 4. Search for the following log, and verify that the message does not include `[object Object]` ``` [ERROR][plugins.taskManager] [Task Runner] Task ML:saved-objects-sync-task failed to release claim after failure ``` --- .../task_manager/server/lib/result_type.ts | 3 +- .../server/task_running/task_runner.test.ts | 106 ++++++++++++++++++ .../server/task_running/task_runner.ts | 2 +- 3 files changed, 109 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/task_manager/server/lib/result_type.ts b/x-pack/plugins/task_manager/server/lib/result_type.ts index 07bad4d5b3f70..de3262617706c 100644 --- a/x-pack/plugins/task_manager/server/lib/result_type.ts +++ b/x-pack/plugins/task_manager/server/lib/result_type.ts @@ -52,7 +52,8 @@ export async function promiseResult(future: Promise): Promise { ); }); + test(`it logs an error when failing to increment a task's attempts when markTaskAsRunning fails and throws an error object`, async () => { + const id = _.random(1, 20).toString(); + const initialAttempts = _.random(1, 3); + const timeoutMinutes = 1; + const { runner, store, logger } = await pendingStageSetup({ + instance: { + id, + attempts: initialAttempts, + schedule: undefined, + }, + definitions: { + bar: { + title: 'Bar!', + timeout: `${timeoutMinutes}m`, + createTaskRunner: () => ({ + run: async () => undefined, + }), + }, + }, + }); + + store.update.mockRejectedValueOnce(SavedObjectsErrorHelpers.createBadRequestError('type')); + store.update.mockRejectedValueOnce({ + type: 'type', + id: 'id', + error: { + statusCode: 409, + error: 'Conflict', + message: 'Saved object [type/id] conflict', + }, + }); + + await expect(runner.markTaskAsRunning()).rejects.toMatchInlineSnapshot( + `[Error: type: Bad Request]` + ); + + const loggerCall = logger.error.mock.calls[0][0]; + expect(loggerCall as string).toMatchInlineSnapshot( + `"[Task Runner] Task ${id} failed to release claim after failure: Error: Saved object [type/id] conflict"` + ); + + expect(store.update).toHaveBeenCalledWith( + { + ...mockInstance({ + id, + attempts: initialAttempts + 1, + schedule: undefined, + }), + status: TaskStatus.Idle, + startedAt: null, + retryAt: null, + ownerId: null, + }, + { validate: false } + ); + }); + + test(`it logs an error when failing to increment a task's attempts when markTaskAsRunning fails`, async () => { + const id = _.random(1, 20).toString(); + const initialAttempts = _.random(1, 3); + const timeoutMinutes = 1; + const { runner, store, logger } = await pendingStageSetup({ + instance: { + id, + attempts: initialAttempts, + schedule: undefined, + }, + definitions: { + bar: { + title: 'Bar!', + timeout: `${timeoutMinutes}m`, + createTaskRunner: () => ({ + run: async () => undefined, + }), + }, + }, + }); + + store.update.mockRejectedValueOnce(SavedObjectsErrorHelpers.createBadRequestError('type')); + store.update.mockRejectedValueOnce(SavedObjectsErrorHelpers.createBadRequestError('type')); + + await expect(runner.markTaskAsRunning()).rejects.toMatchInlineSnapshot( + `[Error: type: Bad Request]` + ); + + const loggerCall = logger.error.mock.calls[0][0]; + expect(loggerCall as string).toMatchInlineSnapshot( + `"[Task Runner] Task ${id} failed to release claim after failure: Error: type: Bad Request"` + ); + + expect(store.update).toHaveBeenCalledWith( + { + ...mockInstance({ + id, + attempts: initialAttempts + 1, + schedule: undefined, + }), + status: TaskStatus.Idle, + startedAt: null, + retryAt: null, + ownerId: null, + }, + { validate: false } + ); + }); + test(`it doesnt try to increment a task's attempts when markTaskAsRunning fails for version conflict`, async () => { const id = _.random(1, 20).toString(); const initialAttempts = _.random(1, 3); diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.ts index 173b3587d5d0b..048174bcea89b 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.ts @@ -504,7 +504,7 @@ export class TaskManagerRunner implements TaskRunner { // try to release claim as an unknown failure prevented us from marking as running mapErr((errReleaseClaim: Error) => { this.logger.error( - `[Task Runner] Task ${this.id} failed to release claim after failure: ${errReleaseClaim}` + `[Task Runner] Task ${this.id} failed to release claim after failure: Error: ${errReleaseClaim.message}` ); }, await this.releaseClaimAndIncrementAttempts()); } From 9b403f10072bdea13023df18164934269b738dff Mon Sep 17 00:00:00 2001 From: Bena Kansara <69037875+benakansara@users.noreply.github.com> Date: Wed, 20 Mar 2024 20:21:25 +0100 Subject: [PATCH 09/90] [Custom threshold] [Alert details] Make alert source clickable (#178255) Resolves https://github.com/elastic/kibana/issues/174237 This PR adds source links in the Custom threshold alert details page for the fields documented [here](https://github.com/elastic/kibana/issues/174237#issuecomment-1984187200). The link also adds time range to apply to the source view which should allow to view data for the alert duration. ### Note We don't have locators available for `infra` app yet. Once they are ready (tracked in https://github.com/elastic/kibana/issues/178520#issuecomment-1995986063), the hard-coded links used in this PR should be replaced with locators. https://github.com/elastic/kibana/assets/69037875/58dd3d29-621c-43cc-b4c8-b4fc12192005 https://github.com/elastic/kibana/assets/69037875/b555b570-1604-4a03-820d-1c65f23349aa --------- Co-authored-by: Tiago Costa --- .../apm/public/locator/helpers.ts | 2 + .../custom_threshold_rule/get_apm_app_url.ts | 36 ++++ .../helpers/get_alert_source_links.test.ts | 186 ++++++++++++++++++ .../helpers/get_alert_source_links.ts | 117 +++++++++++ .../common/custom_threshold_rule/types.ts | 7 +- .../alert_details_app_section.test.tsx.snap | 4 +- .../alert_details_app_section.test.tsx | 44 ++++- .../alert_details_app_section.tsx | 59 +++++- .../alert_details_app_section/groups.tsx | 58 +++++- .../components/custom_threshold/types.ts | 5 - 10 files changed, 493 insertions(+), 25 deletions(-) create mode 100644 x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/get_apm_app_url.ts create mode 100644 x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/helpers/get_alert_source_links.test.ts create mode 100644 x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/helpers/get_alert_source_links.ts diff --git a/x-pack/plugins/observability_solution/apm/public/locator/helpers.ts b/x-pack/plugins/observability_solution/apm/public/locator/helpers.ts index 8cc727dfa11e8..61ac0b75c50fb 100644 --- a/x-pack/plugins/observability_solution/apm/public/locator/helpers.ts +++ b/x-pack/plugins/observability_solution/apm/public/locator/helpers.ts @@ -29,6 +29,7 @@ export const APMLocatorPayloadValidator = t.union([ metrics: null, logs: null, errors: null, + transactions: null, }), }), t.type({ @@ -90,6 +91,7 @@ export function getPathForServiceDetail( logs: '/services/{serviceName}/logs', metrics: '/services/{serviceName}/metrics', traces: '/services/{serviceName}/transactions', + transactions: '/services/{serviceName}/transactions/view', errors: '/services/{serviceName}/errors', default: '/services/{serviceName}/overview', } as const; diff --git a/x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/get_apm_app_url.ts b/x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/get_apm_app_url.ts new file mode 100644 index 0000000000000..bca653b3d2415 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/get_apm_app_url.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { LocatorPublic } from '@kbn/share-plugin/common'; +import { SerializableRecord } from '@kbn/utility-types'; + +export const APM_APP_LOCATOR_ID = 'APM_LOCATOR'; + +const getApmLocatorParams = (params: SerializableRecord) => { + return { + serviceName: params.serviceName, + serviceOverviewTab: params.serviceOverviewTab, + query: { + environment: params.environment, + transactionType: params.transactionType, + transactionName: params.transactionName, + rangeFrom: params.rangeFrom, + rangeTo: params.rangeTo, + }, + }; +}; + +export const getApmAppLocator = (baseLocator?: LocatorPublic) => { + if (!baseLocator) return; + + return { + ...baseLocator, + getRedirectUrl: (params: SerializableRecord) => + baseLocator.getRedirectUrl(getApmLocatorParams(params)), + navigate: (params: SerializableRecord) => baseLocator.navigate(getApmLocatorParams(params)), + }; +}; diff --git a/x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/helpers/get_alert_source_links.test.ts b/x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/helpers/get_alert_source_links.test.ts new file mode 100644 index 0000000000000..86e2ddf594904 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/helpers/get_alert_source_links.test.ts @@ -0,0 +1,186 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { LocatorPublic } from '@kbn/share-plugin/common'; +import { SerializableRecord } from '@kbn/utility-types'; +import { generateSourceLink } from './get_alert_source_links'; + +describe('getAlertSourceLinks', () => { + const apmLocator = { + getRedirectUrl: jest.fn(), + } as unknown as LocatorPublic; + + const prepend = (url: string) => `kibana${url}`; + + const timeRange = { + from: '2023-12-07T16:00:15.403Z', + to: '2023-12-07T21:00:15.403Z', + }; + + const serviceName = 'test-service'; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('Should generate correct link for host.name', () => { + const link = generateSourceLink({ field: 'host.name', value: 'host-0' }, timeRange, prepend); + expect(link).toBe( + `kibana/app/metrics/detail/host/host-0?assetDetails=(dateRange:(from:'2023-12-07T16:00:15.403Z',to:'2023-12-07T21:00:15.403Z'))` + ); + }); + + it('Should generate correct link for container.id', () => { + const link = generateSourceLink( + { field: 'container.id', value: 'container-0' }, + timeRange, + prepend + ); + expect(link).toBe( + `kibana/app/metrics/detail/container/container-0?_a=(time:(from:'2023-12-07T16:00:15.403Z',to:'2023-12-07T21:00:15.403Z',interval:>=1m))` + ); + }); + + it('Should generate correct link for kubernetes.pod.id', () => { + const link = generateSourceLink( + { field: 'kubernetes.pod.id', value: 'pod-0' }, + timeRange, + prepend + ); + expect(link).toBe( + `kibana/app/metrics/detail/pod/pod-0?_a=(time:(from:'2023-12-07T16:00:15.403Z',to:'2023-12-07T21:00:15.403Z',interval:>=1m))` + ); + }); + + it('Should generate correct link for cloud.instance.id', () => { + const link = generateSourceLink( + { field: 'cloud.instance.id', value: 'cloud-instance-0' }, + timeRange, + prepend + ); + expect(link).toBe( + `kibana/app/metrics/detail/awsEC2/cloud-instance-0?_a=(time:(from:'2023-12-07T16:00:15.403Z',to:'2023-12-07T21:00:15.403Z',interval:>=1m))` + ); + }); + + it('Should generate correct link for aws.s3.instance.id', () => { + const link = generateSourceLink( + { field: 'aws.s3.instance.id', value: 'aws-s3-instance-0' }, + timeRange, + prepend + ); + expect(link).toBe( + `kibana/app/metrics/detail/awsS3/aws-s3-instance-0?_a=(time:(from:'2023-12-07T16:00:15.403Z',to:'2023-12-07T21:00:15.403Z',interval:>=1m))` + ); + }); + + it('Should generate correct link for aws.rds.instance.id', () => { + const link = generateSourceLink( + { field: 'aws.rds.instance.id', value: 'aws-rds-instance-0' }, + timeRange, + prepend + ); + expect(link).toBe( + `kibana/app/metrics/detail/awsRDS/aws-rds-instance-0?_a=(time:(from:'2023-12-07T16:00:15.403Z',to:'2023-12-07T21:00:15.403Z',interval:>=1m))` + ); + }); + + it('Should generate correct link for aws.sqs.instance.id', () => { + const link = generateSourceLink( + { field: 'aws.sqs.instance.id', value: 'aws-sqs-instance-0' }, + timeRange, + prepend + ); + expect(link).toBe( + `kibana/app/metrics/detail/awsSQS/aws-sqs-instance-0?_a=(time:(from:'2023-12-07T16:00:15.403Z',to:'2023-12-07T21:00:15.403Z',interval:>=1m))` + ); + }); + + it('Should generate correct link for service.name', () => { + generateSourceLink( + { field: 'service.name', value: 'test-service' }, + timeRange, + prepend, + serviceName, + apmLocator + ); + expect(apmLocator.getRedirectUrl).toHaveBeenCalledWith({ + query: { + environment: 'ENVIRONMENT_ALL', + rangeFrom: '2023-12-07T16:00:15.403Z', + rangeTo: '2023-12-07T21:00:15.403Z', + transactionName: undefined, + transactionType: undefined, + }, + serviceName: 'test-service', + serviceOverviewTab: undefined, + }); + }); + + it('Should generate correct link for service.environment', () => { + generateSourceLink( + { field: 'service.environment', value: 'test-env' }, + timeRange, + prepend, + serviceName, + apmLocator + ); + expect(apmLocator.getRedirectUrl).toHaveBeenCalledWith({ + query: { + environment: 'test-env', + rangeFrom: '2023-12-07T16:00:15.403Z', + rangeTo: '2023-12-07T21:00:15.403Z', + transactionName: undefined, + transactionType: undefined, + }, + serviceName: 'test-service', + serviceOverviewTab: undefined, + }); + }); + + it('Should generate correct link for transaction.type', () => { + generateSourceLink( + { field: 'transaction.type', value: 'test-request' }, + timeRange, + prepend, + serviceName, + apmLocator + ); + expect(apmLocator.getRedirectUrl).toHaveBeenCalledWith({ + query: { + environment: 'ENVIRONMENT_ALL', + rangeFrom: '2023-12-07T16:00:15.403Z', + rangeTo: '2023-12-07T21:00:15.403Z', + transactionName: undefined, + transactionType: 'test-request', + }, + serviceName: 'test-service', + serviceOverviewTab: undefined, + }); + }); + + it('Should generate correct link for transaction.name', () => { + generateSourceLink( + { field: 'transaction.name', value: 'test-transaction' }, + timeRange, + prepend, + serviceName, + apmLocator + ); + expect(apmLocator.getRedirectUrl).toHaveBeenCalledWith({ + query: { + environment: 'ENVIRONMENT_ALL', + rangeFrom: '2023-12-07T16:00:15.403Z', + rangeTo: '2023-12-07T21:00:15.403Z', + transactionName: 'test-transaction', + transactionType: undefined, + }, + serviceName: 'test-service', + serviceOverviewTab: 'transactions', + }); + }); +}); diff --git a/x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/helpers/get_alert_source_links.ts b/x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/helpers/get_alert_source_links.ts new file mode 100644 index 0000000000000..ef30e6394ccb2 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/helpers/get_alert_source_links.ts @@ -0,0 +1,117 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + SERVICE_ENVIRONMENT, + SERVICE_NAME, + TRANSACTION_NAME, + TRANSACTION_TYPE, +} from '@kbn/observability-shared-plugin/common'; +import { LocatorPublic } from '@kbn/share-plugin/common'; +import { SerializableRecord } from '@kbn/utility-types'; +import { getApmAppLocator } from '../get_apm_app_url'; +import { Group, TimeRange } from '../types'; + +const HOST_NAME = 'host.name'; +const CONTAINER_ID = 'container.id'; +const KUBERNETES_POD_ID = 'kubernetes.pod.id'; +const AWS_EC2_INSTANCE = 'cloud.instance.id'; +const AWS_S3_BUCKET = 'aws.s3.instance.id'; +const AWS_RDS_DATABASES = 'aws.rds.instance.id'; +const AWS_SQS_QUEUE = 'aws.sqs.instance.id'; + +const METRICS_DETAILS_PATH = '/app/metrics/detail'; + +const infraSources = [ + HOST_NAME, + CONTAINER_ID, + KUBERNETES_POD_ID, + AWS_EC2_INSTANCE, + AWS_S3_BUCKET, + AWS_RDS_DATABASES, + AWS_SQS_QUEUE, +]; + +const apmSources = [SERVICE_NAME, SERVICE_ENVIRONMENT, TRANSACTION_TYPE, TRANSACTION_NAME]; + +const infraSourceLinks: Record = { + [HOST_NAME]: `${METRICS_DETAILS_PATH}/host`, + [CONTAINER_ID]: `${METRICS_DETAILS_PATH}/container`, + [KUBERNETES_POD_ID]: `${METRICS_DETAILS_PATH}/pod`, + [AWS_EC2_INSTANCE]: `${METRICS_DETAILS_PATH}/awsEC2`, + [AWS_S3_BUCKET]: `${METRICS_DETAILS_PATH}/awsS3`, + [AWS_RDS_DATABASES]: `${METRICS_DETAILS_PATH}/awsRDS`, + [AWS_SQS_QUEUE]: `${METRICS_DETAILS_PATH}/awsSQS`, +}; + +const generateInfraSourceLink = ( + { field, value }: Group, + hostTimeRange: string, + infraTimeRange: string +) => { + const link = + field === HOST_NAME + ? `${infraSourceLinks[field]}/${value}?${hostTimeRange}` + : `${infraSourceLinks[field]}/${value}?${infraTimeRange}`; + + return link; +}; + +const generateApmSourceLink = ( + { field, value }: Group, + timeRange: TimeRange, + serviceName?: string, + baseLocator?: LocatorPublic +) => { + if (!serviceName) { + return undefined; + } + + let apmLocatorPayload: SerializableRecord = { + serviceName, + environment: 'ENVIRONMENT_ALL', + rangeFrom: timeRange.from, + rangeTo: timeRange.to, + }; + + if (field === TRANSACTION_NAME) { + apmLocatorPayload = { + ...apmLocatorPayload, + serviceOverviewTab: 'transactions', + transactionName: value, + }; + } else if (field === TRANSACTION_TYPE) { + apmLocatorPayload = { + ...apmLocatorPayload, + transactionType: value, + }; + } else if (field === SERVICE_ENVIRONMENT) { + apmLocatorPayload = { + ...apmLocatorPayload, + environment: value, + }; + } + + const apmAppLocator = getApmAppLocator(baseLocator); + return apmAppLocator?.getRedirectUrl(apmLocatorPayload); +}; + +export const generateSourceLink = ( + { field, value }: Group, + timeRange: TimeRange, + prepend?: (url: string) => string, + serviceName?: string, + baseLocator?: LocatorPublic +) => { + if (infraSources.includes(field)) { + const hostTimeRange = `assetDetails=(dateRange:(from:'${timeRange.from}',to:'${timeRange.to}'))`; + const infraTimeRange = `_a=(time:(from:'${timeRange.from}',to:'${timeRange.to}',interval:>=1m))`; + return prepend?.(generateInfraSourceLink({ field, value }, hostTimeRange, infraTimeRange)); + } else if (apmSources.includes(field)) { + return generateApmSourceLink({ field, value }, timeRange, serviceName, baseLocator); + } +}; diff --git a/x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/types.ts b/x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/types.ts index 73a3e1959169e..78221a307e989 100644 --- a/x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/types.ts +++ b/x-pack/plugins/observability_solution/observability/common/custom_threshold_rule/types.ts @@ -116,6 +116,11 @@ export interface Group { value: string; } +export interface TimeRange { + from?: string; + to?: string; +} + export interface SearchConfigurationType { index: SerializedSearchSourceFields; query: { @@ -138,7 +143,7 @@ export interface SearchConfigurationWithExtractedReferenceType { // Custom threshold alert types // Alert fields['kibana.alert.group] type -export type GroupBy = Array<{ field: string; value: string }>; +export type GroupBy = Group[]; /* * Utils diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/__snapshots__/alert_details_app_section.test.tsx.snap b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/__snapshots__/alert_details_app_section.test.tsx.snap index 24a7545443fda..efa0222912f4f 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/__snapshots__/alert_details_app_section.test.tsx.snap +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/__snapshots__/alert_details_app_section.test.tsx.snap @@ -66,8 +66,8 @@ Array [ }, }, "timeRange": Object { - "from": "2023-03-28T10:43:13.802Z", - "to": "2023-03-29T13:14:09.581Z", + "from": "now-15m", + "to": "now", }, }, Object {}, diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx index fe61d56cfb9bd..95a9ec179f0ef 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx @@ -64,6 +64,15 @@ jest.mock('../../../../utils/kibana_react', () => ({ data: { search: jest.fn(), }, + share: { + url: { + locators: { + get: jest + .fn() + .mockReturnValue({ getRedirectUrl: jest.fn().mockReturnValue('/view-in-app-url') }), + }, + }, + }, }, }), })); @@ -105,19 +114,34 @@ describe('AlertDetailsAppSection', () => { it('should render alert summary fields', async () => { renderComponent(); - expect(mockedSetAlertSummaryFields).toBeCalledTimes(1); + expect(mockedSetAlertSummaryFields).toBeCalledTimes(2); expect(mockedSetAlertSummaryFields).toBeCalledWith([ { label: 'Source', value: ( - + + + + + View related logs + + + ), }, { @@ -139,7 +163,7 @@ describe('AlertDetailsAppSection', () => { const alertFields = { tags: [], 'kibana.alert.group': undefined }; renderComponent({}, alertFields); - expect(mockedSetAlertSummaryFields).toBeCalledTimes(1); + expect(mockedSetAlertSummaryFields).toBeCalledTimes(2); expect(mockedSetAlertSummaryFields).toBeCalledWith([ { label: 'Rule', diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx index 764a634caafbf..2797cd0e25daf 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx @@ -37,6 +37,8 @@ import type { RangeEventAnnotationConfig, } from '@kbn/event-annotation-common'; import moment from 'moment'; +import { LOGS_EXPLORER_LOCATOR_ID, LogsExplorerLocatorParams } from '@kbn/deeplinks-observability'; +import { TimeRange } from '@kbn/es-query'; import { AlertHistoryChart } from './alert_history'; import { useLicense } from '../../../../hooks/use_license'; import { useKibana } from '../../../../utils/kibana_react'; @@ -51,6 +53,8 @@ import { LogRateAnalysis } from './log_rate_analysis'; import { Groups } from './groups'; import { Tags } from './tags'; import { RuleConditionChart } from '../rule_condition_chart/rule_condition_chart'; +import { getViewInAppUrl } from '../../../../../common/custom_threshold_rule/get_view_in_app_url'; +import { SearchConfigurationWithExtractedReferenceType } from '../../../../../common/custom_threshold_rule/types'; interface AppSectionProps { alert: CustomThresholdAlert; @@ -105,19 +109,26 @@ export default function AlertDetailsAppSection({ setAlertSummaryFields, }: AppSectionProps) { const services = useKibana().services; - const { charts, data } = services; + const { + charts, + data, + share: { + url: { locators }, + }, + } = services; const { hasAtLeast } = useLicense(); const { euiTheme } = useEuiTheme(); const hasLogRateAnalysisLicense = hasAtLeast('platinum'); const [dataView, setDataView] = useState(); const [, setDataViewError] = useState(); + const [viewInAppUrl, setViewInAppUrl] = useState(); + const [timeRange, setTimeRange] = useState({ from: 'now-15m', to: 'now' }); const ruleParams = rule.params as RuleTypeParams & AlertParams; const chartProps = { baseTheme: charts.theme.useChartsBaseTheme(), }; const alertStart = alert.fields[ALERT_START]; const alertEnd = alert.fields[ALERT_END]; - const timeRange = getPaddedAlertTimeRange(alertStart!, alertEnd); const groups = alert.fields[ALERT_GROUP]; const tags = alert.fields[TAGS]; @@ -154,6 +165,25 @@ export default function AlertDetailsAppSection({ const annotations: EventAnnotationConfig[] = []; annotations.push(alertStartAnnotation, alertRangeAnnotation); + useEffect(() => { + setTimeRange(getPaddedAlertTimeRange(alertStart!, alertEnd)); + }, [alertStart, alertEnd]); + + useEffect(() => { + const appUrl = getViewInAppUrl({ + dataViewId: dataView?.id, + groups, + logsExplorerLocator: locators.get(LOGS_EXPLORER_LOCATOR_ID), + metrics: ruleParams.criteria[0]?.metrics, + searchConfiguration: + ruleParams.searchConfiguration as SearchConfigurationWithExtractedReferenceType, + startedAt: alertStart, + endedAt: alertEnd, + }); + + setViewInAppUrl(appUrl); + }, [dataView, alertStart, alertEnd, groups, ruleParams, locators]); + useEffect(() => { const alertSummaryFields = []; if (groups) { @@ -164,7 +194,28 @@ export default function AlertDetailsAppSection({ defaultMessage: 'Source', } ), - value: , + value: ( + <> + + + + {i18n.translate( + 'xpack.observability.alertDetailsAppSection.a.viewRelatedLogsLabel', + { + defaultMessage: 'View related logs', + } + )} + + + + ), }); } if (tags && tags.length > 0) { @@ -193,7 +244,7 @@ export default function AlertDetailsAppSection({ }); setAlertSummaryFields(alertSummaryFields); - }, [groups, tags, rule, ruleLink, setAlertSummaryFields]); + }, [groups, tags, rule, ruleLink, setAlertSummaryFields, timeRange, alertEnd, viewInAppUrl]); useEffect(() => { const initDataView = async () => { diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/groups.tsx b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/groups.tsx index c68fa2a391448..b818fb737c2ee 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/groups.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/groups.tsx @@ -5,16 +5,68 @@ * 2.0. */ -import React from 'react'; +import { EuiLink } from '@elastic/eui'; +import React, { useEffect, useState } from 'react'; +import { SERVICE_NAME } from '@kbn/observability-shared-plugin/common'; +import { useKibana } from '../../../../utils/kibana_react'; +import { TimeRange, Group } from '../../../../../common/custom_threshold_rule/types'; +import { generateSourceLink } from '../../../../../common/custom_threshold_rule/helpers/get_alert_source_links'; +import { APM_APP_LOCATOR_ID } from '../../../../../common/custom_threshold_rule/get_apm_app_url'; + +export function Groups({ groups, timeRange }: { groups: Group[]; timeRange: TimeRange }) { + const { + http: { + basePath: { prepend }, + }, + share: { + url: { locators }, + }, + } = useKibana().services; + + const [sourceLinks, setSourceLinks] = useState>({}); + + const serviceName = groups.find((group) => group.field === SERVICE_NAME)?.value; + + useEffect(() => { + if (!groups) return; + + let links: Record = {}; + + groups.map((group) => { + const link = generateSourceLink( + group, + timeRange, + prepend, + serviceName, + locators.get(APM_APP_LOCATOR_ID) + ); + links = { + ...links, + [group.field]: link, + }; + }); + + setSourceLinks(links); + }, [groups, locators, prepend, serviceName, timeRange]); -export function Groups({ groups }: { groups: Array<{ field: string; value: string }> }) { return ( <> {groups && groups.map((group) => { return ( - {group.field}: {group.value} + {group.field}:{' '} + {sourceLinks[group.field] ? ( + + {group.value} + + ) : ( + {group.value} + )}
); diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/types.ts b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/types.ts index e748637bb380d..0c345cf0a9720 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/types.ts +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/types.ts @@ -49,11 +49,6 @@ export type MetricExpression = Omit Date: Wed, 20 Mar 2024 20:28:41 +0100 Subject: [PATCH 10/90] [Security Solution][Investigations] Fixes `notes tab` test in MKI (#179059) ## Summary The tests that were using the `author` in assertions for the notes tab tests in timeline, are failing in MKI This is because we are hardcoding the username as `system_indices_superuser`, but that one, does not exist on MKI projects. In this PR we are fixing the issue. --------- Co-authored-by: Michael Olorunnisola --- .../cypress/e2e/investigations/timelines/notes_tab.cy.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/notes_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/notes_tab.cy.ts index 7c75ce663840a..dd7c775a32118 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/notes_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/notes_tab.cy.ts @@ -26,7 +26,7 @@ import { addNotesToTimeline, goToNotesTab } from '../../../tasks/timeline'; import { deleteTimelines } from '../../../tasks/api_calls/common'; -const text = 'system_indices_superuser'; +const author = Cypress.env('ELASTICSEARCH_USERNAME'); const link = 'https://www.elastic.co/'; describe('Timeline notes tab', { tags: ['@ess', '@serverless'] }, () => { @@ -69,12 +69,12 @@ describe('Timeline notes tab', { tags: ['@ess', '@serverless'] }, () => { it('should render the right author', () => { addNotesToTimeline(getTimelineNonValidQuery().notes); - cy.get(NOTES_AUTHOR).first().should('have.text', text); + cy.get(NOTES_AUTHOR).first().should('have.text', author); }); it('should be able to render a link', () => { - addNotesToTimeline(`[${text}](${link})`); - cy.get(NOTES_LINK).last().should('have.text', `${text}(opens in a new tab or window)`); + addNotesToTimeline(`[${author}](${link})`); + cy.get(NOTES_LINK).last().should('have.text', `${author}(opens in a new tab or window)`); cy.get(NOTES_LINK).last().click(); }); From 0bc830ea29c3abb87f66e11eaa9f471c4bb88826 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 20 Mar 2024 14:45:05 -0700 Subject: [PATCH 11/90] [DOCS] Add alert.consecutiveMatches and rule.url action variables (#179018) --- docs/user/alerting/action-variables.asciidoc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/user/alerting/action-variables.asciidoc b/docs/user/alerting/action-variables.asciidoc index 6fe275547004c..7dbcb2a49e400 100644 --- a/docs/user/alerting/action-variables.asciidoc +++ b/docs/user/alerting/action-variables.asciidoc @@ -39,6 +39,7 @@ All rule types pass the following variables: `rule.params`:: The rule parameters, which vary by rule type. `rule.spaceId`:: The space identifier for the rule. `rule.tags`:: The list of tags applied to the rule. +`rule.url`:: The URL for the rule that generated the alert. This will be an empty string if the `server.publicBaseUrl` setting is not configured. [float] [role="child_attributes"] @@ -107,6 +108,7 @@ If the rule's action frequency is not a summary of alerts, it passes the followi `alert.actionGroup`:: The ID of the action group of the alert that scheduled the action. `alert.actionGroupName`:: The name of the action group of the alert that scheduled the action. `alert.actionSubgroup`:: The action subgroup of the alert that scheduled the action. +`alert.consecutiveMatches`:: The number of consecutive runs that meet the rule conditions. `alert.flapping`:: A flag on the alert that indicates whether the alert status is changing repeatedly. `alert.id`:: The ID of the alert that scheduled the action. `alert.uuid`:: A universally unique identifier for the alert. While the alert is active, the UUID value remains unchanged each time the rule runs. preview:[] From fb3b66256e93e116e61687565c5b262ad57c8a88 Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Wed, 20 Mar 2024 19:30:38 -0400 Subject: [PATCH 12/90] [Response Ops][Actions] Allow executing actions directly via `UnsecuredActionsClient` (#178682) ## Summary Adds unsecured version of direct action execution that is exposed via the `unsecuredActionsClient` on the actions plugin start contract. This version doesn't expect any user request and doesn't check RBAC. Saved objects are accessed via the internal saved objects repository (instead of a saved objects client scoped to the request) and the connector token client uses an ES client that uses the internal user (instead of scoped to the request). Similar to the `bulkExecutionEnqueuer`, this function expects a `requesterId` which is checked against an allow-list. For this PR we added a `background_task` requester since we expect this to be used by background tasks. If the `relatedSavedObjects` array is provided, we inject `BACKGROUND_TASK` source data that will be persisted in the event log doc for this execution that aids in traceability and debugging. ## To Verify 1. Run this PR and create a connector via the UI or API. (I created a Slack API connector). Grab the ID of this connector. 2. In `x-pack/plugins/alerting/server/plugin.ts` in the start function, add the following: ``` const unsecuredActionsClient = plugins.actions.getUnsecuredActionsClient(); unsecuredActionsClient.execute({ requesterId: 'background_task', id: , spaceId: 'default', // params format depends on what connector type you created params: { subAction: 'postMessage, subActionParams: { channelIds: [], text: 'yoyoyo' } }, relatedSavedObjects: [{ type: 'task', // this should be the ID of the task instance calling the execute function id: 'abc', // this should be the task type of the task instance calling the execute function typeId: 'taskType' }] }); ``` 3. Restart Kibana and verify that the action was executed and an event log doc was indexed. --- .../create_unsecured_execute_function.test.ts | 4 +- .../create_unsecured_execute_function.ts | 6 +- .../server/lib/action_execution_source.ts | 21 + .../server/lib/action_executor.mock.ts | 2 +- .../server/lib/action_executor.test.ts | 2872 +++++++---------- .../actions/server/lib/action_executor.ts | 448 ++- x-pack/plugins/actions/server/lib/index.ts | 1 + .../server/lib/task_runner_factory.test.ts | 33 +- x-pack/plugins/actions/server/mocks.ts | 21 +- x-pack/plugins/actions/server/plugin.ts | 32 + x-pack/plugins/actions/server/types.ts | 14 +- .../unsecured_actions_client.mock.ts | 1 + .../unsecured_actions_client.test.ts | 146 +- .../unsecured_actions_client.ts | 103 +- .../server/unsecured_actions_simulation.ts | 47 + .../actions/connector_types/stack/webhook.ts | 62 +- .../tests/actions/execute_unsecured_action.ts | 329 ++ .../spaces_only/tests/actions/index.ts | 1 + .../actions/schedule_unsecured_action.ts | 7 +- 19 files changed, 2209 insertions(+), 1941 deletions(-) create mode 100644 x-pack/test/alerting_api_integration/spaces_only/tests/actions/execute_unsecured_action.ts diff --git a/x-pack/plugins/actions/server/create_unsecured_execute_function.test.ts b/x-pack/plugins/actions/server/create_unsecured_execute_function.test.ts index bce0647389396..aec25f34473cf 100644 --- a/x-pack/plugins/actions/server/create_unsecured_execute_function.test.ts +++ b/x-pack/plugins/actions/server/create_unsecured_execute_function.test.ts @@ -529,7 +529,7 @@ describe('bulkExecute()', () => { }, { id: '456', - actionTypeId: 'not-in-allowlist', + actionTypeId: '.index', config: {}, isPreconfigured: true, isDeprecated: false, @@ -554,7 +554,7 @@ describe('bulkExecute()', () => { }, ]) ).rejects.toThrowErrorMatchingInlineSnapshot( - `"not-in-allowlist actions cannot be scheduled for unsecured actions execution"` + `".index actions cannot be scheduled for unsecured actions execution"` ); } ); diff --git a/x-pack/plugins/actions/server/create_unsecured_execute_function.ts b/x-pack/plugins/actions/server/create_unsecured_execute_function.ts index a64a2494e5077..c37ca980867dd 100644 --- a/x-pack/plugins/actions/server/create_unsecured_execute_function.ts +++ b/x-pack/plugins/actions/server/create_unsecured_execute_function.ts @@ -10,6 +10,7 @@ import { TaskManagerStartContract } from '@kbn/task-manager-plugin/server'; import { ActionTypeRegistryContract as ConnectorTypeRegistryContract, InMemoryConnector, + UNALLOWED_FOR_UNSECURE_EXECUTION_CONNECTOR_TYPE_IDS, } from './types'; import { ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE } from './constants/saved_objects'; import { ExecuteOptions as ActionExecutorOptions } from './lib/action_executor'; @@ -18,9 +19,6 @@ import { ExecutionResponseItem, ExecutionResponseType } from './create_execute_f import { ActionsConfigurationUtilities } from './actions_config'; import { hasReachedTheQueuedActionsLimit } from './lib/has_reached_queued_actions_limit'; -// This allowlist should only contain connector types that don't require API keys for -// execution. -const ALLOWED_CONNECTOR_TYPE_IDS = ['.email']; interface CreateBulkUnsecuredExecuteFunctionOptions { taskManager: TaskManagerStartContract; connectorTypeRegistry: ConnectorTypeRegistryContract; @@ -98,7 +96,7 @@ export function createBulkUnsecuredExecutionEnqueuerFunction({ connectorTypeRegistry.ensureActionTypeEnabled(actionTypeId); } - if (!ALLOWED_CONNECTOR_TYPE_IDS.includes(actionTypeId)) { + if (UNALLOWED_FOR_UNSECURE_EXECUTION_CONNECTOR_TYPE_IDS.includes(actionTypeId)) { throw new Error( `${actionTypeId} actions cannot be scheduled for unsecured actions execution` ); diff --git a/x-pack/plugins/actions/server/lib/action_execution_source.ts b/x-pack/plugins/actions/server/lib/action_execution_source.ts index 9701b759f981e..6df716ad19c54 100644 --- a/x-pack/plugins/actions/server/lib/action_execution_source.ts +++ b/x-pack/plugins/actions/server/lib/action_execution_source.ts @@ -11,6 +11,7 @@ export enum ActionExecutionSourceType { SAVED_OBJECT = 'SAVED_OBJECT', HTTP_REQUEST = 'HTTP_REQUEST', NOTIFICATION = 'NOTIFICATION', + BACKGROUND_TASK = 'BACKGROUND_TASK', } export interface ActionExecutionSource { @@ -20,6 +21,11 @@ export interface ActionExecutionSource { export type HttpRequestExecutionSource = ActionExecutionSource; export type SavedObjectExecutionSource = ActionExecutionSource>; +export interface BackgroundTaskSource { + taskId: string; + taskType: string; +} +export type BackgroundTaskExecutionSource = ActionExecutionSource; export interface NotificationSource { requesterId: string; connectorId: string; @@ -58,6 +64,15 @@ export function asNotificationExecutionSource( }; } +export function asBackgroundTaskExecutionSource( + source: BackgroundTaskSource +): BackgroundTaskExecutionSource { + return { + type: ActionExecutionSourceType.BACKGROUND_TASK, + source, + }; +} + export function isHttpRequestExecutionSource( executionSource?: ActionExecutionSource ): executionSource is HttpRequestExecutionSource { @@ -75,3 +90,9 @@ export function isNotificationExecutionSource( ): executionSource is NotificationExecutionSource { return executionSource?.type === ActionExecutionSourceType.NOTIFICATION; } + +export function isBackgroundTaskExecutionSource( + executionSource?: ActionExecutionSource +): executionSource is BackgroundTaskExecutionSource { + return executionSource?.type === ActionExecutionSourceType.BACKGROUND_TASK; +} diff --git a/x-pack/plugins/actions/server/lib/action_executor.mock.ts b/x-pack/plugins/actions/server/lib/action_executor.mock.ts index 50a721d9dadc4..4d11535d655a6 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.mock.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.mock.ts @@ -11,8 +11,8 @@ const createActionExecutorMock = () => { const mocked: jest.Mocked = { initialize: jest.fn(), execute: jest.fn().mockResolvedValue({ status: 'ok', actionId: '' }), + executeUnsecured: jest.fn().mockResolvedValue({ status: 'ok', actionId: '' }), logCancellation: jest.fn(), - getActionInfoInternal: jest.fn(), }; return mocked; }; diff --git a/x-pack/plugins/actions/server/lib/action_executor.test.ts b/x-pack/plugins/actions/server/lib/action_executor.test.ts index 6b59c14630ba1..703a431393048 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.test.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { KibanaRequest, SavedObjectsErrorHelpers } from '@kbn/core/server'; +import { KibanaRequest } from '@kbn/core/server'; import { schema } from '@kbn/config-schema'; import { ActionExecutor } from './action_executor'; import { actionTypeRegistryMock } from '../action_type_registry.mock'; @@ -13,9 +13,10 @@ import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/s import { httpServerMock, loggingSystemMock } from '@kbn/core/server/mocks'; import { eventLoggerMock } from '@kbn/event-log-plugin/server/mocks'; import { spacesServiceMock } from '@kbn/spaces-plugin/server/spaces_service/spaces_service.mock'; -import { ActionType } from '../types'; +import { ActionType as ConnectorType } from '../types'; import { actionsAuthorizationMock, actionsMock } from '../mocks'; import { + asBackgroundTaskExecutionSource, asHttpRequestExecutionSource, asSavedObjectExecutionSource, } from './action_execution_source'; @@ -28,19 +29,29 @@ import { getErrorSource } from '@kbn/task-manager-plugin/server/task_running'; const actionExecutor = new ActionExecutor({ isESOCanEncrypt: true }); const services = actionsMock.createServices(); +const unsecuredServices = actionsMock.createUnsecuredServices(); const encryptedSavedObjectsClient = encryptedSavedObjectsMock.createClient(); -const actionTypeRegistry = actionTypeRegistryMock.create(); +const connectorTypeRegistry = actionTypeRegistryMock.create(); const eventLogger = eventLoggerMock.create(); +const CONNECTOR_ID = '1'; +const ACTION_EXECUTION_ID = '2'; +const ACTION_PARAMS = { foo: true }; + +const executeUnsecuredParams = { + actionExecutionId: ACTION_EXECUTION_ID, + actionId: CONNECTOR_ID, + params: ACTION_PARAMS, + spaceId: 'some-namespace', +}; + const executeParams = { - actionId: '1', - params: { - foo: true, - }, + actionExecutionId: ACTION_EXECUTION_ID, + actionId: CONNECTOR_ID, + params: ACTION_PARAMS, executionId: '123abc', request: {} as KibanaRequest, - actionExecutionId: '2', }; const spacesMock = spacesServiceMock.createStartContract(); @@ -51,12 +62,13 @@ const securityMockStart = securityMock.createStart(); const authorizationMock = actionsAuthorizationMock.create(); const getActionsAuthorizationWithRequest = jest.fn(); -actionExecutor.initialize({ +const actionExecutorInitializationParams = { logger: loggerMock, spaces: spacesMock, security: securityMockStart, getServices: () => services, - actionTypeRegistry, + getUnsecuredServices: () => unsecuredServices, + actionTypeRegistry: connectorTypeRegistry, encryptedSavedObjectsClient, eventLogger, getActionsAuthorizationWithRequest, @@ -78,1733 +90,1217 @@ actionExecutor.initialize({ { actionTypeId: '.cases', config: {}, - id: 'system-connector-.cases', - name: 'System action: .cases', - secrets: {}, - isPreconfigured: false, - isDeprecated: false, - isSystemAction: true, - }, - ], -}); - -beforeEach(() => { - jest.resetAllMocks(); - spacesMock.getSpaceId.mockReturnValue('some-namespace'); - loggerMock.get.mockImplementation(() => loggerMock); - const mockRealm = { name: 'default_native', type: 'native' }; - securityMockStart.authc.getCurrentUser.mockImplementation(() => ({ - authentication_realm: mockRealm, - authentication_provider: mockRealm, - authentication_type: 'realm', - lookup_realm: mockRealm, - elastic_cloud_user: true, - enabled: true, - profile_uid: '123', - roles: ['superuser'], - username: 'coolguy', - })); - - getActionsAuthorizationWithRequest.mockReturnValue(authorizationMock); -}); - -test('successfully executes', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - config: { schema: schema.object({ bar: schema.boolean() }) }, - secrets: { schema: schema.object({ baz: schema.boolean() }) }, - params: { schema: schema.object({ foo: schema.boolean() }) }, - }, - executor: jest.fn(), - }; - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: 'test', - config: { - bar: true, - }, - secrets: { - baz: true, - }, - isMissingSecrets: false, - }, - references: [], - }; - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - await actionExecutor.execute(executeParams); - - expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).toHaveBeenCalledWith( - 'action', - '1', - { namespace: 'some-namespace' } - ); - - expect(actionTypeRegistry.get).toHaveBeenCalledWith('test'); - expect(actionTypeRegistry.isActionExecutable).toHaveBeenCalledWith('1', 'test', { - notifyUsage: true, - }); - - expect(actionType.executor).toHaveBeenCalledWith({ - actionId: '1', - services: expect.anything(), - config: { - bar: true, - }, - secrets: { - baz: true, - }, - params: { foo: true }, - logger: loggerMock, - }); - - expect(loggerMock.debug).toBeCalledWith('executing action test:1: 1'); - expect(eventLogger.logEvent.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Object { - "event": Object { - "action": "execute-start", - "kind": "action", - }, - "kibana": Object { - "action": Object { - "execution": Object { - "uuid": "2", - }, - "id": "1", - "name": "1", - }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, - }, - }, - "saved_objects": Array [ - Object { - "id": "1", - "namespace": "some-namespace", - "rel": "primary", - "type": "action", - "type_id": "test", - }, - ], - "space_ids": Array [ - "some-namespace", - ], - }, - "message": "action started: test:1: 1", - }, - ], - Array [ - Object { - "event": Object { - "action": "execute", - "kind": "action", - "outcome": "success", - }, - "kibana": Object { - "action": Object { - "execution": Object { - "uuid": "2", - }, - "id": "1", - "name": "1", - }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, - }, - }, - "saved_objects": Array [ - Object { - "id": "1", - "namespace": "some-namespace", - "rel": "primary", - "type": "action", - "type_id": "test", - }, - ], - "space_ids": Array [ - "some-namespace", - ], - }, - "message": "action executed: test:1: 1", - "user": Object { - "id": "123", - "name": "coolguy", - }, - }, - ], - ] - `); -}); - -test('successfully executes when http_request source is specified', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - config: { schema: schema.object({ bar: schema.boolean() }) }, - secrets: { schema: schema.object({ baz: schema.boolean() }) }, - params: { schema: schema.object({ foo: schema.boolean() }) }, - }, - executor: jest.fn(), - }; - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: 'test', - config: { - bar: true, - }, - secrets: { - baz: true, - }, - isMissingSecrets: false, - }, - references: [], - }; - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - await actionExecutor.execute({ - ...executeParams, - source: asHttpRequestExecutionSource(httpServerMock.createKibanaRequest()), - }); - - expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).toHaveBeenCalledWith( - 'action', - '1', - { namespace: 'some-namespace' } - ); - - expect(actionTypeRegistry.get).toHaveBeenCalledWith('test'); - expect(actionTypeRegistry.isActionExecutable).toHaveBeenCalledWith('1', 'test', { - notifyUsage: true, - }); - - expect(actionType.executor).toHaveBeenCalledWith({ - actionId: '1', - services: expect.anything(), - config: { - bar: true, - }, - secrets: { - baz: true, - }, - params: { foo: true }, - logger: loggerMock, - source: { - source: expect.anything(), - type: 'HTTP_REQUEST', - }, - }); - - expect(loggerMock.debug).toBeCalledWith('executing action test:1: 1'); - expect(eventLogger.logEvent.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Object { - "event": Object { - "action": "execute-start", - "kind": "action", - }, - "kibana": Object { - "action": Object { - "execution": Object { - "source": "http_request", - "uuid": "2", - }, - "id": "1", - "name": "1", - }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, - }, - }, - "saved_objects": Array [ - Object { - "id": "1", - "namespace": "some-namespace", - "rel": "primary", - "type": "action", - "type_id": "test", - }, - ], - "space_ids": Array [ - "some-namespace", - ], - }, - "message": "action started: test:1: 1", - }, - ], - Array [ - Object { - "event": Object { - "action": "execute", - "kind": "action", - "outcome": "success", - }, - "kibana": Object { - "action": Object { - "execution": Object { - "source": "http_request", - "uuid": "2", - }, - "id": "1", - "name": "1", - }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, - }, - }, - "saved_objects": Array [ - Object { - "id": "1", - "namespace": "some-namespace", - "rel": "primary", - "type": "action", - "type_id": "test", - }, - ], - "space_ids": Array [ - "some-namespace", - ], - }, - "message": "action executed: test:1: 1", - "user": Object { - "id": "123", - "name": "coolguy", - }, - }, - ], - ] - `); -}); - -test('successfully executes when saved_object source is specified', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - config: { schema: schema.object({ bar: schema.boolean() }) }, - secrets: { schema: schema.object({ baz: schema.boolean() }) }, - params: { schema: schema.object({ foo: schema.boolean() }) }, - }, - executor: jest.fn(), - }; - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: 'test', - config: { - bar: true, - }, - secrets: { - baz: true, - }, - isMissingSecrets: false, - }, - references: [], - }; - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - await actionExecutor.execute({ - ...executeParams, - source: asSavedObjectExecutionSource({ - id: '573891ae-8c48-49cb-a197-0cd5ec34a88b', - type: 'alert', - }), - }); - - expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).toHaveBeenCalledWith( - 'action', - '1', - { namespace: 'some-namespace' } - ); - - expect(actionTypeRegistry.get).toHaveBeenCalledWith('test'); - expect(actionTypeRegistry.isActionExecutable).toHaveBeenCalledWith('1', 'test', { - notifyUsage: true, - }); - - expect(actionType.executor).toHaveBeenCalledWith({ - actionId: '1', - services: expect.anything(), - config: { - bar: true, - }, - secrets: { - baz: true, - }, - params: { foo: true }, - logger: loggerMock, - source: { - source: { - id: '573891ae-8c48-49cb-a197-0cd5ec34a88b', - type: 'alert', - }, - type: 'SAVED_OBJECT', - }, - }); - - expect(loggerMock.debug).toBeCalledWith('executing action test:1: 1'); - expect(eventLogger.logEvent.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Object { - "event": Object { - "action": "execute-start", - "kind": "action", - }, - "kibana": Object { - "action": Object { - "execution": Object { - "source": "alert", - "uuid": "2", - }, - "id": "1", - "name": "1", - }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, - }, - }, - "saved_objects": Array [ - Object { - "id": "1", - "namespace": "some-namespace", - "rel": "primary", - "type": "action", - "type_id": "test", - }, - ], - "space_ids": Array [ - "some-namespace", - ], - }, - "message": "action started: test:1: 1", - }, - ], - Array [ - Object { - "event": Object { - "action": "execute", - "kind": "action", - "outcome": "success", - }, - "kibana": Object { - "action": Object { - "execution": Object { - "source": "alert", - "uuid": "2", - }, - "id": "1", - "name": "1", - }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, - }, - }, - "saved_objects": Array [ - Object { - "id": "1", - "namespace": "some-namespace", - "rel": "primary", - "type": "action", - "type_id": "test", - }, - ], - "space_ids": Array [ - "some-namespace", - ], - }, - "message": "action executed: test:1: 1", - "user": Object { - "id": "123", - "name": "coolguy", - }, - }, - ], - ] - `); -}); - -test('successfully executes with preconfigured connector', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - config: { schema: schema.object({ bar: schema.string() }) }, - secrets: { schema: schema.object({ apiKey: schema.string() }) }, - params: { schema: schema.object({ foo: schema.boolean() }) }, - }, - executor: jest.fn(), - }; - - actionTypeRegistry.get.mockReturnValueOnce(actionType); - await actionExecutor.execute({ ...executeParams, actionId: 'preconfigured' }); - - expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).not.toHaveBeenCalled(); - - expect(actionTypeRegistry.get).toHaveBeenCalledWith('test'); - expect(actionTypeRegistry.isActionExecutable).toHaveBeenCalledWith('preconfigured', 'test', { - notifyUsage: true, - }); - - expect(actionType.executor).toHaveBeenCalledWith({ - actionId: 'preconfigured', - services: expect.anything(), - config: { - bar: 'preconfigured', - }, - secrets: { - apiKey: 'abc', - }, - params: { foo: true }, - logger: loggerMock, - }); - - expect(loggerMock.debug).toBeCalledWith('executing action test:preconfigured: Preconfigured'); - expect(eventLogger.logEvent.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Object { - "event": Object { - "action": "execute-start", - "kind": "action", - }, - "kibana": Object { - "action": Object { - "execution": Object { - "uuid": "2", - }, - "id": "preconfigured", - "name": "Preconfigured", - }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, - }, - }, - "saved_objects": Array [ - Object { - "id": "preconfigured", - "namespace": "some-namespace", - "rel": "primary", - "space_agnostic": true, - "type": "action", - "type_id": "test", - }, - ], - "space_ids": Array [ - "some-namespace", - ], - }, - "message": "action started: test:preconfigured: Preconfigured", - }, - ], - Array [ - Object { - "event": Object { - "action": "execute", - "kind": "action", - "outcome": "success", - }, - "kibana": Object { - "action": Object { - "execution": Object { - "uuid": "2", - }, - "id": "preconfigured", - "name": "Preconfigured", - }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, - }, - }, - "saved_objects": Array [ - Object { - "id": "preconfigured", - "namespace": "some-namespace", - "rel": "primary", - "space_agnostic": true, - "type": "action", - "type_id": "test", - }, - ], - "space_ids": Array [ - "some-namespace", - ], - }, - "message": "action executed: test:preconfigured: Preconfigured", - "user": Object { - "id": "123", - "name": "coolguy", - }, - }, - ], - ] - `); -}); - -test('successfully executes with system connector', async () => { - const actionType: jest.Mocked = { - id: '.cases', - name: 'Cases', - minimumLicenseRequired: 'platinum', - supportedFeatureIds: ['alerting'], - isSystemActionType: true, - validate: { - config: { schema: schema.any() }, - secrets: { schema: schema.any() }, - params: { schema: schema.any() }, - }, - executor: jest.fn(), - }; - - actionTypeRegistry.get.mockReturnValueOnce(actionType); - await actionExecutor.execute({ ...executeParams, actionId: 'system-connector-.cases' }); - - expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).not.toHaveBeenCalled(); - - expect(actionTypeRegistry.get).toHaveBeenCalledWith('.cases'); - expect(actionTypeRegistry.isActionExecutable).toHaveBeenCalledWith( - 'system-connector-.cases', - '.cases', - { - notifyUsage: true, - } - ); - - expect(actionType.executor).toHaveBeenCalledWith({ - actionId: 'system-connector-.cases', - services: expect.anything(), - config: {}, - secrets: {}, - params: { foo: true }, - logger: loggerMock, - request: {}, - }); - - expect(loggerMock.debug).toBeCalledWith( - 'executing action .cases:system-connector-.cases: System action: .cases' - ); - expect(eventLogger.logEvent.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Object { - "event": Object { - "action": "execute-start", - "kind": "action", - }, - "kibana": Object { - "action": Object { - "execution": Object { - "uuid": "2", - }, - "id": "system-connector-.cases", - "name": "System action: .cases", - }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, - }, - }, - "saved_objects": Array [ - Object { - "id": "system-connector-.cases", - "namespace": "some-namespace", - "rel": "primary", - "space_agnostic": true, - "type": "action", - "type_id": ".cases", - }, - ], - "space_ids": Array [ - "some-namespace", - ], - }, - "message": "action started: .cases:system-connector-.cases: System action: .cases", - }, - ], - Array [ - Object { - "event": Object { - "action": "execute", - "kind": "action", - "outcome": "success", - }, - "kibana": Object { - "action": Object { - "execution": Object { - "uuid": "2", - }, - "id": "system-connector-.cases", - "name": "System action: .cases", - }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, - }, - }, - "saved_objects": Array [ - Object { - "id": "system-connector-.cases", - "namespace": "some-namespace", - "rel": "primary", - "space_agnostic": true, - "type": "action", - "type_id": ".cases", - }, - ], - "space_ids": Array [ - "some-namespace", - ], - }, - "message": "action executed: .cases:system-connector-.cases: System action: .cases", - "user": Object { - "id": "123", - "name": "coolguy", - }, - }, - ], - ] - `); -}); - -test('passes the Kibana request on the executor of a system action', async () => { - const actionType: jest.Mocked = { - id: '.cases', - name: 'Cases', - minimumLicenseRequired: 'platinum', - supportedFeatureIds: ['alerting'], - isSystemActionType: true, - validate: { - config: { schema: schema.any() }, - secrets: { schema: schema.any() }, - params: { schema: schema.any() }, - }, - executor: jest.fn(), - }; - - actionTypeRegistry.get.mockReturnValueOnce(actionType); - await actionExecutor.execute({ ...executeParams, actionId: 'system-connector-.cases' }); - - expect(actionType.executor).toHaveBeenCalledWith({ - actionId: 'system-connector-.cases', - services: expect.anything(), - config: {}, - secrets: {}, - params: { foo: true }, - logger: loggerMock, - request: {}, - }); -}); - -test('does not pass the Kibana request on the executor if the action is not a system action', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - config: { schema: schema.object({ bar: schema.boolean() }) }, - secrets: { schema: schema.object({ baz: schema.boolean() }) }, - params: { schema: schema.object({ foo: schema.boolean() }) }, - }, - executor: jest.fn(), - }; - - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: 'test', - config: { - bar: true, - }, - secrets: { - baz: true, - }, - isMissingSecrets: false, - }, - references: [], - }; - - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - await actionExecutor.execute(executeParams); - - const args = actionType.executor.mock.calls[0][0]; - - expect(args.request).toBeUndefined(); -}); - -test('successfully authorize system actions', async () => { - const actionType: jest.Mocked = { - id: '.cases', - name: 'Cases', - minimumLicenseRequired: 'platinum', - supportedFeatureIds: ['alerting'], - getKibanaPrivileges: () => ['test/create'], - isSystemActionType: true, - validate: { - config: { schema: schema.any() }, - secrets: { schema: schema.any() }, - params: { schema: schema.any() }, - }, - executor: jest.fn(), - }; - - actionTypeRegistry.get.mockReturnValueOnce(actionType); - actionTypeRegistry.isSystemActionType.mockReturnValueOnce(true); - actionTypeRegistry.getSystemActionKibanaPrivileges.mockReturnValueOnce(['test/create']); - - await actionExecutor.execute({ ...executeParams, actionId: 'system-connector-.cases' }); - - expect(authorizationMock.ensureAuthorized).toBeCalledWith({ - actionTypeId: '.cases', - operation: 'execute', - additionalPrivileges: ['test/create'], - }); -}); - -test('actionType Executor returns status "error" and an error message', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - config: { schema: schema.any() }, - secrets: { schema: schema.any() }, - params: { schema: schema.any() }, - }, - executor: jest.fn().mockReturnValue({ - actionId: 'test', - status: 'error', - message: 'test error message', - retry: true, - }), - }; - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: 'test', - config: { - bar: true, - }, - secrets: { - baz: true, - }, - isMissingSecrets: false, - }, - references: [], - }; - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - const result = await actionExecutor.execute(executeParams); - - expect(result).toEqual({ - actionId: 'test', - errorSource: TaskErrorSource.USER, - message: 'test error message', - retry: true, - status: 'error', - }); -}); - -test('Execute of SentinelOne sub-actions require create privilege', async () => { - const actionType: jest.Mocked = { - id: '.sentinelone', - name: 'sentinelone', - minimumLicenseRequired: 'enterprise', - supportedFeatureIds: [SecurityConnectorFeatureId], - validate: { - config: { schema: schema.any() }, - secrets: { schema: schema.any() }, - params: { schema: schema.any() }, - }, - executor: jest.fn(), - }; - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: '.sentinelone', - config: { - bar: true, - }, - secrets: { - baz: true, - }, - isMissingSecrets: false, - }, - references: [], - }; - - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - - await actionExecutor.execute({ ...executeParams, actionId: 'sentinel-one-connector-authz' }); - - expect(authorizationMock.ensureAuthorized).toHaveBeenCalledWith({ - operation: 'execute', - actionTypeId: '.sentinelone', - }); -}); - -test('pass the params to the actionTypeRegistry when authorizing system actions', async () => { - const actionType: jest.Mocked = { - id: '.cases', - name: 'Cases', - minimumLicenseRequired: 'platinum', - supportedFeatureIds: ['alerting'], - getKibanaPrivileges: () => ['test/create'], - isSystemActionType: true, - validate: { - config: { schema: schema.any() }, - secrets: { schema: schema.any() }, - params: { schema: schema.any() }, - }, - executor: jest.fn(), - }; - - actionTypeRegistry.get.mockReturnValueOnce(actionType); - actionTypeRegistry.isSystemActionType.mockReturnValueOnce(true); - actionTypeRegistry.getSystemActionKibanaPrivileges.mockReturnValueOnce(['test/create']); - - await actionExecutor.execute({ - ...executeParams, - params: { foo: 'bar' }, - actionId: 'system-connector-.cases', - }); - - expect(actionTypeRegistry.getSystemActionKibanaPrivileges).toHaveBeenCalledWith('.cases', { - foo: 'bar', - }); - - expect(authorizationMock.ensureAuthorized).toBeCalledWith({ - actionTypeId: '.cases', - operation: 'execute', - additionalPrivileges: ['test/create'], - }); -}); - -test('does not authorize non system actions', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - config: { schema: schema.object({ bar: schema.string() }) }, - secrets: { schema: schema.object({ apiKey: schema.string() }) }, - params: { schema: schema.object({ foo: schema.boolean() }) }, - }, - executor: jest.fn(), - }; - - actionTypeRegistry.get.mockReturnValueOnce(actionType); - actionTypeRegistry.isSystemActionType.mockReturnValueOnce(false); - - await actionExecutor.execute({ ...executeParams, actionId: 'preconfigured' }); - - expect(authorizationMock.ensureAuthorized).not.toBeCalled(); -}); - -test('successfully executes as a task', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - config: { schema: schema.object({ bar: schema.boolean() }) }, - secrets: { schema: schema.object({ baz: schema.boolean() }) }, - params: { schema: schema.object({ foo: schema.boolean() }) }, - }, - executor: jest.fn(), - }; - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: 'test', - isMissingSecrets: false, - config: { - bar: true, - }, - secrets: { - baz: true, - }, - }, - references: [], - }; - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - - const scheduleDelay = 10000; // milliseconds - const scheduled = new Date(Date.now() - scheduleDelay); - const attempts = 1; - await actionExecutor.execute({ - ...executeParams, - taskInfo: { - scheduled, - attempts, - }, - }); - - const eventTask = eventLogger.logEvent.mock.calls[0][0]?.kibana?.task; - expect(eventTask).toBeDefined(); - expect(eventTask?.scheduled).toBe(scheduled.toISOString()); - expect(eventTask?.schedule_delay).toBeGreaterThanOrEqual(scheduleDelay * 1000 * 1000); - expect(eventTask?.schedule_delay).toBeLessThanOrEqual(2 * scheduleDelay * 1000 * 1000); -}); - -test('provides empty config when config and / or secrets is empty', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - config: { schema: schema.object({}) }, - secrets: { schema: schema.object({}) }, - params: { schema: schema.object({ foo: schema.boolean() }) }, - }, - executor: jest.fn(), - }; - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: 'test', - isMissingSecrets: false, - config: {}, - secrets: {}, - }, - references: [], - }; - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - await actionExecutor.execute(executeParams); - - expect(actionType.executor).toHaveBeenCalledTimes(1); - const executorCall = actionType.executor.mock.calls[0][0]; - expect(executorCall.config).toMatchInlineSnapshot(`Object {}`); -}); - -test('throws an error when config is invalid', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - secrets: { schema: schema.object({}) }, - params: { schema: schema.object({ foo: schema.boolean() }) }, - config: { - schema: schema.object({ - param1: schema.string(), - }), - }, - }, - executor: jest.fn(), - }; - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: 'test', - }, - references: [], - }; - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - - const result = await actionExecutor.execute(executeParams); - expect(result).toEqual({ - actionId: '1', - status: 'error', - retry: false, - message: `error validating action type config: [param1]: expected value of type [string] but got [undefined]`, - errorSource: TaskErrorSource.FRAMEWORK, - }); -}); - -test('returns an error when connector is invalid', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - secrets: { schema: schema.object({}) }, - config: { schema: schema.object({}) }, - params: { schema: schema.object({ foo: schema.boolean() }) }, - connector: () => { - return 'error'; - }, - }, - executor: jest.fn(), - }; - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: 'test', - isMissingSecrets: false, - secrets: {}, - }, - references: [], - }; - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - - const result = await actionExecutor.execute(executeParams); - expect(result).toEqual({ - actionId: '1', - status: 'error', - retry: false, - message: `error validating action type connector: config must be defined`, - errorSource: TaskErrorSource.FRAMEWORK, - }); -}); - -test('throws an error when params is invalid', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - config: { schema: schema.object({}) }, - secrets: { schema: schema.object({}) }, - params: { - schema: schema.object({ - param1: schema.string(), - }), - }, - }, - executor: jest.fn(), - }; - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: 'test', - }, - references: [], - }; - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - - const result = await actionExecutor.execute(executeParams); - expect(result).toEqual({ - actionId: '1', - status: 'error', - retry: false, - message: `error validating action params: [param1]: expected value of type [string] but got [undefined]`, - errorSource: TaskErrorSource.FRAMEWORK, - }); -}); - -test('throws an error when failing to load action through savedObjectsClient', async () => { - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockRejectedValueOnce( - new Error('No access') - ); - - try { - await actionExecutor.execute(executeParams); - } catch (e) { - expect(e.message).toBe('No access'); - expect(getErrorSource(e)).toBe(TaskErrorSource.FRAMEWORK); - } -}); - -test('throws a USER error when the action SO is not found', async () => { - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockRejectedValueOnce( - SavedObjectsErrorHelpers.createGenericNotFoundError() - ); - - try { - await actionExecutor.execute(executeParams); - } catch (e) { - expect(e.message).toBe('Not Found'); - expect(getErrorSource(e)).toBe(TaskErrorSource.USER); - } -}); - -test('throws an error if actionType is not enabled', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - config: { schema: schema.object({}) }, - secrets: { schema: schema.object({}) }, - params: { schema: schema.object({}) }, - }, - executor: jest.fn(), - }; - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: 'test', - }, - references: [], - }; - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - actionTypeRegistry.ensureActionTypeEnabled.mockImplementationOnce(() => { - throw new Error('not enabled for test'); - }); - - try { - await actionExecutor.execute(executeParams); - } catch (e) { - expect(e.message).toBe('not enabled for test'); - expect(getErrorSource(e)).toBe(TaskErrorSource.FRAMEWORK); - } - - expect(actionTypeRegistry.ensureActionTypeEnabled).toHaveBeenCalledWith('test'); -}); - -test('should not throws an error if actionType is preconfigured', async () => { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - config: { schema: schema.object({ bar: schema.boolean() }) }, - secrets: { schema: schema.object({ baz: schema.boolean() }) }, - params: { schema: schema.object({ foo: schema.boolean() }) }, - }, - executor: jest.fn(), - }; - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: 'test', - config: { - bar: true, - }, - secrets: { - baz: true, - }, - isMissingSecrets: false, + id: 'system-connector-.cases', + name: 'System action: .cases', + secrets: {}, + isPreconfigured: false, + isDeprecated: false, + isSystemAction: true, }, - references: [], - }; - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - actionTypeRegistry.ensureActionTypeEnabled.mockImplementationOnce(() => { - throw new Error('not enabled for test'); - }); - actionTypeRegistry.isActionExecutable.mockImplementationOnce(() => true); - await actionExecutor.execute(executeParams); + ], +}; +actionExecutor.initialize(actionExecutorInitializationParams); + +const connectorType: jest.Mocked = { + id: 'test', + name: 'Test', + minimumLicenseRequired: 'basic', + supportedFeatureIds: ['alerting'], + validate: { + config: { schema: schema.object({ bar: schema.boolean() }) }, + secrets: { schema: schema.object({ baz: schema.boolean() }) }, + params: { schema: schema.object({ foo: schema.boolean() }) }, + }, + executor: jest.fn(), +}; - expect(actionTypeRegistry.ensureActionTypeEnabled).toHaveBeenCalledTimes(0); - expect(actionType.executor).toHaveBeenCalledWith({ - actionId: '1', - services: expect.anything(), +const systemConnectorType: jest.Mocked = { + id: '.cases', + name: 'Cases', + minimumLicenseRequired: 'platinum', + supportedFeatureIds: ['alerting'], + isSystemActionType: true, + validate: { + config: { schema: schema.any() }, + secrets: { schema: schema.any() }, + params: { schema: schema.any() }, + }, + executor: jest.fn(), +}; + +const connectorSavedObject = { + id: CONNECTOR_ID, + type: 'action', + attributes: { + name: '1', + actionTypeId: 'test', config: { bar: true, }, secrets: { baz: true, }, - params: { foo: true }, - logger: loggerMock, - }); -}); + isMissingSecrets: false, + }, + references: [], +}; -test('should not throws an error if actionType is system action', async () => { - const actionType: jest.Mocked = { - id: '.cases', - name: 'Cases', - minimumLicenseRequired: 'platinum', - supportedFeatureIds: ['alerting'], - isSystemActionType: true, - validate: { - config: { schema: schema.any() }, - secrets: { schema: schema.any() }, - params: { schema: schema.any() }, +const getBaseExecuteStartEventLogDoc = (unsecured: boolean) => { + return { + event: { + action: 'execute-start', + kind: 'action', + }, + kibana: { + action: { + execution: { + uuid: ACTION_EXECUTION_ID, + }, + id: CONNECTOR_ID, + name: '1', + }, + ...(unsecured + ? {} + : { + alert: { + rule: { + execution: { + uuid: '123abc', + }, + }, + }, + }), + saved_objects: [ + { + id: '1', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: 'test', + }, + ], + space_ids: ['some-namespace'], }, - executor: jest.fn(), + message: 'action started: test:1: 1', }; +}; - const actionSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: '.cases', - config: {}, - secrets: {}, +const getBaseExecuteEventLogDoc = (unsecured: boolean) => { + const base = getBaseExecuteStartEventLogDoc(unsecured); + return { + ...base, + event: { + ...base.event, + action: 'execute', + outcome: 'success', + }, + message: 'action executed: test:1: 1', + user: { + ...(unsecured + ? {} + : { + id: '123', + name: 'coolguy', + }), }, - references: [], }; +}; - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - actionTypeRegistry.ensureActionTypeEnabled.mockImplementationOnce(() => { - throw new Error('not enabled for test'); - }); - actionTypeRegistry.isActionExecutable.mockImplementationOnce(() => true); - await actionExecutor.execute(executeParams); - - expect(actionTypeRegistry.ensureActionTypeEnabled).toHaveBeenCalledTimes(0); - expect(actionType.executor).toHaveBeenCalledWith({ - actionId: '1', - services: expect.anything(), - config: {}, - secrets: {}, - params: { foo: true }, - logger: loggerMock, - request: {}, - }); -}); - -test('throws an error when passing isESOCanEncrypt with value of false', async () => { - const customActionExecutor = new ActionExecutor({ isESOCanEncrypt: false }); - customActionExecutor.initialize({ - logger: loggingSystemMock.create().get(), - spaces: spacesMock, - getServices: () => services, - actionTypeRegistry, - encryptedSavedObjectsClient, - eventLogger: eventLoggerMock.create(), - inMemoryConnectors: [], - getActionsAuthorizationWithRequest, - }); +beforeEach(() => { + jest.resetAllMocks(); + jest.clearAllMocks(); + spacesMock.getSpaceId.mockReturnValue('some-namespace'); + loggerMock.get.mockImplementation(() => loggerMock); + const mockRealm = { name: 'default_native', type: 'native' }; + securityMockStart.authc.getCurrentUser.mockImplementation(() => ({ + authentication_realm: mockRealm, + authentication_provider: mockRealm, + authentication_type: 'realm', + lookup_realm: mockRealm, + elastic_cloud_user: true, + enabled: true, + profile_uid: '123', + roles: ['superuser'], + username: 'coolguy', + })); - try { - await customActionExecutor.execute(executeParams); - } catch (e) { - expect(e.message).toBe( - 'Unable to execute action because the Encrypted Saved Objects plugin is missing encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in the kibana.yml or use the bin/kibana-encryption-keys command.' - ); - expect(getErrorSource(e)).toBe(TaskErrorSource.USER); - } + getActionsAuthorizationWithRequest.mockReturnValue(authorizationMock); }); -test('should not throw error if action is preconfigured and isESOCanEncrypt is false', async () => { - const customActionExecutor = new ActionExecutor({ isESOCanEncrypt: false }); - customActionExecutor.initialize({ - logger: loggingSystemMock.create().get(), - spaces: spacesMock, - getServices: () => services, - actionTypeRegistry, - encryptedSavedObjectsClient, - eventLogger: eventLoggerMock.create(), - getActionsAuthorizationWithRequest, - inMemoryConnectors: [ - { - id: 'preconfigured', - name: 'Preconfigured', - actionTypeId: 'test', +describe('Action Executor', () => { + for (const executeUnsecure of [false, true]) { + const label = executeUnsecure ? 'executes unsecured' : 'executes'; + + test(`successfully ${label}`, async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + connectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce(connectorType); + + if (executeUnsecure) { + await actionExecutor.executeUnsecured(executeUnsecuredParams); + } else { + await actionExecutor.execute(executeParams); + } + + if (executeUnsecure) { + expect(spacesMock.getSpaceId).not.toHaveBeenCalled(); + expect(securityMockStart.authc.getCurrentUser).not.toHaveBeenCalled(); + } else { + expect(spacesMock.getSpaceId).toHaveBeenCalled(); + expect(securityMockStart.authc.getCurrentUser).toHaveBeenCalled(); + } + + expect(connectorTypeRegistry.isSystemActionType).toHaveBeenCalled(); + expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).toHaveBeenCalledWith( + 'action', + CONNECTOR_ID, + { namespace: 'some-namespace' } + ); + expect(authorizationMock.ensureAuthorized).not.toBeCalled(); + + expect(connectorTypeRegistry.get).toHaveBeenCalledWith('test'); + expect(connectorTypeRegistry.isActionExecutable).toHaveBeenCalledWith(CONNECTOR_ID, 'test', { + notifyUsage: true, + }); + + expect(connectorType.executor).toHaveBeenCalledWith({ + actionId: CONNECTOR_ID, + services: expect.anything(), config: { - bar: 'preconfigured', + bar: true, }, secrets: { - apiKey: 'abc', + baz: true, }, - isPreconfigured: true, - isDeprecated: false, - isSystemAction: false, - }, - ], - }); - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: { - config: { schema: schema.object({ bar: schema.string() }) }, - secrets: { schema: schema.object({ apiKey: schema.string() }) }, - params: { schema: schema.object({ foo: schema.boolean() }) }, - }, - executor: jest.fn(), - }; - - actionTypeRegistry.get.mockReturnValueOnce(actionType); - await actionExecutor.execute({ ...executeParams, actionId: 'preconfigured' }); + params: { foo: true }, + logger: loggerMock, + }); - expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).not.toHaveBeenCalled(); - - expect(actionTypeRegistry.get).toHaveBeenCalledWith('test'); - expect(actionTypeRegistry.isActionExecutable).toHaveBeenCalledWith('preconfigured', 'test', { - notifyUsage: true, - }); + expect(loggerMock.debug).toBeCalledWith('executing action test:1: 1'); + expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); - expect(actionType.executor).toHaveBeenCalledWith({ - actionId: 'preconfigured', - services: expect.anything(), - config: { - bar: 'preconfigured', - }, - secrets: { - apiKey: 'abc', - }, - params: { foo: true }, - logger: loggerMock, - }); + const execStartDoc = getBaseExecuteStartEventLogDoc(executeUnsecure); + const execDoc = getBaseExecuteEventLogDoc(executeUnsecure); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(1, execStartDoc); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(2, execDoc); + }); - expect(loggerMock.debug).toBeCalledWith('executing action test:preconfigured: Preconfigured'); - expect(eventLogger.logEvent.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Object { - "event": Object { - "action": "execute-start", - "kind": "action", + for (const executionSource of [ + { + name: `http`, + sourceType: `http_request`, + source: asHttpRequestExecutionSource(httpServerMock.createKibanaRequest()), + }, + { + name: `saved_object`, + sourceType: `alert`, + source: asSavedObjectExecutionSource({ + id: '573891ae-8c48-49cb-a197-0cd5ec34a88b', + type: 'alert', + }), + }, + { + name: `background_task`, + sourceType: `background_task`, + source: asBackgroundTaskExecutionSource({ taskId: 'task:123', taskType: 'taskType' }), + }, + ]) { + test(`successfully ${label} with ${executionSource.name} source`, async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + connectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce(connectorType); + + if (executeUnsecure) { + await actionExecutor.executeUnsecured({ + ...executeUnsecuredParams, + source: executionSource.source, + }); + } else { + await actionExecutor.execute({ ...executeParams, source: executionSource.source }); + } + + expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).toHaveBeenCalledWith( + 'action', + CONNECTOR_ID, + { namespace: 'some-namespace' } + ); + + expect(connectorTypeRegistry.get).toHaveBeenCalledWith('test'); + expect(connectorTypeRegistry.isActionExecutable).toHaveBeenCalledWith( + CONNECTOR_ID, + 'test', + { + notifyUsage: true, + } + ); + + expect(connectorType.executor).toHaveBeenCalledWith({ + actionId: CONNECTOR_ID, + services: expect.anything(), + config: { + bar: true, + }, + secrets: { + baz: true, }, - "kibana": Object { - "action": Object { - "execution": Object { - "uuid": "2", + params: { foo: true }, + logger: loggerMock, + source: executionSource.source, + }); + + expect(loggerMock.debug).toBeCalledWith('executing action test:1: 1'); + expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); + + const execStartDoc = getBaseExecuteStartEventLogDoc(executeUnsecure); + const execDoc = getBaseExecuteEventLogDoc(executeUnsecure); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(1, { + ...execStartDoc, + kibana: { + ...execStartDoc.kibana, + action: { + ...execStartDoc.kibana.action, + execution: { + ...execStartDoc.kibana.action.execution, + source: executionSource.sourceType, }, - "id": "preconfigured", - "name": "Preconfigured", }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, + }, + }); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(2, { + ...execDoc, + kibana: { + ...execDoc.kibana, + + action: { + ...execDoc.kibana.action, + execution: { + ...execDoc.kibana.action.execution, + source: executionSource.sourceType, }, }, - "saved_objects": Array [ - Object { - "id": "preconfigured", - "namespace": "some-namespace", - "rel": "primary", - "space_agnostic": true, - "type": "action", - "type_id": "test", - }, - ], - "space_ids": Array [ - "some-namespace", - ], }, - "message": "action started: test:preconfigured: Preconfigured", + }); + }); + } + + test(`successfully ${label} with preconfigured connector`, async () => { + connectorTypeRegistry.get.mockReturnValueOnce({ + ...connectorType, + validate: { + config: { schema: schema.object({ bar: schema.string() }) }, + secrets: { schema: schema.object({ apiKey: schema.string() }) }, + params: { schema: schema.object({ foo: schema.boolean() }) }, }, - ], - Array [ - Object { - "event": Object { - "action": "execute", - "kind": "action", - "outcome": "success", + }); + + if (executeUnsecure) { + await actionExecutor.executeUnsecured({ + ...executeUnsecuredParams, + actionId: 'preconfigured', + }); + } else { + await actionExecutor.execute({ ...executeParams, actionId: 'preconfigured' }); + } + + expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).not.toHaveBeenCalled(); + + expect(connectorTypeRegistry.get).toHaveBeenCalledWith('test'); + expect(connectorTypeRegistry.isActionExecutable).toHaveBeenCalledWith( + 'preconfigured', + 'test', + { + notifyUsage: true, + } + ); + + expect(connectorType.executor).toHaveBeenCalledWith({ + actionId: 'preconfigured', + services: expect.anything(), + config: { + bar: 'preconfigured', + }, + secrets: { + apiKey: 'abc', + }, + params: { foo: true }, + logger: loggerMock, + }); + + expect(loggerMock.debug).toBeCalledWith('executing action test:preconfigured: Preconfigured'); + expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); + + const execStartDoc = getBaseExecuteStartEventLogDoc(executeUnsecure); + const execDoc = getBaseExecuteEventLogDoc(executeUnsecure); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(1, { + ...execStartDoc, + kibana: { + ...execStartDoc.kibana, + action: { + ...execStartDoc.kibana.action, + id: 'preconfigured', + name: 'Preconfigured', }, - "kibana": Object { - "action": Object { - "execution": Object { - "uuid": "2", - }, - "id": "preconfigured", - "name": "Preconfigured", + saved_objects: [ + { + id: 'preconfigured', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: 'test', + space_agnostic: true, }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, - }, + ], + }, + message: 'action started: test:preconfigured: Preconfigured', + }); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(2, { + ...execDoc, + kibana: { + ...execDoc.kibana, + action: { + ...execDoc.kibana.action, + id: 'preconfigured', + name: 'Preconfigured', + }, + saved_objects: [ + { + id: 'preconfigured', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: 'test', + space_agnostic: true, }, - "saved_objects": Array [ - Object { - "id": "preconfigured", - "namespace": "some-namespace", - "rel": "primary", - "space_agnostic": true, - "type": "action", - "type_id": "test", - }, - ], - "space_ids": Array [ - "some-namespace", - ], + ], + }, + message: 'action executed: test:preconfigured: Preconfigured', + }); + }); + + test(`${label} with system connector`, async () => { + connectorTypeRegistry.get.mockReturnValueOnce(systemConnectorType); + connectorTypeRegistry.isSystemActionType.mockReturnValueOnce(true); + + if (executeUnsecure) { + const result = await actionExecutor.executeUnsecured({ + ...executeUnsecuredParams, + actionId: 'system-connector-.cases', + }); + expect(result).toEqual({ + actionId: 'system-connector-.cases', + errorSource: 'user', + message: 'Cannot execute unsecured system action', + retry: false, + status: 'error', + }); + + expect(systemConnectorType.executor).not.toHaveBeenCalled(); + } else { + await actionExecutor.execute({ ...executeParams, actionId: 'system-connector-.cases' }); + + expect(systemConnectorType.executor).toHaveBeenCalledWith({ + actionId: 'system-connector-.cases', + services: expect.anything(), + config: {}, + secrets: {}, + params: { foo: true }, + logger: loggerMock, + request: {}, + }); + } + + expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).not.toHaveBeenCalled(); + expect(connectorTypeRegistry.get).toHaveBeenCalledWith('.cases'); + expect(connectorTypeRegistry.isActionExecutable).toHaveBeenCalledWith( + 'system-connector-.cases', + '.cases', + { + notifyUsage: true, + } + ); + expect(loggerMock.debug).toBeCalledWith( + 'executing action .cases:system-connector-.cases: System action: .cases' + ); + expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); + + const execStartDoc = getBaseExecuteStartEventLogDoc(executeUnsecure); + const execDoc = getBaseExecuteEventLogDoc(executeUnsecure); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(1, { + ...execStartDoc, + kibana: { + ...execStartDoc.kibana, + action: { + ...execStartDoc.kibana.action, + id: 'system-connector-.cases', + name: 'System action: .cases', + }, + saved_objects: [ + { + id: 'system-connector-.cases', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: '.cases', + space_agnostic: true, + }, + ], + }, + message: 'action started: .cases:system-connector-.cases: System action: .cases', + }); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(2, { + ...execDoc, + ...(executeUnsecure + ? { error: { message: `Cannot execute unsecured system action` } } + : {}), + event: { + ...execDoc.event, + outcome: executeUnsecure ? 'failure' : 'success', + }, + kibana: { + ...execDoc.kibana, + action: { + ...execDoc.kibana.action, + id: 'system-connector-.cases', + name: 'System action: .cases', + }, + saved_objects: [ + { + id: 'system-connector-.cases', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: '.cases', + space_agnostic: true, + }, + ], + }, + message: `action ${ + executeUnsecure ? 'execution failure' : 'executed' + }: .cases:system-connector-.cases: System action: .cases`, + }); + }); + + test(`${label} should return error status with error message when executor returns an error`, async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + connectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce({ + ...connectorType, + executor: jest.fn().mockReturnValue({ + actionId: 'test', + status: 'error', + message: 'test error message', + retry: true, + }), + }); + + const result = executeUnsecure + ? await actionExecutor.executeUnsecured(executeUnsecuredParams) + : await actionExecutor.execute(executeParams); + + expect(result).toEqual({ + actionId: 'test', + errorSource: TaskErrorSource.USER, + message: 'test error message', + retry: true, + status: 'error', + }); + }); + + test(`${label} should handle SentinelOne connector type`, async () => { + const sentinelOneConnectorType: jest.Mocked = { + id: '.sentinelone', + name: 'sentinelone', + minimumLicenseRequired: 'enterprise', + supportedFeatureIds: [SecurityConnectorFeatureId], + validate: { + config: { schema: schema.any() }, + secrets: { schema: schema.any() }, + params: { schema: schema.any() }, + }, + executor: jest.fn(), + }; + const sentinelOneSavedObject = { + id: '1', + type: 'action', + attributes: { + name: '1', + actionTypeId: '.sentinelone', + config: { + bar: true, }, - "message": "action executed: test:preconfigured: Preconfigured", - "user": Object { - "id": "123", - "name": "coolguy", + secrets: { + baz: true, }, + isMissingSecrets: false, }, - ], - ] - `); -}); - -test('should not throw error if action is system action and isESOCanEncrypt is false', async () => { - const customActionExecutor = new ActionExecutor({ isESOCanEncrypt: false }); - customActionExecutor.initialize({ - logger: loggingSystemMock.create().get(), - spaces: spacesMock, - getServices: () => services, - actionTypeRegistry, - encryptedSavedObjectsClient, - eventLogger: eventLoggerMock.create(), - getActionsAuthorizationWithRequest, - inMemoryConnectors: [ - { - actionTypeId: '.cases', + references: [], + }; + + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + sentinelOneSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce(sentinelOneConnectorType); + + if (executeUnsecure) { + await actionExecutor.executeUnsecured({ + ...executeUnsecuredParams, + actionId: 'sentinel-one-connector-authz', + }); + expect(authorizationMock.ensureAuthorized).not.toHaveBeenCalled(); + } else { + await actionExecutor.execute({ + ...executeParams, + actionId: 'sentinel-one-connector-authz', + }); + expect(authorizationMock.ensureAuthorized).toHaveBeenCalledWith({ + operation: 'execute', + actionTypeId: '.sentinelone', + }); + } + }); + + test(`${label} with taskInfo`, async () => { + if (executeUnsecure) return; + + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + connectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce(connectorType); + const scheduleDelay = 10000; // milliseconds + const scheduled = new Date(Date.now() - scheduleDelay); + const attempts = 1; + await actionExecutor.execute({ + ...executeParams, + taskInfo: { + scheduled, + attempts, + }, + }); + + const eventTask = eventLogger.logEvent.mock.calls[0][0]?.kibana?.task; + expect(eventTask).toBeDefined(); + expect(eventTask?.scheduled).toBe(scheduled.toISOString()); + expect(eventTask?.schedule_delay).toBeGreaterThanOrEqual(scheduleDelay * 1000 * 1000); + expect(eventTask?.schedule_delay).toBeLessThanOrEqual(2 * scheduleDelay * 1000 * 1000); + }); + + test(`${label} provides empty config when config and/or secrets is empty`, async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce({ + ...connectorSavedObject, + attributes: { + ...connectorSavedObject.attributes, + config: {}, + secrets: {}, + }, + }); + connectorTypeRegistry.get.mockReturnValueOnce({ + ...connectorType, + validate: { + config: { schema: schema.object({}) }, + secrets: { schema: schema.object({}) }, + params: { schema: schema.object({ foo: schema.boolean() }) }, + }, + }); + + if (executeUnsecure) { + await actionExecutor.executeUnsecured(executeUnsecuredParams); + } else { + await actionExecutor.execute(executeParams); + } + + expect(connectorType.executor).toHaveBeenCalledTimes(1); + const executorCall = connectorType.executor.mock.calls[0][0]; + expect(executorCall.config).toMatchInlineSnapshot(`Object {}`); + }); + + test(`${label} returns error when config is invalid`, async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce({ + ...connectorSavedObject, + attributes: { + name: CONNECTOR_ID, + actionTypeId: 'test', + }, + }); + connectorTypeRegistry.get.mockReturnValueOnce({ + ...connectorType, + validate: { + secrets: { schema: schema.object({}) }, + params: { schema: schema.object({ foo: schema.boolean() }) }, + config: { + schema: schema.object({ + param1: schema.string(), + }), + }, + }, + }); + + const result = executeUnsecure + ? await actionExecutor.executeUnsecured(executeUnsecuredParams) + : await actionExecutor.execute(executeParams); + + expect(result).toEqual({ + actionId: '1', + status: 'error', + retry: false, + message: `error validating action type config: [param1]: expected value of type [string] but got [undefined]`, + errorSource: TaskErrorSource.FRAMEWORK, + }); + }); + + test(`${label} returns error when connector is invalid`, async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce({ + ...connectorSavedObject, + attributes: { + name: CONNECTOR_ID, + actionTypeId: 'test', + isMissingSecrets: false, + secrets: {}, + }, + }); + connectorTypeRegistry.get.mockReturnValueOnce({ + ...connectorType, + validate: { + secrets: { schema: schema.object({}) }, + config: { schema: schema.object({}) }, + params: { schema: schema.object({ foo: schema.boolean() }) }, + connector: () => { + return 'error'; + }, + }, + }); + + const result = executeUnsecure + ? await actionExecutor.executeUnsecured(executeUnsecuredParams) + : await actionExecutor.execute(executeParams); + + expect(result).toEqual({ + actionId: '1', + status: 'error', + retry: false, + message: `error validating action type connector: config must be defined`, + errorSource: TaskErrorSource.FRAMEWORK, + }); + }); + + test(`${label} returns error when params are invalid`, async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce({ + ...connectorSavedObject, + attributes: { + name: CONNECTOR_ID, + actionTypeId: 'test', + }, + }); + connectorTypeRegistry.get.mockReturnValueOnce({ + ...connectorType, + validate: { + config: { schema: schema.object({}) }, + secrets: { schema: schema.object({}) }, + params: { + schema: schema.object({ + param1: schema.string(), + }), + }, + }, + }); + + const result = executeUnsecure + ? await actionExecutor.executeUnsecured(executeUnsecuredParams) + : await actionExecutor.execute(executeParams); + + expect(result).toEqual({ + actionId: '1', + status: 'error', + retry: false, + message: `error validating action params: [param1]: expected value of type [string] but got [undefined]`, + errorSource: TaskErrorSource.FRAMEWORK, + }); + }); + + test(`${label} throws error when unable to read connector through saved object client`, async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockRejectedValueOnce( + new Error('No access') + ); + + try { + if (executeUnsecure) { + await actionExecutor.executeUnsecured(executeUnsecuredParams); + } else { + await actionExecutor.execute(executeParams); + } + } catch (e) { + expect(e.message).toBe('No access'); + expect(getErrorSource(e)).toBe(TaskErrorSource.FRAMEWORK); + } + }); + + test(`${label} throws error if connector type is not enabled`, async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + connectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce(connectorType); + connectorTypeRegistry.ensureActionTypeEnabled.mockImplementationOnce(() => { + throw new Error('not enabled for test'); + }); + + try { + if (executeUnsecure) { + await actionExecutor.executeUnsecured(executeUnsecuredParams); + } else { + await actionExecutor.execute(executeParams); + } + } catch (e) { + expect(e.message).toBe('not enabled for test'); + expect(getErrorSource(e)).toBe(TaskErrorSource.FRAMEWORK); + } + }); + + test(`${label} does not throw error if connector type is not enabled but connector is preconfigured`, async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + connectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce(connectorType); + connectorTypeRegistry.ensureActionTypeEnabled.mockImplementationOnce(() => { + throw new Error('not enabled for test'); + }); + connectorTypeRegistry.isActionExecutable.mockImplementationOnce(() => true); + + if (executeUnsecure) { + await actionExecutor.executeUnsecured(executeUnsecuredParams); + } else { + await actionExecutor.execute(executeParams); + } + + expect(connectorTypeRegistry.ensureActionTypeEnabled).toHaveBeenCalledTimes(0); + expect(connectorType.executor).toHaveBeenCalledWith({ + actionId: '1', + services: expect.anything(), + config: { + bar: true, + }, + secrets: { + baz: true, + }, + params: { foo: true }, + logger: loggerMock, + }); + }); + + test(`${label} does not throw error if connector type is not enabled but connector is system action`, async () => { + if (executeUnsecure) return; + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce({ + ...connectorSavedObject, + attributes: { + name: '1', + actionTypeId: '.cases', + config: {}, + secrets: {}, + }, + }); + connectorTypeRegistry.get.mockReturnValueOnce(systemConnectorType); + connectorTypeRegistry.ensureActionTypeEnabled.mockImplementationOnce(() => { + throw new Error('not enabled for test'); + }); + connectorTypeRegistry.isActionExecutable.mockImplementationOnce(() => true); + + await actionExecutor.execute(executeParams); + + expect(connectorTypeRegistry.ensureActionTypeEnabled).toHaveBeenCalledTimes(0); + expect(systemConnectorType.executor).toHaveBeenCalledWith({ + actionId: '1', + services: expect.anything(), config: {}, - id: 'system-connector-.cases', - name: 'System action: .cases', secrets: {}, - isPreconfigured: false, - isDeprecated: false, - isSystemAction: true, - }, - ], - }); + params: { foo: true }, + logger: loggerMock, + request: {}, + }); + }); + + test(`${label} throws error if isESOCanEncrypt is false`, async () => { + const customActionExecutor = new ActionExecutor({ isESOCanEncrypt: false }); + customActionExecutor.initialize({ + ...actionExecutorInitializationParams, + inMemoryConnectors: [], + }); + + try { + if (executeUnsecure) { + await customActionExecutor.executeUnsecured(executeUnsecuredParams); + } else { + await customActionExecutor.execute(executeParams); + } + } catch (e) { + expect(e.message).toBe( + 'Unable to execute action because the Encrypted Saved Objects plugin is missing encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in the kibana.yml or use the bin/kibana-encryption-keys command.' + ); + expect(getErrorSource(e)).toBe(TaskErrorSource.USER); + } + }); + + test(`${label} does not throw error if isESOCanEncrypt is false but connector is preconfigured`, async () => { + const customActionExecutor = new ActionExecutor({ isESOCanEncrypt: false }); + customActionExecutor.initialize(actionExecutorInitializationParams); + + connectorTypeRegistry.get.mockReturnValueOnce({ + ...connectorType, + validate: { + config: { schema: schema.object({ bar: schema.string() }) }, + secrets: { schema: schema.object({ apiKey: schema.string() }) }, + params: { schema: schema.object({ foo: schema.boolean() }) }, + }, + }); + + if (executeUnsecure) { + await customActionExecutor.executeUnsecured({ + ...executeUnsecuredParams, + actionId: 'preconfigured', + }); + } else { + await customActionExecutor.execute({ ...executeParams, actionId: 'preconfigured' }); + } + + expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).not.toHaveBeenCalled(); + + expect(connectorTypeRegistry.get).toHaveBeenCalledWith('test'); + expect(connectorTypeRegistry.isActionExecutable).toHaveBeenCalledWith( + 'preconfigured', + 'test', + { + notifyUsage: true, + } + ); - const actionType: jest.Mocked = { - id: '.cases', - name: 'Cases', - minimumLicenseRequired: 'platinum', - supportedFeatureIds: ['alerting'], - isSystemActionType: true, - validate: { - config: { schema: schema.any() }, - secrets: { schema: schema.any() }, - params: { schema: schema.any() }, - }, - executor: jest.fn(), - }; + expect(connectorType.executor).toHaveBeenCalledWith({ + actionId: 'preconfigured', + services: expect.anything(), + config: { + bar: 'preconfigured', + }, + secrets: { + apiKey: 'abc', + }, + params: { foo: true }, + logger: loggerMock, + }); + + expect(loggerMock.debug).toBeCalledWith('executing action test:preconfigured: Preconfigured'); + expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); + + const execStartDoc = getBaseExecuteStartEventLogDoc(executeUnsecure); + const execDoc = getBaseExecuteEventLogDoc(executeUnsecure); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(1, { + ...execStartDoc, + kibana: { + ...execStartDoc.kibana, + action: { + ...execStartDoc.kibana.action, + id: 'preconfigured', + name: 'Preconfigured', + }, + saved_objects: [ + { + id: 'preconfigured', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: 'test', + space_agnostic: true, + }, + ], + }, + message: 'action started: test:preconfigured: Preconfigured', + }); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(2, { + ...execDoc, + kibana: { + ...execDoc.kibana, + action: { + ...execDoc.kibana.action, + id: 'preconfigured', + name: 'Preconfigured', + }, + saved_objects: [ + { + id: 'preconfigured', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: 'test', + space_agnostic: true, + }, + ], + }, + message: 'action executed: test:preconfigured: Preconfigured', + }); + }); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - await actionExecutor.execute({ ...executeParams, actionId: 'system-connector-.cases' }); + test(`${label} does not throw error if isESOCanEncrypt is false but connector is a system action`, async () => { + if (executeUnsecure) return; + const customActionExecutor = new ActionExecutor({ isESOCanEncrypt: false }); + customActionExecutor.initialize(actionExecutorInitializationParams); - expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).not.toHaveBeenCalled(); + connectorTypeRegistry.get.mockReturnValueOnce(systemConnectorType); + connectorTypeRegistry.isSystemActionType.mockReturnValueOnce(true); - expect(actionTypeRegistry.get).toHaveBeenCalledWith('.cases'); - expect(actionTypeRegistry.isActionExecutable).toHaveBeenCalledWith( - 'system-connector-.cases', - '.cases', - { - notifyUsage: true, - } - ); + await customActionExecutor.execute({ + ...executeParams, + actionId: 'system-connector-.cases', + }); - expect(actionType.executor).toHaveBeenCalledWith({ - actionId: 'system-connector-.cases', - services: expect.anything(), - config: {}, - secrets: {}, - params: { foo: true }, - logger: loggerMock, - request: {}, - }); + expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).not.toHaveBeenCalled(); - expect(loggerMock.debug).toBeCalledWith( - 'executing action .cases:system-connector-.cases: System action: .cases' - ); - expect(eventLogger.logEvent.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Object { - "event": Object { - "action": "execute-start", - "kind": "action", + expect(connectorTypeRegistry.get).toHaveBeenCalledWith('.cases'); + expect(connectorTypeRegistry.isActionExecutable).toHaveBeenCalledWith( + 'system-connector-.cases', + '.cases', + { + notifyUsage: true, + } + ); + + expect(systemConnectorType.executor).toHaveBeenCalledWith({ + actionId: 'system-connector-.cases', + services: expect.anything(), + config: {}, + secrets: {}, + params: { foo: true }, + logger: loggerMock, + request: {}, + }); + + expect(loggerMock.debug).toBeCalledWith( + 'executing action .cases:system-connector-.cases: System action: .cases' + ); + expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); + + const execStartDoc = getBaseExecuteStartEventLogDoc(executeUnsecure); + const execDoc = getBaseExecuteEventLogDoc(executeUnsecure); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(1, { + ...execStartDoc, + kibana: { + ...execStartDoc.kibana, + action: { + ...execStartDoc.kibana.action, + id: 'system-connector-.cases', + name: 'System action: .cases', }, - "kibana": Object { - "action": Object { - "execution": Object { - "uuid": "2", - }, - "id": "system-connector-.cases", - "name": "System action: .cases", - }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, - }, + saved_objects: [ + { + id: 'system-connector-.cases', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: '.cases', + space_agnostic: true, }, - "saved_objects": Array [ - Object { - "id": "system-connector-.cases", - "namespace": "some-namespace", - "rel": "primary", - "space_agnostic": true, - "type": "action", - "type_id": ".cases", - }, - ], - "space_ids": Array [ - "some-namespace", - ], - }, - "message": "action started: .cases:system-connector-.cases: System action: .cases", + ], }, - ], - Array [ - Object { - "event": Object { - "action": "execute", - "kind": "action", - "outcome": "success", + message: 'action started: .cases:system-connector-.cases: System action: .cases', + }); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(2, { + ...execDoc, + ...(executeUnsecure + ? { error: { message: `Cannot execute unsecured system action` } } + : {}), + event: { + ...execDoc.event, + outcome: executeUnsecure ? 'failure' : 'success', + }, + kibana: { + ...execDoc.kibana, + action: { + ...execDoc.kibana.action, + id: 'system-connector-.cases', + name: 'System action: .cases', }, - "kibana": Object { - "action": Object { - "execution": Object { - "uuid": "2", - }, - "id": "system-connector-.cases", - "name": "System action: .cases", - }, - "alert": Object { - "rule": Object { - "execution": Object { - "uuid": "123abc", - }, - }, + saved_objects: [ + { + id: 'system-connector-.cases', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: '.cases', + space_agnostic: true, }, - "saved_objects": Array [ - Object { - "id": "system-connector-.cases", - "namespace": "some-namespace", - "rel": "primary", - "space_agnostic": true, - "type": "action", - "type_id": ".cases", - }, - ], - "space_ids": Array [ - "some-namespace", - ], + ], + }, + message: `action ${ + executeUnsecure ? 'execution failure' : 'executed' + }: .cases:system-connector-.cases: System action: .cases`, + }); + }); + + test(`${label} does not log warning when executor succeeds`, async () => { + connectorType.executor.mockResolvedValueOnce({ + actionId: '1', + status: 'ok', + }); + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + connectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce(connectorType); + + if (executeUnsecure) { + await actionExecutor.executeUnsecured(executeUnsecuredParams); + } else { + await actionExecutor.execute(executeParams); + } + expect(loggerMock.warn).not.toBeCalled(); + }); + + test(`${label} logs warning when executor returns error gracefully`, async () => { + connectorType.executor.mockResolvedValueOnce({ + actionId: '1', + status: 'error', + message: 'message for action execution error', + serviceMessage: 'serviceMessage for action execution error', + }); + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + connectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce(connectorType); + + if (executeUnsecure) { + await actionExecutor.executeUnsecured(executeUnsecuredParams); + } else { + await actionExecutor.execute(executeParams); + } + expect(loggerMock.warn).toBeCalledWith( + 'action execution failure: test:1: 1: message for action execution error: serviceMessage for action execution error' + ); + }); + + test(`${label} logs warning and error when executor throws error`, async () => { + const err = new Error('this action execution is intended to fail'); + err.stack = 'foo error\n stack 1\n stack 2\n stack 3'; + connectorType.executor.mockRejectedValueOnce(err); + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + connectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce(connectorType); + + if (executeUnsecure) { + await actionExecutor.executeUnsecured(executeUnsecuredParams); + } else { + await actionExecutor.execute(executeParams); + } + expect(loggerMock.warn).toBeCalledWith( + 'action execution failure: test:1: 1: an error occurred while running the action: this action execution is intended to fail; retry: true' + ); + expect(loggerMock.error).toBeCalledWith(err, { + error: { stack_trace: 'foo error\n stack 1\n stack 2\n stack 3' }, + tags: ['test', '1', 'action-run-failed'], + }); + }); + + test(`${label} logs warning when executor returns invalid status`, async () => { + connectorType.executor.mockResolvedValueOnce({ + actionId: '1', + // @ts-expect-error + status: 'invalid-status', + message: 'message for action execution error', + serviceMessage: 'serviceMessage for action execution error', + }); + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + connectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce(connectorType); + + if (executeUnsecure) { + await actionExecutor.executeUnsecured(executeUnsecuredParams); + } else { + await actionExecutor.execute(executeParams); + } + expect(loggerMock.warn).toBeCalledWith( + 'action execution failure: test:1: 1: returned unexpected result "invalid-status"' + ); + }); + + test(`${label} with action type in UNALLOWED_FOR_UNSECURE_EXECUTION_CONNECTOR_TYPE_IDS list`, async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce({ + ...connectorSavedObject, + attributes: { + ...connectorSavedObject.attributes, + actionTypeId: '.index', + }, + }); + connectorTypeRegistry.get.mockReturnValueOnce(connectorType); + if (executeUnsecure) { + const result = await actionExecutor.executeUnsecured(executeUnsecuredParams); + expect(result).toEqual({ + actionId: CONNECTOR_ID, + errorSource: 'user', + message: + 'Cannot execute unsecured ".index" action - execution of this type is not allowed', + retry: false, + status: 'error', + }); + expect(connectorType.executor).not.toHaveBeenCalled(); + } else { + await actionExecutor.execute(executeParams); + + expect(connectorType.executor).toHaveBeenCalledWith({ + actionId: CONNECTOR_ID, + services: expect.anything(), + config: { + bar: true, }, - "message": "action executed: .cases:system-connector-.cases: System action: .cases", - "user": Object { - "id": "123", - "name": "coolguy", + secrets: { + baz: true, }, - }, - ], - ] - `); + params: { foo: true }, + logger: loggerMock, + }); + } + }); + } }); -test('does not log warning when alert executor succeeds', async () => { - const executorMock = setupActionExecutorMock(); - executorMock.mockResolvedValue({ - actionId: '1', - status: 'ok', - }); - await actionExecutor.execute(executeParams); - expect(loggerMock.warn).not.toBeCalled(); -}); +describe('System actions', () => { + test('calls ensureAuthorized on system actions if additional privileges are specified', async () => { + connectorTypeRegistry.get.mockReturnValueOnce({ + ...systemConnectorType, + getKibanaPrivileges: () => ['test/create'], + }); + connectorTypeRegistry.isSystemActionType.mockReturnValueOnce(true); + connectorTypeRegistry.getSystemActionKibanaPrivileges.mockReturnValueOnce(['test/create']); -test('logs a warning when alert executor has an error', async () => { - const executorMock = setupActionExecutorMock(); - executorMock.mockResolvedValue({ - actionId: '1', - status: 'error', - message: 'message for action execution error', - serviceMessage: 'serviceMessage for action execution error', - }); - await actionExecutor.execute(executeParams); - expect(loggerMock.warn).toBeCalledWith( - 'action execution failure: test:1: action-1: message for action execution error: serviceMessage for action execution error' - ); -}); + await actionExecutor.execute({ ...executeParams, actionId: 'system-connector-.cases' }); -test('logs a warning and error when alert executor throws an error', async () => { - const executorMock = setupActionExecutorMock(); - const err = new Error('this action execution is intended to fail'); - err.stack = 'foo error\n stack 1\n stack 2\n stack 3'; - executorMock.mockRejectedValue(err); - await actionExecutor.execute(executeParams); - expect(loggerMock.warn).toBeCalledWith( - 'action execution failure: test:1: action-1: an error occurred while running the action: this action execution is intended to fail; retry: true' - ); - expect(loggerMock.error).toBeCalledWith(err, { - error: { stack_trace: 'foo error\n stack 1\n stack 2\n stack 3' }, - tags: ['test', '1', 'action-run-failed'], + expect(authorizationMock.ensureAuthorized).toBeCalledWith({ + actionTypeId: '.cases', + operation: 'execute', + additionalPrivileges: ['test/create'], + }); }); -}); -test('logs a warning when alert executor returns invalid status', async () => { - const executorMock = setupActionExecutorMock(); - // object typed as any as it has an invalid status value, but we want to test that - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const alertExecutionStatus: any = { - actionId: '1', - status: 'invalid-status', - message: 'message for action execution error', - serviceMessage: 'serviceMessage for action execution error', - }; - executorMock.mockResolvedValue(alertExecutionStatus); - await actionExecutor.execute(executeParams); - expect(loggerMock.warn).toBeCalledWith( - 'action execution failure: test:1: action-1: returned unexpected result "invalid-status"' - ); + test('pass the params to the connectorTypeRegistry when authorizing system actions', async () => { + connectorTypeRegistry.get.mockReturnValueOnce({ + ...systemConnectorType, + getKibanaPrivileges: () => ['test/create'], + }); + connectorTypeRegistry.isSystemActionType.mockReturnValueOnce(true); + connectorTypeRegistry.getSystemActionKibanaPrivileges.mockReturnValueOnce(['test/create']); + + await actionExecutor.execute({ + ...executeParams, + params: { foo: 'bar' }, + actionId: 'system-connector-.cases', + }); + + expect(connectorTypeRegistry.getSystemActionKibanaPrivileges).toHaveBeenCalledWith('.cases', { + foo: 'bar', + }); + + expect(authorizationMock.ensureAuthorized).toBeCalledWith({ + actionTypeId: '.cases', + operation: 'execute', + additionalPrivileges: ['test/create'], + }); + }); }); test('writes to event log for execute timeout', async () => { @@ -2130,19 +1626,11 @@ test('writes usage data to event log for streaming OpenAI events', async () => { function setupActionExecutorMock( actionTypeId = 'test', - validationOverride?: ActionType['validate'] + validationOverride?: ConnectorType['validate'] ) { - const actionType: jest.Mocked = { - id: 'test', - name: 'Test', - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - validate: validationOverride || { - config: { schema: schema.object({ bar: schema.boolean() }) }, - secrets: { schema: schema.object({ baz: schema.boolean() }) }, - params: { schema: schema.object({ foo: schema.boolean() }) }, - }, - executor: jest.fn(), + const thisConnectorType: jest.Mocked = { + ...connectorType, + ...(validationOverride ? { validate: validationOverride } : {}), }; const actionSavedObject = { id: '1', @@ -2161,6 +1649,6 @@ function setupActionExecutorMock( references: [], }; encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce(actionSavedObject); - actionTypeRegistry.get.mockReturnValueOnce(actionType); - return actionType.executor; + connectorTypeRegistry.get.mockReturnValueOnce(thisConnectorType); + return thisConnectorType.executor; } diff --git a/x-pack/plugins/actions/server/lib/action_executor.ts b/x-pack/plugins/actions/server/lib/action_executor.ts index 9a8a17d612cf7..6ab2df73fec37 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.ts @@ -13,7 +13,7 @@ import { withSpan } from '@kbn/apm-utils'; import { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin/server'; import { SpacesServiceStart } from '@kbn/spaces-plugin/server'; import { IEventLogger, SAVED_OBJECT_REL_PRIMARY } from '@kbn/event-log-plugin/server'; -import { SecurityPluginStart } from '@kbn/security-plugin/server'; +import { AuthenticatedUser, SecurityPluginStart } from '@kbn/security-plugin/server'; import { createTaskRunError, TaskErrorSource } from '@kbn/task-manager-plugin/server'; import { getGenAiTokenTracking, shouldTrackGenAiToken } from './gen_ai_token_tracking'; import { @@ -30,8 +30,12 @@ import { ActionTypeRegistryContract, ActionTypeSecrets, GetServicesFunction, + GetUnsecuredServicesFunction, InMemoryConnector, RawAction, + Services, + UNALLOWED_FOR_UNSECURE_EXECUTION_CONNECTOR_TYPE_IDS, + UnsecuredServices, ValidatorServices, } from '../types'; import { EVENT_LOG_ACTIONS } from '../constants/event_log'; @@ -49,6 +53,7 @@ export interface ActionExecutorContext { spaces?: SpacesServiceStart; security?: SecurityPluginStart; getServices: GetServicesFunction; + getUnsecuredServices: GetUnsecuredServicesFunction; encryptedSavedObjectsClient: EncryptedSavedObjectsClient; actionTypeRegistry: ActionTypeRegistryContract; eventLogger: IEventLogger; @@ -62,19 +67,35 @@ export interface TaskInfo { } export interface ExecuteOptions { - actionId: string; actionExecutionId: string; + actionId: string; + consumer?: string; + executionId?: string; isEphemeral?: boolean; - request: KibanaRequest; params: Record; + relatedSavedObjects?: RelatedSavedObjects; + request: KibanaRequest; source?: ActionExecutionSource; taskInfo?: TaskInfo; - actionInfo?: ActionInfo; - executionId?: string; - consumer?: string; - relatedSavedObjects?: RelatedSavedObjects; } +type ExecuteHelperOptions = Omit, 'request'> & { + currentUser?: AuthenticatedUser | null; + checkCanExecuteFn?: (connectorTypeId: string) => Promise; + executeLabel: string; + namespace: { namespace?: string }; + request?: KibanaRequest; + services: Services | UnsecuredServices; + spaceId?: string; +}; + +type UnsecuredExecuteOptions = Pick< + ExecuteOptions, + 'actionExecutionId' | 'actionId' | 'params' | 'relatedSavedObjects' | 'source' +> & { + spaceId: string; +}; + export type ActionExecutorContract = PublicMethodsOf; export class ActionExecutor { @@ -97,45 +118,269 @@ export class ActionExecutor { } public async execute({ + actionExecutionId, actionId, - params, + consumer, + executionId, + isEphemeral, request, + params, + relatedSavedObjects, source, - isEphemeral, taskInfo, + }: ExecuteOptions): Promise> { + const { + actionTypeRegistry, + getActionsAuthorizationWithRequest, + getServices, + security, + spaces, + } = this.actionExecutorContext!; + + const services = getServices(request); + const spaceId = spaces && spaces.getSpaceId(request); + const namespace = spaceId && spaceId !== 'default' ? { namespace: spaceId } : {}; + const authorization = getActionsAuthorizationWithRequest(request); + const currentUser = security?.authc.getCurrentUser(request); + + return await this.executeHelper({ + actionExecutionId, + actionId, + consumer, + currentUser, + checkCanExecuteFn: async (connectorTypeId: string) => { + /** + * Ensures correct permissions for execution and + * performs authorization checks for system actions. + * It will thrown an error in case of failure. + */ + await ensureAuthorizedToExecute({ + params, + actionId, + actionTypeId: connectorTypeId, + actionTypeRegistry, + authorization, + }); + }, + executeLabel: `execute_action`, + executionId, + isEphemeral, + namespace, + params, + relatedSavedObjects, + request, + services, + source, + spaceId, + taskInfo, + }); + } + + public async executeUnsecured({ + actionExecutionId, + actionId, + params, + relatedSavedObjects, + spaceId, + source, + }: UnsecuredExecuteOptions): Promise> { + const { actionTypeRegistry, getUnsecuredServices } = this.actionExecutorContext!; + + const services = getUnsecuredServices(); + const namespace = spaceId && spaceId !== 'default' ? { namespace: spaceId } : {}; + + return await this.executeHelper({ + actionExecutionId, + actionId, + checkCanExecuteFn: async (connectorTypeId: string) => { + let errorMessage: string | null = null; + if (UNALLOWED_FOR_UNSECURE_EXECUTION_CONNECTOR_TYPE_IDS.includes(connectorTypeId)) { + errorMessage = `Cannot execute unsecured "${connectorTypeId}" action - execution of this type is not allowed`; + } + + // We don't allow execute system actions in unsecured manner because they require a request + if (actionTypeRegistry.isSystemActionType(connectorTypeId)) { + errorMessage = `Cannot execute unsecured system action`; + } + + if (errorMessage) { + throw new ActionExecutionError(errorMessage, ActionExecutionErrorReason.Authorization, { + actionId, + status: 'error', + message: errorMessage, + retry: false, + errorSource: TaskErrorSource.USER, + }); + } + }, + executeLabel: `execute_unsecured_action`, + namespace, + params, + relatedSavedObjects, + services, + source, + spaceId, + }); + } + + public async logCancellation({ + actionId, + request, + relatedSavedObjects, + source, executionId, + taskInfo, consumer, - relatedSavedObjects, actionExecutionId, - }: ExecuteOptions): Promise> { + }: { + actionId: string; + actionExecutionId: string; + request: KibanaRequest; + taskInfo?: TaskInfo; + executionId?: string; + relatedSavedObjects: RelatedSavedObjects; + source?: ActionExecutionSource; + consumer?: string; + }) { + const { spaces, eventLogger } = this.actionExecutorContext!; + + const spaceId = spaces && spaces.getSpaceId(request); + const namespace = spaceId && spaceId !== 'default' ? { namespace: spaceId } : {}; + + if (!this.actionInfo || this.actionInfo.actionId !== actionId) { + this.actionInfo = await this.getActionInfoInternal(actionId, namespace.namespace); + } + + const task = taskInfo + ? { + task: { + scheduled: taskInfo.scheduled.toISOString(), + scheduleDelay: Millis2Nanos * (Date.now() - taskInfo.scheduled.getTime()), + }, + } + : {}; + // Write event log entry + const event = createActionEventLogRecordObject({ + actionId, + consumer, + action: EVENT_LOG_ACTIONS.executeTimeout, + message: `action: ${this.actionInfo.actionTypeId}:${actionId}: '${ + this.actionInfo.name ?? '' + }' execution cancelled due to timeout - exceeded default timeout of "5m"`, + ...namespace, + ...task, + executionId, + spaceId, + savedObjects: [ + { + type: 'action', + id: actionId, + typeId: this.actionInfo.actionTypeId, + relation: SAVED_OBJECT_REL_PRIMARY, + }, + ], + relatedSavedObjects, + actionExecutionId, + isInMemory: this.actionInfo.isInMemory, + ...(source ? { source } : {}), + }); + + eventLogger.logEvent(event); + } + + private async getActionInfoInternal( + actionId: string, + namespace: string | undefined + ): Promise { + const { encryptedSavedObjectsClient, inMemoryConnectors } = this.actionExecutorContext!; + + // check to see if it's in memory connector first + const inMemoryAction = inMemoryConnectors.find( + (inMemoryConnector) => inMemoryConnector.id === actionId + ); + if (inMemoryAction) { + return { + actionTypeId: inMemoryAction.actionTypeId, + name: inMemoryAction.name, + config: inMemoryAction.config, + secrets: inMemoryAction.secrets, + actionId, + isInMemory: true, + rawAction: { ...inMemoryAction, isMissingSecrets: false }, + }; + } + + if (!this.isESOCanEncrypt) { + throw createTaskRunError( + new Error( + `Unable to execute action because the Encrypted Saved Objects plugin is missing encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in the kibana.yml or use the bin/kibana-encryption-keys command.` + ), + TaskErrorSource.USER + ); + } + + try { + const rawAction = await encryptedSavedObjectsClient.getDecryptedAsInternalUser( + 'action', + actionId, + { + namespace: namespace === 'default' ? undefined : namespace, + } + ); + const { + attributes: { secrets, actionTypeId, config, name }, + } = rawAction; + + return { + actionTypeId, + name, + config, + secrets, + actionId, + rawAction: rawAction.attributes, + }; + } catch (e) { + if (SavedObjectsErrorHelpers.isNotFoundError(e)) { + throw createTaskRunError(e, TaskErrorSource.USER); + } + throw createTaskRunError(e, TaskErrorSource.FRAMEWORK); + } + } + + private async executeHelper({ + actionExecutionId, + actionId, + consumer, + currentUser, + checkCanExecuteFn, + executeLabel, + executionId, + isEphemeral, + namespace, + params, + relatedSavedObjects, + request, + services, + source, + spaceId, + taskInfo, + }: ExecuteHelperOptions): Promise> { if (!this.isInitialized) { throw new Error('ActionExecutor not initialized'); } return withSpan( { - name: `execute_action`, + name: executeLabel, type: 'actions', labels: { actions_connector_id: actionId, }, }, async (span) => { - const { - spaces, - getServices, - actionTypeRegistry, - eventLogger, - security, - getActionsAuthorizationWithRequest, - } = this.actionExecutorContext!; + const { actionTypeRegistry, eventLogger } = this.actionExecutorContext!; - const services = getServices(request); - const spaceId = spaces && spaces.getSpaceId(request); - const namespace = spaceId && spaceId !== 'default' ? { namespace: spaceId } : {}; - const authorization = getActionsAuthorizationWithRequest(request); - - const actionInfo = await this.getActionInfoInternal(actionId, request, namespace.namespace); + const actionInfo = await this.getActionInfoInternal(actionId, namespace.namespace); const { actionTypeId, name, config, secrets } = actionInfo; @@ -143,7 +388,11 @@ export class ActionExecutor { this.actionInfo = actionInfo; } - if (!actionTypeRegistry.isActionExecutable(actionId, actionTypeId, { notifyUsage: true })) { + if ( + !actionTypeRegistry.isActionExecutable(actionId, actionTypeId, { + notifyUsage: true, + }) + ) { try { actionTypeRegistry.ensureActionTypeEnabled(actionTypeId); } catch (e) { @@ -176,11 +425,10 @@ export class ActionExecutor { } const loggerId = actionTypeId.startsWith('.') ? actionTypeId.substring(1) : actionTypeId; - let { logger } = this.actionExecutorContext!; - logger = logger.get(loggerId); + const logger = this.actionExecutorContext!.logger.get(loggerId); if (span) { - span.name = `execute_action ${actionTypeId}`; + span.name = `${executeLabel} ${actionTypeId}`; span.addLabels({ actions_connector_type_id: actionTypeId, }); @@ -236,18 +484,9 @@ export class ActionExecutor { let rawResult: ActionTypeExecutorRawResult; try { - /** - * Ensures correct permissions for execution and - * performs authorization checks for system actions. - * It will thrown an error in case of failure. - */ - await ensureAuthorizedToExecute({ - params, - actionId, - actionTypeId, - actionTypeRegistry, - authorization, - }); + if (checkCanExecuteFn) { + await checkCanExecuteFn(actionTypeId); + } rawResult = await actionType.executor({ actionId, @@ -295,8 +534,6 @@ export class ActionExecutor { function completeEventLogging() { eventLogger.stopTiming(event); - const currentUser = security?.authc.getCurrentUser(request); - event.user = event.user || {}; event.user.name = currentUser?.username; event.user.id = currentUser?.profile_uid; @@ -366,129 +603,6 @@ export class ActionExecutor { } ); } - - public async logCancellation({ - actionId, - request, - relatedSavedObjects, - source, - executionId, - taskInfo, - consumer, - actionExecutionId, - }: { - actionId: string; - actionExecutionId: string; - request: KibanaRequest; - taskInfo?: TaskInfo; - executionId?: string; - relatedSavedObjects: RelatedSavedObjects; - source?: ActionExecutionSource; - consumer?: string; - }) { - const { spaces, eventLogger } = this.actionExecutorContext!; - - const spaceId = spaces && spaces.getSpaceId(request); - const namespace = spaceId && spaceId !== 'default' ? { namespace: spaceId } : {}; - if (!this.actionInfo || this.actionInfo.actionId !== actionId) { - this.actionInfo = await this.getActionInfoInternal(actionId, request, namespace.namespace); - } - const task = taskInfo - ? { - task: { - scheduled: taskInfo.scheduled.toISOString(), - scheduleDelay: Millis2Nanos * (Date.now() - taskInfo.scheduled.getTime()), - }, - } - : {}; - // Write event log entry - const event = createActionEventLogRecordObject({ - actionId, - consumer, - action: EVENT_LOG_ACTIONS.executeTimeout, - message: `action: ${this.actionInfo.actionTypeId}:${actionId}: '${ - this.actionInfo.name ?? '' - }' execution cancelled due to timeout - exceeded default timeout of "5m"`, - ...namespace, - ...task, - executionId, - spaceId, - savedObjects: [ - { - type: 'action', - id: actionId, - typeId: this.actionInfo.actionTypeId, - relation: SAVED_OBJECT_REL_PRIMARY, - }, - ], - relatedSavedObjects, - actionExecutionId, - isInMemory: this.actionInfo.isInMemory, - ...(source ? { source } : {}), - }); - - eventLogger.logEvent(event); - } - - public async getActionInfoInternal( - actionId: string, - request: KibanaRequest, - namespace: string | undefined - ): Promise { - const { encryptedSavedObjectsClient, inMemoryConnectors } = this.actionExecutorContext!; - - // check to see if it's in memory action first - const inMemoryAction = inMemoryConnectors.find( - (inMemoryConnector) => inMemoryConnector.id === actionId - ); - if (inMemoryAction) { - return { - actionTypeId: inMemoryAction.actionTypeId, - name: inMemoryAction.name, - config: inMemoryAction.config, - secrets: inMemoryAction.secrets, - actionId, - isInMemory: true, - rawAction: { ...inMemoryAction, isMissingSecrets: false }, - }; - } - - if (!this.isESOCanEncrypt) { - throw createTaskRunError( - new Error( - `Unable to execute action because the Encrypted Saved Objects plugin is missing encryption key. Please set xpack.encryptedSavedObjects.encryptionKey in the kibana.yml or use the bin/kibana-encryption-keys command.` - ), - TaskErrorSource.USER - ); - } - - try { - const rawAction = await encryptedSavedObjectsClient.getDecryptedAsInternalUser( - 'action', - actionId, - { - namespace: namespace === 'default' ? undefined : namespace, - } - ); - const { - attributes: { secrets, actionTypeId, config, name }, - } = rawAction; - - return { - actionTypeId, - name, - config, - secrets, - actionId, - rawAction: rawAction.attributes, - }; - } catch (e) { - if (SavedObjectsErrorHelpers.isNotFoundError(e)) { - throw createTaskRunError(e, TaskErrorSource.USER); - } - throw createTaskRunError(e, TaskErrorSource.FRAMEWORK); - } - } } export interface ActionInfo { diff --git a/x-pack/plugins/actions/server/lib/index.ts b/x-pack/plugins/actions/server/lib/index.ts index 828e08a4ad4db..e97198ee7b432 100644 --- a/x-pack/plugins/actions/server/lib/index.ts +++ b/x-pack/plugins/actions/server/lib/index.ts @@ -37,3 +37,4 @@ export { } from './action_execution_source'; export { validateEmptyStrings } from './validate_empty_strings'; export { parseDate } from './parse_date'; +export type { RelatedSavedObjects } from './related_saved_objects'; diff --git a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts index 8fcb031ce1359..96a3059ef852a 100644 --- a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts +++ b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts @@ -52,32 +52,6 @@ let fakeTimer: sinon.SinonFakeTimers; let taskRunnerFactory: TaskRunnerFactory; let mockedTaskInstance: ConcreteTaskInstance; -const mockAction = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: 'test', - config: { - bar: true, - }, - secrets: { - baz: true, - }, - isMissingSecrets: false, - }, - references: [], -}; - -const mockActionInfo = { - actionTypeId: mockAction.attributes.actionTypeId, - name: mockAction.attributes.name, - config: mockAction.attributes.config, - secrets: mockAction.attributes.secrets, - actionId: mockAction.id, - rawAction: mockAction.attributes, -}; - beforeAll(() => { fakeTimer = sinon.useFakeTimers(); mockedTaskInstance = { @@ -108,9 +82,15 @@ const services = { savedObjectsClient: savedObjectsClientMock.create(), }; +const unsecuredServices = { + log: jest.fn(), + savedObjectsClient: savedObjectsRepositoryMock.create(), +}; + const actionExecutorInitializerParams = { logger: loggingSystemMock.create().get(), getServices: jest.fn().mockReturnValue(services), + getUnsecuredServices: jest.fn().mockReturnValue(unsecuredServices), actionTypeRegistry, getActionsAuthorizationWithRequest: jest.fn().mockReturnValue(actionsAuthorizationMock.create()), encryptedSavedObjectsClient: mockedEncryptedSavedObjectsClient, @@ -132,7 +112,6 @@ describe('Task Runner Factory', () => { jest.resetAllMocks(); jest.clearAllMocks(); actionExecutorInitializerParams.getServices.mockReturnValue(services); - mockedActionExecutor.getActionInfoInternal.mockResolvedValueOnce(mockActionInfo); }); test(`throws an error if factory isn't initialized`, () => { diff --git a/x-pack/plugins/actions/server/mocks.ts b/x-pack/plugins/actions/server/mocks.ts index 7655ad6de945d..ac7d42d658e2b 100644 --- a/x-pack/plugins/actions/server/mocks.ts +++ b/x-pack/plugins/actions/server/mocks.ts @@ -9,12 +9,13 @@ import { elasticsearchServiceMock, loggingSystemMock, savedObjectsClientMock, + savedObjectsRepositoryMock, } from '@kbn/core/server/mocks'; import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/server/mocks'; import { Logger } from '@kbn/core/server'; import { actionsClientMock } from './actions_client/actions_client.mock'; import { PluginSetupContract, PluginStartContract, renderActionParameterTemplates } from './plugin'; -import { Services } from './types'; +import { Services, UnsecuredServices } from './types'; import { actionsAuthorizationMock } from './authorization/actions_authorization.mock'; import { ConnectorTokenClient } from './lib/connector_token_client'; import { unsecuredActionsClientMock } from './unsecured_actions_client/unsecured_actions_client.mock'; @@ -86,8 +87,26 @@ const createServicesMock = () => { return mock; }; +const createUnsecuredServicesMock = () => { + const mock: jest.Mocked< + UnsecuredServices & { + savedObjectsClient: ReturnType; + } + > = { + savedObjectsClient: savedObjectsRepositoryMock.create(), + scopedClusterClient: elasticsearchServiceMock.createScopedClusterClient().asCurrentUser, + connectorTokenClient: new ConnectorTokenClient({ + unsecuredSavedObjectsClient: savedObjectsRepositoryMock.create(), + encryptedSavedObjectsClient: encryptedSavedObjectsMock.createClient(), + logger, + }), + }; + return mock; +}; + export const actionsMock = { createServices: createServicesMock, + createUnsecuredServices: createUnsecuredServicesMock, createSetup: createSetupMock, createStart: createStartMock, }; diff --git a/x-pack/plugins/actions/server/plugin.ts b/x-pack/plugins/actions/server/plugin.ts index 6479ed1b1d05a..33383e526e36d 100644 --- a/x-pack/plugins/actions/server/plugin.ts +++ b/x-pack/plugins/actions/server/plugin.ts @@ -18,6 +18,7 @@ import { ElasticsearchServiceStart, SavedObjectsClientContract, SavedObjectsBulkGetObject, + ISavedObjectsRepository, } from '@kbn/core/server'; import { SECURITY_EXTENSION_ID } from '@kbn/core-saved-objects-server'; import { @@ -65,6 +66,7 @@ import { ActionTypeSecrets, ActionTypeParams, ActionsRequestHandlerContext, + UnsecuredServices, } from './types'; import { ActionsConfigurationUtilities, getActionsConfigurationUtilities } from './actions_config'; @@ -488,6 +490,7 @@ export class ActionsPlugin implements Plugin core.savedObjects.getScopedClient(request); + const getInternalSavedObjectsRepositoryWithoutAccessToActions = () => + core.savedObjects.createInternalRepository(); + actionExecutor!.initialize({ logger, eventLogger: this.eventLogger!, @@ -534,6 +541,12 @@ export class ActionsPlugin implements Plugin this.getUnsecuredSavedObjectsClient(core.savedObjects, request) ), + getUnsecuredServices: this.getUnsecuredServicesFactory( + getInternalSavedObjectsRepositoryWithoutAccessToActions, + core.elasticsearch, + encryptedSavedObjectsClient, + () => core.savedObjects.createInternalRepository(includedHiddenTypes) + ), encryptedSavedObjectsClient, actionTypeRegistry: actionTypeRegistry!, inMemoryConnectors: this.inMemoryConnectors, @@ -629,6 +642,25 @@ export class ActionsPlugin implements Plugin ISavedObjectsRepository, + elasticsearch: ElasticsearchServiceStart, + encryptedSavedObjectsClient: EncryptedSavedObjectsClient, + unsecuredSavedObjectsRepository: () => ISavedObjectsRepository + ): () => UnsecuredServices { + return () => { + return { + savedObjectsClient: getSavedObjectRepository(), + scopedClusterClient: elasticsearch.client.asInternalUser, + connectorTokenClient: new ConnectorTokenClient({ + unsecuredSavedObjectsClient: unsecuredSavedObjectsRepository(), + encryptedSavedObjectsClient, + logger: this.logger, + }), + }; + }; + } + private getInMemoryConnectors = () => this.inMemoryConnectors; private setSystemActions = () => { diff --git a/x-pack/plugins/actions/server/types.ts b/x-pack/plugins/actions/server/types.ts index 239305eaafc10..aa6c7b26cf0ae 100644 --- a/x-pack/plugins/actions/server/types.ts +++ b/x-pack/plugins/actions/server/types.ts @@ -15,6 +15,7 @@ import { CustomRequestHandlerContext, SavedObjectReference, Logger, + ISavedObjectsRepository, } from '@kbn/core/server'; import { AnySchema } from 'joi'; import { SubActionConnector } from './sub_action_framework/sub_action_connector'; @@ -30,6 +31,7 @@ import { ActionsConfigurationUtilities } from './actions_config'; export type { ActionTypeExecutorResult, ActionTypeExecutorRawResult } from '../common'; export type WithoutQueryAndParams = Pick>; export type GetServicesFunction = (request: KibanaRequest) => Services; +export type GetUnsecuredServicesFunction = () => UnsecuredServices; export type ActionTypeRegistryContract = PublicMethodsOf; export type SpaceIdToNamespaceFunction = (spaceId?: string) => string | undefined; export type ActionTypeConfig = Record; @@ -49,6 +51,12 @@ export interface Services { connectorTokenClient: ConnectorTokenClient; } +export interface UnsecuredServices { + savedObjectsClient: ISavedObjectsRepository; + scopedClusterClient: ElasticsearchClient; + connectorTokenClient: ConnectorTokenClient; +} + export interface ActionsApiRequestHandlerContext { getActionsClient: () => ActionsClient; listTypes: ActionTypeRegistry['list']; @@ -70,7 +78,7 @@ export interface ActionTypeExecutorOptions< Params > { actionId: string; - services: Services; + services: Services | UnsecuredServices; config: Config; secrets: Secrets; params: Params; @@ -234,3 +242,7 @@ export interface ConnectorToken extends SavedObjectAttributes { createdAt: string; updatedAt?: string; } + +// This unallowlist should only contain connector types that require a request or API key for +// execution. +export const UNALLOWED_FOR_UNSECURE_EXECUTION_CONNECTOR_TYPE_IDS = ['.index']; diff --git a/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.mock.ts b/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.mock.ts index 61318a4707ca8..4cbbfa1604dc1 100644 --- a/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.mock.ts +++ b/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.mock.ts @@ -11,6 +11,7 @@ export type UnsecuredActionsClientMock = jest.Mocked; const createUnsecuredActionsClientMock = () => { const mocked: UnsecuredActionsClientMock = { + execute: jest.fn(), bulkEnqueueExecution: jest.fn(), }; return mocked; diff --git a/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.test.ts b/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.test.ts index 7d0d4d687a71a..5df39e28fcbc1 100644 --- a/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.test.ts +++ b/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.test.ts @@ -5,20 +5,162 @@ * 2.0. */ -import { UnsecuredActionsClient } from './unsecured_actions_client'; -import { savedObjectsRepositoryMock } from '@kbn/core/server/mocks'; +import { v4 as uuidv4 } from 'uuid'; +import { loggingSystemMock, savedObjectsRepositoryMock } from '@kbn/core/server/mocks'; import { asNotificationExecutionSource } from '../lib'; +import { actionExecutorMock } from '../lib/action_executor.mock'; +import { UnsecuredActionsClient } from './unsecured_actions_client'; const internalSavedObjectsRepository = savedObjectsRepositoryMock.create(); +const actionExecutor = actionExecutorMock.create(); const executionEnqueuer = jest.fn(); +const logger = loggingSystemMock.create().get(); let unsecuredActionsClient: UnsecuredActionsClient; beforeEach(() => { jest.resetAllMocks(); unsecuredActionsClient = new UnsecuredActionsClient({ + actionExecutor, internalSavedObjectsRepository, executionEnqueuer, + logger, + }); +}); + +describe('execute()', () => { + test('throws error when executing action with not allowed requester id', async () => { + await expect( + unsecuredActionsClient.execute({ + requesterId: 'badId', + id: '1', + spaceId: 'default', + params: { + name: 'my name', + }, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"\\"badId\\" feature is not allow-listed for UnsecuredActionsClient access."` + ); + }); + + test('calls the actionExecutor with the appropriate parameters', async () => { + const actionId = uuidv4(); + actionExecutor.executeUnsecured.mockResolvedValue({ status: 'ok', actionId }); + await expect( + unsecuredActionsClient.execute({ + requesterId: 'background_task', + id: actionId, + spaceId: 'default', + params: { + name: 'my name', + }, + }) + ).resolves.toMatchObject({ status: 'ok', actionId }); + + expect(actionExecutor.executeUnsecured).toHaveBeenCalledWith({ + actionId, + params: { + name: 'my name', + }, + spaceId: 'default', + actionExecutionId: expect.any(String), + }); + expect(logger.warn).toHaveBeenCalledWith( + `Calling "execute" in UnsecuredActionsClient without any relatedSavedObjects data. Consider including this for traceability.` + ); + }); + + test('injects source using related saved objects task info if provided', async () => { + const actionId = uuidv4(); + actionExecutor.executeUnsecured.mockResolvedValue({ status: 'ok', actionId }); + + await expect( + unsecuredActionsClient.execute({ + requesterId: 'background_task', + id: actionId, + params: { + name: 'my name', + }, + spaceId: 'custom', + relatedSavedObjects: [ + { + id: 'some-id', + typeId: 'some-type-id', + type: 'task', + }, + ], + }) + ).resolves.toMatchObject({ status: 'ok', actionId }); + + expect(actionExecutor.executeUnsecured).toHaveBeenCalledWith({ + actionId, + params: { + name: 'my name', + }, + spaceId: 'custom', + source: { + source: { + taskId: 'some-id', + taskType: 'some-type-id', + }, + type: 'BACKGROUND_TASK', + }, + relatedSavedObjects: [ + { + id: 'some-id', + typeId: 'some-type-id', + type: 'task', + }, + ], + actionExecutionId: expect.any(String), + }); + expect(logger.warn).not.toHaveBeenCalled(); + }); + + test('defaults to unknown if task type not provided in related saved objects', async () => { + const actionId = uuidv4(); + actionExecutor.executeUnsecured.mockResolvedValue({ status: 'ok', actionId }); + + await expect( + unsecuredActionsClient.execute({ + requesterId: 'background_task', + id: actionId, + params: { + name: 'my name', + }, + spaceId: 'custom', + relatedSavedObjects: [ + { + id: 'some-id', + type: 'task', + }, + ], + }) + ).resolves.toMatchObject({ status: 'ok', actionId }); + + expect(actionExecutor.executeUnsecured).toHaveBeenCalledWith({ + actionId, + params: { + name: 'my name', + }, + spaceId: 'custom', + source: { + source: { + taskId: 'some-id', + taskType: 'unknown', + }, + type: 'BACKGROUND_TASK', + }, + relatedSavedObjects: [ + { + id: 'some-id', + type: 'task', + }, + ], + actionExecutionId: expect.any(String), + }); + expect(logger.warn).not.toHaveBeenCalled(); }); }); diff --git a/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts b/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts index baa2cf34c1d41..96449380a82cd 100644 --- a/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts +++ b/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts @@ -5,30 +5,50 @@ * 2.0. */ -import { ISavedObjectsRepository } from '@kbn/core/server'; +import { v4 as uuidv4 } from 'uuid'; +import { ISavedObjectsRepository, Logger } from '@kbn/core/server'; import { BulkUnsecuredExecutionEnqueuer, ExecuteOptions, ExecutionResponse, } from '../create_unsecured_execute_function'; -import { asNotificationExecutionSource } from '../lib'; +import { + ActionExecutorContract, + asNotificationExecutionSource, + type RelatedSavedObjects, +} from '../lib'; +import { ActionTypeExecutorResult } from '../types'; +import { asBackgroundTaskExecutionSource } from '../lib/action_execution_source'; +// requests from the notification service (for system notification) const NOTIFICATION_REQUESTER_ID = 'notifications'; +// requests from background tasks (primarily for EDR) +const BACKGROUND_TASK_REQUESTER_ID = 'background_task'; + // allowlist for features wanting access to the unsecured actions client // which allows actions to be enqueued for execution without a user request const ALLOWED_REQUESTER_IDS = [ NOTIFICATION_REQUESTER_ID, + BACKGROUND_TASK_REQUESTER_ID, // For functional testing 'functional_tester', ]; export interface UnsecuredActionsClientOpts { + actionExecutor: ActionExecutorContract; internalSavedObjectsRepository: ISavedObjectsRepository; executionEnqueuer: BulkUnsecuredExecutionEnqueuer; + logger: Logger; } +type UnsecuredExecuteOptions = Omit & { + spaceId: string; + requesterId: string; +}; + export interface IUnsecuredActionsClient { + execute: (opts: UnsecuredExecuteOptions) => Promise>; bulkEnqueueExecution: ( requesterId: string, actionsToExecute: ExecuteOptions[] @@ -36,12 +56,48 @@ export interface IUnsecuredActionsClient { } export class UnsecuredActionsClient { + private readonly actionExecutor: ActionExecutorContract; private readonly internalSavedObjectsRepository: ISavedObjectsRepository; private readonly executionEnqueuer: BulkUnsecuredExecutionEnqueuer; + private readonly logger: Logger; constructor(params: UnsecuredActionsClientOpts) { + this.actionExecutor = params.actionExecutor; this.executionEnqueuer = params.executionEnqueuer; this.internalSavedObjectsRepository = params.internalSavedObjectsRepository; + this.logger = params.logger; + } + + public async execute({ + requesterId, + id, + params, + relatedSavedObjects, + spaceId, + }: UnsecuredExecuteOptions) { + // Check that requesterId is allowed + if (!ALLOWED_REQUESTER_IDS.includes(requesterId)) { + throw new Error( + `"${requesterId}" feature is not allow-listed for UnsecuredActionsClient access.` + ); + } + + if (!relatedSavedObjects) { + this.logger.warn( + `Calling "execute" in UnsecuredActionsClient without any relatedSavedObjects data. Consider including this for traceability.` + ); + } + + const source = this.getSourceFromRequester(requesterId, id, relatedSavedObjects); + + return this.actionExecutor.executeUnsecured({ + actionExecutionId: uuidv4(), + actionId: id, + params, + relatedSavedObjects, + spaceId, + ...source, + }); } public async bulkEnqueueExecution( @@ -54,25 +110,48 @@ export class UnsecuredActionsClient { `"${requesterId}" feature is not allow-listed for UnsecuredActionsClient access.` ); } + // Inject source based on requesterId - return this.executionEnqueuer( - this.internalSavedObjectsRepository, - this.injectSource(requesterId, actionsToExecute) - ); + const actionsToEnqueue = actionsToExecute.map((action) => { + const source = this.getSourceFromRequester( + requesterId, + action.id, + action.relatedSavedObjects + ); + return { + ...action, + ...source, + }; + }); + return this.executionEnqueuer(this.internalSavedObjectsRepository, actionsToEnqueue); } - private injectSource(requesterId: string, actionsToExecute: ExecuteOptions[]): ExecuteOptions[] { + private getSourceFromRequester( + requesterId: string, + actionId: string, + relatedSavedObjects?: RelatedSavedObjects + ) { switch (requesterId) { case NOTIFICATION_REQUESTER_ID: - return actionsToExecute.map((actionToExecute) => ({ - ...actionToExecute, + return { source: asNotificationExecutionSource({ requesterId, - connectorId: actionToExecute.id, + connectorId: actionId, }), - })); + }; + case BACKGROUND_TASK_REQUESTER_ID: + const taskSO = (relatedSavedObjects ?? []).find((rso) => rso.type === 'task'); + if (taskSO) { + return { + source: asBackgroundTaskExecutionSource({ + taskId: taskSO.id, + taskType: taskSO.typeId ?? 'unknown', + }), + }; + } + return {}; default: - return actionsToExecute; + return {}; } } } diff --git a/x-pack/test/alerting_api_integration/common/plugins/actions_simulators/server/unsecured_actions_simulation.ts b/x-pack/test/alerting_api_integration/common/plugins/actions_simulators/server/unsecured_actions_simulation.ts index 5900f698045a0..675dbe50afd54 100644 --- a/x-pack/test/alerting_api_integration/common/plugins/actions_simulators/server/unsecured_actions_simulation.ts +++ b/x-pack/test/alerting_api_integration/common/plugins/actions_simulators/server/unsecured_actions_simulation.ts @@ -47,4 +47,51 @@ export function initPlugin(router: IRouter, coreSetup: CoreSetup, + res: KibanaResponseFactory + ): Promise> { + const [_, { actions }] = await coreSetup.getStartServices(); + const { body } = req; + + try { + const unsecuredActionsClient = actions.getUnsecuredActionsClient(); + const { requesterId, spaceId, id, params, relatedSavedObjects } = body; + const result = await unsecuredActionsClient.execute({ + requesterId, + id, + params, + spaceId, + relatedSavedObjects, + }); + + return res.ok({ body: { status: 'success', result } }); + } catch (err) { + return res.ok({ body: { status: 'error', error: `${err}` } }); + } + } + ); } diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/connector_types/stack/webhook.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/connector_types/stack/webhook.ts index 0b5edc7d972a4..f3b3a4e7076ef 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/connector_types/stack/webhook.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/connector_types/stack/webhook.ts @@ -8,6 +8,7 @@ import http from 'http'; import https from 'https'; import getPort from 'get-port'; +import { SuperTest, Test } from 'supertest'; import expect from '@kbn/expect'; import { URL, format as formatUrl } from 'url'; import { @@ -21,33 +22,6 @@ import { createTlsWebhookServer } from '../../../../../common/lib/get_tls_webhoo export default function webhookTest({ getService }: FtrProviderContext) { const supertest = getService('supertest'); - async function createWebhookAction( - webhookSimulatorURL: string, - config: Record> = {} - ): Promise { - const url = formatUrl(new URL(webhookSimulatorURL), { auth: false }); - const composedConfig = { - headers: { - 'Content-Type': 'text/plain', - }, - ...config, - url, - }; - - const { body: createdAction } = await supertest - .post('/api/actions/action') - .set('kbn-xsrf', 'test') - .send({ - name: 'A generic Webhook action', - actionTypeId: '.webhook', - secrets: {}, - config: composedConfig, - }) - .expect(200); - - return createdAction.id; - } - async function getPortOfConnector(connectorId: string): Promise { const response = await supertest.get(`/api/actions/connectors`).expect(200); const connector = response.body.find((conn: { id: string }) => conn.id === connectorId); @@ -73,7 +47,7 @@ export default function webhookTest({ getService }: FtrProviderContext) { }); it('webhook can be executed without username and password', async () => { - const webhookActionId = await createWebhookAction(webhookSimulatorURL); + const webhookActionId = await createWebhookAction(supertest, webhookSimulatorURL); const { body: result } = await supertest .post(`/api/actions/action/${webhookActionId}/_execute`) .set('kbn-xsrf', 'test') @@ -104,7 +78,9 @@ export default function webhookTest({ getService }: FtrProviderContext) { }); it('should support the POST method against webhook target', async () => { - const webhookActionId = await createWebhookAction(webhookSimulatorURL, { method: 'post' }); + const webhookActionId = await createWebhookAction(supertest, webhookSimulatorURL, { + method: 'post', + }); const { body: result } = await supertest .post(`/api/actions/action/${webhookActionId}/_execute`) .set('kbn-xsrf', 'test') @@ -199,3 +175,31 @@ export default function webhookTest({ getService }: FtrProviderContext) { }); }); } + +export async function createWebhookAction( + supertest: SuperTest, + webhookSimulatorURL: string, + config: Record> = {} +): Promise { + const url = formatUrl(new URL(webhookSimulatorURL), { auth: false }); + const composedConfig = { + headers: { + 'Content-Type': 'text/plain', + }, + ...config, + url, + }; + + const { body: createdAction } = await supertest + .post('/api/actions/action') + .set('kbn-xsrf', 'test') + .send({ + name: 'A generic Webhook action', + actionTypeId: '.webhook', + secrets: {}, + config: composedConfig, + }) + .expect(200); + + return createdAction.id; +} diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/execute_unsecured_action.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/execute_unsecured_action.ts new file mode 100644 index 0000000000000..ff859a04d4a81 --- /dev/null +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/execute_unsecured_action.ts @@ -0,0 +1,329 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import getPort from 'get-port'; +import expect from '@kbn/expect'; +import type { SearchTotalHits } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { getWebhookServer } from '@kbn/actions-simulators-plugin/server/plugin'; +import { FtrProviderContext } from '../../../../common/ftr_provider_context'; +import { ObjectRemover } from '../../../common/lib'; +import { Spaces } from '../../scenarios'; +import { createWebhookAction } from './connector_types/stack/webhook'; + +// eslint-disable-next-line import/no-default-export +export default function createUnsecuredActionTests({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const kibanaServer = getService('kibanaServer'); + const es = getService('es'); + const retry = getService('retry'); + + describe('execute unsecured action', () => { + const objectRemover = new ObjectRemover(supertest); + + // need to wait for kibanaServer to settle ... + before(() => { + kibanaServer.resolveUrl(`/api/execute_unsecured_action`); + }); + + after(() => objectRemover.removeAll()); + + it('should successfully execute email action', async () => { + const testStart = new Date().toISOString(); + const response = await supertest + .post(`/api/execute_unsecured_action`) + .set('kbn-xsrf', 'xxx') + .send({ + requesterId: 'background_task', + id: 'my-test-email', + params: { + to: ['you@test.com'], + subject: 'hello from Kibana!', + message: 'does this work??', + }, + spaceId: 'default', + relatedSavedObjects: [ + { + id: 'task:123', + type: 'task', + typeId: 'taskType', + }, + ], + }) + .expect(200); + expect(response.body.status).to.eql('success'); + expect(response.body.result.actionId).to.eql('my-test-email'); + expect(response.body.result.status).to.eql('ok'); + + const query = getEventLogExecuteQuery(testStart, 'my-test-email'); + await retry.try(async () => { + const searchResult = await es.search(query); + expect((searchResult.hits.total as SearchTotalHits).value).to.eql(1); + + const hit = searchResult.hits.hits[0]; + // @ts-expect-error _source: unknown + expect(hit?._source?.event?.outcome).to.eql('success'); + // @ts-expect-error _source: unknown + expect(hit?._source?.message).to.eql( + `action executed: .email:my-test-email: TestEmail#xyz` + ); + // @ts-expect-error _source: unknown + expect(hit?._source?.kibana?.action?.execution?.source).to.eql('background_task'); + + // @ts-expect-error _source: unknown + const savedObjects = hit?._source?.kibana?.saved_objects; + const taskSORef = (savedObjects ?? []).find((so: any) => so.type === 'task'); + expect(taskSORef).to.eql({ + rel: 'primary', + type: 'task', + id: 'task:123', + type_id: 'taskType', + }); + + // @ts-expect-error _source: unknown + expect(hit?._source?.kibana?.space_ids).to.eql(['default']); + }); + }); + + it('should successfully execute email action for custom space', async () => { + const testStart = new Date().toISOString(); + const response = await supertest + .post(`/api/execute_unsecured_action`) + .set('kbn-xsrf', 'xxx') + .send({ + requesterId: 'background_task', + id: 'my-test-email', + params: { + to: ['you@test.com'], + subject: 'hello from Kibana!', + message: 'does this work??', + }, + spaceId: Spaces.other.id, + relatedSavedObjects: [ + { + id: 'task:123', + type: 'task', + typeId: 'taskType', + }, + ], + }) + .expect(200); + expect(response.body.status).to.eql('success'); + expect(response.body.result.actionId).to.eql('my-test-email'); + expect(response.body.result.status).to.eql('ok'); + + const query = getEventLogExecuteQuery(testStart, 'my-test-email'); + await retry.try(async () => { + const searchResult = await es.search(query); + expect((searchResult.hits.total as SearchTotalHits).value).to.eql(1); + + const hit = searchResult.hits.hits[0]; + // @ts-expect-error _source: unknown + expect(hit?._source?.event?.outcome).to.eql('success'); + // @ts-expect-error _source: unknown + expect(hit?._source?.message).to.eql( + `action executed: .email:my-test-email: TestEmail#xyz` + ); + // @ts-expect-error _source: unknown + expect(hit?._source?.kibana?.action?.execution?.source).to.eql('background_task'); + + // @ts-expect-error _source: unknown + const savedObjects = hit?._source?.kibana?.saved_objects; + const taskSORef = (savedObjects ?? []).find((so: any) => so.type === 'task'); + expect(taskSORef).to.eql({ + rel: 'primary', + type: 'task', + id: 'task:123', + type_id: 'taskType', + }); + + // @ts-expect-error _source: unknown + expect(hit?._source?.kibana?.space_ids).to.eql(['other']); + }); + }); + + it('should successfully execute webhook action', async () => { + const testStart = new Date().toISOString(); + const webhookServer = await getWebhookServer(); + const availablePort = await getPort({ port: 9000 }); + webhookServer.listen(availablePort); + const webhookActionId = await createWebhookAction( + supertest, + `http://localhost:${availablePort}` + ); + + const response = await supertest + .post(`/api/execute_unsecured_action`) + .set('kbn-xsrf', 'xxx') + .send({ + requesterId: 'background_task', + id: webhookActionId, + params: { + body: 'success', + }, + spaceId: 'default', + relatedSavedObjects: [ + { + id: 'task:123', + type: 'task', + typeId: 'taskType', + }, + ], + }) + .expect(200); + expect(response.body.status).to.eql('success'); + expect(response.body.result.actionId).to.eql(webhookActionId); + expect(response.body.result.status).to.eql('ok'); + + const query = getEventLogExecuteQuery(testStart, webhookActionId); + await retry.try(async () => { + const searchResult = await es.search(query); + expect((searchResult.hits.total as SearchTotalHits).value).to.eql(1); + + const hit = searchResult.hits.hits[0]; + // @ts-expect-error _source: unknown + expect(hit?._source?.event?.outcome).to.eql('success'); + // @ts-expect-error _source: unknown + expect(hit?._source?.message).to.eql( + `action executed: .webhook:${webhookActionId}: A generic Webhook action` + ); + // @ts-expect-error _source: unknown + expect(hit?._source?.kibana?.action?.execution?.source).to.eql('background_task'); + + // @ts-expect-error _source: unknown + const savedObjects = hit?._source?.kibana?.saved_objects; + const taskSORef = (savedObjects ?? []).find((so: any) => so.type === 'task'); + expect(taskSORef).to.eql({ + rel: 'primary', + type: 'task', + id: 'task:123', + type_id: 'taskType', + }); + + // @ts-expect-error _source: unknown + expect(hit?._source?.kibana?.space_ids).to.eql(['default']); + }); + + webhookServer.close(); + }); + + it('should not allow executing email action from unallowed requester', async () => { + const response = await supertest + .post(`/api/execute_unsecured_action`) + .set('kbn-xsrf', 'xxx') + .send({ + requesterId: 'not_allowed', + id: 'my-test-email', + params: { + to: ['you@test.com'], + subject: 'hello from Kibana!', + message: 'does this work??', + }, + spaceId: 'default', + }) + .expect(200); + expect(response.body.status).to.eql('error'); + expect(response.body.error).to.eql( + `Error: "not_allowed" feature is not allow-listed for UnsecuredActionsClient access.` + ); + }); + + it('should not allow executing action from unallowed connector types', async () => { + const testStart = new Date().toISOString(); + const { body: result } = await supertest + .post(`/api/execute_unsecured_action`) + .set('kbn-xsrf', 'xxx') + .send({ + requesterId: 'background_task', + id: 'preconfigured-es-index-action', + params: { + documents: [{ test: 'test' }], + indexOverride: null, + }, + spaceId: 'default', + }) + .expect(200); + expect(result.status).to.eql('success'); + expect(result.result).to.eql({ + actionId: 'preconfigured-es-index-action', + status: 'error', + message: 'Cannot execute unsecured ".index" action - execution of this type is not allowed', + retry: false, + errorSource: 'user', + }); + + const query = getEventLogExecuteQuery(testStart, 'preconfigured-es-index-action'); + await retry.try(async () => { + const searchResult = await es.search(query); + expect((searchResult.hits.total as SearchTotalHits).value).to.eql(1); + + const hit = searchResult.hits.hits[0]; + // @ts-expect-error _source: unknown + expect(hit?._source?.event?.outcome).to.eql('failure'); + // @ts-expect-error _source: unknown + expect(hit?._source?.message).to.eql( + `action execution failure: .index:preconfigured-es-index-action: preconfigured_es_index_action` + ); + }); + }); + }); + + function getEventLogExecuteQuery(start: string, actionId: string) { + return { + index: '.kibana-event-log*', + body: { + query: { + bool: { + filter: [ + { + term: { + 'event.provider': { + value: 'actions', + }, + }, + }, + { + term: { + 'event.action': 'execute', + }, + }, + { + range: { + '@timestamp': { + gte: start, + }, + }, + }, + { + nested: { + path: 'kibana.saved_objects', + query: { + bool: { + filter: [ + { + term: { + 'kibana.saved_objects.id': { + value: actionId, + }, + }, + }, + { + term: { + 'kibana.saved_objects.type': 'action', + }, + }, + ], + }, + }, + }, + }, + ], + }, + }, + }, + }; + } +} diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts index 1c735f75f5001..89f1d48285ae2 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts @@ -30,6 +30,7 @@ export default function actionsTests({ loadTestFile, getService }: FtrProviderCo loadTestFile(require.resolve('./connector_types/stack/preconfigured_alert_history_connector')); loadTestFile(require.resolve('./type_not_enabled')); loadTestFile(require.resolve('./schedule_unsecured_action')); + loadTestFile(require.resolve('./execute_unsecured_action')); loadTestFile(require.resolve('./check_registered_connector_types')); loadTestFile(require.resolve('./max_queued_actions_circuit_breaker')); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/schedule_unsecured_action.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/schedule_unsecured_action.ts index 409e56e7b1fd8..082cfb942870e 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/schedule_unsecured_action.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/schedule_unsecured_action.ts @@ -137,15 +137,16 @@ export default function createUnsecuredActionTests({ getService }: FtrProviderCo .set('kbn-xsrf', 'xxx') .send({ requesterId: 'functional_tester', - id: 'my-slack1', + id: 'preconfigured-es-index-action', params: { - message: 'does this work??', + documents: [{ test: 'test' }], + indexOverride: null, }, }) .expect(200); expect(result.status).to.eql('error'); expect(result.error).to.eql( - `Error: .slack actions cannot be scheduled for unsecured actions execution` + `Error: .index actions cannot be scheduled for unsecured actions execution` ); }); From d03a1fd6e252d362bbdcfeea6614196184474a6f Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 21 Mar 2024 01:02:35 -0400 Subject: [PATCH 13/90] [api-docs] 2024-03-21 Daily api_docs build (#179121) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/649 --- api_docs/actions.devdocs.json | 178 +++-- api_docs/actions.mdx | 4 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_observability.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.devdocs.json | 38 +- api_docs/alerting.mdx | 2 +- api_docs/apm.devdocs.json | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_manager.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.devdocs.json | 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.devdocs.json | 88 +-- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.devdocs.json | 40 +- 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.devdocs.json | 68 +- 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/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.devdocs.json | 68 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.devdocs.json | 78 +- 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/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.devdocs.json | 6 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.devdocs.json | 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.devdocs.json | 8 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.devdocs.json | 68 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.devdocs.json | 344 ++++----- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.devdocs.json | 12 +- 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/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.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_utils.mdx | 2 +- .../kbn_alerting_api_integration_helpers.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_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.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 +- ...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_utils.devdocs.json | 14 +- 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.devdocs.json | 53 +- 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 +- ...ticsearch_client_server_mocks.devdocs.json | 136 ++-- ...core_elasticsearch_client_server_mocks.mdx | 2 +- ...kbn_core_elasticsearch_server.devdocs.json | 272 +++---- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...elasticsearch_server_internal.devdocs.json | 136 ++-- ...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.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 +- ...cts_migration_server_internal.devdocs.json | 68 +- ...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 +- 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_settings_server.mdx | 2 +- ...kbn_core_user_settings_server_internal.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.devdocs.json | 73 ++ api_docs/kbn_deeplinks_fleet.mdx | 30 + .../kbn_deeplinks_management.devdocs.json | 4 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.devdocs.json | 4 +- 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.devdocs.json | 101 +++ api_docs/kbn_deeplinks_security.mdx | 33 + api_docs/kbn_deeplinks_shared.devdocs.json | 58 ++ api_docs/kbn_deeplinks_shared.mdx | 30 + 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.devdocs.json | 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 +- .../kbn_elastic_assistant_common.devdocs.json | 44 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- 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_utils.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_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_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.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_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 +- ...ttings_components_field_input.devdocs.json | 4 +- ...gement_settings_components_field_input.mdx | 2 +- ...settings_components_field_row.devdocs.json | 4 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- .../kbn_management_settings_ids.devdocs.json | 15 + api_docs/kbn_management_settings_ids.mdx | 4 +- ...ent_settings_section_registry.devdocs.json | 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.devdocs.json | 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.devdocs.json | 711 ++++++++++++++++++ api_docs/kbn_ml_time_buckets.mdx | 36 + 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_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 +- .../kbn_presentation_containers.devdocs.json | 4 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_library.mdx | 2 +- .../kbn_presentation_publishing.devdocs.json | 84 +-- 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_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_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_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.devdocs.json | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- api_docs/kbn_rison.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_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 +- api_docs/kbn_security_solution_features.mdx | 2 +- ..._security_solution_navigation.devdocs.json | 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 +- ...kbn_securitysolution_es_utils.devdocs.json | 136 ++-- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ion_exception_list_components.devdocs.json | 8 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_grouping.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ...solution_io_ts_alerting_types.devdocs.json | 12 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- ...ritysolution_io_ts_list_types.devdocs.json | 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 +- 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_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_solution_nav_es.mdx | 2 +- api_docs/kbn_solution_nav_oblt.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_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_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_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_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.devdocs.json | 68 +- api_docs/lists.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.devdocs.json | 8 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.devdocs.json | 32 - api_docs/management.mdx | 4 +- 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 | 144 ++-- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.devdocs.json | 4 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 18 +- 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 | 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 +- .../saved_objects_management.devdocs.json | 4 +- 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/security.mdx | 2 +- api_docs/security_solution.devdocs.json | 14 +- 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 | 4 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.devdocs.json | 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.devdocs.json | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- .../telemetry_collection_manager.devdocs.json | 68 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/text_based_languages.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.devdocs.json | 14 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.devdocs.json | 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.devdocs.json | 68 +- 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.devdocs.json | 6 +- api_docs/visualizations.mdx | 2 +- 727 files changed, 2987 insertions(+), 1891 deletions(-) create mode 100644 api_docs/kbn_deeplinks_fleet.devdocs.json create mode 100644 api_docs/kbn_deeplinks_fleet.mdx create mode 100644 api_docs/kbn_deeplinks_security.devdocs.json create mode 100644 api_docs/kbn_deeplinks_security.mdx create mode 100644 api_docs/kbn_deeplinks_shared.devdocs.json create mode 100644 api_docs/kbn_deeplinks_shared.mdx create mode 100644 api_docs/kbn_ml_time_buckets.devdocs.json create mode 100644 api_docs/kbn_ml_time_buckets.mdx diff --git a/api_docs/actions.devdocs.json b/api_docs/actions.devdocs.json index fa2885287bbcd..4c6db4cc6fc8a 100644 --- a/api_docs/actions.devdocs.json +++ b/api_docs/actions.devdocs.json @@ -559,7 +559,39 @@ "label": "esClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -663,39 +695,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", @@ -2090,6 +2090,46 @@ ], "returnComment": [] }, + { + "parentPluginId": "actions", + "id": "def-server.UnsecuredActionsClient.execute", + "type": "Function", + "tags": [], + "label": "execute", + "description": [], + "signature": [ + "({ requesterId, id, params, relatedSavedObjects, spaceId, }: UnsecuredExecuteOptions) => Promise<", + { + "pluginId": "actions", + "scope": "common", + "docId": "kibActionsPluginApi", + "section": "def-common.ActionTypeExecutorResult", + "text": "ActionTypeExecutorResult" + }, + ">" + ], + "path": "x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "actions", + "id": "def-server.UnsecuredActionsClient.execute.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n requesterId,\n id,\n params,\n relatedSavedObjects,\n spaceId,\n }", + "description": [], + "signature": [ + "UnsecuredExecuteOptions" + ], + "path": "x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "actions", "id": "def-server.UnsecuredActionsClient.bulkEnqueueExecution", @@ -2776,12 +2816,14 @@ { "parentPluginId": "actions", "id": "def-server.ActionTypeExecutorOptions.services", - "type": "Object", + "type": "CompoundType", "tags": [], "label": "services", "description": [], "signature": [ - "Services" + "Services", + " | ", + "UnsecuredServices" ], "path": "x-pack/plugins/actions/server/types.ts", "deprecated": false, @@ -3031,6 +3073,46 @@ "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "actions", + "id": "def-server.IUnsecuredActionsClient.execute", + "type": "Function", + "tags": [], + "label": "execute", + "description": [], + "signature": [ + "(opts: UnsecuredExecuteOptions) => Promise<", + { + "pluginId": "actions", + "scope": "common", + "docId": "kibActionsPluginApi", + "section": "def-common.ActionTypeExecutorResult", + "text": "ActionTypeExecutorResult" + }, + ">" + ], + "path": "x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "actions", + "id": "def-server.IUnsecuredActionsClient.execute.$1", + "type": "CompoundType", + "tags": [], + "label": "opts", + "description": [], + "signature": [ + "UnsecuredExecuteOptions" + ], + "path": "x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "actions", "id": "def-server.IUnsecuredActionsClient.bulkEnqueueExecution", @@ -3258,7 +3340,17 @@ "label": "ActionsClient", "description": [], "signature": [ - "{ create: ({ action: { actionTypeId, name, config, secrets }, options, }: ", + "{ execute: ({ actionId, params, source, relatedSavedObjects, }: Omit<", + "ExecuteOptions", + ", \"actionExecutionId\" | \"request\">) => Promise<", + { + "pluginId": "actions", + "scope": "common", + "docId": "kibActionsPluginApi", + "section": "def-common.ActionTypeExecutorResult", + "text": "ActionTypeExecutorResult" + }, + ">; create: ({ action: { actionTypeId, name, config, secrets }, options, }: ", "CreateOptions", ") => Promise<", "Connector", @@ -3280,17 +3372,7 @@ "Connector", "[]>; getOAuthAccessToken: ({ type, options }: Readonly<{} & { type: \"jwt\" | \"client\"; options: Readonly<{} & { tokenUrl: string; config: Readonly<{} & { clientId: string; jwtKeyId: string; userIdentifierValue: string; }>; secrets: Readonly<{ privateKeyPassword?: string | undefined; } & { clientSecret: string; privateKey: string; }>; }> | Readonly<{} & { tokenUrl: string; config: Readonly<{} & { clientId: string; tenantId: string; }>; secrets: Readonly<{} & { clientSecret: string; }>; scope: string; }>; }>, configurationUtilities: ", "ActionsConfigurationUtilities", - ") => Promise<{ accessToken: string | null; }>; delete: ({ id }: { id: string; }) => Promise<{}>; execute: ({ actionId, params, source, relatedSavedObjects, }: Omit<", - "ExecuteOptions", - ", \"request\" | \"actionExecutionId\">) => Promise<", - { - "pluginId": "actions", - "scope": "common", - "docId": "kibActionsPluginApi", - "section": "def-common.ActionTypeExecutorResult", - "text": "ActionTypeExecutorResult" - }, - ">; bulkEnqueueExecution: (options: ", + ") => Promise<{ accessToken: string | null; }>; delete: ({ id }: { id: string; }) => Promise<{}>; bulkEnqueueExecution: (options: ", "ExecuteOptions", "[]) => Promise<", "ExecutionResponse", diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index a55d2b2bad552..5613f01877e24 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 281 | 0 | 275 | 31 | +| 285 | 0 | 279 | 32 | ## Client diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 9ae539de6436d..cf4b3dd448e12 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_observability.mdx b/api_docs/ai_assistant_management_observability.mdx index 73028deee33a6..8cd12c8c9210b 100644 --- a/api_docs/ai_assistant_management_observability.mdx +++ b/api_docs/ai_assistant_management_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementObservability title: "aiAssistantManagementObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementObservability plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementObservability'] --- import aiAssistantManagementObservabilityObj from './ai_assistant_management_observability.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index dd677d6fc92b0..f54470228a676 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-03-20 +date: 2024-03-21 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 ee4e4fbf3506c..d19fefbe9750e 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index 37c8ab64a713b..09c234bce6c51 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -2822,7 +2822,7 @@ "label": "actions", "description": [], "signature": [ - "Readonly<{ frequency?: Readonly<{} & { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; }> | undefined; alertsFilter?: Readonly<{ query?: Readonly<{ dsl?: string | undefined; } & { kql: string; filters: Readonly<{ query?: Record | undefined; $state?: Readonly<{} & { store: \"appState\" | \"globalState\"; }> | undefined; } & { meta: Record; }>[]; }> | undefined; timeframe?: Readonly<{} & { days: (2 | 7 | 6 | 5 | 4 | 3 | 1)[]; hours: Readonly<{} & { start: string; end: string; }>; timezone: string; }> | undefined; } & {}> | undefined; uuid?: string | undefined; useAlertDataForTemplate?: boolean | undefined; } & { id: string; params: Record; actionTypeId: string; group: string; }>[]" + "Readonly<{ frequency?: Readonly<{} & { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; }> | undefined; alertsFilter?: Readonly<{ query?: Readonly<{ dsl?: string | undefined; } & { kql: string; filters: Readonly<{ query?: Record | undefined; $state?: Readonly<{} & { store: \"appState\" | \"globalState\"; }> | undefined; } & { meta: Record; }>[]; }> | undefined; timeframe?: Readonly<{} & { days: (2 | 1 | 7 | 6 | 5 | 4 | 3)[]; hours: Readonly<{} & { start: string; end: string; }>; timezone: string; }> | undefined; } & {}> | undefined; uuid?: string | undefined; useAlertDataForTemplate?: boolean | undefined; } & { params: Record; id: string; actionTypeId: string; group: string; }>[]" ], "path": "x-pack/plugins/alerting/server/application/rule/types/rule.ts", "deprecated": false, @@ -3029,7 +3029,7 @@ "label": "monitoring", "description": [], "signature": [ - "Readonly<{} & { run: Readonly<{} & { history: Readonly<{ outcome?: Readonly<{ warning?: \"execute\" | \"license\" | \"validate\" | \"timeout\" | \"unknown\" | \"read\" | \"decrypt\" | \"disabled\" | \"maxExecutableActions\" | \"maxAlerts\" | \"maxQueuedActions\" | null | undefined; outcomeOrder?: number | undefined; outcomeMsg?: string[] | null | undefined; } & { outcome: \"warning\" | \"succeeded\" | \"failed\"; alertsCount: Readonly<{ recovered?: number | null | undefined; active?: number | null | undefined; new?: number | null | undefined; ignored?: number | null | undefined; } & {}>; }> | undefined; duration?: number | undefined; } & { timestamp: number; success: boolean; }>[]; calculated_metrics: Readonly<{ p50?: number | undefined; p95?: number | undefined; p99?: number | undefined; } & { success_ratio: number; }>; last_run: Readonly<{} & { timestamp: string; metrics: Readonly<{ duration?: number | undefined; total_search_duration_ms?: number | null | undefined; total_indexing_duration_ms?: number | null | undefined; total_alerts_detected?: number | null | undefined; total_alerts_created?: number | null | undefined; gap_duration_s?: number | null | undefined; } & {}>; }>; }>; }> | undefined" + "Readonly<{} & { run: Readonly<{} & { history: Readonly<{ outcome?: Readonly<{ warning?: \"execute\" | \"unknown\" | \"license\" | \"validate\" | \"timeout\" | \"read\" | \"decrypt\" | \"disabled\" | \"maxExecutableActions\" | \"maxAlerts\" | \"maxQueuedActions\" | null | undefined; outcomeOrder?: number | undefined; outcomeMsg?: string[] | null | undefined; } & { outcome: \"warning\" | \"succeeded\" | \"failed\"; alertsCount: Readonly<{ recovered?: number | null | undefined; active?: number | null | undefined; new?: number | null | undefined; ignored?: number | null | undefined; } & {}>; }> | undefined; duration?: number | undefined; } & { timestamp: number; success: boolean; }>[]; calculated_metrics: Readonly<{ p50?: number | undefined; p95?: number | undefined; p99?: number | undefined; } & { success_ratio: number; }>; last_run: Readonly<{} & { timestamp: string; metrics: Readonly<{ duration?: number | undefined; total_search_duration_ms?: number | null | undefined; total_indexing_duration_ms?: number | null | undefined; total_alerts_detected?: number | null | undefined; total_alerts_created?: number | null | undefined; gap_duration_s?: number | null | undefined; } & {}>; }>; }>; }> | undefined" ], "path": "x-pack/plugins/alerting/server/application/rule/types/rule.ts", "deprecated": false, @@ -3043,7 +3043,7 @@ "label": "snoozeSchedule", "description": [], "signature": [ - "Readonly<{ id?: string | undefined; skipRecurrences?: string[] | undefined; } & { duration: number; rRule: Readonly<{ count?: number | undefined; interval?: number | undefined; freq?: 0 | 2 | 6 | 5 | 4 | 3 | 1 | undefined; until?: string | undefined; byweekday?: (string | number)[] | undefined; bymonthday?: number[] | undefined; bymonth?: number[] | undefined; wkst?: \"MO\" | \"TU\" | \"WE\" | \"TH\" | \"FR\" | \"SA\" | \"SU\" | undefined; bysetpos?: number[] | undefined; byyearday?: number[] | undefined; byweekno?: number[] | undefined; byhour?: number[] | undefined; byminute?: number[] | undefined; bysecond?: number[] | undefined; } & { dtstart: string; tzid: string; }>; }>[] | undefined" + "Readonly<{ id?: string | undefined; skipRecurrences?: string[] | undefined; } & { duration: number; rRule: Readonly<{ count?: number | undefined; interval?: number | undefined; freq?: 0 | 2 | 1 | 6 | 5 | 4 | 3 | undefined; until?: string | undefined; byweekday?: (string | number)[] | undefined; bymonthday?: number[] | undefined; bymonth?: number[] | undefined; wkst?: \"MO\" | \"TU\" | \"WE\" | \"TH\" | \"FR\" | \"SA\" | \"SU\" | undefined; bysetpos?: number[] | undefined; byyearday?: number[] | undefined; byweekno?: number[] | undefined; byhour?: number[] | undefined; byminute?: number[] | undefined; bysecond?: number[] | undefined; } & { dtstart: string; tzid: string; }>; }>[] | undefined" ], "path": "x-pack/plugins/alerting/server/application/rule/types/rule.ts", "deprecated": false, @@ -3085,7 +3085,7 @@ "label": "lastRun", "description": [], "signature": [ - "Readonly<{ warning?: \"execute\" | \"license\" | \"validate\" | \"timeout\" | \"unknown\" | \"read\" | \"decrypt\" | \"disabled\" | \"maxExecutableActions\" | \"maxAlerts\" | \"maxQueuedActions\" | null | undefined; outcomeOrder?: number | undefined; outcomeMsg?: string[] | null | undefined; } & { outcome: \"warning\" | \"succeeded\" | \"failed\"; alertsCount: Readonly<{ recovered?: number | null | undefined; active?: number | null | undefined; new?: number | null | undefined; ignored?: number | null | undefined; } & {}>; }> | null | undefined" + "Readonly<{ warning?: \"execute\" | \"unknown\" | \"license\" | \"validate\" | \"timeout\" | \"read\" | \"decrypt\" | \"disabled\" | \"maxExecutableActions\" | \"maxAlerts\" | \"maxQueuedActions\" | null | undefined; outcomeOrder?: number | undefined; outcomeMsg?: string[] | null | undefined; } & { outcome: \"warning\" | \"succeeded\" | \"failed\"; alertsCount: Readonly<{ recovered?: number | null | undefined; active?: number | null | undefined; new?: number | null | undefined; ignored?: number | null | undefined; } & {}>; }> | null | undefined" ], "path": "x-pack/plugins/alerting/server/application/rule/types/rule.ts", "deprecated": false, @@ -4620,7 +4620,7 @@ "label": "BulkEditOperation", "description": [], "signature": [ - "Readonly<{} & { value: string[]; operation: \"delete\" | \"add\" | \"set\"; field: \"tags\"; }> | Readonly<{} & { value: Readonly<{ frequency?: Readonly<{} & { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; }> | undefined; uuid?: string | undefined; } & { id: string; params: Record; group: string; }>[]; operation: \"add\" | \"set\"; field: \"actions\"; }> | Readonly<{} & { value: Readonly<{} & { interval: string; }>; operation: \"set\"; field: \"schedule\"; }> | Readonly<{} & { value: string | null; operation: \"set\"; field: \"throttle\"; }> | Readonly<{} & { value: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; operation: \"set\"; field: \"notifyWhen\"; }> | Readonly<{} & { value: Readonly<{ id?: string | undefined; } & { duration: number; rRule: Readonly<{ count?: number | undefined; interval?: number | undefined; freq?: 0 | 2 | 3 | 1 | undefined; until?: string | undefined; byweekday?: string[] | undefined; bymonthday?: number[] | undefined; bymonth?: number[] | undefined; } & { dtstart: string; tzid: string; }>; }>; operation: \"set\"; field: \"snoozeSchedule\"; }> | Readonly<{ value?: string[] | undefined; } & { operation: \"delete\"; field: \"snoozeSchedule\"; }> | Readonly<{} & { operation: \"set\"; field: \"apiKey\"; }>" + "Readonly<{} & { value: string[]; operation: \"delete\" | \"add\" | \"set\"; field: \"tags\"; }> | Readonly<{} & { value: Readonly<{ frequency?: Readonly<{} & { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; }> | undefined; uuid?: string | undefined; } & { params: Record; id: string; group: string; }>[]; operation: \"add\" | \"set\"; field: \"actions\"; }> | Readonly<{} & { value: Readonly<{} & { interval: string; }>; operation: \"set\"; field: \"schedule\"; }> | Readonly<{} & { value: string | null; operation: \"set\"; field: \"throttle\"; }> | Readonly<{} & { value: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; operation: \"set\"; field: \"notifyWhen\"; }> | Readonly<{} & { value: Readonly<{ id?: string | undefined; } & { duration: number; rRule: Readonly<{ count?: number | undefined; interval?: number | undefined; freq?: 0 | 2 | 1 | 3 | undefined; until?: string | undefined; byweekday?: string[] | undefined; bymonthday?: number[] | undefined; bymonth?: number[] | undefined; } & { dtstart: string; tzid: string; }>; }>; operation: \"set\"; field: \"snoozeSchedule\"; }> | Readonly<{ value?: string[] | undefined; } & { operation: \"delete\"; field: \"snoozeSchedule\"; }> | Readonly<{} & { operation: \"set\"; field: \"apiKey\"; }>" ], "path": "x-pack/plugins/alerting/server/application/rule/methods/bulk_edit/types/bulk_edit_rules_options.ts", "deprecated": false, @@ -8636,7 +8636,7 @@ "label": "status", "description": [], "signature": [ - "\"ok\" | \"error\" | \"active\" | \"warning\" | \"pending\" | \"unknown\"" + "\"unknown\" | \"ok\" | \"error\" | \"active\" | \"warning\" | \"pending\"" ], "path": "x-pack/plugins/alerting/common/rule.ts", "deprecated": false, @@ -10106,30 +10106,30 @@ }, { "parentPluginId": "alerting", - "id": "def-common.AlertInstanceContext", - "type": "Type", + "id": "def-common.ALERTING_FEATURE_ID", + "type": "string", "tags": [], - "label": "AlertInstanceContext", + "label": "ALERTING_FEATURE_ID", "description": [], "signature": [ - "{ [x: string]: unknown; }" + "\"alerts\"" ], - "path": "x-pack/packages/kbn-alerting-state-types/src/alert_instance.ts", + "path": "x-pack/plugins/alerting/common/index.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "alerting", - "id": "def-common.ALERTS_FEATURE_ID", - "type": "string", + "id": "def-common.AlertInstanceContext", + "type": "Type", "tags": [], - "label": "ALERTS_FEATURE_ID", + "label": "AlertInstanceContext", "description": [], "signature": [ - "\"alerts\"" + "{ [x: string]: unknown; }" ], - "path": "x-pack/plugins/alerting/common/index.ts", + "path": "x-pack/packages/kbn-alerting-state-types/src/alert_instance.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -10434,7 +10434,7 @@ "label": "IsoWeekday", "description": [], "signature": [ - "2 | 7 | 6 | 5 | 4 | 3 | 1" + "2 | 1 | 7 | 6 | 5 | 4 | 3" ], "path": "x-pack/plugins/alerting/common/iso_weekdays.ts", "deprecated": false, @@ -11232,7 +11232,7 @@ "label": "RuleAlertingOutcome", "description": [], "signature": [ - "\"warning\" | \"unknown\" | \"success\" | \"failure\"" + "\"unknown\" | \"warning\" | \"success\" | \"failure\"" ], "path": "x-pack/plugins/alerting/common/rule.ts", "deprecated": false, @@ -11247,7 +11247,7 @@ "label": "RuleExecutionStatuses", "description": [], "signature": [ - "\"ok\" | \"error\" | \"active\" | \"warning\" | \"pending\" | \"unknown\"" + "\"unknown\" | \"ok\" | \"error\" | \"active\" | \"warning\" | \"pending\"" ], "path": "x-pack/plugins/alerting/common/rule.ts", "deprecated": false, diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index ab9e501a8789c..4532f186f2fa1 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index b7cac2784d108..79aed0b4b88af 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -134,7 +134,7 @@ "section": "def-common.NonEmptyStringBrand", "text": "NonEmptyStringBrand" }, - ">; }; }) | ({ serviceName: string; } & { dashboardId?: undefined; } & { serviceOverviewTab?: \"errors\" | \"metrics\" | \"traces\" | \"logs\" | undefined; } & { query: { environment: \"ENVIRONMENT_NOT_DEFINED\" | \"ENVIRONMENT_ALL\" | ", + ">; }; }) | ({ serviceName: string; } & { dashboardId?: undefined; } & { serviceOverviewTab?: \"errors\" | \"metrics\" | \"traces\" | \"logs\" | \"transactions\" | undefined; } & { query: { environment: \"ENVIRONMENT_NOT_DEFINED\" | \"ENVIRONMENT_ALL\" | ", "Branded", "" + ", \"id\" | \"type\">" ], "path": "src/plugins/controls/common/control_group/control_group_persistence.ts", "deprecated": false, diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 7c91a2a8fcf50..af179fd49a380 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-03-20 +date: 2024-03-21 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 4937c961c3bb4..d9f6ae245881c 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-03-20 +date: 2024-03-21 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 a23432591a3bc..09eb4462539bf 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-03-20 +date: 2024-03-21 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 4fccf099e2783..ccf77081dcbac 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index 7367306e4ee29..3024b1783752a 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -9278,15 +9278,7 @@ "label": "AggConfigOptions", "description": [], "signature": [ - "{ type: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.IAggType", - "text": "IAggType" - }, - "; id?: string | undefined; params?: {} | ", + "{ params?: {} | ", { "pluginId": "@kbn/utility-types", "scope": "common", @@ -9294,7 +9286,15 @@ "section": "def-common.SerializableRecord", "text": "SerializableRecord" }, - " | undefined; enabled?: boolean | undefined; schema?: string | undefined; }" + " | undefined; id?: string | undefined; type: ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.IAggType", + "text": "IAggType" + }, + "; enabled?: boolean | undefined; schema?: string | undefined; }" ], "path": "src/plugins/data/common/search/aggs/agg_config.ts", "deprecated": false, @@ -16040,7 +16040,39 @@ "label": "elasticsearchClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -16144,39 +16176,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 9076ae2aba23b..38fac657a43a9 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 8a53b86f28857..f4961d36ccaff 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index fb9880d348172..177e3cf4d8c75 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -30757,15 +30757,7 @@ "label": "AggConfigOptions", "description": [], "signature": [ - "{ type: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.IAggType", - "text": "IAggType" - }, - "; id?: string | undefined; params?: {} | ", + "{ params?: {} | ", { "pluginId": "@kbn/utility-types", "scope": "common", @@ -30773,7 +30765,15 @@ "section": "def-common.SerializableRecord", "text": "SerializableRecord" }, - " | undefined; enabled?: boolean | undefined; schema?: string | undefined; }" + " | undefined; id?: string | undefined; type: ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.IAggType", + "text": "IAggType" + }, + "; enabled?: boolean | undefined; schema?: string | undefined; }" ], "path": "src/plugins/data/common/search/aggs/agg_config.ts", "deprecated": false, @@ -31706,15 +31706,7 @@ "label": "CreateAggConfigParams", "description": [], "signature": [ - "{ type: string | ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.IAggType", - "text": "IAggType" - }, - "; id?: string | undefined; params?: {} | ", + "{ params?: {} | ", { "pluginId": "@kbn/utility-types", "scope": "common", @@ -31722,7 +31714,15 @@ "section": "def-common.SerializableRecord", "text": "SerializableRecord" }, - " | undefined; enabled?: boolean | undefined; schema?: string | undefined; }" + " | undefined; id?: string | undefined; type: string | ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.IAggType", + "text": "IAggType" + }, + "; enabled?: boolean | undefined; schema?: string | undefined; }" ], "path": "src/plugins/data/common/search/aggs/agg_configs.ts", "deprecated": false, diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 9130305f7ce48..93a63b1cafdaf 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-03-20 +date: 2024-03-21 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 fa925a361cf37..ef837cefd2c85 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-03-20 +date: 2024-03-21 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 1bec65f9d20d5..80af8f65aebe1 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-03-20 +date: 2024-03-21 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 6addd99b1c904..add6b3d52f011 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index b9d5a2ad708a9..61472b2262a82 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -11000,7 +11000,39 @@ "label": "elasticsearchClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -11104,39 +11136,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 6e2489908c9e2..980d90c3b5237 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-03-20 +date: 2024-03-21 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 e5694662ba30c..db96ffaad4b71 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-03-20 +date: 2024-03-21 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 fd0dc23951655..7e97e502af4ad 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-03-20 +date: 2024-03-21 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 7b9ceb6cfe28a..14b09dd413f95 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index c19eb35eac84a..7b7df57a996be 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 9bf6e76f4776c..3552c0fa935d7 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 9ef23d7e27eda..371eb80dd3537 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-03-20 +date: 2024-03-21 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 ce44c1be61742..63118b1732163 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-03-20 +date: 2024-03-21 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 4376507895c86..f1bca618e9fca 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 9354a97c849c8..15fd51923fc6e 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.devdocs.json b/api_docs/elastic_assistant.devdocs.json index 807dfdfa8fd50..0a977b2369d0f 100644 --- a/api_docs/elastic_assistant.devdocs.json +++ b/api_docs/elastic_assistant.devdocs.json @@ -252,7 +252,39 @@ "label": "esClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -356,39 +388,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 50080287033e5..ff0c3bff5cbb0 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-03-20 +date: 2024-03-21 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 be0ffe3dc6c48..783daa6b8f6e8 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -2255,7 +2255,9 @@ "label": "viewMode", "description": [], "signature": [ - "{ readonly value: ", + "{ source: ", + "Observable", + " | undefined; readonly value: ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", @@ -2263,9 +2265,7 @@ "section": "def-common.ViewMode", "text": "ViewMode" }, - "; source: ", - "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + "; error: (err: any) => void; forEach: { (next: (value: ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", @@ -2681,7 +2681,9 @@ "label": "dataViews", "description": [], "signature": [ - "{ readonly value: ", + "{ source: ", + "Observable", + " | undefined; readonly value: ", { "pluginId": "dataViews", "scope": "common", @@ -2689,9 +2691,7 @@ "section": "def-common.DataView", "text": "DataView" }, - "[] | undefined; source: ", - "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + "[] | undefined; error: (err: any) => void; forEach: { (next: (value: ", { "pluginId": "dataViews", "scope": "common", @@ -3045,7 +3045,9 @@ "label": "query$", "description": [], "signature": [ - "{ readonly value: ", + "{ source: ", + "Observable", + " | undefined; readonly value: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -3061,9 +3063,7 @@ "section": "def-common.AggregateQuery", "text": "AggregateQuery" }, - " | undefined; source: ", - "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + " | undefined; error: (err: any) => void; forEach: { (next: (value: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -3609,9 +3609,9 @@ "label": "panelTitle", "description": [], "signature": [ - "{ readonly value: string | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", + " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -3773,9 +3773,9 @@ "label": "dataLoading", "description": [], "signature": [ - "{ readonly value: boolean | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: boolean | undefined) => void): Promise; (next: (value: boolean | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => boolean | undefined; pipe: { (): ", + " | undefined; readonly value: boolean | undefined; error: (err: any) => void; forEach: { (next: (value: boolean | undefined) => void): Promise; (next: (value: boolean | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => boolean | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -3937,7 +3937,9 @@ "label": "filters$", "description": [], "signature": [ - "{ readonly value: ", + "{ source: ", + "Observable", + " | undefined; readonly value: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -3945,9 +3947,7 @@ "section": "def-common.Filter", "text": "Filter" }, - "[] | undefined; source: ", - "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + "[] | undefined; error: (err: any) => void; forEach: { (next: (value: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -4301,7 +4301,9 @@ "label": "onPhaseChange", "description": [], "signature": [ - "{ readonly value: ", + "{ source: ", + "Observable", + " | undefined; readonly value: ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", @@ -4309,9 +4311,7 @@ "section": "def-common.PhaseEvent", "text": "PhaseEvent" }, - " | undefined; source: ", - "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + " | undefined; error: (err: any) => void; forEach: { (next: (value: ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", @@ -4679,9 +4679,9 @@ "label": "blockingError", "description": [], "signature": [ - "{ readonly value: Error | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: Error | undefined) => void): Promise; (next: (value: Error | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => Error | undefined; pipe: { (): ", + " | undefined; readonly value: Error | undefined; error: (err: any) => void; forEach: { (next: (value: Error | undefined) => void): Promise; (next: (value: Error | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => Error | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -4874,7 +4874,9 @@ "label": "timeRange$", "description": [], "signature": [ - "{ readonly value: ", + "{ source: ", + "Observable", + " | undefined; readonly value: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -4882,9 +4884,7 @@ "section": "def-common.TimeRange", "text": "TimeRange" }, - " | undefined; source: ", - "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + " | undefined; error: (err: any) => void; forEach: { (next: (value: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -5238,9 +5238,9 @@ "label": "hidePanelTitle", "description": [], "signature": [ - "{ readonly value: boolean | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: boolean | undefined) => void): Promise; (next: (value: boolean | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => boolean | undefined; pipe: { (): ", + " | undefined; readonly value: boolean | undefined; error: (err: any) => void; forEach: { (next: (value: boolean | undefined) => void): Promise; (next: (value: boolean | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => boolean | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -5432,9 +5432,9 @@ "label": "panelDescription", "description": [], "signature": [ - "{ readonly value: string | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", + " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -5596,9 +5596,9 @@ "label": "disabledActionIds", "description": [], "signature": [ - "{ readonly value: string[] | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: string[] | undefined) => void): Promise; (next: (value: string[] | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string[] | undefined; pipe: { (): ", + " | undefined; readonly value: string[] | undefined; error: (err: any) => void; forEach: { (next: (value: string[] | undefined) => void): Promise; (next: (value: string[] | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string[] | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -5947,9 +5947,9 @@ "label": "savedObjectId", "description": [], "signature": [ - "{ readonly value: string | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", + " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -13625,7 +13625,7 @@ "section": "def-public.EmbeddableFactory", "text": "EmbeddableFactory" }, - ", \"create\" | \"type\" | \"latestVersion\" | \"isEditable\" | \"getDisplayName\"> & Partial, \"type\" | \"create\" | \"latestVersion\" | \"isEditable\" | \"getDisplayName\"> & Partial | undefined; error?: Readonly<{ type?: string | undefined; id?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; name?: string | undefined; license?: string | undefined; uuid?: string | undefined; version?: string | undefined; category?: string | undefined; description?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; alerting?: Readonly<{ outcome?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; status?: string | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; prepare_to_run_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; uuid?: string | undefined; flapping?: boolean | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; version?: string | undefined; server_uuid?: string | undefined; task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; saved_objects?: Readonly<{ type?: string | undefined; id?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; space_ids?: string[] | undefined; } & {}> | undefined; event?: Readonly<{ type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; id?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; category?: string[] | undefined; duration?: string | number | undefined; timezone?: string | undefined; risk_score?: number | undefined; severity?: string | number | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; code?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; provider?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined)[]" + "(Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; name?: string | undefined; license?: string | undefined; uuid?: string | undefined; version?: string | undefined; category?: string | undefined; description?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; alerting?: Readonly<{ outcome?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; status?: string | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; prepare_to_run_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; uuid?: string | undefined; flapping?: boolean | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; version?: string | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; space_ids?: string[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; category?: string[] | undefined; duration?: string | number | undefined; timezone?: string | undefined; risk_score?: number | undefined; severity?: string | number | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; code?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; provider?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined)[]" ], "path": "x-pack/plugins/event_log/server/es/cluster_client_adapter.ts", "deprecated": false, @@ -1470,7 +1470,7 @@ "label": "IEvent", "description": [], "signature": [ - "DeepPartial | undefined; error?: Readonly<{ type?: string | undefined; id?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; name?: string | undefined; license?: string | undefined; uuid?: string | undefined; version?: string | undefined; category?: string | undefined; description?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; alerting?: Readonly<{ outcome?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; status?: string | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; prepare_to_run_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; uuid?: string | undefined; flapping?: boolean | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; version?: string | undefined; server_uuid?: string | undefined; task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; saved_objects?: Readonly<{ type?: string | undefined; id?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; space_ids?: string[] | undefined; } & {}> | undefined; event?: Readonly<{ type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; id?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; category?: string[] | undefined; duration?: string | number | undefined; timezone?: string | undefined; risk_score?: number | undefined; severity?: string | number | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; code?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; provider?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}>>> | undefined" + "DeepPartial | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; name?: string | undefined; license?: string | undefined; uuid?: string | undefined; version?: string | undefined; category?: string | undefined; description?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; alerting?: Readonly<{ outcome?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; status?: string | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; prepare_to_run_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; uuid?: string | undefined; flapping?: boolean | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; version?: string | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; space_ids?: string[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; category?: string[] | undefined; duration?: string | number | undefined; timezone?: string | undefined; risk_score?: number | undefined; severity?: string | number | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; code?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; provider?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}>>> | undefined" ], "path": "x-pack/plugins/event_log/generated/schemas.ts", "deprecated": false, @@ -1485,7 +1485,7 @@ "label": "IValidatedEvent", "description": [], "signature": [ - "Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ type?: string | undefined; id?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; name?: string | undefined; license?: string | undefined; uuid?: string | undefined; version?: string | undefined; category?: string | undefined; description?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; alerting?: Readonly<{ outcome?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; status?: string | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; prepare_to_run_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; uuid?: string | undefined; flapping?: boolean | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; version?: string | undefined; server_uuid?: string | undefined; task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; saved_objects?: Readonly<{ type?: string | undefined; id?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; space_ids?: string[] | undefined; } & {}> | undefined; event?: Readonly<{ type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; id?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; category?: string[] | undefined; duration?: string | number | undefined; timezone?: string | undefined; risk_score?: number | undefined; severity?: string | number | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; code?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; provider?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined" + "Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; name?: string | undefined; license?: string | undefined; uuid?: string | undefined; version?: string | undefined; category?: string | undefined; description?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; alerting?: Readonly<{ outcome?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; status?: string | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; prepare_to_run_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; uuid?: string | undefined; flapping?: boolean | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; version?: string | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; space_ids?: string[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; category?: string[] | undefined; duration?: string | number | undefined; timezone?: string | undefined; risk_score?: number | undefined; severity?: string | number | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; code?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; provider?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined" ], "path": "x-pack/plugins/event_log/generated/schemas.ts", "deprecated": false, diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 78533243c1d24..9a6352658fe19 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.devdocs.json b/api_docs/exploratory_view.devdocs.json index fecfc6b9a5772..35b2749ca0e3f 100644 --- a/api_docs/exploratory_view.devdocs.json +++ b/api_docs/exploratory_view.devdocs.json @@ -1161,7 +1161,7 @@ "section": "def-common.AppUpdater", "text": "AppUpdater" }, - ">; }) => void; setIsSidebarEnabled: (isEnabled: boolean) => void; }" + ">; }) => void; }" ], "path": "x-pack/plugins/observability_solution/exploratory_view/public/plugin.ts", "deprecated": false, diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index 9e669c763d245..056a95a18e399 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-03-20 +date: 2024-03-21 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 b636a334d37f8..38d706f804e41 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-03-20 +date: 2024-03-21 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 6c920df92509d..0c649f3e69a2e 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-03-20 +date: 2024-03-21 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 58adb22711627..88178ccba5bae 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-03-20 +date: 2024-03-21 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 9c85ac3cea2f9..dbb90df75b091 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-03-20 +date: 2024-03-21 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 6c39f8b074be8..586a4f5d1aee5 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-03-20 +date: 2024-03-21 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 dce3f90841c5a..6c96b11acdfec 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-03-20 +date: 2024-03-21 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 498f17ebc7366..49461e3a9f165 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-03-20 +date: 2024-03-21 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 edf777544375a..3d84c2c1a4c4f 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-03-20 +date: 2024-03-21 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 b0b695fd5e961..4c5cb6045bcd1 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-03-20 +date: 2024-03-21 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 5d3694074707b..b7c830d7d6316 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-03-20 +date: 2024-03-21 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 00c32e470a43c..6bfdfd93d7de5 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-03-20 +date: 2024-03-21 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 e10dca8bdca16..64748dd9ee412 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-03-20 +date: 2024-03-21 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 9b1e0fb4f683f..93a30e09b0ccb 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.devdocs.json b/api_docs/expressions.devdocs.json index 51da6e6c8d2bd..86c36984773bf 100644 --- a/api_docs/expressions.devdocs.json +++ b/api_docs/expressions.devdocs.json @@ -11948,7 +11948,7 @@ "\nThis type represents the `type` of any `DatatableColumn` in a `Datatable`.\nits duplicated from KBN_FIELD_TYPES" ], "signature": [ - "\"string\" | \"number\" | \"boolean\" | \"object\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"unknown\" | \"_source\" | \"attachment\" | \"null\"" + "\"string\" | \"number\" | \"boolean\" | \"object\" | \"unknown\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"_source\" | \"attachment\" | \"null\"" ], "path": "src/plugins/expressions/common/expression_types/specs/datatable.ts", "deprecated": false, @@ -21850,7 +21850,7 @@ "\nThis type represents the `type` of any `DatatableColumn` in a `Datatable`.\nits duplicated from KBN_FIELD_TYPES" ], "signature": [ - "\"string\" | \"number\" | \"boolean\" | \"object\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"unknown\" | \"_source\" | \"attachment\" | \"null\"" + "\"string\" | \"number\" | \"boolean\" | \"object\" | \"unknown\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"_source\" | \"attachment\" | \"null\"" ], "path": "src/plugins/expressions/common/expression_types/specs/datatable.ts", "deprecated": false, @@ -30275,7 +30275,7 @@ "label": "type", "description": [], "signature": [ - "\"string\" | \"number\" | \"boolean\" | \"object\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"unknown\" | \"_source\" | \"attachment\" | \"null\"" + "\"string\" | \"number\" | \"boolean\" | \"object\" | \"unknown\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"_source\" | \"attachment\" | \"null\"" ], "path": "src/plugins/expressions/common/expression_types/specs/datatable.ts", "deprecated": false, @@ -36545,7 +36545,7 @@ "\nThis type represents the `type` of any `DatatableColumn` in a `Datatable`.\nits duplicated from KBN_FIELD_TYPES" ], "signature": [ - "\"string\" | \"number\" | \"boolean\" | \"object\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"unknown\" | \"_source\" | \"attachment\" | \"null\"" + "\"string\" | \"number\" | \"boolean\" | \"object\" | \"unknown\" | \"nested\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"date\" | \"murmur3\" | \"histogram\" | \"conflict\" | \"_source\" | \"attachment\" | \"null\"" ], "path": "src/plugins/expressions/common/expression_types/specs/datatable.ts", "deprecated": false, diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 31618a2e60228..ffd36718b80c6 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-03-20 +date: 2024-03-21 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 0f04d30368de4..1890b87cb7db0 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-03-20 +date: 2024-03-21 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 f9a53a61906f5..df914eef7f376 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 8b5032359c794..7fb6a78ddbcbf 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.devdocs.json b/api_docs/files.devdocs.json index 832bdba87c188..05b4118d5b628 100644 --- a/api_docs/files.devdocs.json +++ b/api_docs/files.devdocs.json @@ -839,7 +839,39 @@ "\nAn elasticsearch client that will be used to interact with the cluster." ], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -943,39 +975,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 6153701a54eed..ec730f23ed205 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-03-20 +date: 2024-03-21 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 0401941d8ee6e..2d0dd7c4709ab 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-03-20 +date: 2024-03-21 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 1c0182a2a705d..d8691a1f2d603 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -10606,7 +10606,39 @@ "label": "esClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -10710,39 +10742,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", @@ -11977,7 +11977,39 @@ "label": "esClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -12081,39 +12113,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", @@ -13361,7 +13361,39 @@ "label": "esClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -13465,39 +13497,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", @@ -14742,7 +14742,39 @@ "label": "esClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -14846,39 +14878,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", @@ -16126,7 +16126,39 @@ "label": "esClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -16230,39 +16262,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", @@ -18851,7 +18851,7 @@ "label": "installType", "description": [], "signature": [ - "\"update\" | \"unknown\" | \"reinstall\" | \"reupdate\" | \"rollback\" | \"install\"" + "\"unknown\" | \"update\" | \"reinstall\" | \"reupdate\" | \"rollback\" | \"install\"" ], "path": "x-pack/plugins/fleet/common/types/models/epm.ts", "deprecated": false, @@ -21167,7 +21167,7 @@ "label": "installType", "description": [], "signature": [ - "\"update\" | \"unknown\" | \"reinstall\" | \"reupdate\" | \"rollback\" | \"install\"" + "\"unknown\" | \"update\" | \"reinstall\" | \"reupdate\" | \"rollback\" | \"install\"" ], "path": "x-pack/plugins/fleet/common/types/rest_spec/epm.ts", "deprecated": false, diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index c293041f7b3e0..f46d2acb3de02 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 0187aa9e65450..f79c4ce2af764 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-03-20 +date: 2024-03-21 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 78762fab6e536..2cb37cebd47f7 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.devdocs.json b/api_docs/home.devdocs.json index 6eb5464f42f2f..c19eb9f27097c 100644 --- a/api_docs/home.devdocs.json +++ b/api_docs/home.devdocs.json @@ -1869,7 +1869,7 @@ "label": "InstructionsSchema", "description": [], "signature": [ - "{ readonly params?: Readonly<{ defaultValue?: any; } & { type: \"string\" | \"number\"; id: string; label: string; }>[] | undefined; readonly instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }" + "{ readonly params?: Readonly<{ defaultValue?: any; } & { id: string; type: \"string\" | \"number\"; label: string; }>[] | undefined; readonly instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }" ], "path": "src/plugins/home/server/services/tutorials/lib/tutorial_schema.ts", "deprecated": false, @@ -1892,7 +1892,7 @@ "section": "def-common.Writable", "text": "Writable" }, - "[]; previewImagePath: string; overviewDashboard: string; defaultIndex: string; dataIndices: Readonly<{ indexSettings?: Record | undefined; isDataStream?: boolean | undefined; } & { id: string; fields: Record; timeFields: string[]; dataPath: string; currentTimeMarker: string; preserveDayOfWeekTimeOfDay: boolean; }>[]; }>>[]; addSavedObjectsToSampleDataset: (id: string, savedObjects: ", + "[]; previewImagePath: string; overviewDashboard: string; defaultIndex: string; dataIndices: Readonly<{ indexSettings?: Record | undefined; isDataStream?: boolean | undefined; } & { id: string; fields: Record; timeFields: string[]; dataPath: string; currentTimeMarker: string; preserveDayOfWeekTimeOfDay: boolean; }>[]; }>>[]; addSavedObjectsToSampleDataset: (id: string, savedObjects: ", { "pluginId": "@kbn/core-saved-objects-common", "scope": "common", @@ -1941,7 +1941,7 @@ "section": "def-common.Writable", "text": "Writable" }, - "[]; previewImagePath: string; overviewDashboard: string; defaultIndex: string; dataIndices: Readonly<{ indexSettings?: Record | undefined; isDataStream?: boolean | undefined; } & { id: string; fields: Record; timeFields: string[]; dataPath: string; currentTimeMarker: string; preserveDayOfWeekTimeOfDay: boolean; }>[]; }>>" + "[]; previewImagePath: string; overviewDashboard: string; defaultIndex: string; dataIndices: Readonly<{ indexSettings?: Record | undefined; isDataStream?: boolean | undefined; } & { id: string; fields: Record; timeFields: string[]; dataPath: string; currentTimeMarker: string; preserveDayOfWeekTimeOfDay: boolean; }>[]; }>>" ], "path": "src/plugins/home/server/services/sample_data/lib/sample_dataset_registry_types.ts", "deprecated": false, @@ -2013,7 +2013,7 @@ "section": "def-server.TutorialContext", "text": "TutorialContext" }, - ") => Readonly<{ savedObjects?: any[] | undefined; euiIconType?: string | undefined; isBeta?: boolean | undefined; previewImagePath?: string | undefined; moduleName?: string | undefined; completionTimeMinutes?: number | undefined; elasticCloud?: Readonly<{ params?: Readonly<{ defaultValue?: any; } & { type: \"string\" | \"number\"; id: string; label: string; }>[] | undefined; } & { instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }> | undefined; onPremElasticCloud?: Readonly<{ params?: Readonly<{ defaultValue?: any; } & { type: \"string\" | \"number\"; id: string; label: string; }>[] | undefined; } & { instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }> | undefined; artifacts?: Readonly<{ application?: Readonly<{} & { path: string; label: string; }> | undefined; exportedFields?: Readonly<{} & { documentationUrl: string; }> | undefined; } & { dashboards: Readonly<{ linkLabel?: string | undefined; } & { id: string; isOverview: boolean; }>[]; }> | undefined; savedObjectsInstallMsg?: string | undefined; customStatusCheckName?: string | undefined; integrationBrowserCategories?: string[] | undefined; eprPackageOverlap?: string | undefined; } & { id: string; name: string; category: \"security\" | \"metrics\" | \"other\" | \"logging\"; shortDescription: string; longDescription: string; onPrem: Readonly<{ params?: Readonly<{ defaultValue?: any; } & { type: \"string\" | \"number\"; id: string; label: string; }>[] | undefined; } & { instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }>; }>" + ") => Readonly<{ savedObjects?: any[] | undefined; euiIconType?: string | undefined; isBeta?: boolean | undefined; previewImagePath?: string | undefined; moduleName?: string | undefined; completionTimeMinutes?: number | undefined; elasticCloud?: Readonly<{ params?: Readonly<{ defaultValue?: any; } & { id: string; type: \"string\" | \"number\"; label: string; }>[] | undefined; } & { instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }> | undefined; onPremElasticCloud?: Readonly<{ params?: Readonly<{ defaultValue?: any; } & { id: string; type: \"string\" | \"number\"; label: string; }>[] | undefined; } & { instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }> | undefined; artifacts?: Readonly<{ application?: Readonly<{} & { path: string; label: string; }> | undefined; exportedFields?: Readonly<{} & { documentationUrl: string; }> | undefined; } & { dashboards: Readonly<{ linkLabel?: string | undefined; } & { id: string; isOverview: boolean; }>[]; }> | undefined; savedObjectsInstallMsg?: string | undefined; customStatusCheckName?: string | undefined; integrationBrowserCategories?: string[] | undefined; eprPackageOverlap?: string | undefined; } & { id: string; name: string; category: \"security\" | \"metrics\" | \"other\" | \"logging\"; shortDescription: string; longDescription: string; onPrem: Readonly<{ params?: Readonly<{ defaultValue?: any; } & { id: string; type: \"string\" | \"number\"; label: string; }>[] | undefined; } & { instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }>; }>" ], "path": "src/plugins/home/server/services/tutorials/lib/tutorials_registry_types.ts", "deprecated": false, @@ -2051,7 +2051,7 @@ "label": "TutorialSchema", "description": [], "signature": [ - "{ readonly savedObjects?: any[] | undefined; readonly euiIconType?: string | undefined; readonly isBeta?: boolean | undefined; readonly previewImagePath?: string | undefined; readonly moduleName?: string | undefined; readonly completionTimeMinutes?: number | undefined; readonly elasticCloud?: Readonly<{ params?: Readonly<{ defaultValue?: any; } & { type: \"string\" | \"number\"; id: string; label: string; }>[] | undefined; } & { instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }> | undefined; readonly onPremElasticCloud?: Readonly<{ params?: Readonly<{ defaultValue?: any; } & { type: \"string\" | \"number\"; id: string; label: string; }>[] | undefined; } & { instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }> | undefined; readonly artifacts?: Readonly<{ application?: Readonly<{} & { path: string; label: string; }> | undefined; exportedFields?: Readonly<{} & { documentationUrl: string; }> | undefined; } & { dashboards: Readonly<{ linkLabel?: string | undefined; } & { id: string; isOverview: boolean; }>[]; }> | undefined; readonly savedObjectsInstallMsg?: string | undefined; readonly customStatusCheckName?: string | undefined; readonly integrationBrowserCategories?: string[] | undefined; readonly eprPackageOverlap?: string | undefined; readonly id: string; readonly name: string; readonly category: \"security\" | \"metrics\" | \"other\" | \"logging\"; readonly shortDescription: string; readonly longDescription: string; readonly onPrem: Readonly<{ params?: Readonly<{ defaultValue?: any; } & { type: \"string\" | \"number\"; id: string; label: string; }>[] | undefined; } & { instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }>; }" + "{ readonly savedObjects?: any[] | undefined; readonly euiIconType?: string | undefined; readonly isBeta?: boolean | undefined; readonly previewImagePath?: string | undefined; readonly moduleName?: string | undefined; readonly completionTimeMinutes?: number | undefined; readonly elasticCloud?: Readonly<{ params?: Readonly<{ defaultValue?: any; } & { id: string; type: \"string\" | \"number\"; label: string; }>[] | undefined; } & { instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }> | undefined; readonly onPremElasticCloud?: Readonly<{ params?: Readonly<{ defaultValue?: any; } & { id: string; type: \"string\" | \"number\"; label: string; }>[] | undefined; } & { instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }> | undefined; readonly artifacts?: Readonly<{ application?: Readonly<{} & { path: string; label: string; }> | undefined; exportedFields?: Readonly<{} & { documentationUrl: string; }> | undefined; } & { dashboards: Readonly<{ linkLabel?: string | undefined; } & { id: string; isOverview: boolean; }>[]; }> | undefined; readonly savedObjectsInstallMsg?: string | undefined; readonly customStatusCheckName?: string | undefined; readonly integrationBrowserCategories?: string[] | undefined; readonly eprPackageOverlap?: string | undefined; readonly id: string; readonly name: string; readonly category: \"security\" | \"metrics\" | \"other\" | \"logging\"; readonly shortDescription: string; readonly longDescription: string; readonly onPrem: Readonly<{ params?: Readonly<{ defaultValue?: any; } & { id: string; type: \"string\" | \"number\"; label: string; }>[] | undefined; } & { instructionSets: Readonly<{ title?: string | undefined; callOut?: Readonly<{ message?: string | undefined; iconType?: string | undefined; } & { title: string; }> | undefined; statusCheck?: Readonly<{ error?: string | undefined; text?: string | undefined; title?: string | undefined; success?: string | undefined; btnLabel?: string | undefined; } & { esHitsCheck: Readonly<{} & { index: string | string[]; query: Record; }>; }> | undefined; } & { instructionVariants: Readonly<{ initialSelected?: boolean | undefined; } & { id: string; instructions: Readonly<{ title?: string | undefined; textPre?: string | undefined; commands?: string[] | undefined; textPost?: string | undefined; customComponentName?: string | undefined; } & {}>[]; }>[]; }>[]; }>; }" ], "path": "src/plugins/home/server/services/tutorials/lib/tutorial_schema.ts", "deprecated": false, @@ -2360,7 +2360,7 @@ "section": "def-common.Writable", "text": "Writable" }, - "[]; previewImagePath: string; overviewDashboard: string; defaultIndex: string; dataIndices: Readonly<{ indexSettings?: Record | undefined; isDataStream?: boolean | undefined; } & { id: string; fields: Record; timeFields: string[]; dataPath: string; currentTimeMarker: string; preserveDayOfWeekTimeOfDay: boolean; }>[]; }>>[]; addSavedObjectsToSampleDataset: (id: string, savedObjects: ", + "[]; previewImagePath: string; overviewDashboard: string; defaultIndex: string; dataIndices: Readonly<{ indexSettings?: Record | undefined; isDataStream?: boolean | undefined; } & { id: string; fields: Record; timeFields: string[]; dataPath: string; currentTimeMarker: string; preserveDayOfWeekTimeOfDay: boolean; }>[]; }>>[]; addSavedObjectsToSampleDataset: (id: string, savedObjects: ", { "pluginId": "@kbn/core-saved-objects-common", "scope": "common", diff --git a/api_docs/home.mdx b/api_docs/home.mdx index e81de47eb0f33..d5e5bf55d12ff 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-03-20 +date: 2024-03-21 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 5dfdc3d51f47f..1a811925244f7 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-03-20 +date: 2024-03-21 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 4946518e235f7..df09fcf252aa2 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-03-20 +date: 2024-03-21 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 cd4fdbc94a815..2270921182530 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 6b4b05cc777e5..309bc8c059c14 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-03-20 +date: 2024-03-21 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 1a83709ba341b..c36707dfe841f 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-03-20 +date: 2024-03-21 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 ce116c407314e..8df00971356c3 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 5952c3190dd91..fa683b602536f 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 076949c1ea3f9..bdc3543513cb8 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-03-20 +date: 2024-03-21 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 efce945a858a7..40f60041c50f1 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-03-20 +date: 2024-03-21 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 56f035f2a4aed..35a5dd8b713cd 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index b1232bb42256b..76fcf90984506 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index d15f5f780eab7..af4268c62804f 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index cb4597f93c9f9..6cc884dd7af5a 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-03-20 +date: 2024-03-21 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 df18c5cd0c981..5ab42e2e4293c 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-03-20 +date: 2024-03-21 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 8da39373e6d8b..5c7aee0cba41b 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index c58e19b425764..f801dc1a71c57 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-03-20 +date: 2024-03-21 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 15ffef473f07e..37ee361a1f12b 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index ba9cb99d91bae..5d759ba799a9a 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 2a5a204d0f34d..a462ca87943cf 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 560338dc6d1e4..c5356ff196a04 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index f7952e2c5c72c..44cb74e69c71f 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 9ed05bca3f66a..1fc6e5cf1019a 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index a3d94355c7f64..09d2248db8ab4 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index d9e442c62cdfc..f34f049a56cee 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 23549c8770e57..5516e3305b224 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-03-20 +date: 2024-03-21 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 db57e1f3f7bcc..ea4f5714557e9 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 3eaae317463bd..3d38d42f63a37 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 6165e82df2816..2c90e6b8c0676 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-03-20 +date: 2024-03-21 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 477f14ca40041..fd5081920d75f 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-03-20 +date: 2024-03-21 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 a03c5ba737739..72d7938f002b7 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-03-20 +date: 2024-03-21 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 31c33dc95ab07..6b1f64cc3975e 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-03-20 +date: 2024-03-21 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 98f91780ebd32..ee9dab1d7c53d 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-03-20 +date: 2024-03-21 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 2e92bd9ae382e..ae6a555a8bc9d 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-03-20 +date: 2024-03-21 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 d103b24abdce6..e039b66dd7106 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-03-20 +date: 2024-03-21 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 e48898882fedd..b3cb335296634 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-03-20 +date: 2024-03-21 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 80cdc64f337ad..fa3c3d13425c2 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-03-20 +date: 2024-03-21 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 13974fa21cf54..ed345f879a452 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-03-20 +date: 2024-03-21 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 ea40b0541dd14..ff70b1e371565 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-03-20 +date: 2024-03-21 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 68157522525e2..a868ca81594dd 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-03-20 +date: 2024-03-21 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 92dd9e7c3ff98..bddb3bd60a76e 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-03-20 +date: 2024-03-21 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 8b8882a1bc137..19457b737ee36 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-03-20 +date: 2024-03-21 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 9bc9adbbff856..b10c87f318f59 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-03-20 +date: 2024-03-21 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 fac7cc9a5e385..0abe9951fcf88 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-03-20 +date: 2024-03-21 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 320a797b485df..af89cfc58b92a 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-03-20 +date: 2024-03-21 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 8d8d08650af0c..019abb2e97d18 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 f6584c2bcfd92..f188697c660f6 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-03-20 +date: 2024-03-21 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 39498ad00b8d3..7263a8aa84673 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index ef4be81fbfad1..6138988cbda41 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-03-20 +date: 2024-03-21 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 6e5d2d77e2998..4127781c2c11d 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-03-20 +date: 2024-03-21 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 2e2a26982284a..b1375b5d9a71b 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-03-20 +date: 2024-03-21 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 59bef63e1fab9..f75810ede6111 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.devdocs.json b/api_docs/kbn_content_management_utils.devdocs.json index 1441b673b2afc..414370f32e246 100644 --- a/api_docs/kbn_content_management_utils.devdocs.json +++ b/api_docs/kbn_content_management_utils.devdocs.json @@ -899,7 +899,7 @@ "section": "def-common.Type", "text": "Type" }, - "[]>; namespaces: ", + "[]>; namespaces: ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -3369,7 +3369,7 @@ "section": "def-common.Type", "text": "Type" }, - "[] | undefined>" + "[] | undefined>" ], "path": "packages/kbn-content-management-utils/src/schema.ts", "deprecated": false, @@ -3523,7 +3523,7 @@ "section": "def-common.Type", "text": "Type" }, - "[]>" + "[]>" ], "path": "packages/kbn-content-management-utils/src/schema.ts", "deprecated": false, @@ -3746,7 +3746,7 @@ "section": "def-common.Type", "text": "Type" }, - " | Readonly<{ name?: string | undefined; } & { type: string; id: string; }>[] | undefined>" + " | Readonly<{ name?: string | undefined; } & { id: string; type: string; }>[] | undefined>" ], "path": "packages/kbn-content-management-utils/src/schema.ts", "deprecated": false, @@ -3788,7 +3788,7 @@ "section": "def-common.Type", "text": "Type" }, - " | Readonly<{ name?: string | undefined; } & { type: string; id: string; }>[] | undefined>" + " | Readonly<{ name?: string | undefined; } & { id: string; type: string; }>[] | undefined>" ], "path": "packages/kbn-content-management-utils/src/schema.ts", "deprecated": false, @@ -3949,7 +3949,7 @@ "section": "def-common.Type", "text": "Type" }, - "[] | undefined>" + "[] | undefined>" ], "path": "packages/kbn-content-management-utils/src/schema.ts", "deprecated": false, @@ -4021,7 +4021,7 @@ "section": "def-common.Type", "text": "Type" }, - "; statusCode: number; }> | undefined; namespaces?: string[] | undefined; createdAt?: string | undefined; updatedAt?: string | undefined; version?: string | undefined; originId?: string | undefined; } & { type: string; id: string; references: Readonly<{ name?: string | undefined; } & { type: string; id: string; }>[]; attributes: Readonly<{ [x: string]: any; } & {}>; }> | undefined>" + "; statusCode: number; }> | undefined; namespaces?: string[] | undefined; createdAt?: string | undefined; updatedAt?: string | undefined; version?: string | undefined; originId?: string | undefined; } & { id: string; type: string; references: Readonly<{ name?: string | undefined; } & { id: string; type: string; }>[]; attributes: Readonly<{ [x: string]: any; } & {}>; }> | undefined>" ], "path": "packages/kbn-content-management-utils/src/schema.ts", "deprecated": false, diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 9d61baf5b1939..8d48bc9757faa 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 13c8ad08de23b..a7424e82c3172 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 2a7419893a19c..16ff127b9b9fb 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 50ca163885f57..159ca079af4c1 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 aa38b611bb5cb..347b83a3f2a56 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-03-20 +date: 2024-03-21 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 8d517f8a8f1a4..1fd3f975635c0 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 62c4489253d11..93cd601cfe8a6 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 0411f00ec0c35..f22d18ecdb5f3 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 b807402358ef9..d9e5d217c5ef2 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 24226e6594b37..2e7743da43c78 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 d76cbf93c1e46..29a31788619e8 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-03-20 +date: 2024-03-21 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 2d6144acf8846..3ac56e84a20b6 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 44691eb7157aa..fa442db7afc30 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 9f66b4fc26731..867b65df5e59b 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 abbf34a9edef9..fce9b495de994 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 0d53d32cb7914..0795333827af3 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-03-20 +date: 2024-03-21 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 19d2da7126f23..3a6346656ef04 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 c0cf74a950dd4..c61f0e448d3e7 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 3dfb954361eea..05994f8f097ba 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 8421b4db1a8d6..7bb1b43591647 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-03-20 +date: 2024-03-21 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 f5ec34d9fe52d..1fb3d01007c22 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-03-20 +date: 2024-03-21 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 cbe8fe7b0a887..b4d3eb5911ac8 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.devdocs.json b/api_docs/kbn_core_chrome_browser.devdocs.json index f8bfcffadc9e9..8bbcd01c1ea9f 100644 --- a/api_docs/kbn_core_chrome_browser.devdocs.json +++ b/api_docs/kbn_core_chrome_browser.devdocs.json @@ -3696,53 +3696,7 @@ "label": "AppDeepLinkId", "description": [], "signature": [ - { - "pluginId": "@kbn/deeplinks-analytics", - "scope": "common", - "docId": "kibKbnDeeplinksAnalyticsPluginApi", - "section": "def-common.AppId", - "text": "AppId" - }, - " | ", - { - "pluginId": "@kbn/deeplinks-devtools", - "scope": "common", - "docId": "kibKbnDeeplinksDevtoolsPluginApi", - "section": "def-common.DeepLinkId", - "text": "DeepLinkId" - }, - " | ", - { - "pluginId": "@kbn/deeplinks-ml", - "scope": "common", - "docId": "kibKbnDeeplinksMlPluginApi", - "section": "def-common.DeepLinkId", - "text": "DeepLinkId" - }, - " | ", - { - "pluginId": "@kbn/deeplinks-management", - "scope": "common", - "docId": "kibKbnDeeplinksManagementPluginApi", - "section": "def-common.DeepLinkId", - "text": "DeepLinkId" - }, - " | ", - { - "pluginId": "@kbn/deeplinks-search", - "scope": "common", - "docId": "kibKbnDeeplinksSearchPluginApi", - "section": "def-common.DeepLinkId", - "text": "DeepLinkId" - }, - " | ", - { - "pluginId": "@kbn/deeplinks-observability", - "scope": "common", - "docId": "kibKbnDeeplinksObservabilityPluginApi", - "section": "def-common.DeepLinkId", - "text": "DeepLinkId" - } + "\"fleet\" | \"ml\" | \"monitoring\" | \"metrics\" | \"management\" | \"synthetics\" | \"apm\" | \"logs\" | \"dashboards\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"dev_tools\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:singleMetricViewer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:logRateAnalysis\" | \"ml:logPatternAnalysis\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:settings\" | \"management:dataViews\" | \"management:spaces\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:filesManagement\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:aiAssistantManagementObservability\" | \"management:api_keys\" | \"management:cross_cluster_replication\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"observability-logs-explorer\" | \"observabilityOnboarding\" | \"slo\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:rules\" | \"observability-overview:alerts\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:services\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:network\" | \"securitySolutionUI:sessions\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:uncommon_processes\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\" | \"fleet:agents\"" ], "path": "packages/core/chrome/core-chrome-browser/src/project_navigation.ts", "deprecated": false, @@ -3757,7 +3711,7 @@ "label": "AppId", "description": [], "signature": [ - "\"ml\" | \"dev_tools\" | ", + "\"fleet\" | \"ml\" | \"home\" | \"dev_tools\" | ", { "pluginId": "@kbn/deeplinks-analytics", "scope": "common", @@ -3780,7 +3734,8 @@ "docId": "kibKbnDeeplinksObservabilityPluginApi", "section": "def-common.AppId", "text": "AppId" - } + }, + " | \"securitySolutionUI\"" ], "path": "packages/core/chrome/core-chrome-browser/src/project_navigation.ts", "deprecated": false, diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 0805fd9fdaee6..3a36211a64f7d 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 f48e747746ce7..4c4441e6f8422 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 c302a2e6b35c1..eeafd2e7bb900 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 a95551e055044..ea9074605439a 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 a2aaac6407013..986c63f2ecfc3 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 da0d3cc0b83de..52733088cccd8 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 633456323ad69..25868310f372d 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-03-20 +date: 2024-03-21 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 9f034d528e08f..56015d6173fb8 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-03-20 +date: 2024-03-21 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 ca65e01f97eb5..45cab90ecfc08 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 c078ff208ce63..e355ff96f8ae6 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 63db33eb212b8..d00176b5ba9f9 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 4f8bd78323832..934c73b91de7b 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 10e96f6a5673f..074d755fc3122 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 7d7de6c6777b8..32e358b8ee08c 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-03-20 +date: 2024-03-21 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 70830d07ec418..30610ce49c776 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-03-20 +date: 2024-03-21 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 8b9b1b392959e..b500d06a5e921 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 19debbbd3b2ae..5e33b30043b60 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 2a409e4ca7a4c..8b780924cf87f 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 004e94d25928b..1ab279624cf9b 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 e4e23084bd51a..f3c58ea9f037c 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-03-20 +date: 2024-03-21 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 b475efb49a91a..f1a615f3cd986 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 adef72554f66f..c044776acb2bf 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.devdocs.json b/api_docs/kbn_core_elasticsearch_client_server_mocks.devdocs.json index 23b3ff9711e14..0c3acda84f80c 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.devdocs.json @@ -271,7 +271,23 @@ "label": "asInternalUser", "description": [], "signature": [ - "{ create: ", + "{ search: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; create: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", "scope": "common", @@ -335,22 +351,6 @@ "DeleteRequest", ", options?: ", "TransportRequestOptions", - " | undefined]>; search: ", - { - "pluginId": "@kbn/core-elasticsearch-client-server-mocks", - "scope": "common", - "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", - "section": "def-common.ClientApiMockInstance", - "text": "ClientApiMockInstance" - }, - ">, [params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", " | undefined]>; helpers: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", @@ -1444,7 +1444,23 @@ "label": "asInternalUser", "description": [], "signature": [ - "{ create: ", + "{ search: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; create: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", "scope": "common", @@ -1508,22 +1524,6 @@ "DeleteRequest", ", options?: ", "TransportRequestOptions", - " | undefined]>; search: ", - { - "pluginId": "@kbn/core-elasticsearch-client-server-mocks", - "scope": "common", - "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", - "section": "def-common.ClientApiMockInstance", - "text": "ClientApiMockInstance" - }, - ">, [params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", " | undefined]>; helpers: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", @@ -2571,7 +2571,23 @@ "label": "asCurrentUser", "description": [], "signature": [ - "{ create: ", + "{ search: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; create: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", "scope": "common", @@ -2635,22 +2651,6 @@ "DeleteRequest", ", options?: ", "TransportRequestOptions", - " | undefined]>; search: ", - { - "pluginId": "@kbn/core-elasticsearch-client-server-mocks", - "scope": "common", - "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", - "section": "def-common.ClientApiMockInstance", - "text": "ClientApiMockInstance" - }, - ">, [params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", " | undefined]>; helpers: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", @@ -3789,7 +3789,23 @@ "label": "ElasticsearchClientMock", "description": [], "signature": [ - "{ create: ", + "{ search: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "common", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-common.ClientApiMockInstance", + "text": "ClientApiMockInstance" + }, + ">, [params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined]>; create: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", "scope": "common", @@ -3853,22 +3869,6 @@ "DeleteRequest", ", options?: ", "TransportRequestOptions", - " | undefined]>; search: ", - { - "pluginId": "@kbn/core-elasticsearch-client-server-mocks", - "scope": "common", - "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", - "section": "def-common.ClientApiMockInstance", - "text": "ClientApiMockInstance" - }, - ">, [params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", " | undefined]>; helpers: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index b13f5959169df..0173812b63209 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_core_elasticsearch_server.devdocs.json index 95638838cf385..071809ba82f84 100644 --- a/api_docs/kbn_core_elasticsearch_server.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_server.devdocs.json @@ -1068,7 +1068,39 @@ "\nA {@link ElasticsearchClient | client} to be used to query the ES cluster on behalf of the Kibana internal user" ], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -1172,39 +1204,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", @@ -2770,7 +2770,39 @@ "\nA {@link ElasticsearchClient | client} to be used to query the elasticsearch cluster\non behalf of the internal Kibana user." ], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -2874,39 +2906,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", @@ -4008,7 +4008,39 @@ "\nA {@link ElasticsearchClient | client} to be used to query the elasticsearch cluster\non behalf of the user that initiated the request to the Kibana server." ], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -4112,39 +4144,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", @@ -5499,7 +5499,39 @@ "\nClient used to query the elasticsearch cluster.\n" ], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -5603,39 +5635,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index 3fd584f993e62..6c30528db76be 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_core_elasticsearch_server_internal.devdocs.json index e45274c30243a..5b28c015d0c21 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_server_internal.devdocs.json @@ -60,7 +60,39 @@ "label": "client", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -164,39 +196,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", @@ -1805,7 +1805,39 @@ "label": "internalClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -1909,39 +1941,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index 447207f8961c3..b337cae11a337 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 35c784e33ef9d..305294cf705eb 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 abdba9a8f6adb..c6b1d1c1533a5 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 887f641b52ed6..f05897bb9205a 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 dd0fa8fa6c745..4b66a9db55f13 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 273cb1141f983..441489eee985e 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 1fdb8adb6e3bf..559eebde86470 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 a9862266a30f3..699d8413478a0 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-03-20 +date: 2024-03-21 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 88afd2db5b5d7..1cef247fbca56 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-03-20 +date: 2024-03-21 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 a56731c805805..d42d448176f4a 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 535429b0520e6..05fcd7d5c6af7 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 761638c40cb40..0ac0cac3cc09a 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 b67c3b945d7e3..4b6770b1ab90a 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 affb875753919..c7966a8e1876d 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 de45ec7788f13..a537d9127dac4 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 8efc1c354708c..f2377105fb248 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 c62b86363dde6..39150ca345137 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-03-20 +date: 2024-03-21 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 42ae1fe8f4821..116be9e43958c 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 e8ca816cae848..e0355cee4ca9c 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-03-20 +date: 2024-03-21 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 b0533e332681f..058471cc4d5e5 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-03-20 +date: 2024-03-21 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 cdaf3d92055ed..ae70d010c6ec9 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 f0a4ffae1ab82..584f598d6e413 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 89ea51345e17f..b400b58a89b3b 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 f464679eabf8a..19f27f0ee1ce1 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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.mdx b/api_docs/kbn_core_http_server.mdx index b97274bc4565f..563459a079088 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-03-20 +date: 2024-03-21 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 014a585a70190..f06a931c91a85 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 522cfc669f338..d1dd15797d346 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 128b5e5cd74e4..2ee59f9b4ae1d 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 a1b1a5ee73f81..58a14b29668dc 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 e4f9c9d8ce32d..b774e38908402 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-03-20 +date: 2024-03-21 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 967e3818da2cd..f726ed64162b3 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 0cd9988bd09d8..a3b40cb70f2d3 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 9fc3f87791376..1c780958d0cf0 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 e7cd8fff569b8..90e511416ba82 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 fcf884317a858..b63145618d3b1 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 2b67bbdfef0f3..71b7d890a8362 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 ff6619e68a90e..a7c9b5974678e 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 58e8301155ce7..5af5798ed1c31 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-03-20 +date: 2024-03-21 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 7e19cb3cc2e56..be687c57b4221 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 8ffda5e933dd0..e6c7643e953d1 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 0d751c4eacee4..5dc76b5be5ded 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 f7eea671193a5..fa16ad234b542 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-03-20 +date: 2024-03-21 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 59810fdc020a1..9b6f0bb25f3d8 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 18ce627e174c7..f46c21b65e55e 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 acdb7a6f80f81..cfcb76870a345 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 781d8d0e7bfc9..4a8bb1c8cfdfa 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 4a8d098e4b3ef..e334a833dcf32 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-03-20 +date: 2024-03-21 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 3ddacbedc2361..0adbb401456d5 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 3669f9737a97b..ee5311c4a7d90 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 9ef9a473b5cc4..bc72aee292a39 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 5d9e63d8d6b52..258627345b506 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-03-20 +date: 2024-03-21 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 0d035650607a0..0883ae9674e27 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 9fae27a83c9ec..3a4589f819a18 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 00fa34165bd10..02a663e50d947 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 fa34844c362dd..de1a8b008a7e5 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 8d06eff8a8d3b..5ccf8ea9da1a5 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 2db9e8629db0d..64362c204ed50 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 96b8508ef817a..47368f57d47c9 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 80e3edfcdce53..b424eed1c640b 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 0ae2258cf2e20..6deb6ca7bb404 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 62d085ce906da..1bcf4943f0cad 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 404958def29e5..3a9d8647b4268 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 57d1852fede27..949c2e4e6d938 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-03-20 +date: 2024-03-21 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 eac8341e5fc91..24b9512a95570 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-03-20 +date: 2024-03-21 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 9ff5c928ee676..eb54ae022cab0 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 745ff0dffef1c..e24dedc44d27d 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-03-20 +date: 2024-03-21 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 9af6460eb7a56..da583cf88afc2 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 096d66ac736a0..bd486a34a6350 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 73ad7bdfadde2..00ad0cc46bba4 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 279401476bc15..385a822c73ced 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 8a963e7013b69..b9e7da303c5d5 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 658e7c7263886..b812534b5675b 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 aa923151b7ab7..69c9a5b2355d2 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-03-20 +date: 2024-03-21 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 51b4f68cd7d66..c759f076a04b7 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 1b495e1adad59..c69f5acd6216c 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 e843592fdff0e..23fb086755dd0 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 3b51357fbee81..392489b51aac5 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 6a8e2a8d2d977..69028a0183f19 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 5bf545d0914a6..dcc0237bc437c 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 370789cb2b6fd..11c65b1b78d87 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-03-20 +date: 2024-03-21 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 2314bb6700fa7..5e4b17bc23b01 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 5666b77cd08c5..ff5d0099a7402 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_core_saved_objects_migration_server_internal.devdocs.json index beff4bb8eaf4f..a1a5638f699bc 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.devdocs.json +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.devdocs.json @@ -2391,7 +2391,39 @@ "label": "client", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -2495,39 +2527,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", 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 7c527e3009989..033c614fdda25 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 6708ea4849a36..a97f9761075e4 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 a08bea86a16f1..9d3cd1c8aeb13 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-03-20 +date: 2024-03-21 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 77e24106bab93..8aedb215bdb83 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 47ddcf0541a25..27687859d061b 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 ab1a3c3a72665..f394aa095ffba 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-03-20 +date: 2024-03-21 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 e586fed1d8faf..c5112dc916530 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-03-20 +date: 2024-03-21 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 09b7348ef796c..7aacd965a9a73 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-03-20 +date: 2024-03-21 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 93f7d495e1847..11e579c43a394 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-03-20 +date: 2024-03-21 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 0af414220cfc0..694fe1188402d 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-03-20 +date: 2024-03-21 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 6a5ba2bd049a5..790e94450050d 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-03-20 +date: 2024-03-21 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 a43622a9cad38..c5af125b803df 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-03-20 +date: 2024-03-21 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 396e34dec7f5b..f906b18d90a0c 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-03-20 +date: 2024-03-21 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 99b844b5ab2e0..f6ca07abe5321 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-03-20 +date: 2024-03-21 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 41bd8658e6aab..8a19249fc8d54 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 2f01c8404d194..587f2d89f1acc 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-03-20 +date: 2024-03-21 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 55b56a9f92572..d26c6763b7a83 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 477c360be939c..8c9c32d3fb345 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 74bc82d4dd876..24c92016c710c 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-03-20 +date: 2024-03-21 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 bb7bf6c0c6afb..7c4c7009fb9ed 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 3707271527b54..2e2cd0323b43a 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-03-20 +date: 2024-03-21 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 733af81309140..de2f204adfdf5 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-03-20 +date: 2024-03-21 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 9e821753b66c9..082b94527ca87 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-03-20 +date: 2024-03-21 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 431321822d690..15447901d259c 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 c7e1e85f12d61..50e2918c710bd 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 fdb98aa7d5b44..1f4627387b00d 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 8165f9a3c7ea9..5514115a6eb09 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.UiSettingsType", "text": "UiSettingsType" }, - " | undefined; options?: string[] | number[] | undefined; value?: unknown; scope?: ", + " | undefined; value?: unknown; options?: string[] | number[] | undefined; scope?: ", { "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 fa1f6d0278e70..7ab8a5b094e7f 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 1ca7ab16c45d5..4e937ee24065c 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 1696f28e6b22e..4d7f3fafe86e8 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 6d75b9f2ec730..55ace6dd5b9ff 100644 --- a/api_docs/kbn_core_ui_settings_common.devdocs.json +++ b/api_docs/kbn_core_ui_settings_common.devdocs.json @@ -554,7 +554,7 @@ "\nDenotes the scope of the setting" ], "signature": [ - "\"global\" | \"namespace\"" + "\"namespace\" | \"global\"" ], "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 4c16fbfebedff..b653d92f9f74e 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-03-20 +date: 2024-03-21 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 746def6720998..451c9fd46680f 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-03-20 +date: 2024-03-21 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 8a8a3745410ca..5a95ab09f06c6 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 5bbf4dacb05a6..9c2f6ba1eacdf 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 f7b51b8ab621a..8a07f73e7edae 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-03-20 +date: 2024-03-21 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 71f016481d398..23b67d0ba2925 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 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 308318e9ecfe0..fba31e0aa8beb 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 5158a302bae9f..856133204fe46 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index d27936cd915c2..416cabaa109bc 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal'] --- import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 8ba0d706cc22c..0475e6f05a30f 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 62c317bf04c35..8441532eea194 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-03-20 +date: 2024-03-21 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 002058141b484..ba3f9675f3792 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 38ccea2cd4007..ff134a793a22a 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-03-20 +date: 2024-03-21 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 fc9efb25bd402..80ee751c78d44 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-03-20 +date: 2024-03-21 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 06b446a7f3536..df244523c2ba4 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-03-20 +date: 2024-03-21 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 bffdd539ff1f4..5b2bd0da44945 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-03-20 +date: 2024-03-21 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 51521c06b5659..c4820bd84a152 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-03-20 +date: 2024-03-21 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 1a7e61a048075..300cfdd236fdb 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-03-20 +date: 2024-03-21 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 c3f929816cd0c..f1370f67f8718 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 6239dfc8bdfc7..1e0c4526f9fb4 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-03-20 +date: 2024-03-21 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 aa555b1f152b3..9a63b3014cc6e 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-03-20 +date: 2024-03-21 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 064b441003d34..c05dfbf212135 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.devdocs.json b/api_docs/kbn_deeplinks_fleet.devdocs.json new file mode 100644 index 0000000000000..4a55c23d6c208 --- /dev/null +++ b/api_docs/kbn_deeplinks_fleet.devdocs.json @@ -0,0 +1,73 @@ +{ + "id": "@kbn/deeplinks-fleet", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/deeplinks-fleet", + "id": "def-common.AppId", + "type": "Type", + "tags": [], + "label": "AppId", + "description": [], + "signature": [ + "\"fleet\"" + ], + "path": "packages/deeplinks/fleet/deep_links.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/deeplinks-fleet", + "id": "def-common.DeepLinkId", + "type": "Type", + "tags": [], + "label": "DeepLinkId", + "description": [], + "signature": [ + "\"fleet\" | \"fleet:settings\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\" | \"fleet:agents\"" + ], + "path": "packages/deeplinks/fleet/deep_links.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/deeplinks-fleet", + "id": "def-common.LinkId", + "type": "Type", + "tags": [], + "label": "LinkId", + "description": [], + "signature": [ + "\"settings\" | \"policies\" | \"data_streams\" | \"enrollment_tokens\" | \"uninstall_tokens\" | \"agents\"" + ], + "path": "packages/deeplinks/fleet/deep_links.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx new file mode 100644 index 0000000000000..9d9743af809d5 --- /dev/null +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -0,0 +1,30 @@ +--- +#### +#### 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: kibKbnDeeplinksFleetPluginApi +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-03-21 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] +--- +import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; + + + +Contact [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 3 | 0 | 3 | 0 | + +## Common + +### Consts, variables and types + + diff --git a/api_docs/kbn_deeplinks_management.devdocs.json b/api_docs/kbn_deeplinks_management.devdocs.json index 9bd5bdc90e7a4..454be76704be6 100644 --- a/api_docs/kbn_deeplinks_management.devdocs.json +++ b/api_docs/kbn_deeplinks_management.devdocs.json @@ -45,7 +45,7 @@ "label": "DeepLinkId", "description": [], "signature": [ - "\"fleet\" | \"monitoring\" | \"management\" | \"integrations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:settings\" | \"management:dataViews\" | \"management:spaces\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:aiAssistantManagementObservability\" | \"management:api_keys\" | \"management:cross_cluster_replication\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:pipelines\" | \"management:remote_clusters\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\"" + "\"fleet\" | \"monitoring\" | \"management\" | \"integrations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:settings\" | \"management:dataViews\" | \"management:spaces\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:filesManagement\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:aiAssistantManagementObservability\" | \"management:api_keys\" | \"management:cross_cluster_replication\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\"" ], "path": "packages/deeplinks/management/deep_links.ts", "deprecated": false, @@ -60,7 +60,7 @@ "label": "LinkId", "description": [], "signature": [ - "\"transform\" | \"watcher\" | \"cases\" | \"tags\" | \"settings\" | \"dataViews\" | \"spaces\" | \"reporting\" | \"aiAssistantManagementSelection\" | \"aiAssistantManagementObservability\" | \"api_keys\" | \"cross_cluster_replication\" | \"index_lifecycle_management\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"remote_clusters\" | \"rollup_jobs\" | \"snapshot_restore\" | \"triggersActions\" | \"triggersActionsConnectors\"" + "\"transform\" | \"watcher\" | \"cases\" | \"tags\" | \"maintenanceWindows\" | \"settings\" | \"dataViews\" | \"spaces\" | \"users\" | \"migrate_data\" | \"search_sessions\" | \"filesManagement\" | \"roles\" | \"reporting\" | \"aiAssistantManagementSelection\" | \"aiAssistantManagementObservability\" | \"api_keys\" | \"cross_cluster_replication\" | \"license_management\" | \"index_lifecycle_management\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"remote_clusters\" | \"role_mappings\" | \"rollup_jobs\" | \"snapshot_restore\" | \"triggersActions\" | \"triggersActionsConnectors\" | \"upgrade_assistant\"" ], "path": "packages/deeplinks/management/deep_links.ts", "deprecated": false, diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index eb80bd9326604..6492934ea5a78 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.devdocs.json b/api_docs/kbn_deeplinks_ml.devdocs.json index 3992cac4b2a4d..1269effb3879c 100644 --- a/api_docs/kbn_deeplinks_ml.devdocs.json +++ b/api_docs/kbn_deeplinks_ml.devdocs.json @@ -45,7 +45,7 @@ "label": "DeepLinkId", "description": [], "signature": [ - "\"ml\" | \"ml:nodes\" | \"ml:notifications\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:singleMetricViewer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:logRateAnalysis\" | \"ml:logPatternAnalysis\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\"" + "\"ml\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:singleMetricViewer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:logRateAnalysis\" | \"ml:logPatternAnalysis\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\"" ], "path": "packages/deeplinks/ml/deep_links.ts", "deprecated": false, @@ -60,7 +60,7 @@ "label": "LinkId", "description": [], "signature": [ - "\"nodes\" | \"notifications\" | \"overview\" | \"memoryUsage\" | \"settings\" | \"dataVisualizer\" | \"anomalyDetection\" | \"anomalyExplorer\" | \"singleMetricViewer\" | \"dataDrift\" | \"dataFrameAnalytics\" | \"resultExplorer\" | \"analyticsMap\" | \"aiOps\" | \"logRateAnalysis\" | \"logPatternAnalysis\" | \"changePointDetections\" | \"modelManagement\" | \"nodesOverview\" | \"esqlDataVisualizer\" | \"fileUpload\" | \"indexDataVisualizer\" | \"calendarSettings\" | \"filterListsSettings\"" + "\"notifications\" | \"nodes\" | \"overview\" | \"memoryUsage\" | \"settings\" | \"dataVisualizer\" | \"anomalyDetection\" | \"anomalyExplorer\" | \"singleMetricViewer\" | \"dataDrift\" | \"dataFrameAnalytics\" | \"resultExplorer\" | \"analyticsMap\" | \"aiOps\" | \"logRateAnalysis\" | \"logPatternAnalysis\" | \"changePointDetections\" | \"modelManagement\" | \"nodesOverview\" | \"esqlDataVisualizer\" | \"fileUpload\" | \"indexDataVisualizer\" | \"calendarSettings\" | \"filterListsSettings\"" ], "path": "packages/deeplinks/ml/deep_links.ts", "deprecated": false, diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index 0dc63bb568bba..94c605f0080b9 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-03-20 +date: 2024-03-21 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 d010068ac07dd..69e7cf64f9d16 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-03-20 +date: 2024-03-21 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 31a298a0ad4b9..5c7f5c580d155 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.devdocs.json b/api_docs/kbn_deeplinks_security.devdocs.json new file mode 100644 index 0000000000000..b70672d7c3c37 --- /dev/null +++ b/api_docs/kbn_deeplinks_security.devdocs.json @@ -0,0 +1,101 @@ +{ + "id": "@kbn/deeplinks-security", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [ + { + "parentPluginId": "@kbn/deeplinks-security", + "id": "def-common.SecurityPageName", + "type": "Enum", + "tags": [], + "label": "SecurityPageName", + "description": [], + "path": "packages/deeplinks/security/deep_links.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "misc": [ + { + "parentPluginId": "@kbn/deeplinks-security", + "id": "def-common.AppId", + "type": "Type", + "tags": [], + "label": "AppId", + "description": [], + "signature": [ + "\"securitySolutionUI\"" + ], + "path": "packages/deeplinks/security/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/deeplinks-security", + "id": "def-common.DeepLinkId", + "type": "Type", + "tags": [], + "label": "DeepLinkId", + "description": [], + "signature": [ + "\"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:network\" | \"securitySolutionUI:sessions\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:uncommon_processes\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:coverage-overview\"" + ], + "path": "packages/deeplinks/security/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/deeplinks-security", + "id": "def-common.LinkId", + "type": "Type", + "tags": [], + "label": "LinkId", + "description": [], + "signature": [ + "\"\" | \"cases\" | \"rules\" | \"alerts\" | \"policy\" | \"overview\" | \"dashboards\" | \"cases_create\" | \"cases_configure\" | \"hosts\" | \"users\" | \"cloud_defend-policies\" | \"cloud_security_posture-dashboard\" | \"cloud_security_posture-findings\" | \"cloud_security_posture-benchmarks\" | \"kubernetes\" | \"network\" | \"sessions\" | \"explore\" | \"assets\" | \"cloud_defend\" | \"administration\" | \"blocklist\" | \"cloud_security_posture-rules\" | \"data_quality\" | \"detections\" | \"detection_response\" | \"endpoints\" | \"event_filters\" | \"exceptions\" | \"host_isolation_exceptions\" | \"hosts-anomalies\" | \"hosts-risk\" | \"hosts-events\" | \"investigations\" | \"get_started\" | \"machine_learning-landing\" | \"network-anomalies\" | \"network-dns\" | \"network-events\" | \"network-http\" | \"network-tls\" | \"response_actions_history\" | \"rules-add\" | \"rules-create\" | \"rules-landing\" | \"threat_intelligence\" | \"timelines\" | \"timelines-templates\" | \"trusted_apps\" | \"uncommon_processes\" | \"users-anomalies\" | \"users-authentications\" | \"users-events\" | \"users-risk\" | \"entity_analytics\" | \"entity_analytics-management\" | \"coverage-overview\"" + ], + "path": "packages/deeplinks/security/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/deeplinks-security", + "id": "def-common.SECURITY_APP_ID", + "type": "string", + "tags": [], + "label": "SECURITY_APP_ID", + "description": [], + "signature": [ + "\"securitySolutionUI\"" + ], + "path": "packages/deeplinks/security/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx new file mode 100644 index 0000000000000..b14806bb6c5b0 --- /dev/null +++ b/api_docs/kbn_deeplinks_security.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: kibKbnDeeplinksSecurityPluginApi +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-03-21 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] +--- +import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; + + + +Contact [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 5 | 0 | 5 | 0 | + +## Common + +### Enums + + +### Consts, variables and types + + diff --git a/api_docs/kbn_deeplinks_shared.devdocs.json b/api_docs/kbn_deeplinks_shared.devdocs.json new file mode 100644 index 0000000000000..3bec8dfd68c88 --- /dev/null +++ b/api_docs/kbn_deeplinks_shared.devdocs.json @@ -0,0 +1,58 @@ +{ + "id": "@kbn/deeplinks-shared", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/deeplinks-shared", + "id": "def-common.AppId", + "type": "Type", + "tags": [], + "label": "AppId", + "description": [], + "signature": [ + "\"home\"" + ], + "path": "packages/deeplinks/shared/deep_links.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/deeplinks-shared", + "id": "def-common.DeepLinkId", + "type": "Type", + "tags": [], + "label": "DeepLinkId", + "description": [], + "signature": [ + "\"home\"" + ], + "path": "packages/deeplinks/shared/deep_links.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx new file mode 100644 index 0000000000000..7ee0628187079 --- /dev/null +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -0,0 +1,30 @@ +--- +#### +#### 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: kibKbnDeeplinksSharedPluginApi +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-03-21 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] +--- +import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.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 | +|-------------------|-----------|------------------------|-----------------| +| 2 | 0 | 2 | 0 | + +## Common + +### Consts, variables and types + + diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index be262b0e2c6bd..204ebb03becc1 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-03-20 +date: 2024-03-21 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 d11b431371304..a3eec0f2b562c 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-03-20 +date: 2024-03-21 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 cf1b0d0bd1631..328f0f5a69047 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-03-20 +date: 2024-03-21 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 2aac49d616635..2f89fcf316280 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-03-20 +date: 2024-03-21 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 76361240fd009..48ec8634336a6 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-03-20 +date: 2024-03-21 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 0d35e72fc5f75..aa77e04f0947a 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-03-20 +date: 2024-03-21 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 6b8b9c3642bed..7e3a8f08f7c1c 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-03-20 +date: 2024-03-21 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 f87870c2ea003..a5c4a75e2a487 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 648f6e5fa76f1..e01d4042204a8 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.devdocs.json b/api_docs/kbn_doc_links.devdocs.json index ce27411085185..7c32860d8ad16 100644 --- a/api_docs/kbn_doc_links.devdocs.json +++ b/api_docs/kbn_doc_links.devdocs.json @@ -672,7 +672,7 @@ "label": "alerting", "description": [], "signature": [ - "{ readonly guide: string; readonly actionTypes: string; readonly apmRules: string; readonly emailAction: string; readonly emailActionConfig: string; readonly emailExchangeClientSecretConfig: string; readonly emailExchangeClientIdConfig: string; readonly generalSettings: string; readonly indexAction: string; readonly esQuery: string; readonly indexThreshold: string; readonly maintenanceWindows: string; readonly pagerDutyAction: string; readonly preconfiguredConnectors: string; readonly preconfiguredAlertHistoryConnector: string; readonly serviceNowAction: string; readonly serviceNowSIRAction: string; readonly setupPrerequisites: string; readonly slackAction: string; readonly slackApiAction: string; readonly teamsAction: string; readonly connectors: string; }" + "{ readonly guide: string; readonly actionTypes: string; readonly apmRulesErrorCount: string; readonly apmRulesTransactionDuration: string; readonly apmRulesTransactionError: string; readonly apmRulesAnomaly: string; readonly emailAction: string; readonly emailActionConfig: string; readonly emailExchangeClientSecretConfig: string; readonly emailExchangeClientIdConfig: string; readonly generalSettings: string; readonly indexAction: string; readonly esQuery: string; readonly indexThreshold: string; readonly maintenanceWindows: string; readonly pagerDutyAction: string; readonly preconfiguredConnectors: string; readonly preconfiguredAlertHistoryConnector: string; readonly serviceNowAction: string; readonly serviceNowSIRAction: string; readonly setupPrerequisites: string; readonly slackAction: string; readonly slackApiAction: string; readonly teamsAction: string; readonly connectors: string; }" ], "path": "packages/kbn-doc-links/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index b1b2f16c434b5..c3c9801dcc388 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-03-20 +date: 2024-03-21 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 2bf62cd875cf6..b74cdb36f57ff 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 db0e67ce30edb..57d88a26325ec 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-03-20 +date: 2024-03-21 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 7f0779895dc2f..a1f0737407cbb 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-03-20 +date: 2024-03-21 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 03ceb3d544014..ad8358c0ab682 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-03-20 +date: 2024-03-21 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 9d1c9fb1b2c6f..9c1d517321f49 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 ac2ee9c95d684..dee2345abf622 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_elastic_assistant_common.devdocs.json index b4dee48863e55..d84a7f4a52624 100644 --- a/api_docs/kbn_elastic_assistant_common.devdocs.json +++ b/api_docs/kbn_elastic_assistant_common.devdocs.json @@ -649,7 +649,7 @@ "label": "AppendConversationMessageResponse", "description": [], "signature": [ - "{ id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" + "{ id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, @@ -726,7 +726,7 @@ "label": "BulkCrudActionResponse", "description": [], "signature": [ - "{ attributes: { results: { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }" + "{ attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", "deprecated": false, @@ -741,7 +741,7 @@ "label": "BulkCrudActionResults", "description": [], "signature": [ - "{ created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }" + "{ created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", "deprecated": false, @@ -880,7 +880,7 @@ "label": "ConversationResponse", "description": [], "signature": [ - "{ id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" + "{ id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", "deprecated": false, @@ -955,7 +955,7 @@ "label": "CreateConversationResponse", "description": [], "signature": [ - "{ id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" + "{ id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, @@ -1075,7 +1075,7 @@ "label": "DeleteConversationResponse", "description": [], "signature": [ - "{ id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" + "{ id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, @@ -1432,7 +1432,7 @@ "label": "FindConversationsResponse", "description": [], "signature": [ - "{ page: number; perPage: number; total: number; data: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }" + "{ page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", "deprecated": false, @@ -1507,7 +1507,7 @@ "label": "FindCurrentUserConversationsResponse", "description": [], "signature": [ - "{ page: number; perPage: number; total: number; data: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }" + "{ page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", "deprecated": false, @@ -1710,7 +1710,7 @@ "label": "PerformBulkActionResponse", "description": [], "signature": [ - "{ attributes: { results: { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }" + "{ attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", "deprecated": false, @@ -1892,7 +1892,7 @@ "label": "ReadConversationResponse", "description": [], "signature": [ - "{ id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" + "{ id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, @@ -2091,7 +2091,7 @@ "label": "UpdateConversationResponse", "description": [], "signature": [ - "{ id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" + "{ id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, @@ -2249,7 +2249,7 @@ "label": "AppendConversationMessageResponse", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, @@ -2309,7 +2309,7 @@ "label": "BulkCrudActionResponse", "description": [], "signature": [ - "Zod.ZodObject<{ success: Zod.ZodOptional; status_code: Zod.ZodOptional; message: Zod.ZodOptional; conversations_count: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; created: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"CONVERSATION_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; conversations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }, { attributes: { results: { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }>" + "Zod.ZodObject<{ success: Zod.ZodOptional; status_code: Zod.ZodOptional; message: Zod.ZodOptional; conversations_count: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; created: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"CONVERSATION_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; conversations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }, { attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", "deprecated": false, @@ -2324,7 +2324,7 @@ "label": "BulkCrudActionResults", "description": [], "signature": [ - "Zod.ZodObject<{ updated: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; created: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"CONVERSATION_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>" + "Zod.ZodObject<{ updated: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; created: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"CONVERSATION_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", "deprecated": false, @@ -2459,7 +2459,7 @@ "label": "ConversationResponse", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts", "deprecated": false, @@ -2519,7 +2519,7 @@ "label": "CreateConversationResponse", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, @@ -2626,7 +2626,7 @@ "label": "DeleteConversationResponse", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, @@ -2746,7 +2746,7 @@ "label": "FindConversationsResponse", "description": [], "signature": [ - "Zod.ZodObject<{ page: Zod.ZodNumber; perPage: Zod.ZodNumber; total: Zod.ZodNumber; data: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { page: number; perPage: number; total: number; data: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }, { page: number; perPage: number; total: number; data: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }>" + "Zod.ZodObject<{ page: Zod.ZodNumber; perPage: Zod.ZodNumber; total: Zod.ZodNumber; data: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }, { page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", "deprecated": false, @@ -2806,7 +2806,7 @@ "label": "FindCurrentUserConversationsResponse", "description": [], "signature": [ - "Zod.ZodObject<{ page: Zod.ZodNumber; perPage: Zod.ZodNumber; total: Zod.ZodNumber; data: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { page: number; perPage: number; total: number; data: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }, { page: number; perPage: number; total: number; data: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }>" + "Zod.ZodObject<{ page: Zod.ZodNumber; perPage: Zod.ZodNumber; total: Zod.ZodNumber; data: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }, { page: number; perPage: number; total: number; data: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/find_conversations_route.gen.ts", "deprecated": false, @@ -2971,7 +2971,7 @@ "label": "PerformBulkActionResponse", "description": [], "signature": [ - "Zod.ZodObject<{ success: Zod.ZodOptional; status_code: Zod.ZodOptional; message: Zod.ZodOptional; conversations_count: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; created: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"CONVERSATION_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; conversations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }, { attributes: { results: { created: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }>" + "Zod.ZodObject<{ success: Zod.ZodOptional; status_code: Zod.ZodOptional; message: Zod.ZodOptional; conversations_count: Zod.ZodOptional; attributes: Zod.ZodObject<{ results: Zod.ZodObject<{ updated: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; created: Zod.ZodArray; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>, \"many\">; deleted: Zod.ZodArray; skipped: Zod.ZodArray; skip_reason: Zod.ZodLiteral<\"CONVERSATION_NOT_MODIFIED\">; }, \"strip\", Zod.ZodTypeAny, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }, { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }, { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }>; summary: Zod.ZodObject<{ failed: Zod.ZodNumber; skipped: Zod.ZodNumber; succeeded: Zod.ZodNumber; total: Zod.ZodNumber; }, \"strip\", Zod.ZodTypeAny, { total: number; succeeded: number; failed: number; skipped: number; }, { total: number; succeeded: number; failed: number; skipped: number; }>; errors: Zod.ZodOptional; conversations: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { id: string; name?: string | undefined; }, { id: string; name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }, { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }>, \"many\">>; }, \"strip\", Zod.ZodTypeAny, { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }, { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }, { attributes: { results: { created: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; updated: { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }[]; skipped: { id: string; skip_reason: \"CONVERSATION_NOT_MODIFIED\"; name?: string | undefined; }[]; deleted: string[]; }; summary: { total: number; succeeded: number; failed: number; skipped: number; }; errors?: { message: string; status_code: number; conversations: { id: string; name?: string | undefined; }[]; err_code?: string | undefined; }[] | undefined; }; success?: boolean | undefined; status_code?: number | undefined; message?: string | undefined; conversations_count?: number | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/bulk_crud_conversations_route.gen.ts", "deprecated": false, @@ -3091,7 +3091,7 @@ "label": "ReadConversationResponse", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, @@ -3241,7 +3241,7 @@ "label": "UpdateConversationResponse", "description": [], "signature": [ - "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; namespace: string; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" + "Zod.ZodObject<{ id: Zod.ZodUnion<[Zod.ZodString, Zod.ZodString]>; title: Zod.ZodString; category: Zod.ZodEnum<[\"assistant\", \"insights\"]>; summary: Zod.ZodOptional; timestamp: Zod.ZodOptional; public: Zod.ZodOptional; confidence: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }, { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; }>>; timestamp: Zod.ZodOptional; updatedAt: Zod.ZodOptional; createdAt: Zod.ZodString; replacements: Zod.ZodOptional, \"many\">>; users: Zod.ZodArray; name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id?: string | undefined; name?: string | undefined; }, { id?: string | undefined; name?: string | undefined; }>, \"many\">; messages: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; role: Zod.ZodEnum<[\"system\", \"user\", \"assistant\"]>; timestamp: Zod.ZodString; isError: Zod.ZodOptional; traceData: Zod.ZodOptional; traceId: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { transactionId?: string | undefined; traceId?: string | undefined; }, { transactionId?: string | undefined; traceId?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }, { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }>, \"many\">>; apiConfig: Zod.ZodOptional; provider: Zod.ZodOptional>; model: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }, { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; }>>; isDefault: Zod.ZodOptional; excludeFromLastConversationStorage: Zod.ZodOptional; namespace: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }, { id: string; namespace: string; title: string; createdAt: string; category: \"assistant\" | \"insights\"; users: { id?: string | undefined; name?: string | undefined; }[]; summary?: { content?: string | undefined; timestamp?: string | undefined; public?: boolean | undefined; confidence?: \"medium\" | \"low\" | \"high\" | undefined; } | undefined; timestamp?: string | undefined; updatedAt?: string | undefined; replacements?: { value: string; uuid: string; }[] | undefined; messages?: { timestamp: string; role: \"user\" | \"system\" | \"assistant\"; content: string; reader?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; isError?: boolean | undefined; traceData?: { transactionId?: string | undefined; traceId?: string | undefined; } | undefined; }[] | undefined; apiConfig?: { connectorId: string; connectorTypeTitle: string; defaultSystemPromptId?: string | undefined; provider?: \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; } | undefined; isDefault?: boolean | undefined; excludeFromLastConversationStorage?: boolean | undefined; }>" ], "path": "x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/crud_conversation_route.gen.ts", "deprecated": false, diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 57cf5499fac7d..0233ea1897c75 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 30f4943b051fb..94d8f2f526a43 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-03-20 +date: 2024-03-21 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 7ea9fa193b2b5..ef63eaf17375d 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-03-20 +date: 2024-03-21 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 010476418bda6..ebdd9de98c5b7 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-03-20 +date: 2024-03-21 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 a6d2232292788..ceabbd443e10a 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-03-20 +date: 2024-03-21 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 6d64c54dfda4f..b72caccaa49b9 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-03-20 +date: 2024-03-21 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 2b390f7be90d0..4d46356e8a19f 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 5c4569129acd8..47210f2644e2b 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index c3b3e0f28f5b0..06ecf03d9c96b 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-03-20 +date: 2024-03-21 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 3a135bb5be727..a8d61853c599d 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-03-20 +date: 2024-03-21 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 1fcec8e776e88..a661459a7ac63 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-03-20 +date: 2024-03-21 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 fffd4af14781c..c8521a5811c52 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-03-20 +date: 2024-03-21 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 26fd4b63b8f43..5995fdd0adb59 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 26958bccf1c1a..fe69d01de8e63 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-03-20 +date: 2024-03-21 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 6044b6e1cddd4..3cc4c1a158377 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-03-20 +date: 2024-03-21 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 f511a06f969da..28cbf5bd4dcb0 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-03-20 +date: 2024-03-21 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 31c51b68b0377..a3959260946c3 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-03-20 +date: 2024-03-21 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 f1ea373ba15b1..7522fe9758bc0 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-03-20 +date: 2024-03-21 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 8e765ccdd176e..73fc94350ef43 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-03-20 +date: 2024-03-21 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 9af1b1dd9da97..52e974eb49c55 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index fe3c76ddcf512..e8d9cce147e07 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-03-20 +date: 2024-03-21 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 35c9084d5cc9a..0307d0d576a30 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-03-20 +date: 2024-03-21 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 2517766e37b6a..05bea76548f3d 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 3b38a27d46a42..0bc26b41e9dec 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-03-20 +date: 2024-03-21 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 05e19c90be938..9ca9bd0e3786f 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-03-20 +date: 2024-03-21 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 f1e5b1ca678a6..f213ff9af4d25 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-03-20 +date: 2024-03-21 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 b968f83e53c3d..753ee7bce98ba 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-03-20 +date: 2024-03-21 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 961ba25afe16b..f3af02ed7d02b 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-03-20 +date: 2024-03-21 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 520cceb2cad0e..29c72ad206280 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 5347f6c8b56b1..8e7da71c394b5 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-03-20 +date: 2024-03-21 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 08b9946ea6423..67ede5243c545 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-03-20 +date: 2024-03-21 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 78d2355964402..e9e6600a3add8 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index c0840e261f668..c62477e8d0433 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-03-20 +date: 2024-03-21 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 37f426a632435..7d68b04cf81ab 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-03-20 +date: 2024-03-21 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 7a0fe3c935241..c0542d2cf6afb 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index c4a7ce57f320d..967fa62995926 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-03-20 +date: 2024-03-21 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 f2394ee3421b7..4df8c74de386e 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-03-20 +date: 2024-03-21 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 20c2525cce932..ac6631dbec224 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 525151d8348b1..6d5eb46363ead 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-03-20 +date: 2024-03-21 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 5b8bf9cb16e05..589765924e25d 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-03-20 +date: 2024-03-21 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 1fee6d5c654d7..e494c27ce3be2 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 e73cbfcbbc676..9459c678174d3 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-03-20 +date: 2024-03-21 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 57c304f19c397..1384f801414c6 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-03-20 +date: 2024-03-21 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 ea7d909abc26e..5c27a146e96bb 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-03-20 +date: 2024-03-21 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 87f8a18ed4052..3e4b302f00b3a 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-03-20 +date: 2024-03-21 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 3cff5ef06ef52..aa15fdc05a68d 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_management_settings_components_field_input.devdocs.json index 6dc83478cd1b3..7c4b24c35c62e 100644 --- a/api_docs/kbn_management_settings_components_field_input.devdocs.json +++ b/api_docs/kbn_management_settings_components_field_input.devdocs.json @@ -176,7 +176,7 @@ "The {@link FieldDefinition} for the component." ], "signature": [ - "{ type: T; id: string; name: string; ariaAttributes: { ariaLabel: string; ariaDescribedBy?: string | undefined; }; }" + "{ id: string; type: T; name: string; ariaAttributes: { ariaLabel: string; ariaDescribedBy?: string | undefined; }; }" ], "path": "packages/kbn-management/settings/components/field_input/field_input.tsx", "deprecated": false, @@ -417,7 +417,7 @@ "label": "field", "description": [], "signature": [ - "{ type: T; id: string; defaultValue?: ", + "{ id: string; type: T; defaultValue?: ", { "pluginId": "@kbn/management-settings-types", "scope": "common", diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index f70f1b7850173..dff6146a39f2d 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_management_settings_components_field_row.devdocs.json index 052a3e23ff500..021c7a73159f8 100644 --- a/api_docs/kbn_management_settings_components_field_row.devdocs.json +++ b/api_docs/kbn_management_settings_components_field_row.devdocs.json @@ -195,7 +195,7 @@ "The {@link FieldDefinition} corresponding the setting." ], "signature": [ - "{ type: ", + "{ id: string; type: ", { "pluginId": "@kbn/core-ui-settings-common", "scope": "common", @@ -203,7 +203,7 @@ "section": "def-common.UiSettingsType", "text": "UiSettingsType" }, - "; id: string; defaultValue?: string | number | boolean | (string | number)[] | null | undefined; name: string; groupId: string; displayName: string; isCustom: boolean; isOverridden: boolean; ariaAttributes: { ariaLabel: string; ariaDescribedBy?: string | undefined; }; savedValue?: string | number | boolean | (string | number)[] | null | undefined; defaultValueDisplay: string; isDefaultValue: boolean; unsavedFieldId: string; }" + "; defaultValue?: string | number | boolean | (string | number)[] | null | undefined; name: string; groupId: string; displayName: string; isCustom: boolean; isOverridden: boolean; ariaAttributes: { ariaLabel: string; ariaDescribedBy?: string | undefined; }; savedValue?: string | number | boolean | (string | number)[] | null | undefined; defaultValueDisplay: string; isDefaultValue: boolean; unsavedFieldId: string; }" ], "path": "packages/kbn-management/settings/components/field_row/field_row.tsx", "deprecated": false, diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index ac3e84262c111..b6e1c7b457fcd 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-03-20 +date: 2024-03-21 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 8fd0ffbe0ddf9..472f5ece49564 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-03-20 +date: 2024-03-21 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 f38aee769fedb..d1e22d17a7645 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_management_settings_ids.devdocs.json index a87411997c33e..3fb03f8e0f772 100644 --- a/api_docs/kbn_management_settings_ids.devdocs.json +++ b/api_docs/kbn_management_settings_ids.devdocs.json @@ -1357,6 +1357,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/management-settings-ids", + "id": "def-common.OBSERVABILITY_LOGS_EXPLORER_ALLOWED_DATA_VIEWS_ID", + "type": "string", + "tags": [], + "label": "OBSERVABILITY_LOGS_EXPLORER_ALLOWED_DATA_VIEWS_ID", + "description": [], + "signature": [ + "\"observability:logsExplorer:allowedDataViews\"" + ], + "path": "packages/kbn-management/settings/setting_ids/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/management-settings-ids", "id": "def-common.OBSERVABILITY_MAX_SUGGESTIONS_ID", diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 3e0e8062cff8f..8dee558b7beb3 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux @elastic/kibana-management](https://github.com/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 135 | 0 | 132 | 0 | +| 136 | 0 | 133 | 0 | ## Common diff --git a/api_docs/kbn_management_settings_section_registry.devdocs.json b/api_docs/kbn_management_settings_section_registry.devdocs.json index 7fa2b008921bf..a8d81440a139d 100644 --- a/api_docs/kbn_management_settings_section_registry.devdocs.json +++ b/api_docs/kbn_management_settings_section_registry.devdocs.json @@ -254,7 +254,7 @@ "label": "enableSaving", "description": [], "signature": [ - "{ global: boolean; namespace: boolean; }" + "{ namespace: boolean; global: boolean; }" ], "path": "packages/kbn-management/settings/section_registry/section_registry.ts", "deprecated": false, diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 4ff5402cdee35..875f26f655efc 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-03-20 +date: 2024-03-21 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 5f3df87e24f2f..5dede87f0b54d 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-03-20 +date: 2024-03-21 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 3dd039b26781c..867cd5ea8dad7 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-03-20 +date: 2024-03-21 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 68cb7f2edb6f6..8aa2b253f58bd 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-03-20 +date: 2024-03-21 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 b61744009c507..a0b4527ce58ae 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-03-20 +date: 2024-03-21 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 4b4111efe4b0a..a17fd8e987947 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 e8338ee3702ce..371cc91ef631b 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_ml_anomaly_utils.devdocs.json index 95a47b1ac3b0d..3b7bcd4009fb1 100644 --- a/api_docs/kbn_ml_anomaly_utils.devdocs.json +++ b/api_docs/kbn_ml_anomaly_utils.devdocs.json @@ -3145,7 +3145,7 @@ "\nUnion type for ML_JOB_FIELD_TYPES" ], "signature": [ - "\"number\" | \"boolean\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"keyword\" | \"text\" | \"date\" | \"unknown\"" + "\"number\" | \"boolean\" | \"unknown\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"keyword\" | \"text\" | \"date\"" ], "path": "x-pack/packages/ml/anomaly_utils/field_types.ts", "deprecated": false, diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index 3ee3b78fb6bcf..2a8eae37a5a72 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 15c1c05ef8f31..7b0d3edcb0174 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-03-20 +date: 2024-03-21 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 c5320545c59f6..08f7617d86b44 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-03-20 +date: 2024-03-21 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 402a7b72102e0..a1d62c7b83eaf 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-03-20 +date: 2024-03-21 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 623d069897298..906586184894d 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 965883a46dc64..08df82f562ab1 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-03-20 +date: 2024-03-21 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 43eca2be3e5be..6253a2ab8c5ae 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-03-20 +date: 2024-03-21 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 665245b45b9b1..4ec72aaef9cfb 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 73d86f419f69c..c5ed7593bacb6 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 579018e342044..aae279b38081e 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-03-20 +date: 2024-03-21 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 5e541fc2e888d..c49ff2616a8a4 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-03-20 +date: 2024-03-21 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 51057d7dd8e21..314636fb2f574 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-03-20 +date: 2024-03-21 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 2c2e96836a5cd..5fda1a9d5a659 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-03-20 +date: 2024-03-21 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 aec025bdcc2b3..eed9f69940761 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-03-20 +date: 2024-03-21 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 333f3e2704051..0adc4d7f4c06c 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-03-20 +date: 2024-03-21 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 498c158efe102..623e48a7bda55 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 332116945fa85..739bd30a97c65 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 d0bac0edd8e30..5caa64907a1f4 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 b48a62c03c013..03fa5bbf5e32a 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 855d04869495a..983936d10898a 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 30ea6b7d081f2..3ddf7e14f4b6b 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_ml_time_buckets.devdocs.json new file mode 100644 index 0000000000000..8ae68f092fd2b --- /dev/null +++ b/api_docs/kbn_ml_time_buckets.devdocs.json @@ -0,0 +1,711 @@ +{ + "id": "@kbn/ml-time-buckets", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets", + "type": "Class", + "tags": [], + "label": "TimeBuckets", + "description": [ + "\nRepresents a configurable utility class for working with time buckets." + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [ + "\nCreates an instance of TimeBuckets." + ], + "signature": [ + "any" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "timeBucketsConfig", + "description": [ + "- Configuration for the TimeBuckets instance." + ], + "signature": [ + { + "pluginId": "@kbn/ml-time-buckets", + "scope": "common", + "docId": "kibKbnMlTimeBucketsPluginApi", + "section": "def-common.TimeBucketsConfig", + "text": "TimeBucketsConfig" + } + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.setBarTarget", + "type": "Function", + "tags": [], + "label": "setBarTarget", + "description": [ + "\nSets the target number of bars for the histogram." + ], + "signature": [ + "(barTarget: number) => void" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.setBarTarget.$1", + "type": "number", + "tags": [], + "label": "barTarget", + "description": [ + "- The target bar count." + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.setMaxBars", + "type": "Function", + "tags": [], + "label": "setMaxBars", + "description": [ + "\nSets the maximum number of bars for the histogram." + ], + "signature": [ + "(maxBars: number) => void" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.setMaxBars.$1", + "type": "number", + "tags": [], + "label": "maxBars", + "description": [ + "- The maximum bar count." + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.setInterval", + "type": "Function", + "tags": [], + "label": "setInterval", + "description": [ + "\nSets the interval for the time buckets." + ], + "signature": [ + "(interval: string) => void" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.setInterval.$1", + "type": "string", + "tags": [], + "label": "interval", + "description": [ + "- The interval expression, e.g., \"1h\" for one hour." + ], + "signature": [ + "string" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.setBounds", + "type": "Function", + "tags": [], + "label": "setBounds", + "description": [ + "\nSets the bounds of the time range for the buckets." + ], + "signature": [ + "(bounds: ", + { + "pluginId": "@kbn/ml-time-buckets", + "scope": "common", + "docId": "kibKbnMlTimeBucketsPluginApi", + "section": "def-common.TimeRangeBounds", + "text": "TimeRangeBounds" + }, + ") => void" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.setBounds.$1", + "type": "Object", + "tags": [], + "label": "bounds", + "description": [ + "- The minimum and maximum time bounds." + ], + "signature": [ + { + "pluginId": "@kbn/ml-time-buckets", + "scope": "common", + "docId": "kibKbnMlTimeBucketsPluginApi", + "section": "def-common.TimeRangeBounds", + "text": "TimeRangeBounds" + } + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.getBounds", + "type": "Function", + "tags": [], + "label": "getBounds", + "description": [ + "\nGets the current bounds of the time range." + ], + "signature": [ + "() => { min: moment.Moment; max: moment.Moment; }" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [ + "The current time range bounds." + ] + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.getInterval", + "type": "Function", + "tags": [], + "label": "getInterval", + "description": [ + "\nRetrieves the configured interval for the buckets." + ], + "signature": [ + "() => ", + { + "pluginId": "@kbn/ml-time-buckets", + "scope": "common", + "docId": "kibKbnMlTimeBucketsPluginApi", + "section": "def-common.TimeBucketsInterval", + "text": "TimeBucketsInterval" + } + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [ + "The current interval settings for the buckets." + ] + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.getIntervalToNearestMultiple", + "type": "Function", + "tags": [], + "label": "getIntervalToNearestMultiple", + "description": [ + "\nCalculates the nearest interval that is a multiple of a specified divisor." + ], + "signature": [ + "(divisorSecs: number) => ", + { + "pluginId": "@kbn/ml-time-buckets", + "scope": "common", + "docId": "kibKbnMlTimeBucketsPluginApi", + "section": "def-common.TimeBucketsInterval", + "text": "TimeBucketsInterval" + } + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.getIntervalToNearestMultiple.$1", + "type": "number", + "tags": [], + "label": "divisorSecs", + "description": [ + "- The divisor in seconds." + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "The nearest interval as a multiple of the divisor." + ] + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBuckets.getScaledDateFormat", + "type": "Function", + "tags": [], + "label": "getScaledDateFormat", + "description": [ + "\nRetrieves the date format that should be used for scaled intervals." + ], + "signature": [ + "() => string" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [ + "The scaled date format string." + ] + } + ], + "initialIsOpen": false + } + ], + "functions": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.getBoundsRoundedToInterval", + "type": "Function", + "tags": [], + "label": "getBoundsRoundedToInterval", + "description": [ + "\nAdjusts the given time range bounds to align with the specified interval." + ], + "signature": [ + "(bounds: ", + { + "pluginId": "@kbn/ml-time-buckets", + "scope": "common", + "docId": "kibKbnMlTimeBucketsPluginApi", + "section": "def-common.TimeRangeBounds", + "text": "TimeRangeBounds" + }, + ", interval: ", + { + "pluginId": "@kbn/ml-time-buckets", + "scope": "common", + "docId": "kibKbnMlTimeBucketsPluginApi", + "section": "def-common.TimeBucketsInterval", + "text": "TimeBucketsInterval" + }, + ", inclusiveEnd: boolean | undefined) => Required<", + { + "pluginId": "@kbn/ml-time-buckets", + "scope": "common", + "docId": "kibKbnMlTimeBucketsPluginApi", + "section": "def-common.TimeRangeBounds", + "text": "TimeRangeBounds" + }, + ">" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.getBoundsRoundedToInterval.$1", + "type": "Object", + "tags": [], + "label": "bounds", + "description": [ + "The current time range bounds." + ], + "signature": [ + { + "pluginId": "@kbn/ml-time-buckets", + "scope": "common", + "docId": "kibKbnMlTimeBucketsPluginApi", + "section": "def-common.TimeRangeBounds", + "text": "TimeRangeBounds" + } + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.getBoundsRoundedToInterval.$2", + "type": "Object", + "tags": [], + "label": "interval", + "description": [ + "The interval to align the time range bounds with." + ], + "signature": [ + { + "pluginId": "@kbn/ml-time-buckets", + "scope": "common", + "docId": "kibKbnMlTimeBucketsPluginApi", + "section": "def-common.TimeBucketsInterval", + "text": "TimeBucketsInterval" + } + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.getBoundsRoundedToInterval.$3", + "type": "CompoundType", + "tags": [], + "label": "inclusiveEnd", + "description": [ + "Whether the end of the range should be inclusive." + ], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "The adjusted time range bounds." + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.useTimeBuckets", + "type": "Function", + "tags": [], + "label": "useTimeBuckets", + "description": [ + "\nCustom hook to get `TimeBuckets` configured with settings from the `IUiSettingsClient`.\n" + ], + "signature": [ + "(uiSettings: ", + { + "pluginId": "@kbn/core-ui-settings-browser", + "scope": "common", + "docId": "kibKbnCoreUiSettingsBrowserPluginApi", + "section": "def-common.IUiSettingsClient", + "text": "IUiSettingsClient" + }, + ") => ", + { + "pluginId": "@kbn/ml-time-buckets", + "scope": "common", + "docId": "kibKbnMlTimeBucketsPluginApi", + "section": "def-common.TimeBuckets", + "text": "TimeBuckets" + } + ], + "path": "x-pack/packages/ml/time_buckets/use_time_buckets.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.useTimeBuckets.$1", + "type": "Object", + "tags": [], + "label": "uiSettings", + "description": [ + "The UI settings client instance used to retrieve UI settings." + ], + "signature": [ + { + "pluginId": "@kbn/core-ui-settings-browser", + "scope": "common", + "docId": "kibKbnCoreUiSettingsBrowserPluginApi", + "section": "def-common.IUiSettingsClient", + "text": "IUiSettingsClient" + } + ], + "path": "x-pack/packages/ml/time_buckets/use_time_buckets.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "A memoized `TimeBuckets` instance configured with relevant UI settings." + ], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBucketsConfig", + "type": "Interface", + "tags": [], + "label": "TimeBucketsConfig", + "description": [ + "\nConfiguration options for initializing TimeBuckets." + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBucketsConfig.histogrammaxBars", + "type": "number", + "tags": [], + "label": "'histogram:maxBars'", + "description": [ + "\nThe maximum number of bars to display on the histogram." + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBucketsConfig.histogrambarTarget", + "type": "number", + "tags": [], + "label": "'histogram:barTarget'", + "description": [ + "\nThe targeted number of bars for the histogram." + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBucketsConfig.dateFormat", + "type": "string", + "tags": [], + "label": "dateFormat", + "description": [ + "\nThe date format string." + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBucketsConfig.dateFormatscaled", + "type": "Array", + "tags": [], + "label": "'dateFormat:scaled'", + "description": [ + "\nThe scaled date format strings." + ], + "signature": [ + "string[][]" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBucketsInterval", + "type": "Interface", + "tags": [], + "label": "TimeBucketsInterval", + "description": [ + "\nDefines the structure for time intervals used within TimeBuckets." + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBucketsInterval.asMilliseconds", + "type": "Function", + "tags": [], + "label": "asMilliseconds", + "description": [ + "\nReturns the interval in milliseconds." + ], + "signature": [ + "() => number" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBucketsInterval.asSeconds", + "type": "Function", + "tags": [], + "label": "asSeconds", + "description": [ + "\nReturns the interval in seconds." + ], + "signature": [ + "() => number" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeBucketsInterval.expression", + "type": "string", + "tags": [], + "label": "expression", + "description": [ + "\nThe string expression representing the interval." + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeRangeBounds", + "type": "Interface", + "tags": [], + "label": "TimeRangeBounds", + "description": [ + "\nRepresents the minimum and maximum time bounds for a time range." + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeRangeBounds.min", + "type": "Object", + "tags": [], + "label": "min", + "description": [ + "\nThe minimum bound of the time range (optional)." + ], + "signature": [ + "moment.Moment | undefined" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-time-buckets", + "id": "def-common.TimeRangeBounds.max", + "type": "Object", + "tags": [], + "label": "max", + "description": [ + "\nThe maximum bound of the time range (optional)." + ], + "signature": [ + "moment.Moment | undefined" + ], + "path": "x-pack/packages/ml/time_buckets/time_buckets.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx new file mode 100644 index 0000000000000..bc00b6c5d487a --- /dev/null +++ b/api_docs/kbn_ml_time_buckets.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: kibKbnMlTimeBucketsPluginApi +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-03-21 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] +--- +import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; + + + +Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 34 | 0 | 0 | 0 | + +## Common + +### Functions + + +### Classes + + +### Interfaces + + diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 6626234583f20..1e5c936a00be0 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 a5edb7b9386c1..4fd93a006f70e 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-03-20 +date: 2024-03-21 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 90b4dbe17490d..9302ec9170353 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-03-20 +date: 2024-03-21 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 12f36b9556ba1..f480030bb04f7 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 2352f3e87ccbc..6ffd6ffc8acd5 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-03-20 +date: 2024-03-21 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 8c651b85878d8..fea852c41683b 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-03-20 +date: 2024-03-21 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 6418aa35f39fc..03ce1826d9d9a 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index af0d16f44f9a1..a71914515bb44 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-03-20 +date: 2024-03-21 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 88bb384489a2c..c70f9341f8620 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-03-20 +date: 2024-03-21 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 7450fe6964c58..0af7cee77fe92 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-03-20 +date: 2024-03-21 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 201a7b96d22b0..ba0cab75b0a29 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-03-20 +date: 2024-03-21 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 9c899b8b2be11..57343ccb9d28b 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-03-20 +date: 2024-03-21 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 f901d02451450..052db77bc7e97 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-03-20 +date: 2024-03-21 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 651ccc090bfee..2bb0f57abbb3c 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-03-20 +date: 2024-03-21 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 81b00bb4d0b6c..b2f50168e814a 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-03-20 +date: 2024-03-21 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 f451fe9643a89..2a30b563ce8c8 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-03-20 +date: 2024-03-21 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 ccaff767002b9..38235cea06c7d 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-03-20 +date: 2024-03-21 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 f1afcd4355f1a..b93d8639c6626 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-03-20 +date: 2024-03-21 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 047900d673d59..44bedc0c89750 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.devdocs.json b/api_docs/kbn_presentation_containers.devdocs.json index a50dd1aa1a58d..69cc4dee11bb0 100644 --- a/api_docs/kbn_presentation_containers.devdocs.json +++ b/api_docs/kbn_presentation_containers.devdocs.json @@ -538,9 +538,9 @@ "label": "expandedPanelId", "description": [], "signature": [ - "{ readonly value: string | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", + " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index cde30cc3ae19a..a187f73e6b149 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_library.mdx b/api_docs/kbn_presentation_library.mdx index 8fb92ef5578f8..25adc4d2a1cc7 100644 --- a/api_docs/kbn_presentation_library.mdx +++ b/api_docs/kbn_presentation_library.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-library title: "@kbn/presentation-library" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-library plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-library'] --- import kbnPresentationLibraryObj from './kbn_presentation_library.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.devdocs.json b/api_docs/kbn_presentation_publishing.devdocs.json index 2269fdb93fdbe..3e13cd90bf9b8 100644 --- a/api_docs/kbn_presentation_publishing.devdocs.json +++ b/api_docs/kbn_presentation_publishing.devdocs.json @@ -2410,9 +2410,9 @@ "label": "blockingError", "description": [], "signature": [ - "{ readonly value: Error | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: Error | undefined) => void): Promise; (next: (value: Error | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => Error | undefined; pipe: { (): ", + " | undefined; readonly value: Error | undefined; error: (err: any) => void; forEach: { (next: (value: Error | undefined) => void): Promise; (next: (value: Error | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => Error | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -2588,9 +2588,9 @@ "label": "dataLoading", "description": [], "signature": [ - "{ readonly value: boolean | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: boolean | undefined) => void): Promise; (next: (value: boolean | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => boolean | undefined; pipe: { (): ", + " | undefined; readonly value: boolean | undefined; error: (err: any) => void; forEach: { (next: (value: boolean | undefined) => void): Promise; (next: (value: boolean | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => boolean | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -2766,7 +2766,9 @@ "label": "dataViews", "description": [], "signature": [ - "{ readonly value: ", + "{ source: ", + "Observable", + " | undefined; readonly value: ", { "pluginId": "dataViews", "scope": "common", @@ -2774,9 +2776,7 @@ "section": "def-common.DataView", "text": "DataView" }, - "[] | undefined; source: ", - "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + "[] | undefined; error: (err: any) => void; forEach: { (next: (value: ", { "pluginId": "dataViews", "scope": "common", @@ -3144,9 +3144,9 @@ "label": "disabledActionIds", "description": [], "signature": [ - "{ readonly value: string[] | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: string[] | undefined) => void): Promise; (next: (value: string[] | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string[] | undefined; pipe: { (): ", + " | undefined; readonly value: string[] | undefined; error: (err: any) => void; forEach: { (next: (value: string[] | undefined) => void): Promise; (next: (value: string[] | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string[] | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -3338,9 +3338,9 @@ "label": "panelDescription", "description": [], "signature": [ - "{ readonly value: string | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", + " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -3537,9 +3537,9 @@ "label": "panelTitle", "description": [], "signature": [ - "{ readonly value: string | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", + " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -3701,9 +3701,9 @@ "label": "hidePanelTitle", "description": [], "signature": [ - "{ readonly value: boolean | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: boolean | undefined) => void): Promise; (next: (value: boolean | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => boolean | undefined; pipe: { (): ", + " | undefined; readonly value: boolean | undefined; error: (err: any) => void; forEach: { (next: (value: boolean | undefined) => void): Promise; (next: (value: boolean | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => boolean | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -3900,7 +3900,9 @@ "label": "onPhaseChange", "description": [], "signature": [ - "{ readonly value: ", + "{ source: ", + "Observable", + " | undefined; readonly value: ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", @@ -3908,9 +3910,7 @@ "section": "def-common.PhaseEvent", "text": "PhaseEvent" }, - " | undefined; source: ", - "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + " | undefined; error: (err: any) => void; forEach: { (next: (value: ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", @@ -4280,9 +4280,9 @@ "label": "savedObjectId", "description": [], "signature": [ - "{ readonly value: string | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", + " | undefined; readonly value: string | undefined; error: (err: any) => void; forEach: { (next: (value: string | undefined) => void): Promise; (next: (value: string | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => string | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -4474,7 +4474,9 @@ "label": "timeRange$", "description": [], "signature": [ - "{ readonly value: ", + "{ source: ", + "Observable", + " | undefined; readonly value: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -4482,9 +4484,7 @@ "section": "def-common.TimeRange", "text": "TimeRange" }, - " | undefined; source: ", - "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + " | undefined; error: (err: any) => void; forEach: { (next: (value: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -4838,7 +4838,9 @@ "label": "filters$", "description": [], "signature": [ - "{ readonly value: ", + "{ source: ", + "Observable", + " | undefined; readonly value: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -4846,9 +4848,7 @@ "section": "def-common.Filter", "text": "Filter" }, - "[] | undefined; source: ", - "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + "[] | undefined; error: (err: any) => void; forEach: { (next: (value: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -5202,7 +5202,9 @@ "label": "query$", "description": [], "signature": [ - "{ readonly value: ", + "{ source: ", + "Observable", + " | undefined; readonly value: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -5218,9 +5220,7 @@ "section": "def-common.AggregateQuery", "text": "AggregateQuery" }, - " | undefined; source: ", - "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + " | undefined; error: (err: any) => void; forEach: { (next: (value: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -5780,9 +5780,9 @@ "label": "unsavedChanges", "description": [], "signature": [ - "{ readonly value: object | undefined; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: object | undefined) => void): Promise; (next: (value: object | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => object | undefined; pipe: { (): ", + " | undefined; readonly value: object | undefined; error: (err: any) => void; forEach: { (next: (value: object | undefined) => void): Promise; (next: (value: object | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => object | undefined; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", @@ -5976,7 +5976,9 @@ "label": "viewMode", "description": [], "signature": [ - "{ readonly value: ", + "{ source: ", + "Observable", + " | undefined; readonly value: ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", @@ -5984,9 +5986,7 @@ "section": "def-common.ViewMode", "text": "ViewMode" }, - "; source: ", - "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", + "; error: (err: any) => void; forEach: { (next: (value: ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", @@ -6528,9 +6528,9 @@ "\nA publishing subject is a RxJS subject that can be used to listen to value changes, but does not allow pushing values via the Next method." ], "signature": [ - "{ readonly value: T; source: ", + "{ source: ", "Observable", - " | undefined; error: (err: any) => void; forEach: { (next: (value: T) => void): Promise; (next: (value: T) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => T; pipe: { (): ", + " | undefined; readonly value: T; error: (err: any) => void; forEach: { (next: (value: T) => void): Promise; (next: (value: T) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => T; pipe: { (): ", "Observable", "; (op1: ", "OperatorFunction", diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 53e4116912053..37e4a466c1e4a 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-03-20 +date: 2024-03-21 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 c254ae1faceb5..1d27061f45c56 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 c73c1aaeaf3f9..176c8ecec4cfb 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-03-20 +date: 2024-03-21 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 be5fb05744b8c..deb93a93bf6e9 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 0c8ff3f1b0279..9777d0d46449f 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-03-20 +date: 2024-03-21 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 44961ba3d9b6d..ff21f6c0a1e08 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-03-20 +date: 2024-03-21 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 b52a65aa31918..5192db4141126 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-03-20 +date: 2024-03-21 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 d04e35f2b701c..547e42c6ecced 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-03-20 +date: 2024-03-21 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 14a21167e87a3..a7c163c7f44c9 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-03-20 +date: 2024-03-21 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 88090743f0ae5..091ca134f4e0c 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 3e2b1180512bc..72b0ce9912f1a 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-03-20 +date: 2024-03-21 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 62d04bf54bd71..597358b16a664 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-03-20 +date: 2024-03-21 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 b128b90730c39..0487d2ea309f0 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-03-20 +date: 2024-03-21 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 388e8df0d7b9f..1849012edc6d1 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-03-20 +date: 2024-03-21 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 a99341a44021d..cbf14afea7b3b 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 3c737487d0cd7..83332eed922c6 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-03-20 +date: 2024-03-21 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 408c8d1f47b66..9fe401fe10988 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-03-20 +date: 2024-03-21 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 d5d84411d8cae..a0a8ae33801bd 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-03-20 +date: 2024-03-21 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 0ce95cf34da6f..7ffc9a86e4ee8 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-03-20 +date: 2024-03-21 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 946312127c4e1..59da00a83bd5f 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-03-20 +date: 2024-03-21 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 910e221d325e0..40027dc7300bb 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-03-20 +date: 2024-03-21 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 209a8997c054d..7d60bc2e6ee1e 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_reporting_public.devdocs.json index 536d4a0cf4947..eec0bf3a1ad1e 100644 --- a/api_docs/kbn_reporting_public.devdocs.json +++ b/api_docs/kbn_reporting_public.devdocs.json @@ -21,7 +21,7 @@ "label": "payload", "description": [], "signature": [ - "{ isDeprecated?: boolean | undefined; spaceId?: string | undefined; title: string; version: string; layout?: { id?: ", + "{ spaceId?: string | undefined; isDeprecated?: boolean | undefined; title: string; version: string; layout?: { id?: ", { "pluginId": "screenshotting", "scope": "common", diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index c656ddecf8c0f..741241caf92ef 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-03-20 +date: 2024-03-21 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 8cf43bd816a09..dda820fe63a96 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-03-20 +date: 2024-03-21 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 3a81ba2f119d8..af6ee3e9d45ec 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index b4de072896275..70c66660a077b 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 300929266114b..ff68e3eed9b14 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 ba8a006d855e9..65e49f1969940 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-03-20 +date: 2024-03-21 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 42faacb2b10cb..06a2a07d39820 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 a46e01fc4d55d..0919b60af3b99 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-03-20 +date: 2024-03-21 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 98a8d11bc52ff..5faab4925c684 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-03-20 +date: 2024-03-21 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 b0ea8b9a62482..2a25c0d9954fc 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-03-20 +date: 2024-03-21 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 43bb19db94829..9a0533397a458 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-03-20 +date: 2024-03-21 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 e9bbad56566d1..009ee3e4428d0 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-03-20 +date: 2024-03-21 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 bd7ca2a40a49e..c49e2c3ca2c06 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 94524ec4a2dc8..5c626504dcc3c 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-03-20 +date: 2024-03-21 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 df1ba271ff705..2f9628c7ad91b 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-03-20 +date: 2024-03-21 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 c9dfaad053116..4725702c01ada 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-03-20 +date: 2024-03-21 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 37c9da078ba77..abe0288e1045d 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index b7fd3352b0ee2..88b916113ae78 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_security_solution_navigation.devdocs.json index 4d2fd32ad0e23..7a727bb3ab213 100644 --- a/api_docs/kbn_security_solution_navigation.devdocs.json +++ b/api_docs/kbn_security_solution_navigation.devdocs.json @@ -956,7 +956,7 @@ "tags": [], "label": "SecurityPageName", "description": [], - "path": "x-pack/packages/security-solution/navigation/src/constants.ts", + "path": "packages/deeplinks/security/deep_links.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index d2ce543a6d473..61cc24a14766a 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-03-20 +date: 2024-03-21 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 87bdb7941713d..732aa84198522 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-03-20 +date: 2024-03-21 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 083c40f95c2c4..622ee0c95e214 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-03-20 +date: 2024-03-21 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 78f61a0afc48d..57aa0619ec350 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-03-20 +date: 2024-03-21 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 59b7c5f2bfe34..0cf0fdc461966 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-03-20 +date: 2024-03-21 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 7e118a59ba3b4..cdd7f2e78c01b 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_securitysolution_es_utils.devdocs.json index 13f48adefb971..ac9fdda50ec1d 100644 --- a/api_docs/kbn_securitysolution_es_utils.devdocs.json +++ b/api_docs/kbn_securitysolution_es_utils.devdocs.json @@ -640,7 +640,39 @@ "label": "esClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -744,39 +776,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", @@ -1920,7 +1920,39 @@ "label": "esClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -2024,39 +2056,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 57deecb461496..04a880dd9c4df 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_securitysolution_exception_list_components.devdocs.json index c187f793426b9..2d9cb944dcb77 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.devdocs.json +++ b/api_docs/kbn_securitysolution_exception_list_components.devdocs.json @@ -851,7 +851,7 @@ "label": "formattedDateComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"source\" | \"desc\" | \"filter\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"meta\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"main\" | \"path\" | \"form\" | \"body\" | \"q\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"stop\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"canvas\" | \"svg\" | \"select\" | \"output\" | \"view\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"html\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"line\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" + "\"symbol\" | \"object\" | \"source\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"desc\" | \"filter\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"meta\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"main\" | \"path\" | \"form\" | \"body\" | \"q\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"stop\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"canvas\" | \"svg\" | \"select\" | \"output\" | \"view\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"html\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"line\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/meta/index.tsx", "deprecated": false, @@ -865,7 +865,7 @@ "label": "securityLinkAnchorComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"source\" | \"desc\" | \"filter\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"meta\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"main\" | \"path\" | \"form\" | \"body\" | \"q\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"stop\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"canvas\" | \"svg\" | \"select\" | \"output\" | \"view\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"html\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"line\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" + "\"symbol\" | \"object\" | \"source\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"desc\" | \"filter\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"meta\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"main\" | \"path\" | \"form\" | \"body\" | \"q\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"stop\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"canvas\" | \"svg\" | \"select\" | \"output\" | \"view\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"html\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"line\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/meta/index.tsx", "deprecated": false, @@ -1004,7 +1004,7 @@ "label": "securityLinkAnchorComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"source\" | \"desc\" | \"filter\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"meta\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"main\" | \"path\" | \"form\" | \"body\" | \"q\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"stop\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"canvas\" | \"svg\" | \"select\" | \"output\" | \"view\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"html\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"line\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" + "\"symbol\" | \"object\" | \"source\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"desc\" | \"filter\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"meta\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"main\" | \"path\" | \"form\" | \"body\" | \"q\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"stop\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"canvas\" | \"svg\" | \"select\" | \"output\" | \"view\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"html\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"line\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/exception_item_card.tsx", "deprecated": false, @@ -1018,7 +1018,7 @@ "label": "formattedDateComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"source\" | \"desc\" | \"filter\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"meta\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"main\" | \"path\" | \"form\" | \"body\" | \"q\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"stop\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"canvas\" | \"svg\" | \"select\" | \"output\" | \"view\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"html\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"line\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" + "\"symbol\" | \"object\" | \"source\" | \"big\" | \"link\" | \"small\" | \"sub\" | \"sup\" | \"desc\" | \"filter\" | \"text\" | \"map\" | \"head\" | \"slot\" | \"style\" | \"title\" | \"meta\" | \"data\" | \"pattern\" | \"summary\" | \"template\" | \"span\" | \"main\" | \"path\" | \"form\" | \"body\" | \"q\" | \"label\" | \"progress\" | \"article\" | \"image\" | \"menu\" | \"stop\" | \"base\" | React.ComponentType | \"s\" | \"legend\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"canvas\" | \"svg\" | \"select\" | \"output\" | \"view\" | \"script\" | \"time\" | \"mask\" | \"input\" | \"table\" | \"a\" | \"abbr\" | \"address\" | \"area\" | \"aside\" | \"audio\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"br\" | \"button\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"header\" | \"hgroup\" | \"hr\" | \"html\" | \"i\" | \"iframe\" | \"img\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"section\" | \"strong\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"var\" | \"video\" | \"wbr\" | \"webview\" | \"animate\" | \"animateMotion\" | \"animateTransform\" | \"circle\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"line\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/exception_item_card.tsx", "deprecated": false, diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index fa43232c6c23f..f535722c8267f 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index 6566c187cc4c2..e7672f2e7a5bc 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index ef957e67d2b8c..c29e6e90544ed 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_securitysolution_io_ts_alerting_types.devdocs.json index 63d1fc2fca5a2..1a02195ed7741 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.devdocs.json +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.devdocs.json @@ -303,7 +303,7 @@ "section": "def-common.SavedObjectAttributes", "text": "SavedObjectAttributes" }, - "; } & { uuid?: string | undefined; alerts_filter?: { query?: ({ kql: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; } & { $state?: { store: any; } | undefined; query?: { [x: string]: any; } | undefined; })[]; } & { dsl?: string | undefined; }) | undefined; timeframe?: { timezone: string; days: (2 | 7 | 6 | 5 | 4 | 3 | 1)[]; hours: { start: string; end: string; }; } | undefined; } | undefined; frequency?: { summary: boolean; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; throttle: string | null; } | undefined; }" + "; } & { uuid?: string | undefined; alerts_filter?: { query?: ({ kql: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; } & { $state?: { store: any; } | undefined; query?: { [x: string]: any; } | undefined; })[]; } & { dsl?: string | undefined; }) | undefined; timeframe?: { timezone: string; days: (2 | 1 | 7 | 6 | 5 | 4 | 3)[]; hours: { start: string; end: string; }; } | undefined; } | undefined; frequency?: { summary: boolean; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; throttle: string | null; } | undefined; }" ], "path": "packages/kbn-securitysolution-io-ts-alerting-types/src/actions/index.ts", "deprecated": false, @@ -326,7 +326,7 @@ "section": "def-common.SavedObjectAttributes", "text": "SavedObjectAttributes" }, - "; } & { uuid?: string | undefined; alerts_filter?: { query?: ({ kql: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; } & { $state?: { store: any; } | undefined; query?: { [x: string]: any; } | undefined; })[]; } & { dsl?: string | undefined; }) | undefined; timeframe?: { timezone: string; days: (2 | 7 | 6 | 5 | 4 | 3 | 1)[]; hours: { start: string; end: string; }; } | undefined; } | undefined; frequency?: { summary: boolean; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; throttle: string | null; } | undefined; })[]" + "; } & { uuid?: string | undefined; alerts_filter?: { query?: ({ kql: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; } & { $state?: { store: any; } | undefined; query?: { [x: string]: any; } | undefined; })[]; } & { dsl?: string | undefined; }) | undefined; timeframe?: { timezone: string; days: (2 | 1 | 7 | 6 | 5 | 4 | 3)[]; hours: { start: string; end: string; }; } | undefined; } | undefined; frequency?: { summary: boolean; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; throttle: string | null; } | undefined; })[]" ], "path": "packages/kbn-securitysolution-io-ts-alerting-types/src/actions/index.ts", "deprecated": false, @@ -349,7 +349,7 @@ "section": "def-common.SavedObjectAttributes", "text": "SavedObjectAttributes" }, - "; } & { uuid?: string | undefined; alertsFilter?: { query?: ({ kql: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; } & { $state?: { store: any; } | undefined; query?: { [x: string]: any; } | undefined; })[]; } & { dsl?: string | undefined; }) | undefined; timeframe?: { timezone: string; days: (2 | 7 | 6 | 5 | 4 | 3 | 1)[]; hours: { start: string; end: string; }; } | undefined; } | undefined; frequency?: { summary: boolean; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; throttle: string | null; } | undefined; })[]" + "; } & { uuid?: string | undefined; alertsFilter?: { query?: ({ kql: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; } & { $state?: { store: any; } | undefined; query?: { [x: string]: any; } | undefined; })[]; } & { dsl?: string | undefined; }) | undefined; timeframe?: { timezone: string; days: (2 | 1 | 7 | 6 | 5 | 4 | 3)[]; hours: { start: string; end: string; }; } | undefined; } | undefined; frequency?: { summary: boolean; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; throttle: string | null; } | undefined; })[]" ], "path": "packages/kbn-securitysolution-io-ts-alerting-types/src/actions/index.ts", "deprecated": false, @@ -372,7 +372,7 @@ "section": "def-common.SavedObjectAttributes", "text": "SavedObjectAttributes" }, - "; } & { uuid?: string | undefined; alertsFilter?: { query?: ({ kql: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; } & { $state?: { store: any; } | undefined; query?: { [x: string]: any; } | undefined; })[]; } & { dsl?: string | undefined; }) | undefined; timeframe?: { timezone: string; days: (2 | 7 | 6 | 5 | 4 | 3 | 1)[]; hours: { start: string; end: string; }; } | undefined; } | undefined; frequency?: { summary: boolean; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; throttle: string | null; } | undefined; }" + "; } & { uuid?: string | undefined; alertsFilter?: { query?: ({ kql: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; } & { $state?: { store: any; } | undefined; query?: { [x: string]: any; } | undefined; })[]; } & { dsl?: string | undefined; }) | undefined; timeframe?: { timezone: string; days: (2 | 1 | 7 | 6 | 5 | 4 | 3)[]; hours: { start: string; end: string; }; } | undefined; } | undefined; frequency?: { summary: boolean; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; throttle: string | null; } | undefined; }" ], "path": "packages/kbn-securitysolution-io-ts-alerting-types/src/actions/index.ts", "deprecated": false, @@ -1064,7 +1064,7 @@ "section": "def-common.SavedObjectAttributes", "text": "SavedObjectAttributes" }, - "; } & { uuid?: string | undefined; alerts_filter?: { query?: ({ kql: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; } & { $state?: { store: any; } | undefined; query?: { [x: string]: any; } | undefined; })[]; } & { dsl?: string | undefined; }) | undefined; timeframe?: { timezone: string; days: (2 | 7 | 6 | 5 | 4 | 3 | 1)[]; hours: { start: string; end: string; }; } | undefined; } | undefined; frequency?: { summary: boolean; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; throttle: string | null; } | undefined; })[], ({ group: string; id: string; action_type_id: string; params: ", + "; } & { uuid?: string | undefined; alerts_filter?: { query?: ({ kql: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; } & { $state?: { store: any; } | undefined; query?: { [x: string]: any; } | undefined; })[]; } & { dsl?: string | undefined; }) | undefined; timeframe?: { timezone: string; days: (2 | 1 | 7 | 6 | 5 | 4 | 3)[]; hours: { start: string; end: string; }; } | undefined; } | undefined; frequency?: { summary: boolean; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; throttle: string | null; } | undefined; })[], ({ group: string; id: string; action_type_id: string; params: ", { "pluginId": "@kbn/securitysolution-io-ts-alerting-types", "scope": "common", @@ -1072,7 +1072,7 @@ "section": "def-common.SavedObjectAttributes", "text": "SavedObjectAttributes" }, - "; } & { uuid?: string | undefined; alerts_filter?: { query?: ({ kql: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; } & { $state?: { store: any; } | undefined; query?: { [x: string]: any; } | undefined; })[]; } & { dsl?: string | undefined; }) | undefined; timeframe?: { timezone: string; days: (2 | 7 | 6 | 5 | 4 | 3 | 1)[]; hours: { start: string; end: string; }; } | undefined; } | undefined; frequency?: { summary: boolean; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; throttle: string | null; } | undefined; })[] | undefined, unknown>" + "; } & { uuid?: string | undefined; alerts_filter?: { query?: ({ kql: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; } & { $state?: { store: any; } | undefined; query?: { [x: string]: any; } | undefined; })[]; } & { dsl?: string | undefined; }) | undefined; timeframe?: { timezone: string; days: (2 | 1 | 7 | 6 | 5 | 4 | 3)[]; hours: { start: string; end: string; }; } | undefined; } | undefined; frequency?: { summary: boolean; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; throttle: string | null; } | undefined; })[] | undefined, unknown>" ], "path": "packages/kbn-securitysolution-io-ts-alerting-types/src/default_actions_array/index.ts", "deprecated": false, diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index 808ab2d069834..dd5c9b9f55406 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-03-20 +date: 2024-03-21 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.devdocs.json b/api_docs/kbn_securitysolution_io_ts_list_types.devdocs.json index 46341eb4040cf..b64ee5e92d55d 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.devdocs.json +++ b/api_docs/kbn_securitysolution_io_ts_list_types.devdocs.json @@ -3020,7 +3020,7 @@ "label": "CreateListSchemaDecoded", "description": [], "signature": [ - "{ type: \"boolean\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"binary\" | \"keyword\" | \"text\" | \"date\" | \"date_nanos\" | \"integer\" | \"long\" | \"short\" | \"byte\" | \"float\" | \"half_float\" | \"double\" | \"integer_range\" | \"float_range\" | \"long_range\" | \"double_range\" | \"date_range\" | \"ip_range\" | \"shape\"; id: string | undefined; name: string; serializer: string | undefined; meta: object | undefined; description: string; deserializer: string | undefined; } & { version: number; }" + "{ id: string | undefined; type: \"boolean\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"binary\" | \"keyword\" | \"text\" | \"date\" | \"date_nanos\" | \"integer\" | \"long\" | \"short\" | \"byte\" | \"float\" | \"half_float\" | \"double\" | \"integer_range\" | \"float_range\" | \"long_range\" | \"double_range\" | \"date_range\" | \"ip_range\" | \"shape\"; name: string; serializer: string | undefined; meta: object | undefined; description: string; deserializer: string | undefined; } & { version: number; }" ], "path": "packages/kbn-securitysolution-io-ts-list-types/src/request/create_list_schema/index.ts", "deprecated": false, diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index b0a439c614e6c..1491a38a0412b 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-03-20 +date: 2024-03-21 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 2253cc74cd9bd..921fcfec1c188 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-03-20 +date: 2024-03-21 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 5ea1f28a0249f..4bae6189d6242 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 3b824c15cd2b2..cab6a1a9d892c 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-03-20 +date: 2024-03-21 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 15dfa70393e64..1962eeb24183a 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-03-20 +date: 2024-03-21 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 cc905bce0359e..2cb432d72f0ac 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-03-20 +date: 2024-03-21 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 7ac51efac8bc9..2e781bae275d3 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 210db43950fea..00be32a1389df 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-03-20 +date: 2024-03-21 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 76772d3b1d394..97e3045aba428 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-03-20 +date: 2024-03-21 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 3936447ff15f6..5e218e0cce49b 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 ac09b750981ab..b5087414454a1 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-03-20 +date: 2024-03-21 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 627da7f3ead14..f3ff778694e93 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 8ef297c5e0baa..3b6404cdb725b 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-03-20 +date: 2024-03-21 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 bb008e6b816c9..786b2855264b9 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-03-20 +date: 2024-03-21 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 0a1a6db6e11d4..832cd01d65c04 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-03-20 +date: 2024-03-21 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 42155d66bd19d..0c61619bb97c7 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-03-20 +date: 2024-03-21 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 eae8f4a12656e..3e26133c014ee 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-03-20 +date: 2024-03-21 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 9acc155948264..96a042d2b9c28 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-03-20 +date: 2024-03-21 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 f41c032d6ce59..2c5bfbe6eff95 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-03-20 +date: 2024-03-21 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 b458e12221e62..d15c6c30f4f3c 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-03-20 +date: 2024-03-21 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 387795bc45403..262b0df9a40ac 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-03-20 +date: 2024-03-21 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 6e0609dca7d2a..6123ccbae8868 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-03-20 +date: 2024-03-21 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 eed51398c85a6..d95698f537ccb 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-03-20 +date: 2024-03-21 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 2b219806c3d21..7d5e8f7bfbd04 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 fee2da97c5b9c..f30cb1d97510e 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-03-20 +date: 2024-03-21 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 51e37ca4a9cbb..1034cb3ac7343 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-03-20 +date: 2024-03-21 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 22f99662d2807..fa125b43b64ab 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-03-20 +date: 2024-03-21 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 33fd5fcdb4843..744c4fa270ad1 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-03-20 +date: 2024-03-21 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 74dad49e8c653..b55296eecaa71 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 fd93acca788bf..087d15cd7b05c 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 3aad404f3a763..76fa8657c81a0 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-03-20 +date: 2024-03-21 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 36bb0fc393482..da534d19b330c 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-03-20 +date: 2024-03-21 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 172dcfb12f4a2..96b51f599d7e9 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-03-20 +date: 2024-03-21 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 f31eda5f802f1..46ab3c3e4ff99 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-03-20 +date: 2024-03-21 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 b0b87d6980591..e371e6f423376 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-03-20 +date: 2024-03-21 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 c60ee382e7884..5de5470ed4bdf 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 8373c5eaac30a..6855bf6efb768 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-03-20 +date: 2024-03-21 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 1c6e55cd1d633..98f5095bf0dc9 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 c43d2e8dcd038..d9c602d368131 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-03-20 +date: 2024-03-21 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 aeedc15b0467a..7f78840ec6276 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 5693a724f9cb6..f88687f71c88d 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-03-20 +date: 2024-03-21 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 121243455f11e..3a92475b40187 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 576460a16136b..f0a42b3a3687c 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-03-20 +date: 2024-03-21 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 85f01f4f02760..37d7d49512ee0 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 447dbfc1469fa..98d9e775c7b42 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-03-20 +date: 2024-03-21 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 18afb44a55389..4b0dc5bfdc367 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-03-20 +date: 2024-03-21 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 e704595b8632d..ec849f99f126f 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 49e0621b2d9f5..3a94959801406 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 39e98790c2fcd..f47d8b0d62222 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-03-20 +date: 2024-03-21 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 63fff8ad2d085..6190ba92aa7d0 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-03-20 +date: 2024-03-21 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 ec9865a751782..269b97ec52956 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 bd488540b1339..4150abe0a353b 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-03-20 +date: 2024-03-21 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 c429b76cb5a71..ed44b19d0c78f 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-03-20 +date: 2024-03-21 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 9a74883865b0e..036e420ede84f 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-03-20 +date: 2024-03-21 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 c49a48b061013..749d645cabb9b 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-03-20 +date: 2024-03-21 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 7c64ea44b01a2..4f153d72e48f2 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 2ed9f711490bb..1a1441764aeff 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-03-20 +date: 2024-03-21 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 70f7968cf3698..aea19377b19b6 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_es.mdx b/api_docs/kbn_solution_nav_es.mdx index 7224970277970..3d35059832188 100644 --- a/api_docs/kbn_solution_nav_es.mdx +++ b/api_docs/kbn_solution_nav_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-es title: "@kbn/solution-nav-es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-es plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-es'] --- import kbnSolutionNavEsObj from './kbn_solution_nav_es.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_oblt.mdx b/api_docs/kbn_solution_nav_oblt.mdx index 5383e600cf82c..3316071dbe617 100644 --- a/api_docs/kbn_solution_nav_oblt.mdx +++ b/api_docs/kbn_solution_nav_oblt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-oblt title: "@kbn/solution-nav-oblt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-oblt plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-oblt'] --- import kbnSolutionNavObltObj from './kbn_solution_nav_oblt.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index b3ca90d117acd..5108e34b3c2dd 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-03-20 +date: 2024-03-21 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 bce00c30e8493..f6127679575fb 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-03-20 +date: 2024-03-21 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 694059a58f8ef..b19a0a1e1bb94 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-03-20 +date: 2024-03-21 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 493b8c2ec192a..9a8703597c3ec 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-03-20 +date: 2024-03-21 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 4aab1e1e3f4b9..89a6250b530ae 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 0b5e294a07d14..db0d1ac317e67 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-03-20 +date: 2024-03-21 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 303acbcba729d..3b2d4da338b87 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-03-20 +date: 2024-03-21 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 541069cf82343..4acf9ab21cbd8 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-03-20 +date: 2024-03-21 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 d7c6d20bbcf8d..47e73146a41c6 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-03-20 +date: 2024-03-21 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 bf339fceeb46b..9bf4102bb236b 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-03-20 +date: 2024-03-21 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 c79129c9c8186..b657b95fcde4a 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-03-20 +date: 2024-03-21 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 aacd2a441b90b..513cc7aee2801 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-03-20 +date: 2024-03-21 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 ce7a10b58c3c6..928b4fb804dac 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-03-20 +date: 2024-03-21 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 dade31e84cfb1..10f7b49ab1922 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 3b77a4732f2e5..9cd70f640a9ab 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-03-20 +date: 2024-03-21 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 63c35bf396507..cdd202129e13d 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-03-20 +date: 2024-03-21 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 c7b8a535e8a4d..f81f50b2875c9 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-03-20 +date: 2024-03-21 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 8f5fe08549197..187d98e8f8568 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-03-20 +date: 2024-03-21 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 976eead082a8b..7172b924065c6 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-03-20 +date: 2024-03-21 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 bf23892a54328..09407495bd1bd 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-03-20 +date: 2024-03-21 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 3632af7d98500..ee21eb2570ae7 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-03-20 +date: 2024-03-21 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 3e81a2705efb7..dd92a09285d94 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-03-20 +date: 2024-03-21 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 648e002dbf6e2..b560373131c9b 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 4694898e5e46e..8968508a8f4e0 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-03-20 +date: 2024-03-21 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 7f426c8c612bd..7d85672f92695 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-03-20 +date: 2024-03-21 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 3c51b2f331192..6a62ccdb8b8db 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-03-20 +date: 2024-03-21 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 c361798a1c3cc..e7aa42af23a1a 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-03-20 +date: 2024-03-21 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 cce1498108c38..6f8f244705afd 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-03-20 +date: 2024-03-21 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 3e838f3f79fcf..977301648b31a 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-03-20 +date: 2024-03-21 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 e15198eab4bb2..9e453cb218a3a 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 622fbf2eb0ba2..ef14725a38e2d 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-03-20 +date: 2024-03-21 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 82212e1dc556e..56b3364aa37fe 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 665d549776f4a..1cdbff0581dde 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-03-20 +date: 2024-03-21 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 76cf4ff441cb2..b356a15118617 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-03-20 +date: 2024-03-21 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 8dc1a55b0ee21..a7c038734636d 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-03-20 +date: 2024-03-21 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 b18aee0fd510f..77157ae7f70b4 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-03-20 +date: 2024-03-21 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 c7e3a406f4adb..5a97b20b7c94e 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-03-20 +date: 2024-03-21 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 8d8684a31c518..84913aaf3d106 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-03-20 +date: 2024-03-21 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 e81d201912bb7..2fd192f675b3f 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-03-20 +date: 2024-03-21 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 e6a23322ec590..43fd5d87a5fcb 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-03-20 +date: 2024-03-21 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 29b95d766437e..afbf30f3c8e28 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-03-20 +date: 2024-03-21 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 1b40bd38a4541..f5f9126d870b8 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.devdocs.json b/api_docs/lists.devdocs.json index 96c01b00f5ad0..b99555928251b 100644 --- a/api_docs/lists.devdocs.json +++ b/api_docs/lists.devdocs.json @@ -4397,7 +4397,39 @@ "label": "esClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -4501,39 +4533,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index ed590cefd2c79..f9e77069956df 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 279e652c05749..672b3cf3c91e1 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.devdocs.json b/api_docs/logs_shared.devdocs.json index 5a9b39ad40468..0064c1fe2892a 100644 --- a/api_docs/logs_shared.devdocs.json +++ b/api_docs/logs_shared.devdocs.json @@ -1882,7 +1882,7 @@ "section": "def-common.ResolvedLogView", "text": "ResolvedLogView" }, - " | undefined; logViewStatus: { index: \"missing\" | \"unknown\" | \"empty\" | \"available\"; } | undefined; derivedDataView: ", + " | undefined; logViewStatus: { index: \"unknown\" | \"missing\" | \"empty\" | \"available\"; } | undefined; derivedDataView: ", { "pluginId": "dataViews", "scope": "common", @@ -2463,7 +2463,7 @@ "section": "def-common.ResolvedLogView", "text": "ResolvedLogView" }, - " | undefined; logViewStatus: { index: \"missing\" | \"unknown\" | \"empty\" | \"available\"; } | undefined; derivedDataView: ", + " | undefined; logViewStatus: { index: \"unknown\" | \"missing\" | \"empty\" | \"available\"; } | undefined; derivedDataView: ", { "pluginId": "dataViews", "scope": "common", @@ -3412,7 +3412,7 @@ "section": "def-common.ResolvedLogView", "text": "ResolvedLogView" }, - "; status: { index: \"missing\" | \"unknown\" | \"empty\" | \"available\"; }; } | { type: \"LOADING_LOG_VIEW_FAILED\"; error: Error; }" + "; status: { index: \"unknown\" | \"missing\" | \"empty\" | \"available\"; }; } | { type: \"LOADING_LOG_VIEW_FAILED\"; error: Error; }" ], "path": "x-pack/plugins/observability_solution/logs_shared/public/observability_logs/log_view_state/src/notifications.ts", "deprecated": false, @@ -6341,7 +6341,7 @@ "label": "LogViewStatus", "description": [], "signature": [ - "{ index: \"missing\" | \"unknown\" | \"empty\" | \"available\"; }" + "{ index: \"unknown\" | \"missing\" | \"empty\" | \"available\"; }" ], "path": "x-pack/plugins/observability_solution/logs_shared/common/log_views/types.ts", "deprecated": false, diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 483e0e70abc61..fff8c68a6c627 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.devdocs.json b/api_docs/management.devdocs.json index 5f2978b782c5c..6cb32d590a920 100644 --- a/api_docs/management.devdocs.json +++ b/api_docs/management.devdocs.json @@ -785,38 +785,6 @@ "deprecated": false, "trackAdoption": false, "children": [ - { - "parentPluginId": "management", - "id": "def-public.ManagementStart.setIsSidebarEnabled", - "type": "Function", - "tags": [], - "label": "setIsSidebarEnabled", - "description": [], - "signature": [ - "(enabled: boolean) => void" - ], - "path": "src/plugins/management/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "management", - "id": "def-public.ManagementStart.setIsSidebarEnabled.$1", - "type": "boolean", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "boolean" - ], - "path": "src/plugins/management/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, { "parentPluginId": "management", "id": "def-public.ManagementStart.setupCardsNavigation", diff --git a/api_docs/management.mdx b/api_docs/management.mdx index da60770349707..8b4c3a1c6916d 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 45 | 0 | 45 | 7 | +| 43 | 0 | 43 | 7 | ## Client diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 0e5dcc683dbe4..b475c9901b81e 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-03-20 +date: 2024-03-21 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 036904b806816..01c479955220e 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-03-20 +date: 2024-03-21 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 bc85e6a4fc7a8..d4592d1b5622f 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-03-20 +date: 2024-03-21 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 e7536f503ff23..6c82efc986f29 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-03-20 +date: 2024-03-21 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 f36ea589d6048..5fe50eb5d51e4 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-03-20 +date: 2024-03-21 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 1b3742d177bec..5c342549b7bfa 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-03-20 +date: 2024-03-21 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 b0143cca274be..a97593a5cb5e8 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-03-20 +date: 2024-03-21 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 e56af1ffa4994..1410a0acd31da 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-03-20 +date: 2024-03-21 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 9a7561599cdb9..25e8ea292915c 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-03-20 +date: 2024-03-21 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 3750168a7ad00..768fd0942fd4f 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-03-20 +date: 2024-03-21 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 313a8df70954a..5889fd0cb51ba 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-03-20 +date: 2024-03-21 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 78c3eaac6c00a..fd1148f7782fd 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -799,9 +799,9 @@ "label": "getElasticsearchQueryOrThrow", "description": [], "signature": [ - "(kuery: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }) => ", + "(kuery: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }) => never[] | ", "QueryDslQueryContainer", - " | never[] | { bool: ", + " | { bool: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -903,7 +903,7 @@ }, " | undefined; list: () => string[]; }; selectedAlertId?: string | undefined; } & ", "CommonProps", - " & { as?: \"div\" | undefined; } & _EuiFlyoutProps & Omit, HTMLDivElement>, keyof _EuiFlyoutProps> & Omit, HTMLDivElement>, \"key\" | keyof React.HTMLAttributes | \"css\"> & { ref?: ((instance: HTMLDivElement | null) => void) | React.RefObject | null | undefined; }, \"type\" | \"prefix\" | \"key\" | \"id\" | \"defaultValue\" | \"security\" | \"onChange\" | \"defaultChecked\" | \"suppressContentEditableWarning\" | \"suppressHydrationWarning\" | \"accessKey\" | \"className\" | \"contentEditable\" | \"contextMenu\" | \"dir\" | \"draggable\" | \"hidden\" | \"lang\" | \"placeholder\" | \"slot\" | \"spellCheck\" | \"style\" | \"tabIndex\" | \"title\" | \"translate\" | \"radioGroup\" | \"role\" | \"about\" | \"datatype\" | \"inlist\" | \"property\" | \"resource\" | \"typeof\" | \"vocab\" | \"autoCapitalize\" | \"autoCorrect\" | \"autoSave\" | \"color\" | \"itemProp\" | \"itemScope\" | \"itemType\" | \"itemID\" | \"itemRef\" | \"results\" | \"unselectable\" | \"inputMode\" | \"is\" | \"aria-activedescendant\" | \"aria-atomic\" | \"aria-autocomplete\" | \"aria-busy\" | \"aria-checked\" | \"aria-colcount\" | \"aria-colindex\" | \"aria-colspan\" | \"aria-controls\" | \"aria-current\" | \"aria-describedby\" | \"aria-details\" | \"aria-disabled\" | \"aria-dropeffect\" | \"aria-errormessage\" | \"aria-expanded\" | \"aria-flowto\" | \"aria-grabbed\" | \"aria-haspopup\" | \"aria-hidden\" | \"aria-invalid\" | \"aria-keyshortcuts\" | \"aria-label\" | \"aria-labelledby\" | \"aria-level\" | \"aria-live\" | \"aria-modal\" | \"aria-multiline\" | \"aria-multiselectable\" | \"aria-orientation\" | \"aria-owns\" | \"aria-placeholder\" | \"aria-posinset\" | \"aria-pressed\" | \"aria-readonly\" | \"aria-relevant\" | \"aria-required\" | \"aria-roledescription\" | \"aria-rowcount\" | \"aria-rowindex\" | \"aria-rowspan\" | \"aria-selected\" | \"aria-setsize\" | \"aria-sort\" | \"aria-valuemax\" | \"aria-valuemin\" | \"aria-valuenow\" | \"aria-valuetext\" | \"children\" | \"dangerouslySetInnerHTML\" | \"onCopy\" | \"onCopyCapture\" | \"onCut\" | \"onCutCapture\" | \"onPaste\" | \"onPasteCapture\" | \"onCompositionEnd\" | \"onCompositionEndCapture\" | \"onCompositionStart\" | \"onCompositionStartCapture\" | \"onCompositionUpdate\" | \"onCompositionUpdateCapture\" | \"onFocus\" | \"onFocusCapture\" | \"onBlur\" | \"onBlurCapture\" | \"onChangeCapture\" | \"onBeforeInput\" | \"onBeforeInputCapture\" | \"onInput\" | \"onInputCapture\" | \"onReset\" | \"onResetCapture\" | \"onSubmit\" | \"onSubmitCapture\" | \"onInvalid\" | \"onInvalidCapture\" | \"onLoad\" | \"onLoadCapture\" | \"onError\" | \"onErrorCapture\" | \"onKeyDown\" | \"onKeyDownCapture\" | \"onKeyPress\" | \"onKeyPressCapture\" | \"onKeyUp\" | \"onKeyUpCapture\" | \"onAbort\" | \"onAbortCapture\" | \"onCanPlay\" | \"onCanPlayCapture\" | \"onCanPlayThrough\" | \"onCanPlayThroughCapture\" | \"onDurationChange\" | \"onDurationChangeCapture\" | \"onEmptied\" | \"onEmptiedCapture\" | \"onEncrypted\" | \"onEncryptedCapture\" | \"onEnded\" | \"onEndedCapture\" | \"onLoadedData\" | \"onLoadedDataCapture\" | \"onLoadedMetadata\" | \"onLoadedMetadataCapture\" | \"onLoadStart\" | \"onLoadStartCapture\" | \"onPause\" | \"onPauseCapture\" | \"onPlay\" | \"onPlayCapture\" | \"onPlaying\" | \"onPlayingCapture\" | \"onProgress\" | \"onProgressCapture\" | \"onRateChange\" | \"onRateChangeCapture\" | \"onSeeked\" | \"onSeekedCapture\" | \"onSeeking\" | \"onSeekingCapture\" | \"onStalled\" | \"onStalledCapture\" | \"onSuspend\" | \"onSuspendCapture\" | \"onTimeUpdate\" | \"onTimeUpdateCapture\" | \"onVolumeChange\" | \"onVolumeChangeCapture\" | \"onWaiting\" | \"onWaitingCapture\" | \"onAuxClick\" | \"onAuxClickCapture\" | \"onClick\" | \"onClickCapture\" | \"onContextMenu\" | \"onContextMenuCapture\" | \"onDoubleClick\" | \"onDoubleClickCapture\" | \"onDrag\" | \"onDragCapture\" | \"onDragEnd\" | \"onDragEndCapture\" | \"onDragEnter\" | \"onDragEnterCapture\" | \"onDragExit\" | \"onDragExitCapture\" | \"onDragLeave\" | \"onDragLeaveCapture\" | \"onDragOver\" | \"onDragOverCapture\" | \"onDragStart\" | \"onDragStartCapture\" | \"onDrop\" | \"onDropCapture\" | \"onMouseDown\" | \"onMouseDownCapture\" | \"onMouseEnter\" | \"onMouseLeave\" | \"onMouseMove\" | \"onMouseMoveCapture\" | \"onMouseOut\" | \"onMouseOutCapture\" | \"onMouseOver\" | \"onMouseOverCapture\" | \"onMouseUp\" | \"onMouseUpCapture\" | \"onSelect\" | \"onSelectCapture\" | \"onTouchCancel\" | \"onTouchCancelCapture\" | \"onTouchEnd\" | \"onTouchEndCapture\" | \"onTouchMove\" | \"onTouchMoveCapture\" | \"onTouchStart\" | \"onTouchStartCapture\" | \"onPointerDown\" | \"onPointerDownCapture\" | \"onPointerMove\" | \"onPointerMoveCapture\" | \"onPointerUp\" | \"onPointerUpCapture\" | \"onPointerCancel\" | \"onPointerCancelCapture\" | \"onPointerEnter\" | \"onPointerEnterCapture\" | \"onPointerLeave\" | \"onPointerLeaveCapture\" | \"onPointerOver\" | \"onPointerOverCapture\" | \"onPointerOut\" | \"onPointerOutCapture\" | \"onGotPointerCapture\" | \"onGotPointerCaptureCapture\" | \"onLostPointerCapture\" | \"onLostPointerCaptureCapture\" | \"onScroll\" | \"onScrollCapture\" | \"onWheel\" | \"onWheelCapture\" | \"onAnimationStart\" | \"onAnimationStartCapture\" | \"onAnimationEnd\" | \"onAnimationEndCapture\" | \"onAnimationIteration\" | \"onAnimationIterationCapture\" | \"onTransitionEnd\" | \"onTransitionEndCapture\" | \"data-test-subj\" | \"css\" | \"paddingSize\" | \"size\" | \"onClose\" | \"ref\" | \"maxWidth\" | \"ownFocus\" | \"hideCloseButton\" | \"closeButtonProps\" | \"closeButtonPosition\" | \"maskProps\" | \"outsideClickCloses\" | \"side\" | \"pushMinBreakpoint\" | \"pushAnimation\" | \"focusTrapProps\" | \"includeFixedHeadersInFocusTrap\" | \"as\">, \"type\" | \"prefix\" | \"key\" | \"id\" | \"defaultValue\" | \"security\" | \"alert\" | \"onChange\" | \"defaultChecked\" | \"suppressContentEditableWarning\" | \"suppressHydrationWarning\" | \"accessKey\" | \"className\" | \"contentEditable\" | \"contextMenu\" | \"dir\" | \"draggable\" | \"hidden\" | \"lang\" | \"placeholder\" | \"slot\" | \"spellCheck\" | \"style\" | \"tabIndex\" | \"title\" | \"translate\" | \"radioGroup\" | \"role\" | \"about\" | \"datatype\" | \"inlist\" | \"property\" | \"resource\" | \"typeof\" | \"vocab\" | \"autoCapitalize\" | \"autoCorrect\" | \"autoSave\" | \"color\" | \"itemProp\" | \"itemScope\" | \"itemType\" | \"itemID\" | \"itemRef\" | \"results\" | \"unselectable\" | \"inputMode\" | \"is\" | \"aria-activedescendant\" | \"aria-atomic\" | \"aria-autocomplete\" | \"aria-busy\" | \"aria-checked\" | \"aria-colcount\" | \"aria-colindex\" | \"aria-colspan\" | \"aria-controls\" | \"aria-current\" | \"aria-describedby\" | \"aria-details\" | \"aria-disabled\" | \"aria-dropeffect\" | \"aria-errormessage\" | \"aria-expanded\" | \"aria-flowto\" | \"aria-grabbed\" | \"aria-haspopup\" | \"aria-hidden\" | \"aria-invalid\" | \"aria-keyshortcuts\" | \"aria-label\" | \"aria-labelledby\" | \"aria-level\" | \"aria-live\" | \"aria-modal\" | \"aria-multiline\" | \"aria-multiselectable\" | \"aria-orientation\" | \"aria-owns\" | \"aria-placeholder\" | \"aria-posinset\" | \"aria-pressed\" | \"aria-readonly\" | \"aria-relevant\" | \"aria-required\" | \"aria-roledescription\" | \"aria-rowcount\" | \"aria-rowindex\" | \"aria-rowspan\" | \"aria-selected\" | \"aria-setsize\" | \"aria-sort\" | \"aria-valuemax\" | \"aria-valuemin\" | \"aria-valuenow\" | \"aria-valuetext\" | \"children\" | \"dangerouslySetInnerHTML\" | \"onCopy\" | \"onCopyCapture\" | \"onCut\" | \"onCutCapture\" | \"onPaste\" | \"onPasteCapture\" | \"onCompositionEnd\" | \"onCompositionEndCapture\" | \"onCompositionStart\" | \"onCompositionStartCapture\" | \"onCompositionUpdate\" | \"onCompositionUpdateCapture\" | \"onFocus\" | \"onFocusCapture\" | \"onBlur\" | \"onBlurCapture\" | \"onChangeCapture\" | \"onBeforeInput\" | \"onBeforeInputCapture\" | \"onInput\" | \"onInputCapture\" | \"onReset\" | \"onResetCapture\" | \"onSubmit\" | \"onSubmitCapture\" | \"onInvalid\" | \"onInvalidCapture\" | \"onLoad\" | \"onLoadCapture\" | \"onError\" | \"onErrorCapture\" | \"onKeyDown\" | \"onKeyDownCapture\" | \"onKeyPress\" | \"onKeyPressCapture\" | \"onKeyUp\" | \"onKeyUpCapture\" | \"onAbort\" | \"onAbortCapture\" | \"onCanPlay\" | \"onCanPlayCapture\" | \"onCanPlayThrough\" | \"onCanPlayThroughCapture\" | \"onDurationChange\" | \"onDurationChangeCapture\" | \"onEmptied\" | \"onEmptiedCapture\" | \"onEncrypted\" | \"onEncryptedCapture\" | \"onEnded\" | \"onEndedCapture\" | \"onLoadedData\" | \"onLoadedDataCapture\" | \"onLoadedMetadata\" | \"onLoadedMetadataCapture\" | \"onLoadStart\" | \"onLoadStartCapture\" | \"onPause\" | \"onPauseCapture\" | \"onPlay\" | \"onPlayCapture\" | \"onPlaying\" | \"onPlayingCapture\" | \"onProgress\" | \"onProgressCapture\" | \"onRateChange\" | \"onRateChangeCapture\" | \"onSeeked\" | \"onSeekedCapture\" | \"onSeeking\" | \"onSeekingCapture\" | \"onStalled\" | \"onStalledCapture\" | \"onSuspend\" | \"onSuspendCapture\" | \"onTimeUpdate\" | \"onTimeUpdateCapture\" | \"onVolumeChange\" | \"onVolumeChangeCapture\" | \"onWaiting\" | \"onWaitingCapture\" | \"onAuxClick\" | \"onAuxClickCapture\" | \"onClick\" | \"onClickCapture\" | \"onContextMenu\" | \"onContextMenuCapture\" | \"onDoubleClick\" | \"onDoubleClickCapture\" | \"onDrag\" | \"onDragCapture\" | \"onDragEnd\" | \"onDragEndCapture\" | \"onDragEnter\" | \"onDragEnterCapture\" | \"onDragExit\" | \"onDragExitCapture\" | \"onDragLeave\" | \"onDragLeaveCapture\" | \"onDragOver\" | \"onDragOverCapture\" | \"onDragStart\" | \"onDragStartCapture\" | \"onDrop\" | \"onDropCapture\" | \"onMouseDown\" | \"onMouseDownCapture\" | \"onMouseEnter\" | \"onMouseLeave\" | \"onMouseMove\" | \"onMouseMoveCapture\" | \"onMouseOut\" | \"onMouseOutCapture\" | \"onMouseOver\" | \"onMouseOverCapture\" | \"onMouseUp\" | \"onMouseUpCapture\" | \"onSelect\" | \"onSelectCapture\" | \"onTouchCancel\" | \"onTouchCancelCapture\" | \"onTouchEnd\" | \"onTouchEndCapture\" | \"onTouchMove\" | \"onTouchMoveCapture\" | \"onTouchStart\" | \"onTouchStartCapture\" | \"onPointerDown\" | \"onPointerDownCapture\" | \"onPointerMove\" | \"onPointerMoveCapture\" | \"onPointerUp\" | \"onPointerUpCapture\" | \"onPointerCancel\" | \"onPointerCancelCapture\" | \"onPointerEnter\" | \"onPointerEnterCapture\" | \"onPointerLeave\" | \"onPointerLeaveCapture\" | \"onPointerOver\" | \"onPointerOverCapture\" | \"onPointerOut\" | \"onPointerOutCapture\" | \"onGotPointerCapture\" | \"onGotPointerCaptureCapture\" | \"onLostPointerCapture\" | \"onLostPointerCaptureCapture\" | \"onScroll\" | \"onScrollCapture\" | \"onWheel\" | \"onWheelCapture\" | \"onAnimationStart\" | \"onAnimationStartCapture\" | \"onAnimationEnd\" | \"onAnimationEndCapture\" | \"onAnimationIteration\" | \"onAnimationIterationCapture\" | \"onTransitionEnd\" | \"onTransitionEndCapture\" | \"data-test-subj\" | \"css\" | \"alerts\" | \"paddingSize\" | \"size\" | \"onClose\" | \"maxWidth\" | \"ownFocus\" | \"hideCloseButton\" | \"closeButtonProps\" | \"closeButtonPosition\" | \"maskProps\" | \"outsideClickCloses\" | \"side\" | \"pushMinBreakpoint\" | \"pushAnimation\" | \"focusTrapProps\" | \"includeFixedHeadersInFocusTrap\" | \"as\" | \"rawAlert\" | \"isInApp\" | \"observabilityRuleTypeRegistry\" | \"selectedAlertId\"> & { ref?: ((instance: HTMLDivElement | null) => void) | React.RefObject | null | undefined; }> & { readonly _result: ({ alert, rawAlert, alerts, isInApp, observabilityRuleTypeRegistry, onClose, selectedAlertId, }: AlertsFlyoutProps) => JSX.Element | null; }" + " & { as?: \"div\" | undefined; } & _EuiFlyoutProps & Omit, HTMLDivElement>, keyof _EuiFlyoutProps> & Omit, HTMLDivElement>, \"key\" | keyof React.HTMLAttributes | \"css\"> & { ref?: ((instance: HTMLDivElement | null) => void) | React.RefObject | null | undefined; }, \"id\" | \"type\" | \"key\" | \"prefix\" | \"defaultValue\" | \"security\" | \"onChange\" | \"defaultChecked\" | \"suppressContentEditableWarning\" | \"suppressHydrationWarning\" | \"accessKey\" | \"className\" | \"contentEditable\" | \"contextMenu\" | \"dir\" | \"draggable\" | \"hidden\" | \"lang\" | \"placeholder\" | \"slot\" | \"spellCheck\" | \"style\" | \"tabIndex\" | \"title\" | \"translate\" | \"radioGroup\" | \"role\" | \"about\" | \"datatype\" | \"inlist\" | \"property\" | \"resource\" | \"typeof\" | \"vocab\" | \"autoCapitalize\" | \"autoCorrect\" | \"autoSave\" | \"color\" | \"itemProp\" | \"itemScope\" | \"itemType\" | \"itemID\" | \"itemRef\" | \"results\" | \"unselectable\" | \"inputMode\" | \"is\" | \"aria-activedescendant\" | \"aria-atomic\" | \"aria-autocomplete\" | \"aria-busy\" | \"aria-checked\" | \"aria-colcount\" | \"aria-colindex\" | \"aria-colspan\" | \"aria-controls\" | \"aria-current\" | \"aria-describedby\" | \"aria-details\" | \"aria-disabled\" | \"aria-dropeffect\" | \"aria-errormessage\" | \"aria-expanded\" | \"aria-flowto\" | \"aria-grabbed\" | \"aria-haspopup\" | \"aria-hidden\" | \"aria-invalid\" | \"aria-keyshortcuts\" | \"aria-label\" | \"aria-labelledby\" | \"aria-level\" | \"aria-live\" | \"aria-modal\" | \"aria-multiline\" | \"aria-multiselectable\" | \"aria-orientation\" | \"aria-owns\" | \"aria-placeholder\" | \"aria-posinset\" | \"aria-pressed\" | \"aria-readonly\" | \"aria-relevant\" | \"aria-required\" | \"aria-roledescription\" | \"aria-rowcount\" | \"aria-rowindex\" | \"aria-rowspan\" | \"aria-selected\" | \"aria-setsize\" | \"aria-sort\" | \"aria-valuemax\" | \"aria-valuemin\" | \"aria-valuenow\" | \"aria-valuetext\" | \"children\" | \"dangerouslySetInnerHTML\" | \"onCopy\" | \"onCopyCapture\" | \"onCut\" | \"onCutCapture\" | \"onPaste\" | \"onPasteCapture\" | \"onCompositionEnd\" | \"onCompositionEndCapture\" | \"onCompositionStart\" | \"onCompositionStartCapture\" | \"onCompositionUpdate\" | \"onCompositionUpdateCapture\" | \"onFocus\" | \"onFocusCapture\" | \"onBlur\" | \"onBlurCapture\" | \"onChangeCapture\" | \"onBeforeInput\" | \"onBeforeInputCapture\" | \"onInput\" | \"onInputCapture\" | \"onReset\" | \"onResetCapture\" | \"onSubmit\" | \"onSubmitCapture\" | \"onInvalid\" | \"onInvalidCapture\" | \"onLoad\" | \"onLoadCapture\" | \"onError\" | \"onErrorCapture\" | \"onKeyDown\" | \"onKeyDownCapture\" | \"onKeyPress\" | \"onKeyPressCapture\" | \"onKeyUp\" | \"onKeyUpCapture\" | \"onAbort\" | \"onAbortCapture\" | \"onCanPlay\" | \"onCanPlayCapture\" | \"onCanPlayThrough\" | \"onCanPlayThroughCapture\" | \"onDurationChange\" | \"onDurationChangeCapture\" | \"onEmptied\" | \"onEmptiedCapture\" | \"onEncrypted\" | \"onEncryptedCapture\" | \"onEnded\" | \"onEndedCapture\" | \"onLoadedData\" | \"onLoadedDataCapture\" | \"onLoadedMetadata\" | \"onLoadedMetadataCapture\" | \"onLoadStart\" | \"onLoadStartCapture\" | \"onPause\" | \"onPauseCapture\" | \"onPlay\" | \"onPlayCapture\" | \"onPlaying\" | \"onPlayingCapture\" | \"onProgress\" | \"onProgressCapture\" | \"onRateChange\" | \"onRateChangeCapture\" | \"onSeeked\" | \"onSeekedCapture\" | \"onSeeking\" | \"onSeekingCapture\" | \"onStalled\" | \"onStalledCapture\" | \"onSuspend\" | \"onSuspendCapture\" | \"onTimeUpdate\" | \"onTimeUpdateCapture\" | \"onVolumeChange\" | \"onVolumeChangeCapture\" | \"onWaiting\" | \"onWaitingCapture\" | \"onAuxClick\" | \"onAuxClickCapture\" | \"onClick\" | \"onClickCapture\" | \"onContextMenu\" | \"onContextMenuCapture\" | \"onDoubleClick\" | \"onDoubleClickCapture\" | \"onDrag\" | \"onDragCapture\" | \"onDragEnd\" | \"onDragEndCapture\" | \"onDragEnter\" | \"onDragEnterCapture\" | \"onDragExit\" | \"onDragExitCapture\" | \"onDragLeave\" | \"onDragLeaveCapture\" | \"onDragOver\" | \"onDragOverCapture\" | \"onDragStart\" | \"onDragStartCapture\" | \"onDrop\" | \"onDropCapture\" | \"onMouseDown\" | \"onMouseDownCapture\" | \"onMouseEnter\" | \"onMouseLeave\" | \"onMouseMove\" | \"onMouseMoveCapture\" | \"onMouseOut\" | \"onMouseOutCapture\" | \"onMouseOver\" | \"onMouseOverCapture\" | \"onMouseUp\" | \"onMouseUpCapture\" | \"onSelect\" | \"onSelectCapture\" | \"onTouchCancel\" | \"onTouchCancelCapture\" | \"onTouchEnd\" | \"onTouchEndCapture\" | \"onTouchMove\" | \"onTouchMoveCapture\" | \"onTouchStart\" | \"onTouchStartCapture\" | \"onPointerDown\" | \"onPointerDownCapture\" | \"onPointerMove\" | \"onPointerMoveCapture\" | \"onPointerUp\" | \"onPointerUpCapture\" | \"onPointerCancel\" | \"onPointerCancelCapture\" | \"onPointerEnter\" | \"onPointerEnterCapture\" | \"onPointerLeave\" | \"onPointerLeaveCapture\" | \"onPointerOver\" | \"onPointerOverCapture\" | \"onPointerOut\" | \"onPointerOutCapture\" | \"onGotPointerCapture\" | \"onGotPointerCaptureCapture\" | \"onLostPointerCapture\" | \"onLostPointerCaptureCapture\" | \"onScroll\" | \"onScrollCapture\" | \"onWheel\" | \"onWheelCapture\" | \"onAnimationStart\" | \"onAnimationStartCapture\" | \"onAnimationEnd\" | \"onAnimationEndCapture\" | \"onAnimationIteration\" | \"onAnimationIterationCapture\" | \"onTransitionEnd\" | \"onTransitionEndCapture\" | \"data-test-subj\" | \"css\" | \"paddingSize\" | \"size\" | \"onClose\" | \"ref\" | \"maxWidth\" | \"ownFocus\" | \"hideCloseButton\" | \"closeButtonProps\" | \"closeButtonPosition\" | \"maskProps\" | \"outsideClickCloses\" | \"side\" | \"pushMinBreakpoint\" | \"pushAnimation\" | \"focusTrapProps\" | \"includeFixedHeadersInFocusTrap\" | \"as\">, \"id\" | \"type\" | \"key\" | \"prefix\" | \"defaultValue\" | \"security\" | \"alert\" | \"onChange\" | \"defaultChecked\" | \"suppressContentEditableWarning\" | \"suppressHydrationWarning\" | \"accessKey\" | \"className\" | \"contentEditable\" | \"contextMenu\" | \"dir\" | \"draggable\" | \"hidden\" | \"lang\" | \"placeholder\" | \"slot\" | \"spellCheck\" | \"style\" | \"tabIndex\" | \"title\" | \"translate\" | \"radioGroup\" | \"role\" | \"about\" | \"datatype\" | \"inlist\" | \"property\" | \"resource\" | \"typeof\" | \"vocab\" | \"autoCapitalize\" | \"autoCorrect\" | \"autoSave\" | \"color\" | \"itemProp\" | \"itemScope\" | \"itemType\" | \"itemID\" | \"itemRef\" | \"results\" | \"unselectable\" | \"inputMode\" | \"is\" | \"aria-activedescendant\" | \"aria-atomic\" | \"aria-autocomplete\" | \"aria-busy\" | \"aria-checked\" | \"aria-colcount\" | \"aria-colindex\" | \"aria-colspan\" | \"aria-controls\" | \"aria-current\" | \"aria-describedby\" | \"aria-details\" | \"aria-disabled\" | \"aria-dropeffect\" | \"aria-errormessage\" | \"aria-expanded\" | \"aria-flowto\" | \"aria-grabbed\" | \"aria-haspopup\" | \"aria-hidden\" | \"aria-invalid\" | \"aria-keyshortcuts\" | \"aria-label\" | \"aria-labelledby\" | \"aria-level\" | \"aria-live\" | \"aria-modal\" | \"aria-multiline\" | \"aria-multiselectable\" | \"aria-orientation\" | \"aria-owns\" | \"aria-placeholder\" | \"aria-posinset\" | \"aria-pressed\" | \"aria-readonly\" | \"aria-relevant\" | \"aria-required\" | \"aria-roledescription\" | \"aria-rowcount\" | \"aria-rowindex\" | \"aria-rowspan\" | \"aria-selected\" | \"aria-setsize\" | \"aria-sort\" | \"aria-valuemax\" | \"aria-valuemin\" | \"aria-valuenow\" | \"aria-valuetext\" | \"children\" | \"dangerouslySetInnerHTML\" | \"onCopy\" | \"onCopyCapture\" | \"onCut\" | \"onCutCapture\" | \"onPaste\" | \"onPasteCapture\" | \"onCompositionEnd\" | \"onCompositionEndCapture\" | \"onCompositionStart\" | \"onCompositionStartCapture\" | \"onCompositionUpdate\" | \"onCompositionUpdateCapture\" | \"onFocus\" | \"onFocusCapture\" | \"onBlur\" | \"onBlurCapture\" | \"onChangeCapture\" | \"onBeforeInput\" | \"onBeforeInputCapture\" | \"onInput\" | \"onInputCapture\" | \"onReset\" | \"onResetCapture\" | \"onSubmit\" | \"onSubmitCapture\" | \"onInvalid\" | \"onInvalidCapture\" | \"onLoad\" | \"onLoadCapture\" | \"onError\" | \"onErrorCapture\" | \"onKeyDown\" | \"onKeyDownCapture\" | \"onKeyPress\" | \"onKeyPressCapture\" | \"onKeyUp\" | \"onKeyUpCapture\" | \"onAbort\" | \"onAbortCapture\" | \"onCanPlay\" | \"onCanPlayCapture\" | \"onCanPlayThrough\" | \"onCanPlayThroughCapture\" | \"onDurationChange\" | \"onDurationChangeCapture\" | \"onEmptied\" | \"onEmptiedCapture\" | \"onEncrypted\" | \"onEncryptedCapture\" | \"onEnded\" | \"onEndedCapture\" | \"onLoadedData\" | \"onLoadedDataCapture\" | \"onLoadedMetadata\" | \"onLoadedMetadataCapture\" | \"onLoadStart\" | \"onLoadStartCapture\" | \"onPause\" | \"onPauseCapture\" | \"onPlay\" | \"onPlayCapture\" | \"onPlaying\" | \"onPlayingCapture\" | \"onProgress\" | \"onProgressCapture\" | \"onRateChange\" | \"onRateChangeCapture\" | \"onSeeked\" | \"onSeekedCapture\" | \"onSeeking\" | \"onSeekingCapture\" | \"onStalled\" | \"onStalledCapture\" | \"onSuspend\" | \"onSuspendCapture\" | \"onTimeUpdate\" | \"onTimeUpdateCapture\" | \"onVolumeChange\" | \"onVolumeChangeCapture\" | \"onWaiting\" | \"onWaitingCapture\" | \"onAuxClick\" | \"onAuxClickCapture\" | \"onClick\" | \"onClickCapture\" | \"onContextMenu\" | \"onContextMenuCapture\" | \"onDoubleClick\" | \"onDoubleClickCapture\" | \"onDrag\" | \"onDragCapture\" | \"onDragEnd\" | \"onDragEndCapture\" | \"onDragEnter\" | \"onDragEnterCapture\" | \"onDragExit\" | \"onDragExitCapture\" | \"onDragLeave\" | \"onDragLeaveCapture\" | \"onDragOver\" | \"onDragOverCapture\" | \"onDragStart\" | \"onDragStartCapture\" | \"onDrop\" | \"onDropCapture\" | \"onMouseDown\" | \"onMouseDownCapture\" | \"onMouseEnter\" | \"onMouseLeave\" | \"onMouseMove\" | \"onMouseMoveCapture\" | \"onMouseOut\" | \"onMouseOutCapture\" | \"onMouseOver\" | \"onMouseOverCapture\" | \"onMouseUp\" | \"onMouseUpCapture\" | \"onSelect\" | \"onSelectCapture\" | \"onTouchCancel\" | \"onTouchCancelCapture\" | \"onTouchEnd\" | \"onTouchEndCapture\" | \"onTouchMove\" | \"onTouchMoveCapture\" | \"onTouchStart\" | \"onTouchStartCapture\" | \"onPointerDown\" | \"onPointerDownCapture\" | \"onPointerMove\" | \"onPointerMoveCapture\" | \"onPointerUp\" | \"onPointerUpCapture\" | \"onPointerCancel\" | \"onPointerCancelCapture\" | \"onPointerEnter\" | \"onPointerEnterCapture\" | \"onPointerLeave\" | \"onPointerLeaveCapture\" | \"onPointerOver\" | \"onPointerOverCapture\" | \"onPointerOut\" | \"onPointerOutCapture\" | \"onGotPointerCapture\" | \"onGotPointerCaptureCapture\" | \"onLostPointerCapture\" | \"onLostPointerCaptureCapture\" | \"onScroll\" | \"onScrollCapture\" | \"onWheel\" | \"onWheelCapture\" | \"onAnimationStart\" | \"onAnimationStartCapture\" | \"onAnimationEnd\" | \"onAnimationEndCapture\" | \"onAnimationIteration\" | \"onAnimationIterationCapture\" | \"onTransitionEnd\" | \"onTransitionEndCapture\" | \"data-test-subj\" | \"css\" | \"alerts\" | \"paddingSize\" | \"size\" | \"onClose\" | \"maxWidth\" | \"ownFocus\" | \"hideCloseButton\" | \"closeButtonProps\" | \"closeButtonPosition\" | \"maskProps\" | \"outsideClickCloses\" | \"side\" | \"pushMinBreakpoint\" | \"pushAnimation\" | \"focusTrapProps\" | \"includeFixedHeadersInFocusTrap\" | \"as\" | \"rawAlert\" | \"isInApp\" | \"observabilityRuleTypeRegistry\" | \"selectedAlertId\"> & { ref?: ((instance: HTMLDivElement | null) => void) | React.RefObject | null | undefined; }> & { readonly _result: ({ alert, rawAlert, alerts, isInApp, observabilityRuleTypeRegistry, onClose, selectedAlertId, }: AlertsFlyoutProps) => JSX.Element | null; }" ], "path": "x-pack/plugins/observability_solution/observability/public/index.ts", "deprecated": false, @@ -3270,7 +3270,7 @@ "section": "def-common.AppUpdater", "text": "AppUpdater" }, - ">; }) => void; setIsSidebarEnabled: (isEnabled: boolean) => void; }" + ">; }) => void; }" ], "path": "x-pack/plugins/observability_solution/observability/public/plugin.ts", "deprecated": false, @@ -5268,7 +5268,39 @@ "label": "client", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -5372,39 +5404,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", @@ -6589,7 +6589,39 @@ "label": "client", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -6693,39 +6725,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 0b5cb519e2e46..6e0cad4a4f387 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-03-20 +date: 2024-03-21 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 2c04500a690f1..7120489fed7de 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-03-20 +date: 2024-03-21 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 668232dc4ba4e..d272d71a8d649 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index bb9261afe03a5..c3e520af2c6d1 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-03-20 +date: 2024-03-21 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 6c86d72bb04f9..004ac3110d90f 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.devdocs.json b/api_docs/observability_shared.devdocs.json index d25c29ade63ca..bd9f27f2cd8c0 100644 --- a/api_docs/observability_shared.devdocs.json +++ b/api_docs/observability_shared.devdocs.json @@ -169,7 +169,7 @@ "section": "def-common.AppUpdater", "text": "AppUpdater" }, - ">; }) => void; setIsSidebarEnabled: (isEnabled: boolean) => void; }" + ">; }) => void; }" ], "path": "x-pack/plugins/observability_solution/observability_shared/public/plugin.ts", "deprecated": false, @@ -3366,7 +3366,7 @@ "section": "def-common.AppUpdater", "text": "AppUpdater" }, - ">; }) => void; setIsSidebarEnabled: (isEnabled: boolean) => void; }" + ">; }) => void; }" ], "path": "x-pack/plugins/observability_solution/observability_shared/public/plugin.ts", "deprecated": false, diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 3a4243ab291ee..531575854ec6d 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-03-20 +date: 2024-03-21 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 e7cb84f0fc5ef..e694c478876be 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-03-20 +date: 2024-03-21 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 d65a1f3353a02..84f9cb013317c 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-03-20 +date: 2024-03-21 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 8c5bd9816033e..31040a92ca727 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,19 +15,19 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 765 | 656 | 40 | +| 769 | 660 | 40 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 46027 | 233 | 34867 | 1782 | +| 46074 | 233 | 34880 | 1783 | ## Plugin Directory | Plugin name           | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports | |--------------|----------------|-----------|--------------|----------|---------------|--------| -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 281 | 0 | 275 | 31 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 285 | 0 | 279 | 32 | | | [@elastic/appex-sharedux @elastic/kibana-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | @@ -128,7 +128,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin provides a LogsExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. | 121 | 4 | 121 | 23 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes the shared components and APIs to access and visualize logs. | 302 | 0 | 276 | 32 | | logstash | [@elastic/logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | -| | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 45 | 0 | 45 | 7 | +| | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 43 | 0 | 43 | 7 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 264 | 0 | 263 | 28 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 60 | 0 | 60 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Exposes utilities for accessing metrics data | 104 | 8 | 104 | 6 | @@ -171,7 +171,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | ESS customizations for Security Solution. | 6 | 0 | 6 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Serverless customizations for security. | 7 | 0 | 7 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | The core Serverless plugin, providing APIs to Serverless Project plugins. | 21 | 0 | 20 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Serverless customizations for observability. | 6 | 0 | 6 | 0 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | Serverless customizations for observability. | 6 | 0 | 6 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | Serverless customizations for search. | 6 | 0 | 6 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 134 | 0 | 134 | 8 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds URL Service and sharing capabilities to Kibana | 120 | 0 | 61 | 11 | @@ -446,10 +446,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 44 | 0 | 43 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 6 | 0 | 6 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 5 | 0 | 5 | 0 | +| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 3 | 0 | 3 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 40 | 0 | 29 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 4 | 0 | 4 | 0 | +| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 5 | 0 | 5 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 8 | 0 | 8 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 8 | 0 | 8 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 8 | 0 | 8 | 0 | @@ -516,7 +519,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 23 | 0 | 7 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 8 | 0 | 2 | 3 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 45 | 0 | 0 | 0 | -| | [@elastic/appex-sharedux @elastic/kibana-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 135 | 0 | 132 | 0 | +| | [@elastic/appex-sharedux @elastic/kibana-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 136 | 0 | 133 | 0 | | | [@elastic/appex-sharedux @elastic/kibana-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 20 | 0 | 11 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 88 | 0 | 10 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 56 | 0 | 6 | 0 | @@ -545,6 +548,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 5 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 8 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 2 | 0 | 1 | 0 | +| | [@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) | - | 33 | 0 | 28 | 0 | | | [@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 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 5c02fad579dae..7826820a4ac04 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-03-20 +date: 2024-03-21 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 d7392f53d9ad1..c88d3e01830a4 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-03-20 +date: 2024-03-21 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 1b05b14ddd0aa..a846fe823db58 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-03-20 +date: 2024-03-21 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 a12259e40b3b8..f24da89daab6a 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-03-20 +date: 2024-03-21 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 733f9509f1d8b..b5f67f91e8477 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-03-20 +date: 2024-03-21 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 833af6d942c08..3636d572352e0 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-03-20 +date: 2024-03-21 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 83360b4af2cdf..a2bcabc1000c6 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-03-20 +date: 2024-03-21 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 d8581b4e2ec54..68454853720b7 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -1618,7 +1618,7 @@ "label": "resourceType", "description": [], "signature": [ - "\"index\" | \"namespace\"" + "\"namespace\" | \"index\"" ], "path": "x-pack/plugins/rule_registry/server/rule_data_plugin_service/errors.ts", "deprecated": false, diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 7d59dc4534733..4fd3f5c1dd23e 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-03-20 +date: 2024-03-21 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 e52e9c80f012e..c9d99e5a0147f 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-03-20 +date: 2024-03-21 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 4fec29c762c22..66bd811439312 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-03-20 +date: 2024-03-21 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 ed9cab69933dc..71cf35b358ffb 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.devdocs.json b/api_docs/saved_objects_management.devdocs.json index 48f11e8af68f7..0cd5725390efa 100644 --- a/api_docs/saved_objects_management.devdocs.json +++ b/api_docs/saved_objects_management.devdocs.json @@ -294,7 +294,7 @@ "label": "euiColumn", "description": [], "signature": [ - "{ prefix?: string | undefined; scope?: string | undefined; id?: string | undefined; defaultValue?: string | number | readonly string[] | undefined; name: React.ReactNode; security?: string | undefined; onChange?: React.FormEventHandler | undefined; defaultChecked?: boolean | undefined; suppressContentEditableWarning?: boolean | undefined; suppressHydrationWarning?: boolean | undefined; accessKey?: string | undefined; className?: string | undefined; contentEditable?: Booleanish | \"inherit\" | undefined; contextMenu?: string | undefined; dir?: string | undefined; draggable?: Booleanish | undefined; hidden?: boolean | undefined; lang?: string | undefined; placeholder?: string | undefined; slot?: string | undefined; spellCheck?: Booleanish | undefined; style?: React.CSSProperties | undefined; tabIndex?: number | undefined; title?: string | undefined; translate?: \"yes\" | \"no\" | undefined; radioGroup?: string | undefined; role?: React.AriaRole | undefined; about?: string | undefined; datatype?: string | undefined; inlist?: any; property?: string | undefined; resource?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: string | undefined; autoCorrect?: string | undefined; autoSave?: string | undefined; color?: string | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; unselectable?: \"on\" | \"off\" | undefined; inputMode?: \"search\" | \"none\" | \"text\" | \"url\" | \"email\" | \"tel\" | \"numeric\" | \"decimal\" | undefined; is?: string | undefined; 'aria-activedescendant'?: string | undefined; 'aria-atomic'?: Booleanish | undefined; 'aria-autocomplete'?: \"none\" | \"list\" | \"both\" | \"inline\" | undefined; 'aria-busy'?: Booleanish | undefined; 'aria-checked'?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; 'aria-colcount'?: number | undefined; 'aria-colindex'?: number | undefined; 'aria-colspan'?: number | undefined; 'aria-controls'?: string | undefined; 'aria-current'?: boolean | \"page\" | \"date\" | \"location\" | \"true\" | \"false\" | \"step\" | \"time\" | undefined; 'aria-describedby'?: string | undefined; 'aria-details'?: string | undefined; 'aria-disabled'?: Booleanish | undefined; 'aria-dropeffect'?: \"execute\" | \"link\" | \"none\" | \"copy\" | \"move\" | \"popup\" | undefined; 'aria-errormessage'?: string | undefined; 'aria-expanded'?: Booleanish | undefined; 'aria-flowto'?: string | undefined; 'aria-grabbed'?: Booleanish | undefined; 'aria-haspopup'?: boolean | \"true\" | \"false\" | \"grid\" | \"menu\" | \"dialog\" | \"listbox\" | \"tree\" | undefined; 'aria-hidden'?: Booleanish | undefined; 'aria-invalid'?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\" | undefined; 'aria-keyshortcuts'?: string | undefined; 'aria-label'?: string | undefined; 'aria-labelledby'?: string | undefined; 'aria-level'?: number | undefined; 'aria-live'?: \"off\" | \"assertive\" | \"polite\" | undefined; 'aria-modal'?: Booleanish | undefined; 'aria-multiline'?: Booleanish | undefined; 'aria-multiselectable'?: Booleanish | undefined; 'aria-orientation'?: \"horizontal\" | \"vertical\" | undefined; 'aria-owns'?: string | undefined; 'aria-placeholder'?: string | undefined; 'aria-posinset'?: number | undefined; 'aria-pressed'?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; 'aria-readonly'?: Booleanish | undefined; 'aria-relevant'?: \"text\" | \"all\" | \"additions\" | \"additions removals\" | \"additions text\" | \"removals\" | \"removals additions\" | \"removals text\" | \"text additions\" | \"text removals\" | undefined; 'aria-required'?: Booleanish | undefined; 'aria-roledescription'?: string | undefined; 'aria-rowcount'?: number | undefined; 'aria-rowindex'?: number | undefined; 'aria-rowspan'?: number | undefined; 'aria-selected'?: Booleanish | undefined; 'aria-setsize'?: number | undefined; 'aria-sort'?: \"none\" | \"other\" | \"ascending\" | \"descending\" | undefined; 'aria-valuemax'?: number | undefined; 'aria-valuemin'?: number | undefined; 'aria-valuenow'?: number | undefined; 'aria-valuetext'?: string | undefined; children?: React.ReactNode; dangerouslySetInnerHTML?: { __html: string; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onBeforeInput?: React.FormEventHandler | undefined; onBeforeInputCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onError?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onAuxClick?: React.MouseEventHandler | undefined; onAuxClickCapture?: React.MouseEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerEnterCapture?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerLeaveCapture?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; 'data-test-subj'?: string | undefined; css?: ", + "{ id?: string | undefined; prefix?: string | undefined; scope?: string | undefined; defaultValue?: string | number | readonly string[] | undefined; name: React.ReactNode; security?: string | undefined; onChange?: React.FormEventHandler | undefined; defaultChecked?: boolean | undefined; suppressContentEditableWarning?: boolean | undefined; suppressHydrationWarning?: boolean | undefined; accessKey?: string | undefined; className?: string | undefined; contentEditable?: Booleanish | \"inherit\" | undefined; contextMenu?: string | undefined; dir?: string | undefined; draggable?: Booleanish | undefined; hidden?: boolean | undefined; lang?: string | undefined; placeholder?: string | undefined; slot?: string | undefined; spellCheck?: Booleanish | undefined; style?: React.CSSProperties | undefined; tabIndex?: number | undefined; title?: string | undefined; translate?: \"yes\" | \"no\" | undefined; radioGroup?: string | undefined; role?: React.AriaRole | undefined; about?: string | undefined; datatype?: string | undefined; inlist?: any; property?: string | undefined; resource?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: string | undefined; autoCorrect?: string | undefined; autoSave?: string | undefined; color?: string | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; unselectable?: \"on\" | \"off\" | undefined; inputMode?: \"search\" | \"none\" | \"text\" | \"url\" | \"email\" | \"tel\" | \"numeric\" | \"decimal\" | undefined; is?: string | undefined; 'aria-activedescendant'?: string | undefined; 'aria-atomic'?: Booleanish | undefined; 'aria-autocomplete'?: \"none\" | \"list\" | \"both\" | \"inline\" | undefined; 'aria-busy'?: Booleanish | undefined; 'aria-checked'?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; 'aria-colcount'?: number | undefined; 'aria-colindex'?: number | undefined; 'aria-colspan'?: number | undefined; 'aria-controls'?: string | undefined; 'aria-current'?: boolean | \"page\" | \"date\" | \"location\" | \"true\" | \"false\" | \"step\" | \"time\" | undefined; 'aria-describedby'?: string | undefined; 'aria-details'?: string | undefined; 'aria-disabled'?: Booleanish | undefined; 'aria-dropeffect'?: \"execute\" | \"link\" | \"none\" | \"copy\" | \"move\" | \"popup\" | undefined; 'aria-errormessage'?: string | undefined; 'aria-expanded'?: Booleanish | undefined; 'aria-flowto'?: string | undefined; 'aria-grabbed'?: Booleanish | undefined; 'aria-haspopup'?: boolean | \"true\" | \"false\" | \"grid\" | \"menu\" | \"dialog\" | \"listbox\" | \"tree\" | undefined; 'aria-hidden'?: Booleanish | undefined; 'aria-invalid'?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\" | undefined; 'aria-keyshortcuts'?: string | undefined; 'aria-label'?: string | undefined; 'aria-labelledby'?: string | undefined; 'aria-level'?: number | undefined; 'aria-live'?: \"off\" | \"assertive\" | \"polite\" | undefined; 'aria-modal'?: Booleanish | undefined; 'aria-multiline'?: Booleanish | undefined; 'aria-multiselectable'?: Booleanish | undefined; 'aria-orientation'?: \"horizontal\" | \"vertical\" | undefined; 'aria-owns'?: string | undefined; 'aria-placeholder'?: string | undefined; 'aria-posinset'?: number | undefined; 'aria-pressed'?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; 'aria-readonly'?: Booleanish | undefined; 'aria-relevant'?: \"text\" | \"all\" | \"additions\" | \"additions removals\" | \"additions text\" | \"removals\" | \"removals additions\" | \"removals text\" | \"text additions\" | \"text removals\" | undefined; 'aria-required'?: Booleanish | undefined; 'aria-roledescription'?: string | undefined; 'aria-rowcount'?: number | undefined; 'aria-rowindex'?: number | undefined; 'aria-rowspan'?: number | undefined; 'aria-selected'?: Booleanish | undefined; 'aria-setsize'?: number | undefined; 'aria-sort'?: \"none\" | \"other\" | \"ascending\" | \"descending\" | undefined; 'aria-valuemax'?: number | undefined; 'aria-valuemin'?: number | undefined; 'aria-valuenow'?: number | undefined; 'aria-valuetext'?: string | undefined; children?: React.ReactNode; dangerouslySetInnerHTML?: { __html: string; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onBeforeInput?: React.FormEventHandler | undefined; onBeforeInputCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onError?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onAuxClick?: React.MouseEventHandler | undefined; onAuxClickCapture?: React.MouseEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerEnterCapture?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerLeaveCapture?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; 'data-test-subj'?: string | undefined; css?: ", "Interpolation", "<", "Theme", @@ -679,7 +679,7 @@ "label": "obj", "description": [], "signature": [ - "{ type: string; id: string; meta: { title?: string | undefined; icon?: string | undefined; }; managed?: boolean | undefined; overwrite?: boolean | undefined; }" + "{ id: string; type: string; meta: { title?: string | undefined; icon?: string | undefined; }; managed?: boolean | undefined; overwrite?: boolean | undefined; }" ], "path": "src/plugins/saved_objects_management/public/lib/process_import_response.ts", "deprecated": false, diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index 098a7509178b4..003d6f44ea745 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-03-20 +date: 2024-03-21 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 028fc14250805..235ca26f8ad48 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-03-20 +date: 2024-03-21 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 2ad6d6d4abe88..522860dd6d3b3 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-03-20 +date: 2024-03-21 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 2e44db0998ca0..81ea45ec325d5 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-03-20 +date: 2024-03-21 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 852d7c95d5191..4f011aee0b7bc 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-03-20 +date: 2024-03-21 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 f654e0c75eb84..9c88a6e0ad5b6 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index e24fa469c794a..3d2e3d0a86415 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index 406683af7fc70..ae23e6568aaab 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -473,7 +473,7 @@ "label": "data", "description": [], "signature": [ - "({ type: \"eql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"eql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; data_view_id?: string | undefined; filters?: unknown[] | undefined; event_category_override?: string | undefined; tiebreaker_field?: string | undefined; timestamp_field?: string | undefined; } | { type: \"query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"saved_query\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; saved_id: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; query?: string | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { type: \"threshold\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threshold: { value: number; field: (string | string[]) & (string | string[] | undefined); cardinality?: { value: number; field: string; }[] | undefined; }; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { duration: { value: number; unit: \"m\" | \"h\" | \"s\"; }; } | undefined; } | { type: \"threat_match\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threat_query: string; threat_mapping: { entries: { type: \"mapping\"; value: string; field: string; }[]; }[]; threat_index: string[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; threat_filters?: unknown[] | undefined; threat_indicator_path?: string | undefined; threat_language?: \"lucene\" | \"kuery\" | undefined; concurrent_searches?: number | undefined; items_per_search?: number | undefined; } | { type: \"machine_learning\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; anomaly_threshold: number; machine_learning_job_id: (string | string[]) & (string | string[] | undefined); license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; } | { type: \"new_terms\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; new_terms_fields: string[]; history_window_start: string; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; } | { type: \"esql\"; id: string; name: string; actions: { id: string; params: {} & { [k: string]: unknown; }; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"esql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; id: string; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; namespace?: string | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; })[]" + "({ id: string; type: \"eql\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"eql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; data_view_id?: string | undefined; filters?: unknown[] | undefined; event_category_override?: string | undefined; tiebreaker_field?: string | undefined; timestamp_field?: string | undefined; } | { id: string; type: \"query\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { id: string; type: \"saved_query\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; saved_id: string; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; query?: string | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; response_actions?: ({ params: { query?: string | undefined; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; queries?: { id: string; query: string; ecs_mapping?: Zod.objectOutputType<{}, Zod.ZodObject<{ field: Zod.ZodOptional; value: Zod.ZodOptional]>>; }, \"strip\", Zod.ZodTypeAny, { field?: string | undefined; value?: string | string[] | undefined; }, { field?: string | undefined; value?: string | string[] | undefined; }>, \"strip\"> | undefined; version?: string | undefined; platform?: string | undefined; removed?: boolean | undefined; snapshot?: boolean | undefined; }[] | undefined; pack_id?: string | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; }; action_type_id: \".osquery\"; } | { params: { command: \"isolate\"; comment?: string | undefined; } | { config: { field: string; overwrite: boolean; }; command: \"kill-process\" | \"suspend-process\"; comment?: string | undefined; }; action_type_id: \".endpoint\"; })[] | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; } | { id: string; type: \"threshold\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threshold: { value: number; field: (string | string[]) & (string | string[] | undefined); cardinality?: { value: number; field: string; }[] | undefined; }; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { duration: { value: number; unit: \"m\" | \"h\" | \"s\"; }; } | undefined; } | { id: string; type: \"threat_match\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; threat_query: string; threat_mapping: { entries: { type: \"mapping\"; value: string; field: string; }[]; }[]; threat_index: string[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; saved_id?: string | undefined; alert_suppression?: { group_by: string[]; duration?: { value: number; unit: \"m\" | \"h\" | \"s\"; } | undefined; missing_fields_strategy?: \"doNotSuppress\" | \"suppress\" | undefined; } | undefined; threat_filters?: unknown[] | undefined; threat_indicator_path?: string | undefined; threat_language?: \"lucene\" | \"kuery\" | undefined; concurrent_searches?: number | undefined; items_per_search?: number | undefined; } | { id: string; type: \"machine_learning\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; anomaly_threshold: number; machine_learning_job_id: (string | string[]) & (string | string[] | undefined); namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; } | { id: string; type: \"new_terms\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"kuery\" | \"lucene\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; new_terms_fields: string[]; history_window_start: string; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; index?: string[] | undefined; filters?: unknown[] | undefined; data_view_id?: string | undefined; } | { id: string; type: \"esql\"; name: string; actions: { params: {} & { [k: string]: unknown; }; id: string; group: string; action_type_id: string; uuid?: string | undefined; alerts_filter?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; frequency?: { throttle: string | null; notifyWhen: \"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"; summary: boolean; } | undefined; }[]; tags: string[]; setup: string; enabled: boolean; revision: number; query: string; version: number; references: string[]; interval: string; description: string; risk_score: number; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; from: string; to: string; language: \"esql\"; created_at: string; created_by: string; updated_at: string; updated_by: string; author: string[]; immutable: boolean; rule_id: string; threat: { framework: string; tactic: { id: string; name: string; reference: string; }; technique?: { id: string; name: string; reference: string; subtechnique?: { id: string; name: string; reference: string; }[] | undefined; }[] | undefined; }[]; risk_score_mapping: { value: string; field: string; operator: \"equals\"; risk_score?: number | undefined; }[]; severity_mapping: { value: string; field: string; severity: \"medium\" | \"high\" | \"low\" | \"critical\"; operator: \"equals\"; }[]; exceptions_list: { id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; list_id: string; namespace_type: \"single\" | \"agnostic\"; }[]; false_positives: string[]; max_signals: number; related_integrations: { version: string; package: string; integration?: string | undefined; }[]; required_fields: { type: string; name: string; ecs: boolean; }[]; namespace?: string | undefined; license?: string | undefined; throttle?: string | undefined; outcome?: \"exactMatch\" | \"aliasMatch\" | \"conflict\" | undefined; alias_target_id?: string | undefined; alias_purpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; meta?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; note?: string | undefined; rule_name_override?: string | undefined; timestamp_override?: string | undefined; timestamp_override_fallback_disabled?: boolean | undefined; timeline_id?: string | undefined; timeline_title?: string | undefined; building_block_type?: string | undefined; output_index?: string | undefined; investigation_fields?: { field_names: string[]; } | undefined; execution_summary?: { last_execution: { message: string; date: string; status: \"running\" | \"succeeded\" | \"failed\" | \"going to run\" | \"partial failure\"; metrics: { total_search_duration_ms?: number | undefined; total_indexing_duration_ms?: number | undefined; total_enrichment_duration_ms?: number | undefined; execution_gap_duration_s?: number | undefined; }; status_order: number; }; } | undefined; })[]" ], "path": "x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/types.ts", "deprecated": false, @@ -530,9 +530,9 @@ }, "<", { - "pluginId": "@kbn/security-solution-navigation", + "pluginId": "@kbn/deeplinks-security", "scope": "common", - "docId": "kibKbnSecuritySolutionNavigationPluginApi", + "docId": "kibKbnDeeplinksSecurityPluginApi", "section": "def-common.SecurityPageName", "text": "SecurityPageName" }, @@ -665,9 +665,9 @@ ], "signature": [ { - "pluginId": "@kbn/security-solution-navigation", + "pluginId": "@kbn/deeplinks-security", "scope": "common", - "docId": "kibKbnSecuritySolutionNavigationPluginApi", + "docId": "kibKbnDeeplinksSecurityPluginApi", "section": "def-common.SecurityPageName", "text": "SecurityPageName" } @@ -3048,7 +3048,7 @@ "label": "ConfigType", "description": [], "signature": [ - "Omit; }>, \"offeringSettings\"> & { experimentalFeatures: ", + "Omit; entityAnalytics: Readonly<{} & { riskEngine: Readonly<{} & { alertSampleSizePerShard: number; }>; }>; }>, \"offeringSettings\"> & { experimentalFeatures: ", { "pluginId": "securitySolution", "scope": "common", @@ -3160,7 +3160,7 @@ "tags": [], "label": "SecurityPageName", "description": [], - "path": "x-pack/packages/security-solution/navigation/src/constants.ts", + "path": "packages/deeplinks/security/deep_links.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index a105406e962b2..fff0cedc355af 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-03-20 +date: 2024-03-21 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 4a1d47c74c233..a1f2c73792ec8 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-03-20 +date: 2024-03-21 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 5340de4ec918f..0ba4d9aa14854 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-03-20 +date: 2024-03-21 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 fc2378c31b227..869d34b47d681 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-03-20 +date: 2024-03-21 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 268a294a380da..206c983ed7180 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,14 +8,14 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; Serverless customizations for observability. -Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin. +Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) for questions regarding this plugin. **Code health stats** diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index 1cd02d2a30cf8..6b59b15442c7c 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-03-20 +date: 2024-03-21 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 548321803df03..b02270033922a 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-03-20 +date: 2024-03-21 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 80e4e9d4c2fc5..985625f2bdd88 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.devdocs.json b/api_docs/slo.devdocs.json index 43902c29710e5..01fb1f6b0ef0c 100644 --- a/api_docs/slo.devdocs.json +++ b/api_docs/slo.devdocs.json @@ -614,7 +614,7 @@ "section": "def-common.AppUpdater", "text": "AppUpdater" }, - ">; }) => void; setIsSidebarEnabled: (isEnabled: boolean) => void; }" + ">; }) => void; }" ], "path": "x-pack/plugins/observability_solution/slo/public/types.ts", "deprecated": false, diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index ca2321e340fc9..2c4483f6a7488 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-03-20 +date: 2024-03-21 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 d808c363c6c31..b756f82471d9e 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-03-20 +date: 2024-03-21 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 04eb541582282..7ff112e50c2a6 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-03-20 +date: 2024-03-21 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 e92266f1e95fc..71cb375481d43 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-03-20 +date: 2024-03-21 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 4f2a81145d7e7..8cb02f0759731 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.devdocs.json b/api_docs/task_manager.devdocs.json index ae929b293a877..3f0ab69f039d1 100644 --- a/api_docs/task_manager.devdocs.json +++ b/api_docs/task_manager.devdocs.json @@ -1599,7 +1599,7 @@ "\nA task instance that has an id and is ready for storage." ], "signature": [ - "{ scope?: string[] | undefined; params: Record; enabled?: boolean | undefined; state: Record; taskType: string; }" + "{ params: Record; scope?: string[] | undefined; enabled?: boolean | undefined; state: Record; taskType: string; }" ], "path": "x-pack/plugins/task_manager/server/task.ts", "deprecated": false, diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index b5f8d0e1b317d..bb6757666dee0 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-03-20 +date: 2024-03-21 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 da053778f1eec..499b304cd6bf4 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.devdocs.json b/api_docs/telemetry_collection_manager.devdocs.json index d1d6226efa8b4..7588db1dddbed 100644 --- a/api_docs/telemetry_collection_manager.devdocs.json +++ b/api_docs/telemetry_collection_manager.devdocs.json @@ -76,7 +76,39 @@ "label": "esClient", "description": [], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -180,39 +212,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 798545f6b5ded..e27abecae0944 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-03-20 +date: 2024-03-21 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 34b07a3ba0459..73142f03e3a64 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-03-20 +date: 2024-03-21 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 f82524013e2a8..519b1e6f9d98c 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index 2d99821808c95..096c2c36b5250 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2024-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 1f8cba734d4ca..ee29b53c2a36d 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.devdocs.json b/api_docs/timelines.devdocs.json index 777d82baf9274..ed69cb01d25f9 100644 --- a/api_docs/timelines.devdocs.json +++ b/api_docs/timelines.devdocs.json @@ -4419,9 +4419,9 @@ "label": "DataProvidersAnd", "description": [], "signature": [ - "{ type?: ", + "{ id: string; type?: ", "DataProviderType", - " | undefined; id: string; name: string; enabled: boolean; excluded: boolean; kqlQuery: string; queryMatch: ", + " | undefined; name: string; enabled: boolean; excluded: boolean; kqlQuery: string; queryMatch: ", { "pluginId": "timelines", "scope": "common", @@ -4709,7 +4709,7 @@ "section": "def-common.Direction", "text": "Direction" }, - "; esTypes?: string[] | undefined; type?: string | undefined; }[]; language: \"eql\"; fieldRequested: string[]; id?: string | undefined; params?: any; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; runtimeMappings?: Record; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; must: {}[]; must_not: {}[]; should: {}[]; }; } | undefined; eventCategoryField?: string | undefined; tiebreakerField?: string | undefined; timestampField?: string | undefined; size?: number | undefined; runTimeMappings?: Record; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; }" + "; esTypes?: string[] | undefined; type?: string | undefined; }[]; language: \"eql\"; fieldRequested: string[]; params?: any; id?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; must: {}[]; must_not: {}[]; should: {}[]; }; } | undefined; eventCategoryField?: string | undefined; tiebreakerField?: string | undefined; timestampField?: string | undefined; size?: number | undefined; runTimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; }" ], "path": "x-pack/plugins/timelines/common/api/search_strategy/timeline/eql.ts", "deprecated": false, @@ -4740,7 +4740,7 @@ "section": "def-common.TimelineEventsQueries", "text": "TimelineEventsQueries" }, - ".all; id?: string | undefined; params?: any; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; authFilter?: {} | undefined; excludeEcsData?: boolean | undefined; filterQuery?: any; runtimeMappings?: Record; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; }" + ".all; params?: any; id?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; authFilter?: {} | undefined; excludeEcsData?: boolean | undefined; filterQuery?: any; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; }" ], "path": "x-pack/plugins/timelines/common/api/search_strategy/timeline/events_all.ts", "deprecated": false, @@ -4763,7 +4763,7 @@ "section": "def-common.TimelineEventsQueries", "text": "TimelineEventsQueries" }, - ".details; eventId: string; id?: string | undefined; params?: any; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; must: {}[]; must_not: {}[]; should: {}[]; }; } | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; authFilter?: {} | undefined; runtimeMappings?: Record; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; }" + ".details; eventId: string; params?: any; id?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; must: {}[]; must_not: {}[]; should: {}[]; }; } | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; authFilter?: {} | undefined; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; }" ], "path": "x-pack/plugins/timelines/common/api/search_strategy/timeline/events_details.ts", "deprecated": false, @@ -4794,7 +4794,7 @@ "section": "def-common.LastEventIndexKey", "text": "LastEventIndexKey" }, - "; id?: string | undefined; params?: any; defaultIndex?: string[] | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; }" + "; params?: any; id?: string | undefined; defaultIndex?: string[] | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; }" ], "path": "x-pack/plugins/timelines/common/api/search_strategy/timeline/events_last_event_time.ts", "deprecated": false, @@ -4817,7 +4817,7 @@ "section": "def-common.TimelineEventsQueries", "text": "TimelineEventsQueries" }, - ".kpi; id?: string | undefined; params?: any; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; runtimeMappings?: Record; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; must: {}[]; must_not: {}[]; should: {}[]; }; } | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; }" + ".kpi; params?: any; id?: string | undefined; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; runtimeMappings?: Record; id: string; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; must: {}[]; must_not: {}[]; should: {}[]; }; } | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; }" ], "path": "x-pack/plugins/timelines/common/api/search_strategy/timeline/kpi.ts", "deprecated": false, diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 78c08d0f2ade5..ae9c305509ac1 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-03-20 +date: 2024-03-21 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 11eb25460e1e4..4084d6e9d97dd 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index eefe731b4c643..83178c607f57c 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -5171,7 +5171,7 @@ "label": "setRuleProperty", "description": [], "signature": [ - "(key: Prop, value: ", + "(key: Prop, value: ", "SanitizedRule", "[Prop] | null) => void" ], diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index be48b53b37c26..0d2f86fc6ea09 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-03-20 +date: 2024-03-21 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 14e02afe06df3..d0e8f4a6d2331 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-03-20 +date: 2024-03-21 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 dbb32cc2aadc5..617c197c42546 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-03-20 +date: 2024-03-21 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 e4460f548dda2..98e50458ea8d7 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-03-20 +date: 2024-03-21 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 b417866096a5a..713840792f65c 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-03-20 +date: 2024-03-21 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 024e6125b2ba3..be78c81029218 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-03-20 +date: 2024-03-21 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 23aa9ac0e75f7..e4aaa0b7bcd82 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-03-20 +date: 2024-03-21 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 1e0da59417abf..859b3a9bf33e4 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-03-20 +date: 2024-03-21 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 1b59fc6a1c88a..45dad5a75a0e7 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.devdocs.json b/api_docs/usage_collection.devdocs.json index 8ba7db04d6e21..a5eff23dc7dbd 100644 --- a/api_docs/usage_collection.devdocs.json +++ b/api_docs/usage_collection.devdocs.json @@ -345,7 +345,39 @@ "\nRequest-scoped Elasticsearch client" ], "signature": [ - "{ create: { (this: That, params: ", + "{ search: { >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithOutMeta", + " | undefined): Promise<", + "SearchResponse", + ">; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptionsWithMeta", + " | undefined): Promise<", + "TransportResult", + "<", + "SearchResponse", + ", unknown>>; >(this: That, params?: ", + "SearchRequest", + " | ", + "SearchRequest", + " | undefined, options?: ", + "TransportRequestOptions", + " | undefined): Promise<", + "SearchResponse", + ">; }; create: { (this: That, params: ", "CreateRequest", " | ", "CreateRequest", @@ -449,39 +481,7 @@ "TransportRequestOptions", " | undefined): Promise<", "WriteResponseBase", - ">; }; search: { >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithOutMeta", - " | undefined): Promise<", - "SearchResponse", - ">; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptionsWithMeta", - " | undefined): Promise<", - "TransportResult", - "<", - "SearchResponse", - ", unknown>>; >(this: That, params?: ", - "SearchRequest", - " | ", - "SearchRequest", - " | undefined, options?: ", - "TransportRequestOptions", - " | undefined): Promise<", - "SearchResponse", - ">; }; helpers: ", + ">; }; helpers: ", "default", "; name: string | symbol; [kAsyncSearch]: symbol | null; [kAutoscaling]: symbol | null; [kCat]: symbol | null; [kCcr]: symbol | null; [kCluster]: symbol | null; [kDanglingIndices]: symbol | null; [kEnrich]: symbol | null; [kEql]: symbol | null; [kEsql]: symbol | null; [kFeatures]: symbol | null; [kFleet]: symbol | null; [kGraph]: symbol | null; [kIlm]: symbol | null; [kIndices]: symbol | null; [kInference]: symbol | null; [kIngest]: symbol | null; [kLicense]: symbol | null; [kLogstash]: symbol | null; [kMigration]: symbol | null; [kMl]: symbol | null; [kMonitoring]: symbol | null; [kNodes]: symbol | null; [kQueryRuleset]: symbol | null; [kRollup]: symbol | null; [kSearchApplication]: symbol | null; [kSearchableSnapshots]: symbol | null; [kSecurity]: symbol | null; [kShutdown]: symbol | null; [kSlm]: symbol | null; [kSnapshot]: symbol | null; [kSql]: symbol | null; [kSsl]: symbol | null; [kSynonyms]: symbol | null; [kTasks]: symbol | null; [kTextStructure]: symbol | null; [kTransform]: symbol | null; [kWatcher]: symbol | null; [kXpack]: symbol | null; transport: ", "default", diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 1e1a8390b85a0..8f48338d9c3be 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-03-20 +date: 2024-03-21 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 ea018cc864478..c52f4e9dec81b 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-03-20 +date: 2024-03-21 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 4eeab72a4e857..842351ac25341 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-03-20 +date: 2024-03-21 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 9adbbeea80d45..f2c9224399e3d 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-03-20 +date: 2024-03-21 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 271dea8206295..a7543bc654c53 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-03-20 +date: 2024-03-21 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 86fb54a329114..d8f03b8e67f2b 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-03-20 +date: 2024-03-21 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 f3a9f7c687ad0..3cf667a9002d1 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-03-20 +date: 2024-03-21 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 5163d494e5f8a..60868c9feb969 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-03-20 +date: 2024-03-21 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 4f73fd8f20f6f..becca3a64a32f 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-03-20 +date: 2024-03-21 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 cc64d4e78b68c..c679fbff1e36f 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-03-20 +date: 2024-03-21 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 46d7fe8f84040..612f808a31a43 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-03-20 +date: 2024-03-21 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 421c4c1f1ccd9..3439df45e1560 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.devdocs.json b/api_docs/visualizations.devdocs.json index 2b67d66c94d6a..688df4be3afba 100644 --- a/api_docs/visualizations.devdocs.json +++ b/api_docs/visualizations.devdocs.json @@ -6760,7 +6760,7 @@ "label": "VisualizeEmbeddableContract", "description": [], "signature": [ - "{ readonly type: \"visualization\"; readonly id: string; uuid: string; dataViews: ", + "{ readonly id: string; readonly type: \"visualization\"; uuid: string; dataViews: ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", @@ -7261,7 +7261,7 @@ "label": "VisualizeEmbeddableFactoryContract", "description": [], "signature": [ - "{ create: (input: ", + "{ readonly type: \"visualization\"; create: (input: ", { "pluginId": "visualizations", "scope": "public", @@ -7325,7 +7325,7 @@ "section": "def-public.VisualizeEmbeddable", "text": "VisualizeEmbeddable" }, - " | undefined>; readonly type: \"visualization\"; inject: (_state: ", + " | undefined>; inject: (_state: ", { "pluginId": "embeddable", "scope": "common", diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index bb1c4cd2a60d8..86702122dfa4b 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-03-20 +date: 2024-03-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From ad272c2acf90598c12873d9cd731c793951f9dd2 Mon Sep 17 00:00:00 2001 From: Marco Liberati Date: Thu, 21 Mar 2024 10:19:57 +0100 Subject: [PATCH 14/90] [ES|QL] Fix wilcard complex scenarios (#178938) ## Summary Improves the wildcard validation logic to handle multiple occurrencies of wildcards. ### 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 --- .../src/esql/lib/ast/shared/helpers.ts | 21 ++++++- .../esql_validation_meta_tests.json | 56 +++++++++++++++++++ .../lib/ast/validation/validation.test.ts | 14 +++++ 3 files changed, 89 insertions(+), 2 deletions(-) diff --git a/packages/kbn-monaco/src/esql/lib/ast/shared/helpers.ts b/packages/kbn-monaco/src/esql/lib/ast/shared/helpers.ts index 93826be54bf5b..8fea0aa83ec9e 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/shared/helpers.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/shared/helpers.ts @@ -398,7 +398,7 @@ function fuzzySearch(fuzzyName: string, resources: IterableIterator) { } } -function getMatcher(name: string, position: 'start' | 'end' | 'middle') { +function getMatcher(name: string, position: 'start' | 'end' | 'middle' | 'multiple-within') { if (position === 'start') { const prefix = name.substring(1); return (resource: string) => resource.endsWith(prefix); @@ -407,6 +407,19 @@ function getMatcher(name: string, position: 'start' | 'end' | 'middle') { const prefix = name.substring(0, name.length - 1); return (resource: string) => resource.startsWith(prefix); } + if (position === 'multiple-within') { + // make sure to remove the * at the beginning of the name if present + const safeName = name.startsWith('*') ? name.slice(1) : name; + // replace 2 ore more consecutive wildcards with a single one + const setOfChars = safeName.replace(/\*{2+}/g, '*').split('*'); + return (resource: string) => { + let index = -1; + return setOfChars.every((char) => { + index = resource.indexOf(char, index + 1); + return index !== -1; + }); + }; + } const [prefix, postFix] = name.split('*'); return (resource: string) => resource.startsWith(prefix) && resource.endsWith(postFix); } @@ -415,6 +428,10 @@ function getWildcardPosition(name: string) { if (!hasWildcard(name)) { return 'none'; } + const wildCardCount = name.match(/\*/g)!.length; + if (wildCardCount > 1) { + return 'multiple-within'; + } if (name.startsWith('*')) { return 'start'; } @@ -425,7 +442,7 @@ function getWildcardPosition(name: string) { } export function hasWildcard(name: string) { - return name.includes('*'); + return /\*/.test(name); } export function isVariable( column: ESQLRealField | ESQLVariable | undefined diff --git a/packages/kbn-monaco/src/esql/lib/ast/validation/esql_validation_meta_tests.json b/packages/kbn-monaco/src/esql/lib/ast/validation/esql_validation_meta_tests.json index 646d13ea589fc..4da93337bacfc 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/validation/esql_validation_meta_tests.json +++ b/packages/kbn-monaco/src/esql/lib/ast/validation/esql_validation_meta_tests.json @@ -250,10 +250,54 @@ "query": "from index*", "error": false }, + { + "query": "from *a_i*dex*", + "error": false + }, + { + "query": "from in*ex*", + "error": false + }, + { + "query": "from *n*ex", + "error": false + }, + { + "query": "from *n*ex*", + "error": false + }, + { + "query": "from i*d*x*", + "error": false + }, + { + "query": "from i*d*x", + "error": false + }, + { + "query": "from i***x*", + "error": false + }, + { + "query": "from i****", + "error": false + }, + { + "query": "from i**", + "error": false + }, + { + "query": "from index**", + "error": false + }, { "query": "from *ex", "error": false }, + { + "query": "from *ex*", + "error": false + }, { "query": "from in*ex", "error": false @@ -2438,6 +2482,18 @@ "query": "from index | drop s*", "error": false }, + { + "query": "from index | drop s**Field", + "error": false + }, + { + "query": "from index | drop *Field*", + "error": false + }, + { + "query": "from index | drop s*F*d", + "error": false + }, { "query": "from index | drop *Field", "error": false diff --git a/packages/kbn-monaco/src/esql/lib/ast/validation/validation.test.ts b/packages/kbn-monaco/src/esql/lib/ast/validation/validation.test.ts index d27dbcdb6c582..937d9a27e4707 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/validation/validation.test.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/validation/validation.test.ts @@ -428,7 +428,18 @@ describe('validation logic', () => { ]); testErrorsAndWarnings(`from ind*, other*`, []); testErrorsAndWarnings(`from index*`, []); + testErrorsAndWarnings(`from *a_i*dex*`, []); + testErrorsAndWarnings(`from in*ex*`, []); + testErrorsAndWarnings(`from *n*ex`, []); + testErrorsAndWarnings(`from *n*ex*`, []); + testErrorsAndWarnings(`from i*d*x*`, []); + testErrorsAndWarnings(`from i*d*x`, []); + testErrorsAndWarnings(`from i***x*`, []); + testErrorsAndWarnings(`from i****`, []); + testErrorsAndWarnings(`from i**`, []); + testErrorsAndWarnings(`from index**`, []); testErrorsAndWarnings(`from *ex`, []); + testErrorsAndWarnings(`from *ex*`, []); testErrorsAndWarnings(`from in*ex`, []); testErrorsAndWarnings(`from ind*ex`, []); testErrorsAndWarnings(`from indexes*`, ['Unknown index [indexes*]']); @@ -768,6 +779,9 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from index | drop `any#Char$Field`', []); testErrorsAndWarnings('from index | drop s*', []); + testErrorsAndWarnings('from index | drop s**Field', []); + testErrorsAndWarnings('from index | drop *Field*', []); + testErrorsAndWarnings('from index | drop s*F*d', []); testErrorsAndWarnings('from index | drop *Field', []); testErrorsAndWarnings('from index | drop s*Field', []); testErrorsAndWarnings('from index | drop string*Field', []); From 7e05751dbb14f1fa4a12b526bb04a5f5868bb0f6 Mon Sep 17 00:00:00 2001 From: Peter Pisljar Date: Thu, 21 Mar 2024 12:10:00 +0100 Subject: [PATCH 15/90] remove description (#179125) removes unnecessary description --- .../server/functions/get_dataset_info.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/get_dataset_info.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/get_dataset_info.ts index de3ada6d5f029..e810b669d73f4 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/get_dataset_info.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/get_dataset_info.ts @@ -99,7 +99,6 @@ export function registerGetDatasetInfoFunction({ return (field.esTypes ?? [field.type]).map((type) => { return { name: field.name, - description: field.customLabel || '', type, }; }); From 9a37b4292b338e42b1cc37d4d8aa5da87b876eae Mon Sep 17 00:00:00 2001 From: Peter Pisljar Date: Thu, 21 Mar 2024 14:09:13 +0100 Subject: [PATCH 16/90] fixing metric max value configuration (#179129) --- .../config_builder/charts/metric.test.ts | 6 ++++++ .../config_builder/charts/metric.ts | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/kbn-lens-embeddable-utils/config_builder/charts/metric.test.ts b/packages/kbn-lens-embeddable-utils/config_builder/charts/metric.test.ts index d549f5bfa1f1b..052c89a0c56c7 100644 --- a/packages/kbn-lens-embeddable-utils/config_builder/charts/metric.test.ts +++ b/packages/kbn-lens-embeddable-utils/config_builder/charts/metric.test.ts @@ -90,12 +90,18 @@ test('generates metric chart config', async () => { Object { "columnId": "metric_formula_accessor", "fieldName": "count", + "meta": Object { + "type": "number", + }, }, ], "columns": Array [ Object { "columnId": "metric_formula_accessor", "fieldName": "count", + "meta": Object { + "type": "number", + }, }, ], "index": "test", diff --git a/packages/kbn-lens-embeddable-utils/config_builder/charts/metric.ts b/packages/kbn-lens-embeddable-utils/config_builder/charts/metric.ts index 632f96557a27e..66bc26238fb6e 100644 --- a/packages/kbn-lens-embeddable-utils/config_builder/charts/metric.ts +++ b/packages/kbn-lens-embeddable-utils/config_builder/charts/metric.ts @@ -196,8 +196,10 @@ function getValueColumns(layer: LensMetricConfig) { ...(layer.breakdown ? [getValueColumn(getAccessorName('breakdown'), layer.breakdown as string)] : []), - getValueColumn(ACCESSOR, layer.value), - ...(layer.queryMaxValue ? [getValueColumn(getAccessorName('max'), layer.queryMaxValue)] : []), + getValueColumn(ACCESSOR, layer.value, 'number'), + ...(layer.queryMaxValue + ? [getValueColumn(getAccessorName('max'), layer.queryMaxValue, 'number')] + : []), ...(layer.querySecondaryMetric ? [getValueColumn(getAccessorName('secondary'), layer.querySecondaryMetric)] : []), From 3baacf48d79adb19fdcdb02a4913a93419b1f6db Mon Sep 17 00:00:00 2001 From: Ignacio Rivas Date: Thu, 21 Mar 2024 14:10:42 +0100 Subject: [PATCH 17/90] [Remote Clusters] Remove beta badge (#179124) --- .../remote_cluster_setup_trust.tsx | 5 ----- 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 - 4 files changed, 8 deletions(-) diff --git a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_setup_trust/remote_cluster_setup_trust.tsx b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_setup_trust/remote_cluster_setup_trust.tsx index b1531425f1bca..399e49fc8fc3f 100644 --- a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_setup_trust/remote_cluster_setup_trust.tsx +++ b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_setup_trust/remote_cluster_setup_trust.tsx @@ -29,10 +29,6 @@ const i18nTexts = { 'xpack.remoteClusters.clusterWizard.trustStep.setupWithApiKeys.title', { defaultMessage: 'API keys' } ), - apiKeyBadge: i18n.translate( - 'xpack.remoteClusters.clusterWizard.trustStep.setupWithApiKeys.badge', - { defaultMessage: 'BETA' } - ), apiKeyDescription: i18n.translate( 'xpack.remoteClusters.clusterWizard.trustStep.setupWithApiKeys.description', { @@ -90,7 +86,6 @@ export const RemoteClusterSetupTrust = ({ onBack, onSubmit, isSaving }: Props) = diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 7e2ae0bbb2f0e..149343d7a5f53 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -29474,7 +29474,6 @@ "xpack.remoteClusters.clusterWizard.trustStep.modal.checkbox": "Oui, j'ai mis en place un système de confiance", "xpack.remoteClusters.clusterWizard.trustStep.modal.createCluster": "Ajouter un cluster distant", "xpack.remoteClusters.clusterWizard.trustStep.modal.title": "Confirmer votre configuration", - "xpack.remoteClusters.clusterWizard.trustStep.setupWithApiKeys.badge": "BÊTA", "xpack.remoteClusters.clusterWizard.trustStep.setupWithApiKeys.description": "Accès fin aux index distants. Il vous faut une clé d'API fournie par l'administrateur du cluster distant.", "xpack.remoteClusters.clusterWizard.trustStep.setupWithApiKeys.title": "Clés d'API", "xpack.remoteClusters.clusterWizard.trustStep.setupWithCert.description": "Accès complet au cluster distant. Il vous faut les certificats TLS du cluster distant.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 33e08dff4038d..1a877ac0dd0bb 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -29475,7 +29475,6 @@ "xpack.remoteClusters.clusterWizard.trustStep.modal.checkbox": "はい。信頼を設定しました", "xpack.remoteClusters.clusterWizard.trustStep.modal.createCluster": "リモートクラスターを追加", "xpack.remoteClusters.clusterWizard.trustStep.modal.title": "構成を確認", - "xpack.remoteClusters.clusterWizard.trustStep.setupWithApiKeys.badge": "BETA", "xpack.remoteClusters.clusterWizard.trustStep.setupWithApiKeys.description": "リモートインデックスへのきめ細かいアクセス。リモートクラスター管理者が提供するAPIキーが必要です。", "xpack.remoteClusters.clusterWizard.trustStep.setupWithApiKeys.title": "APIキー", "xpack.remoteClusters.clusterWizard.trustStep.setupWithCert.description": "リモートクラスターへのフルアクセスリモートクラスターのTLS証明書が必要です。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index e7156c39c9dc6..7103f7dbe458f 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -29459,7 +29459,6 @@ "xpack.remoteClusters.clusterWizard.trustStep.modal.checkbox": "是,我已建立信任", "xpack.remoteClusters.clusterWizard.trustStep.modal.createCluster": "添加远程集群", "xpack.remoteClusters.clusterWizard.trustStep.modal.title": "确认您的配置", - "xpack.remoteClusters.clusterWizard.trustStep.setupWithApiKeys.badge": "公测版", "xpack.remoteClusters.clusterWizard.trustStep.setupWithApiKeys.description": "远程索引的细粒度访问权限。您需要由远程集群管理员提供的 API 密钥。", "xpack.remoteClusters.clusterWizard.trustStep.setupWithApiKeys.title": "API 密钥", "xpack.remoteClusters.clusterWizard.trustStep.setupWithCert.description": "远程集群的完全访问权限。您需要来自远程集群的 TLS 证书。", From 095c0593c52da57a98b5b971efcd4c86b6679302 Mon Sep 17 00:00:00 2001 From: Marta Bondyra <4283304+mbondyra@users.noreply.github.com> Date: Thu, 21 Mar 2024 14:30:14 +0100 Subject: [PATCH 18/90] [kbn-dnd-package] Divide draggable and droppable (#177282) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Refactors a `` component to `` and ``. 1. Performance gains Performance improvements – one rerender less and then longest render dropped by 30-40% (for 6x slowdown from 250 to 150ms action). The main reason is that the components that were switching between being Draggable and Droppable don't have to do it anymore so we don't mount and unmount components as often. Screenshot 2024-02-22 at 17 10 07 Screenshot 2024-02-22 at 17 11 27 2. Readability improvements Now it's much easier to see if the component is a drop zone or a draggable component. The logic that was mixed between these two is untangled and the components are smaller thanks to it. 4. Better API It's easier to add a `` or `` components. 6. Small bugs fixes Flash of colors when starting dragging in reorder group ![Feb-22-2024 17-15-32](https://github.com/elastic/kibana/assets/4283304/e63296f5-1bc5-455c-ad7b-05738511f16a) Annotation cut content Screenshot 2024-02-22 at 17 17 49 Half-transparent content when dragging - it doesn't make sense. Screenshot 2024-02-22 at 17 16 51 7. Rewriting all the dnd tests from the package to rtl. It's still not ideal, but way more tested from user perspective and way more readable. --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../public/example_drop_zone.tsx | 7 +- packages/kbn-dom-drag-drop/README.md | 40 +- packages/kbn-dom-drag-drop/index.ts | 3 +- .../src/__snapshots__/drag_drop.test.tsx.snap | 58 - .../kbn-dom-drag-drop/src/drag_drop.test.tsx | 1433 ----------------- packages/kbn-dom-drag-drop/src/drag_drop.tsx | 947 ----------- .../src/drag_drop_reordering.test.tsx | 360 +++++ .../kbn-dom-drag-drop/src/draggable.test.tsx | 137 ++ packages/kbn-dom-drag-drop/src/draggable.tsx | 545 +++++++ .../src/drop_overlay_wrapper.tsx | 9 +- .../drop_targets/swap_duplicate_combine.tsx | 28 +- .../kbn-dom-drag-drop/src/droppable.test.tsx | 487 ++++++ packages/kbn-dom-drag-drop/src/droppable.tsx | 481 ++++++ packages/kbn-dom-drag-drop/src/index.ts | 3 +- .../src/providers/providers.tsx | 41 +- .../src/providers/reorder_provider.tsx | 15 +- .../kbn-dom-drag-drop/src/providers/types.tsx | 5 +- .../src/sass/drag_drop_mixins.scss | 15 +- .../kbn-dom-drag-drop/src/sass/draggable.scss | 44 + .../sass/{drag_drop.scss => droppable.scss} | 152 +- packages/kbn-dom-drag-drop/src/test_utils.tsx | 55 + .../field_item_button/field_item_button.scss | 11 +- .../src/components/field_list/field_list.tsx | 4 +- .../field_list_grouped/fields_accordion.scss | 5 - .../field_list_grouped/fields_accordion.tsx | 2 +- .../field_list_item.tsx | 8 +- .../field_list_sidebar.scss | 33 +- .../dimension_buttons/dimension_button.tsx | 11 +- .../layout/discover_main_content.tsx | 7 +- .../group_editor_controls/annotation_list.tsx | 121 +- test/functional/page_objects/discover_page.ts | 4 +- .../fields/_field_list_item.scss | 2 +- .../public/datasources/common/field_item.scss | 2 +- .../datasources/common/field_item.test.tsx | 15 +- .../public/datasources/common/field_item.tsx | 13 +- .../buttons/draggable_dimension_button.tsx | 36 +- .../buttons/empty_dimension_button.tsx | 6 +- .../config_panel/layer_panel.scss | 2 +- .../config_panel/layer_panel.test.tsx | 50 +- .../editor_frame/config_panel/layer_panel.tsx | 5 - .../editor_frame/editor_frame.test.tsx | 6 +- .../editor_frame/editor_frame.tsx | 5 +- .../geo_field_workspace_panel.tsx | 7 +- .../workspace_panel/workspace_panel.test.tsx | 6 +- .../workspace_panel/workspace_panel.tsx | 7 +- .../workspace_panel_wrapper.scss | 4 +- x-pack/plugins/lens/public/mocks/index.ts | 2 +- x-pack/plugins/lens/public/types.ts | 3 +- .../apps/discover/visualize_field.ts | 2 +- .../test/functional/page_objects/lens_page.ts | 19 +- .../common/discover/x_pack/visualize_field.ts | 2 +- 51 files changed, 2465 insertions(+), 2800 deletions(-) delete mode 100644 packages/kbn-dom-drag-drop/src/__snapshots__/drag_drop.test.tsx.snap delete mode 100644 packages/kbn-dom-drag-drop/src/drag_drop.test.tsx delete mode 100644 packages/kbn-dom-drag-drop/src/drag_drop.tsx create mode 100644 packages/kbn-dom-drag-drop/src/drag_drop_reordering.test.tsx create mode 100644 packages/kbn-dom-drag-drop/src/draggable.test.tsx create mode 100644 packages/kbn-dom-drag-drop/src/draggable.tsx create mode 100644 packages/kbn-dom-drag-drop/src/droppable.test.tsx create mode 100644 packages/kbn-dom-drag-drop/src/droppable.tsx create mode 100644 packages/kbn-dom-drag-drop/src/sass/draggable.scss rename packages/kbn-dom-drag-drop/src/sass/{drag_drop.scss => droppable.scss} (50%) create mode 100644 packages/kbn-dom-drag-drop/src/test_utils.tsx diff --git a/examples/unified_field_list_examples/public/example_drop_zone.tsx b/examples/unified_field_list_examples/public/example_drop_zone.tsx index ba7c0ea4d630b..5774143d7c7c7 100644 --- a/examples/unified_field_list_examples/public/example_drop_zone.tsx +++ b/examples/unified_field_list_examples/public/example_drop_zone.tsx @@ -15,7 +15,7 @@ */ import React, { useMemo } from 'react'; -import { DragDrop, DropOverlayWrapper, DropType, useDragDropContext } from '@kbn/dom-drag-drop'; +import { DropOverlayWrapper, DropType, Droppable, useDragDropContext } from '@kbn/dom-drag-drop'; import { EuiEmptyPrompt, EuiPanel } from '@elastic/eui'; const DROP_PROPS = { @@ -48,8 +48,7 @@ export const ExampleDropZone: React.FC = ({ onDropField }) const isDropAllowed = Boolean(onDroppingField); return ( - = ({ onDropField }) /> - + ); }; diff --git a/packages/kbn-dom-drag-drop/README.md b/packages/kbn-dom-drag-drop/README.md index 8415f6903eee8..b62482030ac57 100644 --- a/packages/kbn-dom-drag-drop/README.md +++ b/packages/kbn-dom-drag-drop/README.md @@ -32,27 +32,27 @@ This enables your child application to share the same drag / drop context as the An item can be both draggable and droppable at the same time, but for simplicity's sake, we'll treat these two cases separately. -To enable dragging an item, use `DragDrop` with both a `draggable` and a `value` attribute. Property `value` has to be of a type object with a unique `id` property. +To enable dragging an item, use `Draggable` with a `value` attribute. Property `value` has to be of a type object with a unique `id` property. ```js
{fields.map((f) => ( - + {f.name} - + ))}
``` ## Dropping -To enable dropping, use `DragDrop` with both a `dropTypes` attribute that should be an array with at least one value and an `onDrop` handler attribute. `dropType` should only be truthy if is an item being dragged, and if a drop of the dragged item is supported. +To enable dropping, use `Droppable` with both a `dropTypes` attribute that should be an array with at least one value and an `onDrop` handler attribute. `dropType` should only be truthy if is an item being dragged, and if a drop of the dragged item is supported. ```js const [ dndState ] = useDragDropContext() return ( - onChange([...items, item])} @@ -60,40 +60,48 @@ return ( {items.map((x) => (
{x.name}
))} -
+
); ``` ### Reordering -To create a reordering group, surround the elements from the same group with a `ReorderProvider`: +To create a reordering group, the elements has to be surrounded with a `ReorderProvider`. They also need to be surrounded with draggable and droppable at the same time. ```js ... elements from one group here ... ``` -The children `DragDrop` components must have props defined as in the example: +The children `Draggable`/`Droppable` components must have props defined as in the example: ```js
{fields.map((f) => ( - - {f.name} - + > + + {f.name} + + ))}
diff --git a/packages/kbn-dom-drag-drop/index.ts b/packages/kbn-dom-drag-drop/index.ts index d82e139c5b6c0..f188b6c6659ad 100644 --- a/packages/kbn-dom-drag-drop/index.ts +++ b/packages/kbn-dom-drag-drop/index.ts @@ -14,7 +14,8 @@ export { type DraggingIdentifier, type DragDropAction, type DropOverlayWrapperProps, - DragDrop, + Draggable, + Droppable, useDragDropContext, RootDragDropProvider, ChildDragDropProvider, diff --git a/packages/kbn-dom-drag-drop/src/__snapshots__/drag_drop.test.tsx.snap b/packages/kbn-dom-drag-drop/src/__snapshots__/drag_drop.test.tsx.snap deleted file mode 100644 index 29ab5e234e9d2..0000000000000 --- a/packages/kbn-dom-drag-drop/src/__snapshots__/drag_drop.test.tsx.snap +++ /dev/null @@ -1,58 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`DragDrop defined dropTypes is reflected in the className 1`] = ` -
- -
-`; - -exports[`DragDrop items that has dropTypes=undefined get special styling when another item is dragged 1`] = ` - - - -`; - -exports[`DragDrop renders if nothing is being dragged 1`] = ` -
- -
-`; diff --git a/packages/kbn-dom-drag-drop/src/drag_drop.test.tsx b/packages/kbn-dom-drag-drop/src/drag_drop.test.tsx deleted file mode 100644 index 09de21fbe3dc9..0000000000000 --- a/packages/kbn-dom-drag-drop/src/drag_drop.test.tsx +++ /dev/null @@ -1,1433 +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 React, { Dispatch } from 'react'; -import { render, mount, ReactWrapper } from 'enzyme'; -import { DragDrop } from './drag_drop'; -import { - ChildDragDropProvider, - DragContextState, - ReorderProvider, - DragDropAction, -} from './providers'; -import { act } from 'react-dom/test-utils'; -import { DropType } from './types'; - -jest.useFakeTimers({ legacyFakeTimers: true }); - -const dataTransfer = { - setData: jest.fn(), - getData: jest.fn(), -}; - -describe('DragDrop', () => { - const defaultContextState = { - dragging: undefined, - dataTestSubjPrefix: 'testDragDrop', - activeDropTarget: undefined, - dropTargetsByOrder: undefined, - keyboardMode: false, - }; - - const value = { - id: '1', - humanData: { - label: 'hello', - groupLabel: 'X', - position: 1, - canSwap: true, - canDuplicate: true, - layerNumber: 0, - }, - }; - - test('renders if nothing is being dragged', () => { - const component = render( - - - - ); - - expect(component).toMatchSnapshot(); - }); - - test('dragover calls preventDefault if dropType is defined', () => { - const preventDefault = jest.fn(); - const component = mount( - - - - ); - - component.find('[data-test-subj="domDragDrop"]').at(0).simulate('dragover', { preventDefault }); - - expect(preventDefault).toBeCalled(); - }); - - test('dragover does not call preventDefault if dropTypes is undefined', () => { - const preventDefault = jest.fn(); - const component = mount( - - - - ); - - component.find('[data-test-subj="domDragDrop"]').at(0).simulate('dragover', { preventDefault }); - - expect(preventDefault).not.toBeCalled(); - }); - - test('removes selection on mouse down before dragging', async () => { - const removeAllRanges = jest.fn(); - global.getSelection = jest.fn(() => ({ removeAllRanges } as unknown as Selection)); - const component = mount( - - - - ); - - component.find('[data-test-subj="domDragDrop"]').at(0).simulate('mousedown'); - expect(global.getSelection).toBeCalled(); - expect(removeAllRanges).toBeCalled(); - }); - - test('dragstart sets dragging in the context and calls it with proper params', async () => { - const dndDispatch = jest.fn(); - const component = mount( - - - - - - ); - - component.find('[data-test-subj="testDragDrop"]').at(0).simulate('dragstart', { dataTransfer }); - - act(() => { - jest.runAllTimers(); - }); - - expect(dataTransfer.setData).toBeCalledWith('text', 'hello'); - expect(dndDispatch).toBeCalledWith({ - type: 'startDragging', - payload: { dragging: value }, - }); - }); - - test('dragstart sets dragClassName as expected', async () => { - const dndDispatch = jest.fn(); - const component = mount( - - - - - - ); - const dragDrop = component.find('[data-test-subj="testDragDrop"]').at(0); - - expect(dragDrop.getDOMNode().querySelector('.dragTest')).toBeNull(); - dragDrop.simulate('dragstart', { dataTransfer }); - expect(dragDrop.getDOMNode().querySelector('.dragTest')).toBeDefined(); - - act(() => { - jest.runAllTimers(); - }); - - expect(dragDrop.getDOMNode().querySelector('.dragTest')).toBeNull(); - }); - - test('drop resets all the things', async () => { - const preventDefault = jest.fn(); - const stopPropagation = jest.fn(); - const dndDispatch = jest.fn(); - const onDrop = jest.fn(); - - const component = mount( - - - - - - ); - - const dragDrop = component.find('[data-test-subj="testDragDrop"]').at(0); - dragDrop.simulate('dragOver'); - dndDispatch.mockClear(); - dragDrop.simulate('drop', { preventDefault, stopPropagation }); - - expect(preventDefault).toBeCalled(); - expect(stopPropagation).toBeCalled(); - expect(onDrop).toBeCalledWith({ id: '2', humanData: { label: 'Label1' } }, 'field_add'); - expect(dndDispatch).toBeCalledWith({ type: 'resetState' }); - }); - - test('drop function is not called on dropTypes undefined', async () => { - const preventDefault = jest.fn(); - const stopPropagation = jest.fn(); - const dndDispatch = jest.fn(); - const onDrop = jest.fn(); - - const component = mount( - - - - - - ); - - const dragDrop = component.find('[data-test-subj="testDragDrop"]').at(0); - dragDrop.simulate('dragover'); - dragDrop.simulate('drop', { preventDefault, stopPropagation }); - - expect(preventDefault).not.toHaveBeenCalled(); - expect(stopPropagation).not.toHaveBeenCalled(); - expect(dndDispatch).not.toHaveBeenCalled(); - expect(onDrop).not.toHaveBeenCalled(); - }); - - test('defined dropTypes is reflected in the className', () => { - const component = render( - { - throw x; - }} - dropTypes={['field_add']} - value={value} - order={[2, 0, 1, 0]} - > - - - ); - - expect(component).toMatchSnapshot(); - }); - - test('items that has dropTypes=undefined get special styling when another item is dragged', () => { - const component = mount( - - - - - {}} - dropTypes={undefined} - value={{ id: '2', humanData: { label: 'label2', layerNumber: 0 } }} - > - - - - ); - - expect(component.find('[data-test-subj="testDragDrop"]').at(1)).toMatchSnapshot(); - }); - - test('additional styles are reflected in the className until drop', () => { - let dragging: { id: '1'; humanData: { label: 'Label1' } } | undefined; - const getAdditionalClassesOnEnter = jest.fn().mockReturnValue('additional'); - const getAdditionalClassesOnDroppable = jest.fn().mockReturnValue('droppable'); - const dndDispatch = jest.fn(); - - const component = mount( - - - - - {}} - dropTypes={['field_add']} - getAdditionalClassesOnEnter={getAdditionalClassesOnEnter} - getAdditionalClassesOnDroppable={getAdditionalClassesOnDroppable} - > - - - - ); - - component - .find('[data-test-subj="testDragDrop"]') - .first() - .simulate('dragstart', { dataTransfer }); - act(() => { - jest.runAllTimers(); - }); - - const dragDrop = component.find('[data-test-subj="testDragDrop"]').at(1); - dragDrop.simulate('dragOver'); - dragDrop.simulate('drop'); - expect(component.find('.additional')).toHaveLength(0); - }); - - test('additional enter styles are reflected in the className until dragleave', () => { - let dragging: { id: '1'; humanData: { label: 'Label1' } } | undefined; - const getAdditionalClasses = jest.fn().mockReturnValue('additional'); - const getAdditionalClassesOnDroppable = jest.fn().mockReturnValue('droppable'); - const dndDispatch = jest.fn(() => { - dragging = { id: '1', humanData: { label: 'Label1' } }; - }); - - const component = mount( - - - - - {}} - dropTypes={['field_add']} - getAdditionalClassesOnEnter={getAdditionalClasses} - getAdditionalClassesOnDroppable={getAdditionalClassesOnDroppable} - > - - - - ); - - component - .find('[data-test-subj="testDragDrop"]') - .first() - .simulate('dragstart', { dataTransfer }); - act(() => { - jest.runAllTimers(); - }); - - component.find('[data-test-subj="testDragDrop"]').at(1).simulate('dragover'); - expect(component.find('.additional')).toHaveLength(2); - component.find('[data-test-subj="testDragDrop"]').at(1).simulate('dragleave'); - expect(dndDispatch).toBeCalledWith({ type: 'leaveDropTarget' }); - }); - - describe('Keyboard navigation', () => { - test('User receives proper drop Targets highlighted when pressing arrow keys', () => { - const onDrop = jest.fn(); - const dndDispatch = jest.fn(); - const items = [ - { - draggable: true, - value: { - id: '1', - humanData: { label: 'Label1', position: 1, layerNumber: 0 }, - }, - children: '1', - order: [2, 0, 0, 0], - }, - { - draggable: true, - dragType: 'move' as 'copy' | 'move', - - value: { - id: '2', - - humanData: { label: 'label2', position: 1, layerNumber: 0 }, - }, - onDrop, - dropTypes: ['move_compatible'] as DropType[], - order: [2, 0, 1, 0], - }, - { - draggable: true, - dragType: 'move' as 'copy' | 'move', - value: { - id: '3', - humanData: { - label: 'label3', - position: 1, - groupLabel: 'Y', - canSwap: true, - canDuplicate: true, - layerNumber: 0, - }, - }, - onDrop, - dropTypes: [ - 'replace_compatible', - 'duplicate_compatible', - 'swap_compatible', - ] as DropType[], - order: [2, 0, 2, 0], - }, - { - draggable: true, - dragType: 'move' as 'copy' | 'move', - value: { - id: '4', - humanData: { label: 'label4', position: 2, groupLabel: 'Y', layerNumber: 0 }, - }, - order: [2, 0, 2, 1], - }, - ]; - const component = mount( - , style: {} } }, - activeDropTarget: { ...items[1].value, onDrop, dropType: 'move_compatible' }, - dropTargetsByOrder: { - '2,0,1,0': { ...items[1].value, onDrop, dropType: 'move_compatible' }, - '2,0,2,0,0': { ...items[2].value, onDrop, dropType: 'replace_compatible' }, - '2,0,1,0,1': { ...items[1].value, onDrop, dropType: 'duplicate_compatible' }, - '2,0,1,0,2': { ...items[1].value, onDrop, dropType: 'swap_compatible' }, - }, - keyboardMode: true, - }, - dndDispatch, - ]} - > - {items.map((props) => ( - -
- - ))} - - ); - const keyboardHandler = component - .find('[data-test-subj="testDragDrop-keyboardHandler"]') - .at(1) - .simulate('focus'); - - dndDispatch.mockClear(); - - keyboardHandler.simulate('keydown', { key: 'ArrowRight' }); - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dragging: items[0].value, - dropTarget: { - ...items[2].value, - onDrop, - dropType: items[2].dropTypes![0], - }, - }, - }); - - dndDispatch.mockClear(); - - keyboardHandler.simulate('keydown', { key: 'Enter' }); - expect(dndDispatch).toBeCalledWith({ - type: 'endDragging', - payload: { dragging: items[0].value }, - }); - expect(onDrop).toBeCalledWith( - { humanData: { label: 'Label1', position: 1, layerNumber: 0 }, id: '1' }, - 'move_compatible' - ); - }); - - test('dragstart sets dragging in the context and calls it with proper params', async () => { - const dndDispatch = jest.fn(); - const component = mount( - - - - - - ); - - const keyboardHandler = component - .find('[data-test-subj="testDragDrop-keyboardHandler"]') - .at(1) - .simulate('focus'); - - keyboardHandler.simulate('keydown', { key: 'Enter' }); - act(() => { - jest.runAllTimers(); - }); - - expect(dndDispatch).toBeCalledWith({ - type: 'startDragging', - payload: { - keyboardMode: true, - dragging: { - ...value, - ghost: { - children: , - style: { - minHeight: 0, - width: 0, - }, - }, - }, - }, - }); - }); - - test('ActiveDropTarget gets ghost image', () => { - const onDrop = jest.fn(); - const items = [ - { - draggable: true, - value: { - id: '1', - humanData: { label: 'Label1', position: 1, layerNumber: 0 }, - }, - children: '1', - order: [2, 0, 0, 0], - }, - { - draggable: true, - dragType: 'move' as 'copy' | 'move', - - value: { - id: '2', - - humanData: { label: 'label2', position: 1, layerNumber: 0 }, - }, - onDrop, - dropTypes: ['move_compatible'] as DropType[], - order: [2, 0, 1, 0], - }, - ]; - const dndDispatch = jest.fn(); - const component = mount( - Hello
, style: {} } }, - - activeDropTarget: { ...items[1].value, onDrop, dropType: 'move_compatible' }, - dropTargetsByOrder: { - '2,0,1,0': { ...items[1].value, onDrop, dropType: 'move_compatible' }, - }, - keyboardMode: true, - }, - dndDispatch, - ]} - > - {items.map((props) => ( - -
- - ))} - - ); - - expect(component.find(DragDrop).at(1).find('.domDragDrop_ghost').text()).toEqual('Hello'); - }); - }); - - describe('multiple drop targets', () => { - let activeDropTarget: DragContextState['activeDropTarget']; - const dragging = { id: '1', humanData: { label: 'Label1', layerNumber: 0 } }; - const onDrop = jest.fn(); - let dndDispatch = jest.fn(); - let component: ReactWrapper; - beforeEach(() => { - activeDropTarget = undefined; - dndDispatch = jest.fn((val) => { - activeDropTarget = value as DragContextState['activeDropTarget']; - }); - component = mount( - - - - -
{dropType}
} - > - -
-
- ); - }); - test('extra drop targets render correctly', () => { - expect(component.find('.extraDrop').hostNodes()).toHaveLength(2); - }); - - test('extra drop targets appear when dragging over and disappear when activeDropTarget changes', () => { - component.find('[data-test-subj="testDragDropContainer"]').first().simulate('dragenter'); - - // customDropTargets are visible - expect(component.find('[data-test-subj="testDragDropContainer"]').prop('className')).toEqual( - 'domDragDrop__container domDragDrop__container-active' - ); - expect( - component.find('[data-test-subj="testDragDropExtraDrops"]').first().prop('className') - ).toEqual('domDragDrop__extraDrops domDragDrop__extraDrops-visible'); - - // set activeDropTarget as undefined - component.find('[data-test-subj="testDragDrop"]').at(1).simulate('dragleave'); - act(() => { - jest.runAllTimers(); - }); - component.update(); - - // customDropTargets are invisible - expect( - component.find('[data-test-subj="testDragDropExtraDrops"]').first().prop('className') - ).toEqual('domDragDrop__extraDrops'); - }); - - test('dragging over different drop types of the same value assigns correct activeDropTarget', () => { - component - .find('[data-test-subj="testDragDrop"]') - .first() - .simulate('dragstart', { dataTransfer }); - dndDispatch.mockClear(); - component.find('SingleDropInner').at(0).simulate('dragover'); - - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dragging, - dropTarget: { - ...value, - dropType: 'move_compatible', - onDrop, - }, - }, - }); - - dndDispatch.mockClear(); - component.find('SingleDropInner').at(1).simulate('dragover'); - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dragging, - dropTarget: { - ...value, - dropType: 'duplicate_compatible', - onDrop, - }, - }, - }); - - dndDispatch.mockClear(); - component.find('SingleDropInner').at(2).simulate('dragover'); - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dragging, - dropTarget: { - ...value, - dropType: 'swap_compatible', - onDrop, - }, - }, - }); - dndDispatch.mockClear(); - component.find('SingleDropInner').at(2).simulate('dragleave'); - expect(dndDispatch).toBeCalledWith({ type: 'leaveDropTarget' }); - }); - - test('drop on extra drop target passes correct dropType to onDrop', () => { - component - .find('[data-test-subj="testDragDrop"]') - .first() - .simulate('dragstart', { dataTransfer }); - - component.find('SingleDropInner').at(0).simulate('dragover'); - component.find('SingleDropInner').at(0).simulate('drop'); - expect(onDrop).toBeCalledWith( - { humanData: { label: 'Label1', layerNumber: 0 }, id: '1' }, - 'move_compatible' - ); - - component.find('SingleDropInner').at(1).simulate('dragover'); - component.find('SingleDropInner').at(1).simulate('drop'); - expect(onDrop).toBeCalledWith( - { humanData: { label: 'Label1', layerNumber: 0 }, id: '1' }, - 'duplicate_compatible' - ); - - component.find('SingleDropInner').at(2).simulate('dragover'); - component.find('SingleDropInner').at(2).simulate('drop'); - expect(onDrop).toBeCalledWith( - { humanData: { label: 'Label1', layerNumber: 0 }, id: '1' }, - 'swap_compatible' - ); - }); - - test('pressing Alt or Shift when dragging over the main drop target sets extra drop target as active', () => { - component - .find('[data-test-subj="testDragDrop"]') - .first() - .simulate('dragstart', { dataTransfer }); - - // needed to setup activeDropType - component - .find('SingleDropInner') - .at(0) - .simulate('dragover', { altKey: true }) - .simulate('dragover', { altKey: true }); - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dragging, - dropTarget: { - ...value, - dropType: 'duplicate_compatible', - onDrop, - }, - }, - }); - - component - .find('SingleDropInner') - .at(0) - .simulate('dragover', { shiftKey: true }) - .simulate('dragover', { shiftKey: true }); - - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dragging, - dropTarget: { - ...value, - dropType: 'swap_compatible', - onDrop, - }, - }, - }); - }); - - test('pressing Alt or Shift when dragging over the extra drop target does nothing', () => { - component - .find('[data-test-subj="testDragDrop"]') - .first() - .simulate('dragstart', { dataTransfer }); - - const extraDrop = component.find('SingleDropInner').at(1); - extraDrop.simulate('dragover', { altKey: true }); - extraDrop.simulate('dragover', { shiftKey: true }); - extraDrop.simulate('dragover'); - expect( - dndDispatch.mock.calls.every((call) => { - return call[0].payload.dropTarget.dropType === 'duplicate_compatible'; - }) - ).toBe(true); - }); - describe('keyboard navigation', () => { - const items = [ - { - draggable: true, - value: { - id: '1', - humanData: { label: 'Label1', position: 1, layerNumber: 0 }, - }, - children: '1', - order: [2, 0, 0, 0], - }, - { - draggable: true, - dragType: 'move' as const, - - value: { - id: '2', - - humanData: { label: 'label2', position: 1, layerNumber: 0 }, - }, - onDrop, - dropTypes: ['move_compatible', 'duplicate_compatible', 'swap_compatible'] as DropType[], - order: [2, 0, 1, 0], - }, - { - draggable: true, - dragType: 'move' as const, - value: { - id: '3', - humanData: { label: 'label3', position: 1, groupLabel: 'Y', layerNumber: 0 }, - }, - onDrop, - dropTypes: ['replace_compatible'] as DropType[], - order: [2, 0, 2, 0], - }, - ]; - const assignedDropTargetsByOrder: DragContextState['dropTargetsByOrder'] = { - '2,0,1,0,0': { - ...items[1].value, - onDrop, - dropType: 'move_compatible', - }, - '2,0,1,0,1': { - dropType: 'duplicate_compatible', - humanData: { - label: 'label2', - position: 1, - layerNumber: 0, - }, - id: '2', - onDrop, - }, - '2,0,1,0,2': { - dropType: 'swap_compatible', - humanData: { - label: 'label2', - position: 1, - layerNumber: 0, - }, - id: '2', - onDrop, - }, - '2,0,2,0,0': { - dropType: 'replace_compatible', - humanData: { - groupLabel: 'Y', - label: 'label3', - position: 1, - layerNumber: 0, - }, - id: '3', - onDrop, - }, - }; - test('when pressing enter key, context receives the proper dropTargetsByOrder', () => { - let dropTargetsByOrder: DragContextState['dropTargetsByOrder'] = {}; - - component = mount( - , style: {} } }, - activeDropTarget, - dropTargetsByOrder, - keyboardMode: true, - }, - jest.fn((action) => { - if (action.type === 'registerDropTargets') { - dropTargetsByOrder = { - ...dropTargetsByOrder, - ...action.payload, - }; - } - }), - ]} - > - {items.map((props) => ( - -
- - ))} - - ); - component.find('[data-test-subj="testDragDrop-keyboardHandler"]').at(1).simulate('focus'); - act(() => { - jest.runAllTimers(); - }); - component.update(); - expect(dropTargetsByOrder).toEqual(assignedDropTargetsByOrder); - }); - test('when pressing ArrowRight key with modifier key pressed in, the extra drop target is selected', () => { - component = mount( - , style: {} } }, - activeDropTarget: undefined, - keyboardMode: true, - dropTargetsByOrder: assignedDropTargetsByOrder, - }, - dndDispatch, - ]} - > - {items.map((props) => ( - -
- - ))} - - ); - dndDispatch.mockClear(); - act(() => { - component - .find('[data-test-subj="testDragDrop-keyboardHandler"]') - .at(1) - .simulate('keydown', { key: 'ArrowRight', altKey: true }); - }); - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dragging: items[0].value, - dropTarget: { - ...items[1].value, - onDrop, - dropType: 'duplicate_compatible', - }, - }, - }); - dndDispatch.mockClear(); - act(() => { - component - .find('[data-test-subj="testDragDrop-keyboardHandler"]') - .at(1) - .simulate('keydown', { key: 'ArrowRight', shiftKey: true }); - }); - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dragging: items[0].value, - dropTarget: { - ...items[1].value, - onDrop, - dropType: 'swap_compatible', - }, - }, - }); - }); - test('when having a main target selected and pressing alt, the first extra drop target is selected', () => { - component = mount( - , style: {} } }, - activeDropTarget: assignedDropTargetsByOrder['2,0,1,0,0'], - dropTargetsByOrder: assignedDropTargetsByOrder, - keyboardMode: true, - }, - dndDispatch, - ]} - > - {items.map((props) => ( - -
- - ))} - - ); - dndDispatch.mockClear(); - act(() => { - component - .find('[data-test-subj="testDragDrop-keyboardHandler"]') - .at(1) - .simulate('keydown', { key: 'Alt' }); - }); - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dragging: items[0].value, - dropTarget: { - ...items[1].value, - onDrop, - dropType: 'duplicate_compatible', - }, - }, - }); - dndDispatch.mockClear(); - act(() => { - component - .find('[data-test-subj="testDragDrop-keyboardHandler"]') - .at(1) - .simulate('keyup', { key: 'Alt' }); - }); - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dragging: items[0].value, - dropTarget: { - ...items[1].value, - onDrop, - dropType: 'move_compatible', - }, - }, - }); - }); - test('when having a main target selected and pressing shift, the second extra drop target is selected', () => { - component = mount( - , style: {} } }, - activeDropTarget: assignedDropTargetsByOrder['2,0,1,0,0'], - dropTargetsByOrder: assignedDropTargetsByOrder, - keyboardMode: true, - }, - dndDispatch, - ]} - > - {items.map((props) => ( - -
- - ))} - - ); - dndDispatch.mockClear(); - act(() => { - component - .find('[data-test-subj="testDragDrop-keyboardHandler"]') - .at(1) - .simulate('keydown', { key: 'Shift' }); - }); - - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dragging: items[0].value, - dropTarget: { - ...items[1].value, - onDrop, - dropType: 'swap_compatible', - }, - }, - }); - dndDispatch.mockClear(); - act(() => { - component - .find('[data-test-subj="testDragDrop-keyboardHandler"]') - .at(1) - .simulate('keyup', { key: 'Shift' }); - }); - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dragging: items[0].value, - dropTarget: { - ...items[1].value, - onDrop, - dropType: 'move_compatible', - }, - }, - }); - }); - }); - }); - - describe('Reordering', () => { - const onDrop = jest.fn(); - const items = [ - { - id: '1', - humanData: { label: 'Label1', position: 1, groupLabel: 'X', layerNumber: 0 }, - onDrop, - draggable: true, - }, - { - id: '2', - humanData: { label: 'label2', position: 2, groupLabel: 'X', layerNumber: 0 }, - onDrop, - }, - { - id: '3', - humanData: { label: 'label3', position: 3, groupLabel: 'X', layerNumber: 0 }, - onDrop, - }, - ]; - const mountComponent = ( - dndContextState?: Partial, - dndDispatch?: Dispatch, - onDropHandler?: () => void - ) => { - const dragDropSharedProps = { - draggable: true, - dragType: 'move' as 'copy' | 'move', - reorderableGroup: items.map(({ id }) => ({ id })), - onDrop: onDropHandler || onDrop, - }; - - return mount( - - - - 1 - - - 2 - - - 3 - - - - ); - }; - test(`Inactive group renders properly`, () => { - const component = mountComponent(); - act(() => { - jest.runAllTimers(); - }); - expect(component.find('[data-test-subj="testDragDrop"]')).toHaveLength(5); - }); - - test(`Reorderable group with lifted element renders properly`, () => { - const dndDispatch = jest.fn(); - const component = mountComponent({ dragging: { ...items[0] } }, dndDispatch); - - act(() => { - jest.runAllTimers(); - }); - component - .find('[data-test-subj="testDragDrop"]') - .first() - .simulate('dragstart', { dataTransfer }); - - act(() => { - jest.runAllTimers(); - }); - - expect(dndDispatch).toBeCalledWith({ - type: 'startDragging', - payload: { dragging: { ...items[0] } }, - }); - }); - - test(`Reordered elements get extra styles to show the reorder effect when dragging`, () => { - const dndDispatch = jest.fn(); - const component = mountComponent({ dragging: { ...items[0] } }, dndDispatch); - - component - .find('[data-test-subj="testDragDrop"]') - .first() - .simulate('dragstart', { dataTransfer }); - - act(() => { - jest.runAllTimers(); - }); - - component - .find('[data-test-subj="testDragDrop-reorderableDropLayer"]') - .at(1) - .simulate('dragover'); - expect( - component.find('[data-test-subj="testDragDrop-reorderableDrag"]').at(0).prop('style') - ).toEqual(undefined); - expect( - component.find('[data-test-subj="testDragDrop-translatableDrop"]').at(0).prop('style') - ).toEqual({ - transform: 'translateY(-8px)', - }); - expect( - component.find('[data-test-subj="testDragDrop-translatableDrop"]').at(1).prop('style') - ).toEqual({ - transform: 'translateY(-8px)', - }); - - component - .find('[data-test-subj="testDragDrop-reorderableDropLayer"]') - .at(1) - .simulate('dragleave'); - expect( - component.find('[data-test-subj="testDragDrop-reorderableDrag"]').at(0).prop('style') - ).toEqual(undefined); - expect( - component.find('[data-test-subj="testDragDrop-translatableDrop"]').at(1).prop('style') - ).toEqual(undefined); - }); - - test(`Dropping an item runs onDrop function`, () => { - const preventDefault = jest.fn(); - const stopPropagation = jest.fn(); - const dndDispatch = jest.fn(); - const component = mountComponent({ dragging: { ...items[0] } }, dndDispatch); - - const dragDrop = component.find('[data-test-subj="testDragDrop-reorderableDropLayer"]').at(1); - dragDrop.simulate('dragOver'); - dndDispatch.mockClear(); - dragDrop.simulate('drop', { preventDefault, stopPropagation }); - - act(() => { - jest.runAllTimers(); - }); - - expect(dndDispatch).toBeCalledWith({ - type: 'dropToTarget', - payload: { - dragging: items[0], - dropTarget: { ...items[2], dropType: 'reorder' }, - }, - }); - - expect(preventDefault).toBeCalled(); - expect(stopPropagation).toBeCalled(); - expect(onDrop).toBeCalledWith({ ...items[0] }, 'reorder'); - }); - - test(`Keyboard Navigation: User cannot move an element outside of the group`, () => { - const dndDispatch = jest.fn(); - const component = mountComponent( - { - dragging: { ...items[0] }, - keyboardMode: true, - activeDropTarget: undefined, - dropTargetsByOrder: { - '2,0,0': undefined, - '2,0,1': { ...items[1], onDrop, dropType: 'reorder' }, - '2,0,2': { ...items[2], onDrop, dropType: 'reorder' }, - }, - }, - dndDispatch - ); - const keyboardHandler = component - .find('[data-test-subj="testDragDrop-keyboardHandler"]') - .at(1); - - dndDispatch.mockClear(); - keyboardHandler.simulate('keydown', { key: 'Space' }); - keyboardHandler.simulate('keydown', { key: 'ArrowUp' }); - expect(dndDispatch).not.toHaveBeenCalled(); - - keyboardHandler.simulate('keydown', { key: 'Space' }); - keyboardHandler.simulate('keydown', { key: 'ArrowDown' }); - - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dropTarget: { - ...items[1], - dropType: 'reorder', - }, - dragging: items[0], - }, - }); - }); - - test(`Keyboard navigation: user can drop element to an activeDropTarget`, () => { - const component = mountComponent({ - dragging: { ...items[0] }, - activeDropTarget: { ...items[2], dropType: 'reorder', onDrop }, - dropTargetsByOrder: { - '2,0,0': { ...items[0], onDrop, dropType: 'reorder' }, - '2,0,1': { ...items[1], onDrop, dropType: 'reorder' }, - '2,0,2': { ...items[2], onDrop, dropType: 'reorder' }, - }, - keyboardMode: true, - }); - const keyboardHandler = component - .find('[data-test-subj="testDragDrop-keyboardHandler"]') - .at(1) - .simulate('focus'); - - act(() => { - keyboardHandler.simulate('keydown', { key: 'ArrowDown' }); - keyboardHandler.simulate('keydown', { key: 'ArrowDown' }); - keyboardHandler.simulate('keydown', { key: 'Enter' }); - }); - expect(onDrop).toBeCalledWith(items[0], 'reorder'); - }); - - test(`Keyboard Navigation: Doesn't call onDrop when movement is cancelled`, () => { - const onDropHandler = jest.fn(); - const dndDispatch = jest.fn(); - const component = mountComponent({ dragging: { ...items[0] } }, dndDispatch, onDropHandler); - const keyboardHandler = component - .find('[data-test-subj="testDragDrop-keyboardHandler"]') - .at(1); - keyboardHandler.simulate('keydown', { key: 'Space' }); - keyboardHandler.simulate('keydown', { key: 'Escape' }); - act(() => { - jest.runAllTimers(); - }); - - expect(onDropHandler).not.toHaveBeenCalled(); - - expect(dndDispatch).toBeCalledWith({ - type: 'endDragging', - payload: { - dragging: items[0], - }, - }); - keyboardHandler.simulate('keydown', { key: 'Space' }); - keyboardHandler.simulate('keydown', { key: 'ArrowDown' }); - dndDispatch.mockClear(); - keyboardHandler.simulate('blur'); - - expect(onDropHandler).not.toHaveBeenCalled(); - - expect(dndDispatch).toBeCalledWith({ - type: 'endDragging', - payload: { - dragging: items[0], - }, - }); - }); - - test(`Keyboard Navigation: Reordered elements get extra styles to show the reorder effect`, () => { - const dndDispatch = jest.fn(); - const component = mountComponent( - { - dragging: { ...items[0] }, - keyboardMode: true, - activeDropTarget: undefined, - dropTargetsByOrder: { - '2,0,0': undefined, - '2,0,1': { ...items[1], onDrop, dropType: 'reorder' }, - '2,0,2': { ...items[2], onDrop, dropType: 'reorder' }, - }, - }, - dndDispatch - ); - - const keyboardHandler = component - .find('[data-test-subj="testDragDrop-keyboardHandler"]') - .at(1); - - keyboardHandler.simulate('keydown', { key: 'Space' }); - dndDispatch.mockClear(); - keyboardHandler.simulate('keydown', { key: 'ArrowDown' }); - - expect( - component.find('[data-test-subj="testDragDrop-reorderableDrag"]').at(0).prop('style') - ).toEqual({ - transform: 'translateY(+8px)', - }); - expect( - component.find('[data-test-subj="testDragDrop-translatableDrop"]').at(0).prop('style') - ).toEqual({ - transform: 'translateY(-32px)', - }); - expect( - component.find('[data-test-subj="testDragDrop-translatableDrop"]').at(1).prop('style') - ).toEqual(undefined); - - expect(dndDispatch).toBeCalledWith({ - type: 'selectDropTarget', - payload: { - dragging: items[0], - dropTarget: { ...items[1], onDrop, dropType: 'reorder' }, - }, - }); - - component - .find('[data-test-subj="testDragDrop-reorderableDropLayer"]') - .at(1) - .simulate('dragleave'); - expect( - component.find('[data-test-subj="testDragDrop-reorderableDrag"]').at(0).prop('style') - ).toEqual(undefined); - expect( - component.find('[data-test-subj="testDragDrop-translatableDrop"]').at(1).prop('style') - ).toEqual(undefined); - }); - - test(`Keyboard Navigation: User cannot drop element to itself`, () => { - const dndDispatch = jest.fn(); - const contextState = { - ...defaultContextState, - keyboardMode: true, - activeDropTarget: { - ...items[1], - onDrop, - dropType: 'reorder' as const, - }, - dropTargetsByOrder: { - '2,0,1,0': undefined, - '2,0,1,1': { ...items[1], onDrop, dropType: 'reorder' as const }, - }, - dragging: { ...items[0] }, - }; - const component = mount( - - - - 1 - - - 2 - - - - ); - const keyboardHandler = component - .find('[data-test-subj="testDragDrop-keyboardHandler"]') - .at(1); - - keyboardHandler.simulate('keydown', { key: 'Space' }); - keyboardHandler.simulate('keydown', { key: 'ArrowUp' }); - - expect(dndDispatch).toBeCalledWith({ - type: 'leaveDropTarget', - }); - }); - }); -}); diff --git a/packages/kbn-dom-drag-drop/src/drag_drop.tsx b/packages/kbn-dom-drag-drop/src/drag_drop.tsx deleted file mode 100644 index b20570ee6969c..0000000000000 --- a/packages/kbn-dom-drag-drop/src/drag_drop.tsx +++ /dev/null @@ -1,947 +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 React, { useContext, useCallback, useEffect, memo, useMemo, useState, useRef } from 'react'; -import type { KeyboardEvent, ReactElement } from 'react'; -import classNames from 'classnames'; -import { keys, EuiScreenReaderOnly, EuiFlexItem, EuiFlexGroup } from '@elastic/eui'; -import useShallowCompareEffect from 'react-use/lib/useShallowCompareEffect'; -import { - DragDropIdentifier, - DropIdentifier, - nextValidDropTarget, - ReorderContext, - DropHandler, - Ghost, - RegisteredDropTargets, - DragDropAction, - DragContextState, - useDragDropContext, -} from './providers'; -import { DropType } from './types'; -import { REORDER_ITEM_MARGIN } from './constants'; -import './sass/drag_drop.scss'; - -/** - * Droppable event - */ -export type DroppableEvent = React.DragEvent; - -const noop = () => {}; - -/** - * The base props to the DragDrop component. - */ -interface BaseProps { - /** - * The CSS class(es) for the root element. - */ - className?: string; - /** - * CSS class to apply when the item is being dragged - */ - dragClassName?: string; - - /** - * The event handler that fires when an item - * is dropped onto this DragDrop component. - */ - onDrop?: DropHandler; - /** - * The event handler that fires when this element is dragged. - */ - onDragStart?: ( - target?: DroppableEvent['currentTarget'] | KeyboardEvent['currentTarget'] - ) => void; - /** - * The event handler that fires when the dragging of this element ends. - */ - onDragEnd?: () => void; - /** - * The value associated with this item. - */ - value: DragDropIdentifier; - - /** - * The React element which will be passed the draggable handlers - */ - children: ReactElement; - - /** - * Disable any drag & drop behaviour - */ - isDisabled?: boolean; - /** - * Indicates whether or not this component is draggable. - */ - draggable?: boolean; - /** - * Additional class names to apply when another element is over the drop target - */ - getAdditionalClassesOnEnter?: (dropType?: DropType) => string | undefined; - /** - * Additional class names to apply when another element is droppable for a currently dragged item - */ - getAdditionalClassesOnDroppable?: (dropType?: DropType) => string | undefined; - - /** - * The optional test subject associated with this DOM element. - */ - dataTestSubj?: string; - - /** - * items belonging to the same group that can be reordered - */ - reorderableGroup?: Array<{ id: string }>; - - /** - * Indicates to the user whether the currently dragged item - * will be moved or copied - */ - dragType?: 'copy' | 'move'; - - /** - * Indicates the type of drop targets - when undefined, the currently dragged item - * cannot be dropped onto this component. - */ - dropTypes?: DropType[]; - /** - * Order for keyboard dragging. This takes an array of numbers which will be used to order hierarchically - */ - order: number[]; - /** - * Extra drop targets by dropType - */ - getCustomDropTarget?: (dropType: DropType) => ReactElement | null; -} - -/** - * The props for a draggable instance of that component. - */ -interface DragInnerProps extends BaseProps { - dndDispatch: React.Dispatch; - dataTestSubjPrefix?: string; - activeDraggingProps?: { - keyboardMode: boolean; - activeDropTarget?: DropIdentifier; - dropTargetsByOrder: RegisteredDropTargets; - }; - extraKeyboardHandler?: (e: KeyboardEvent) => void; - ariaDescribedBy?: string; -} - -/** - * The props for a non-draggable instance of that component. - */ -interface DropsInnerProps extends BaseProps { - dndState: DragContextState; - dndDispatch: React.Dispatch; - isNotDroppable: boolean; -} - -const REORDER_OFFSET = REORDER_ITEM_MARGIN / 2; - -/** - * DragDrop component - * @param props - * @constructor - */ -export const DragDrop = (props: BaseProps) => { - const [dndState, dndDispatch] = useDragDropContext(); - - const { dragging, dropTargetsByOrder } = dndState; - - if (props.isDisabled) { - return props.children; - } - - const { value, draggable, dropTypes, reorderableGroup } = props; - const isDragging = !!(draggable && value.id === dragging?.id); - - const activeDraggingProps = isDragging - ? { - keyboardMode: dndState.keyboardMode, - activeDropTarget: dndState.activeDropTarget, - dropTargetsByOrder, - } - : undefined; - - if (draggable && (!dropTypes || !dropTypes.length)) { - const dragProps = { - ...props, - activeDraggingProps, - dataTestSubjPrefix: dndState.dataTestSubjPrefix, - dndDispatch, - }; - if (reorderableGroup && reorderableGroup.length > 1) { - return ; - } else { - return ; - } - } - - const dropProps = { - ...props, - dndState, - dndDispatch, - isNotDroppable: - // If the configuration has provided a droppable flag, but this particular item is not - // droppable, then it should be less prominent. Ignores items that are both - // draggable and drop targets - !!((!dropTypes || !dropTypes.length) && dragging && value.id !== dragging.id), - }; - if ( - reorderableGroup && - reorderableGroup.length > 1 && - reorderableGroup?.some((i) => i.id === dragging?.id) && - dropTypes?.[0] === 'reorder' - ) { - return ; - } - return ; -}; - -const removeSelection = () => { - const selection = window.getSelection(); - if (selection) { - selection.removeAllRanges(); - } -}; - -const DragInner = memo(function DragInner({ - dataTestSubj, - className, - dragClassName, - value, - children, - dndDispatch, - order, - activeDraggingProps, - dataTestSubjPrefix, - dragType, - onDragStart, - onDragEnd, - extraKeyboardHandler, - ariaDescribedBy, -}: DragInnerProps) { - const { keyboardMode, activeDropTarget, dropTargetsByOrder } = activeDraggingProps || {}; - - const setTarget = useCallback( - (target?: DropIdentifier) => { - if (!target) { - dndDispatch({ - type: 'leaveDropTarget', - }); - } else { - dndDispatch({ - type: 'selectDropTarget', - payload: { - dropTarget: target, - dragging: value, - }, - }); - } - }, - [dndDispatch, value] - ); - - const setTargetOfIndex = useCallback( - (id: string, index: number) => { - const dropTargetsForActiveId = - dropTargetsByOrder && - Object.values(dropTargetsByOrder).filter((dropTarget) => dropTarget?.id === id); - setTarget(dropTargetsForActiveId?.[index]); - }, - [dropTargetsByOrder, setTarget] - ); - const modifierHandlers = useMemo(() => { - const onKeyUp = (e: KeyboardEvent) => { - e.preventDefault(); - if (activeDropTarget?.id && ['Shift', 'Alt', 'Control'].includes(e.key)) { - if (e.altKey) { - setTargetOfIndex(activeDropTarget.id, 1); - } else if (e.shiftKey) { - setTargetOfIndex(activeDropTarget.id, 2); - } else if (e.ctrlKey) { - // the control option is available either for new or existing cases, - // so need to offset based on some flags - const offsetIndex = - Number(activeDropTarget.humanData.canSwap) + - Number(activeDropTarget.humanData.canDuplicate); - setTargetOfIndex(activeDropTarget.id, offsetIndex + 1); - } else { - setTargetOfIndex(activeDropTarget.id, 0); - } - } - }; - const onKeyDown = (e: KeyboardEvent) => { - e.preventDefault(); - if (e.key === 'Alt' && activeDropTarget?.id) { - setTargetOfIndex(activeDropTarget.id, 1); - } else if (e.key === 'Shift' && activeDropTarget?.id) { - setTargetOfIndex(activeDropTarget.id, 2); - } else if (e.key === 'Control' && activeDropTarget?.id) { - // the control option is available either for new or existing cases, - // so need to offset based on some flags - const offsetIndex = - Number(activeDropTarget.humanData.canSwap) + - Number(activeDropTarget.humanData.canDuplicate); - setTargetOfIndex(activeDropTarget.id, offsetIndex + 1); - } - }; - return { onKeyDown, onKeyUp }; - }, [activeDropTarget, setTargetOfIndex]); - - const dragStart = useCallback( - (e: DroppableEvent | KeyboardEvent, keyboardModeOn?: boolean) => { - // Setting stopPropgagation causes Chrome failures, so - // we are manually checking if we've already handled this - // in a nested child, and doing nothing if so... - if (e && 'dataTransfer' in e && e.dataTransfer.getData('text')) { - return; - } - - // We only can reach the dragStart method if the element is draggable, - // so we know we have DraggableProps if we reach this code. - if (e && 'dataTransfer' in e) { - e.dataTransfer.setData('text', value.humanData.label); - - // Apply an optional class to the element being dragged so the ghost - // can be styled. We must add it to the actual element for a single - // frame before removing it so the ghost picks up the styling. - const current = e.currentTarget; - - if (dragClassName && !current.classList.contains(dragClassName)) { - current.classList.add(dragClassName); - requestAnimationFrame(() => { - current.classList.remove(dragClassName); - }); - } - } - - // Chrome causes issues if you try to render from within a - // dragStart event, so we drop a setTimeout to avoid that. - - const currentTarget = e?.currentTarget; - - setTimeout(() => { - dndDispatch({ - type: 'startDragging', - payload: { - ...(keyboardModeOn ? { keyboardMode: true } : {}), - dragging: { - ...value, - ghost: keyboardModeOn - ? { - children, - style: { - width: currentTarget.offsetWidth, - minHeight: currentTarget?.offsetHeight, - }, - } - : undefined, - }, - }, - }); - onDragStart?.(currentTarget); - }); - }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [dndDispatch, value, onDragStart] - ); - - const dragEnd = useCallback( - (e?: DroppableEvent) => { - e?.stopPropagation(); - - dndDispatch({ - type: 'endDragging', - payload: { dragging: value }, - }); - onDragEnd?.(); - }, - [dndDispatch, value, onDragEnd] - ); - - const setNextTarget = (e: KeyboardEvent, reversed = false) => { - const nextTarget = nextValidDropTarget( - dropTargetsByOrder, - activeDropTarget, - [order.join(',')], - (el) => el?.dropType !== 'reorder', - reversed - ); - - if (e.altKey && nextTarget?.id) { - setTargetOfIndex(nextTarget.id, 1); - } else if (e.shiftKey && nextTarget?.id) { - setTargetOfIndex(nextTarget.id, 2); - } else if (e.ctrlKey && nextTarget?.id) { - setTargetOfIndex(nextTarget.id, 3); - } else { - setTarget(nextTarget); - } - }; - - const dropToActiveDropTarget = () => { - if (activeDropTarget) { - const { dropType, onDrop } = activeDropTarget; - setTimeout(() => { - dndDispatch({ - type: 'dropToTarget', - payload: { - dragging: value, - dropTarget: activeDropTarget, - }, - }); - }); - onDrop(value, dropType); - } - }; - - const shouldShowGhostImageInstead = - dragType === 'move' && - keyboardMode && - activeDropTarget && - activeDropTarget.dropType !== 'reorder'; - - return ( -
- -
- ); -}); - -const DropsInner = memo(function DropsInner(props: DropsInnerProps) { - const { - dataTestSubj, - className, - onDrop, - value, - children, - draggable, - dndState, - dndDispatch, - isNotDroppable, - dropTypes, - order, - getAdditionalClassesOnEnter, - getAdditionalClassesOnDroppable, - getCustomDropTarget, - } = props; - - const { dragging, activeDropTarget, dataTestSubjPrefix, keyboardMode } = dndState; - - const [isInZone, setIsInZone] = useState(false); - const mainTargetRef = useRef(null); - - useShallowCompareEffect(() => { - if (dropTypes && dropTypes?.[0] && onDrop && keyboardMode) { - dndDispatch({ - type: 'registerDropTargets', - payload: dropTypes.reduce( - (acc, dropType, index) => ({ - ...acc, - [[...props.order, index].join(',')]: { ...value, onDrop, dropType }, - }), - {} - ), - }); - } - }, [order, dndDispatch, dropTypes, keyboardMode]); - - useEffect(() => { - let isMounted = true; - if (activeDropTarget && activeDropTarget.id !== value.id) { - setIsInZone(false); - } - setTimeout(() => { - if (!activeDropTarget && isMounted) { - setIsInZone(false); - } - }, 1000); - return () => { - isMounted = false; - }; - }, [activeDropTarget, setIsInZone, value.id]); - - const dragEnter = () => { - if (!isInZone) { - setIsInZone(true); - } - }; - - const getModifiedDropType = (e: DroppableEvent, dropType: DropType) => { - if (!dropTypes || dropTypes.length <= 1) { - return dropType; - } - const dropIndex = dropTypes.indexOf(dropType); - if (dropIndex > 0) { - return dropType; - } else if (dropIndex === 0) { - if (e.altKey && dropTypes[1]) { - return dropTypes[1]; - } else if (e.shiftKey && dropTypes[2]) { - return dropTypes[2]; - } else if (e.ctrlKey && (dropTypes.length > 3 ? dropTypes[3] : dropTypes[1])) { - return dropTypes.length > 3 ? dropTypes[3] : dropTypes[1]; - } - } - return dropType; - }; - - const dragOver = (e: DroppableEvent, dropType: DropType) => { - e.preventDefault(); - if (!dragging || !onDrop) { - return; - } - - const modifiedDropType = getModifiedDropType(e, dropType); - const isActiveDropTarget = !!( - activeDropTarget?.id === value.id && activeDropTarget?.dropType === modifiedDropType - ); - // An optimization to prevent a bunch of React churn. - if (!isActiveDropTarget) { - dndDispatch({ - type: 'selectDropTarget', - payload: { - dropTarget: { ...value, dropType: modifiedDropType, onDrop }, - dragging, - }, - }); - } - }; - - const dragLeave = () => { - dndDispatch({ type: 'leaveDropTarget' }); - }; - - const drop = (e: DroppableEvent, dropType: DropType) => { - e.preventDefault(); - e.stopPropagation(); - setIsInZone(false); - if (onDrop && dragging) { - const modifiedDropType = getModifiedDropType(e, dropType); - onDrop(dragging, modifiedDropType); - setTimeout(() => { - dndDispatch({ - type: 'dropToTarget', - payload: { - dragging, - dropTarget: { ...value, dropType: modifiedDropType, onDrop }, - }, - }); - }); - } - dndDispatch({ type: 'resetState' }); - }; - - const getProps = (dropType?: DropType, dropChildren?: ReactElement) => { - const isActiveDropTarget = Boolean( - activeDropTarget?.id === value.id && dropType === activeDropTarget?.dropType - ); - return { - 'data-test-subj': dataTestSubj || dataTestSubjPrefix, - className: getClasses(dropType, dropChildren), - onDragEnter: dragEnter, - onDragLeave: dragLeave, - onDragOver: dropType ? (e: DroppableEvent) => dragOver(e, dropType) : noop, - onDrop: dropType ? (e: DroppableEvent) => drop(e, dropType) : noop, - draggable, - ghost: - (isActiveDropTarget && dropType !== 'reorder' && dragging?.ghost && dragging.ghost) || - undefined, - }; - }; - - const getClasses = (dropType?: DropType, dropChildren = children) => { - const isActiveDropTarget = Boolean( - activeDropTarget?.id === value.id && dropType === activeDropTarget?.dropType - ); - const classesOnDroppable = getAdditionalClassesOnDroppable?.(dropType); - - const classes = classNames( - 'domDragDrop', - { - 'domDragDrop-isDraggable': draggable, - 'domDragDrop-isDroppable': !draggable, - 'domDragDrop-isDropTarget': dropType, - 'domDragDrop-isActiveDropTarget': dropType && isActiveDropTarget, - 'domDragDrop-isNotDroppable': isNotDroppable, - }, - classesOnDroppable && { [classesOnDroppable]: dropType } - ); - return classNames(classes, className, dropChildren.props.className); - }; - - const getMainTargetClasses = () => { - const classesOnEnter = getAdditionalClassesOnEnter?.(activeDropTarget?.dropType); - return classNames(classesOnEnter && { [classesOnEnter]: activeDropTarget?.id === value.id }); - }; - - const mainTargetProps = getProps(dropTypes && dropTypes[0]); - - return ( -
- - {dropTypes && dropTypes.length > 1 && ( - - {dropTypes.slice(1).map((dropType) => { - const dropChildren = getCustomDropTarget?.(dropType); - return dropChildren ? ( - - - {dropChildren} - - - ) : null; - })} - - )} -
- ); -}); - -const SingleDropInner = ({ - ghost, - children, - ...rest -}: { - ghost?: Ghost; - children: ReactElement; - style?: React.CSSProperties; - className?: string; -}) => { - return ( - <> - {React.cloneElement(children, rest)} - {ghost - ? React.cloneElement(ghost.children, { - className: classNames(ghost.children.props.className, 'domDragDrop_ghost'), - style: ghost.style, - }) - : null} - - ); -}; - -const ReorderableDrag = memo(function ReorderableDrag( - props: DragInnerProps & { reorderableGroup: Array<{ id: string }>; dragging?: DragDropIdentifier } -) { - const [{ isReorderOn, reorderedItems, direction }, reorderDispatch] = useContext(ReorderContext); - - const { value, activeDraggingProps, reorderableGroup, dndDispatch, dataTestSubjPrefix } = props; - - const { keyboardMode, activeDropTarget, dropTargetsByOrder } = activeDraggingProps || {}; - const isDragging = !!activeDraggingProps; - - const isFocusInGroup = keyboardMode - ? isDragging && - (!activeDropTarget || reorderableGroup.some((i) => i.id === activeDropTarget?.id)) - : isDragging; - - useEffect(() => { - reorderDispatch({ - type: 'setIsReorderOn', - payload: isFocusInGroup, - }); - }, [reorderDispatch, isFocusInGroup]); - - const onReorderableDragStart = ( - currentTarget?: - | DroppableEvent['currentTarget'] - | KeyboardEvent['currentTarget'] - ) => { - if (currentTarget) { - setTimeout(() => { - reorderDispatch({ - type: 'registerDraggingItemHeight', - payload: currentTarget.offsetHeight + REORDER_OFFSET, - }); - }); - } - }; - - const onReorderableDragEnd = () => { - reorderDispatch({ type: 'reset' }); - }; - - const extraKeyboardHandler = (e: KeyboardEvent) => { - if (isReorderOn && keyboardMode) { - e.stopPropagation(); - e.preventDefault(); - let activeDropTargetIndex = reorderableGroup.findIndex((i) => i.id === value.id); - if (activeDropTarget) { - const index = reorderableGroup.findIndex((i) => i.id === activeDropTarget?.id); - if (index !== -1) activeDropTargetIndex = index; - } - if (e.key === keys.ARROW_LEFT || e.key === keys.ARROW_RIGHT) { - reorderDispatch({ type: 'reset' }); - } else if (keys.ARROW_DOWN === e.key) { - if (activeDropTargetIndex < reorderableGroup.length - 1) { - const nextTarget = nextValidDropTarget( - dropTargetsByOrder, - activeDropTarget, - [props.order.join(',')], - (el) => el?.dropType === 'reorder' - ); - onReorderableDragOver(nextTarget); - } - } else if (keys.ARROW_UP === e.key) { - if (activeDropTargetIndex > 0) { - const nextTarget = nextValidDropTarget( - dropTargetsByOrder, - activeDropTarget, - [props.order.join(',')], - (el) => el?.dropType === 'reorder', - true - ); - onReorderableDragOver(nextTarget); - } - } - } - }; - - const onReorderableDragOver = (target?: DropIdentifier) => { - if (!target) { - reorderDispatch({ type: 'reset' }); - dndDispatch({ type: 'leaveDropTarget' }); - return; - } - const droppingIndex = reorderableGroup.findIndex((i) => i.id === target.id); - const draggingIndex = reorderableGroup.findIndex((i) => i.id === value?.id); - if (draggingIndex === -1) { - return; - } - - dndDispatch({ - type: 'selectDropTarget', - payload: { - dropTarget: target, - dragging: value, - }, - }); - reorderDispatch({ - type: 'setReorderedItems', - payload: { draggingIndex, droppingIndex, items: reorderableGroup }, - }); - }; - - const areItemsReordered = keyboardMode && isDragging && reorderedItems.length; - - return ( -
acc + (el.height ?? 0) + REORDER_OFFSET, - 0 - )}px)`, - } - : undefined - } - > - -
- ); -}); - -const ReorderableDrop = memo(function ReorderableDrop( - props: DropsInnerProps & { reorderableGroup: Array<{ id: string }> } -) { - const { onDrop, value, dndState, dndDispatch, reorderableGroup } = props; - - const { dragging, dataTestSubjPrefix, activeDropTarget } = dndState; - const currentIndex = reorderableGroup.findIndex((i) => i.id === value.id); - - const [{ isReorderOn, reorderedItems, draggingHeight, direction }, reorderDispatch] = - useContext(ReorderContext); - - const heightRef = useRef(null); - - const isReordered = - isReorderOn && reorderedItems.some((el) => el.id === value.id) && reorderedItems.length; - - useEffect(() => { - if (isReordered && heightRef.current?.clientHeight) { - reorderDispatch({ - type: 'registerReorderedItemHeight', - payload: { id: value.id, height: heightRef.current.clientHeight }, - }); - } - }, [isReordered, reorderDispatch, value.id]); - - const onReorderableDragOver = (e: DroppableEvent) => { - e.preventDefault(); - // An optimization to prevent a bunch of React churn. - if (activeDropTarget?.id !== value?.id && onDrop) { - const draggingIndex = reorderableGroup.findIndex((i) => i.id === dragging?.id); - if (!dragging || draggingIndex === -1) { - return; - } - - const droppingIndex = currentIndex; - if (draggingIndex === droppingIndex) { - reorderDispatch({ type: 'reset' }); - } - - reorderDispatch({ - type: 'setReorderedItems', - payload: { draggingIndex, droppingIndex, items: reorderableGroup }, - }); - dndDispatch({ - type: 'selectDropTarget', - payload: { - dropTarget: { ...value, dropType: 'reorder', onDrop }, - dragging, - }, - }); - } - }; - - const onReorderableDrop = (e: DroppableEvent) => { - e.preventDefault(); - e.stopPropagation(); - - if (onDrop && dragging) { - onDrop(dragging, 'reorder'); - // setTimeout ensures it will run after dragEnd messaging - setTimeout(() => { - dndDispatch({ - type: 'dropToTarget', - payload: { - dragging, - dropTarget: { ...value, dropType: 'reorder', onDrop }, - }, - }); - }); - } - dndDispatch({ type: 'resetState' }); - }; - - return ( -
-
i.id === value.id) - ? { - transform: `translateY(${direction}${draggingHeight}px)`, - } - : undefined - } - ref={heightRef} - data-test-subj={`${dataTestSubjPrefix}-translatableDrop`} - className="domDragDrop-translatableDrop domDragDrop-reorderable" - > - -
- -
{ - dndDispatch({ type: 'leaveDropTarget' }); - reorderDispatch({ type: 'reset' }); - }} - /> -
- ); -}); diff --git a/packages/kbn-dom-drag-drop/src/drag_drop_reordering.test.tsx b/packages/kbn-dom-drag-drop/src/drag_drop_reordering.test.tsx new file mode 100644 index 0000000000000..8db5349d373ee --- /dev/null +++ b/packages/kbn-dom-drag-drop/src/drag_drop_reordering.test.tsx @@ -0,0 +1,360 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { fireEvent, screen, act } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { Droppable, DroppableProps } from './droppable'; +import { Draggable } from './draggable'; +import { dataTransfer, generateDragDropValue, renderWithDragDropContext } from './test_utils'; +import { ReorderProvider } from './providers/reorder_provider'; + +jest.useFakeTimers({ legacyFakeTimers: true }); + +const originalOffsetHeight = Object.getOwnPropertyDescriptor( + HTMLElement.prototype, + 'clientHeight' +) || { value: 0 }; + +const expectLabel = (label: string) => + expect.objectContaining({ humanData: expect.objectContaining({ label }) }); + +describe('Drag and drop reordering', () => { + const onDrop = jest.fn(); + + afterEach(() => { + jest.clearAllMocks(); + }); + + type MaximumThreeDroppablesProps = [ + Partial?, + Partial?, + Partial? + ]; + + const renderDragAndDropGroup = ( + propsOverrides: MaximumThreeDroppablesProps = [{}, {}, {}], + contextOverrides = {} + ) => { + const values = propsOverrides.map((props, index) => { + return props?.value ? props.value : generateDragDropValue(`${index}`); + }); + const reorderableGroup = values.map((value) => ({ id: value.id })); + + const rtlRender = renderWithDragDropContext( + <> + + {propsOverrides.map((props, index) => { + return ( + + + + + + ); + })} + + + + + + , + undefined, + contextOverrides + ); + + const droppables = screen.queryAllByTestId('domDragDrop-reorderableDropLayer'); + const droppable = droppables[0]; + const draggableKeyboardHandlers = screen.queryAllByTestId('domDragDrop-keyboardHandler'); + const droppableContainers = screen.queryAllByTestId('domDragDropContainer'); + return { + ...rtlRender, + droppableContainer: droppableContainers[0], + startDragging: (index = 0) => { + const draggable = screen.getByTestId(`domDragDrop_domDraggable_${index}`); + fireEvent.dragStart(draggable, { dataTransfer }); + act(() => { + jest.runAllTimers(); + }); + }, + drop: (droppableIndex = 0, options = {}) => { + const dropEvent = new MouseEvent('drop', { ...options, bubbles: true }); + fireEvent(droppables[droppableIndex], dropEvent); + act(() => { + jest.runAllTimers(); + }); + }, + dragOver: (droppableIndex = 0, options = {}) => { + fireEvent.dragOver(droppables[droppableIndex], options); + + act(() => { + jest.runAllTimers(); + }); + }, + dragLeave: (droppableIndex = 0) => { + fireEvent.dragLeave(droppables[droppableIndex]); + act(() => { + jest.runAllTimers(); + }); + }, + startDraggingByKeyboard: (index = 0) => { + draggableKeyboardHandlers[index].focus(); + userEvent.keyboard('{enter}'); + act(() => { + jest.runAllTimers(); + }); + }, + dropByKeyboard: () => { + userEvent.keyboard('{enter}'); + act(() => { + jest.runAllTimers(); + }); + }, + cancelByKeyboard: () => { + userEvent.keyboard('{esc}'); + act(() => { + jest.runAllTimers(); + }); + }, + reorderDownByKeyboard: () => { + userEvent.keyboard('{arrowdown}'); + act(() => { + jest.runAllTimers(); + }); + }, + reorderUpByKeyboard: () => { + userEvent.keyboard('{arrowup}'); + act(() => { + jest.runAllTimers(); + }); + }, + dragOverToNextByKeyboard: () => { + userEvent.keyboard('{arrowright}'); + act(() => { + jest.runAllTimers(); + }); + }, + dragOverToPreviousByKeyboard: () => { + userEvent.keyboard('{arrowleft}'); + act(() => { + jest.runAllTimers(); + }); + }, + pressModifierKey: (key: '{Shift}' | '{Alt}' | '{Ctrl}') => { + userEvent.keyboard(key); + act(() => { + jest.runAllTimers(); + }); + }, + droppable, + droppables, + }; + }; + + beforeAll(() => { + Object.defineProperty(HTMLElement.prototype, 'clientHeight', { + configurable: true, + value: 40, + }); + }); + + afterAll(() => { + Object.defineProperty(HTMLElement.prototype, 'clientHeight', originalOffsetHeight); + }); + + test('runs onDrop when the element is dropped', () => { + const { startDragging, drop } = renderDragAndDropGroup(); + startDragging(0); + drop(1); + expect(onDrop).toBeCalled(); + }); + + test('reordered elements get extra styling showing the new position', () => { + const { startDragging, dragOver } = renderDragAndDropGroup(); + startDragging(0); + dragOver(1); + + expect(screen.getAllByTestId('domDragDrop-translatableDrop')[1]).toHaveStyle({ + transform: 'translateY(-48px)', + }); + expect(screen.getAllByTestId('domDragDrop-translatableDrop')[2]).not.toHaveStyle({ + transform: 'translateY(-48px)', + }); + dragOver(2); + expect(screen.getAllByTestId('domDragDrop-translatableDrop')[1]).toHaveStyle({ + transform: 'translateY(-48px)', + }); + expect(screen.getAllByTestId('domDragDrop-translatableDrop')[2]).toHaveStyle({ + transform: 'translateY(-48px)', + }); + }); + + describe('keyboard mode', () => { + test('doesn`t run onDrop when dropping into an original position without any other movements', () => { + const { startDraggingByKeyboard, dropByKeyboard } = renderDragAndDropGroup(); + // 0 -> 0 + startDraggingByKeyboard(0); + dropByKeyboard(); + expect(onDrop).not.toBeCalled(); + }); + test('doesn`t run onDrop when dropping into an original position after some movements', () => { + const { + startDraggingByKeyboard, + dropByKeyboard, + reorderDownByKeyboard, + reorderUpByKeyboard, + } = renderDragAndDropGroup(); + // 1 -> 1 + startDraggingByKeyboard(1); + reorderDownByKeyboard(); + reorderUpByKeyboard(); + dropByKeyboard(); + expect(onDrop).not.toBeCalled(); + }); + test('doesn’t run onDrop when the movement is cancelled', () => { + const { startDraggingByKeyboard, reorderDownByKeyboard, cancelByKeyboard } = + renderDragAndDropGroup(); + // 1 -> x + startDraggingByKeyboard(0); + reorderDownByKeyboard(); + reorderDownByKeyboard(); + cancelByKeyboard(); + expect(onDrop).not.toBeCalled(); + }); + test('runs onDrop when the element is reordered and dropped', () => { + const { + startDraggingByKeyboard, + dropByKeyboard, + reorderDownByKeyboard, + reorderUpByKeyboard, + } = renderDragAndDropGroup(); + // 0--> 2 + startDraggingByKeyboard(0); + reorderDownByKeyboard(); + reorderDownByKeyboard(); + dropByKeyboard(); + expect(onDrop).toBeCalledWith(expectLabel('0'), 'reorder'); + + // 2 --> 0 + startDraggingByKeyboard(2); + reorderUpByKeyboard(); + reorderUpByKeyboard(); + dropByKeyboard(); + expect(onDrop).toBeCalledWith(expectLabel('2'), 'reorder'); + }); + test('reordered elements get extra styling showing the new position from element 0 to element 2', () => { + const { startDraggingByKeyboard, reorderDownByKeyboard } = renderDragAndDropGroup(); + // 0--> 2 + startDraggingByKeyboard(0); + reorderDownByKeyboard(); + expect(screen.getAllByTestId('domDragDrop-reorderableDrag')[0]).toHaveStyle({ + transform: 'translateY(+48px)', + }); + expect(screen.getAllByTestId('domDragDrop-translatableDrop')[1]).toHaveStyle({ + transform: 'translateY(-48px)', + }); + expect(screen.getByText('Element no1')).toHaveClass('domDroppable--hover'); + reorderDownByKeyboard(); + expect(screen.getAllByTestId('domDragDrop-reorderableDrag')[0]).toHaveStyle({ + transform: 'translateY(+96px)', + }); + expect(screen.getAllByTestId('domDragDrop-translatableDrop')[1]).toHaveStyle({ + transform: 'translateY(-48px)', + }); + expect(screen.getAllByTestId('domDragDrop-translatableDrop')[2]).toHaveStyle({ + transform: 'translateY(-48px)', + }); + expect(screen.getByText('Element no2')).toHaveClass('domDroppable--hover'); + }); + + test('reordered elements get extra styling showing the new position from element 2 to element 0', () => { + const { startDraggingByKeyboard, reorderUpByKeyboard } = renderDragAndDropGroup(); + // 2 --> 0 + startDraggingByKeyboard(2); + reorderUpByKeyboard(); + expect(screen.getAllByTestId('domDragDrop-reorderableDrag')[2]).toHaveStyle({ + transform: 'translateY(-48px)', + }); + expect(screen.getAllByTestId('domDragDrop-translatableDrop')[1]).toHaveStyle({ + transform: 'translateY(+48px)', + }); + + expect(screen.getByText('Element no1')).toHaveClass('domDroppable--hover'); + reorderUpByKeyboard(); + expect(screen.getAllByTestId('domDragDrop-reorderableDrag')[2]).toHaveStyle({ + transform: 'translateY(-96px)', + }); + expect(screen.getAllByTestId('domDragDrop-translatableDrop')[1]).toHaveStyle({ + transform: 'translateY(+48px)', + }); + expect(screen.getAllByTestId('domDragDrop-translatableDrop')[0]).toHaveStyle({ + transform: 'translateY(+48px)', + }); + expect(screen.getByText('Element no0')).toHaveClass('domDroppable--hover'); + }); + + test('reorders through all the drop targets and then stops at the last element', () => { + const { + startDraggingByKeyboard, + reorderDownByKeyboard, + cancelByKeyboard, + reorderUpByKeyboard, + } = renderDragAndDropGroup(); + startDraggingByKeyboard(); + reorderDownByKeyboard(); + reorderDownByKeyboard(); + reorderDownByKeyboard(); + reorderDownByKeyboard(); + + expect(screen.getByText('Element no2')).toHaveClass('domDroppable--hover'); + cancelByKeyboard(); + startDraggingByKeyboard(2); + reorderUpByKeyboard(); + reorderUpByKeyboard(); + reorderUpByKeyboard(); + reorderUpByKeyboard(); + expect(screen.getByText('Element no0')).toHaveClass('domDroppable--hover'); + }); + + test('exits reordering and selects out of group target when hitting arrow left', () => { + const { + startDraggingByKeyboard, + cancelByKeyboard, + dragOverToPreviousByKeyboard, + dragOverToNextByKeyboard, + } = renderDragAndDropGroup(); + + startDraggingByKeyboard(); + dragOverToNextByKeyboard(); + expect(screen.getByText('Out of group')).toHaveClass('domDroppable--hover'); + cancelByKeyboard(); + startDraggingByKeyboard(); + dragOverToPreviousByKeyboard(); + expect(screen.getByText('Out of group')).toHaveClass('domDroppable--hover'); + }); + }); +}); diff --git a/packages/kbn-dom-drag-drop/src/draggable.test.tsx b/packages/kbn-dom-drag-drop/src/draggable.test.tsx new file mode 100644 index 0000000000000..883e796023f70 --- /dev/null +++ b/packages/kbn-dom-drag-drop/src/draggable.test.tsx @@ -0,0 +1,137 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { fireEvent, screen, within } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { act } from 'react-dom/test-utils'; +import { Draggable } from './draggable'; +import { Droppable } from './droppable'; +import { + generateDragDropValue, + renderWithDragDropContext, + dataTransfer, + EXACT, +} from './test_utils'; + +jest.useFakeTimers({ legacyFakeTimers: true }); + +describe('Draggable', () => { + const renderDraggable = (propsOverrides = {}) => { + const rtlRender = renderWithDragDropContext( + <> + + + + + + + + ); + + const draggable = screen.getByTestId('domDragDrop_domDraggable_drag_this'); + const draggableKeyboardHandler = screen.getByTestId('domDragDrop-keyboardHandler'); + const droppable = screen.getByTestId('domDragDrop-domDroppable'); + + return { + ...rtlRender, + draggable, + droppable, + startDragging: () => { + fireEvent.dragStart(draggable, { dataTransfer }); + act(() => { + jest.runAllTimers(); + }); + }, + startDraggingByKeyboard: () => { + draggableKeyboardHandler.focus(); + userEvent.keyboard('{enter}'); + act(() => { + jest.runAllTimers(); + }); + }, + dragOverToNextByKeyboard: () => { + userEvent.keyboard('{arrowright}'); + act(() => { + jest.runAllTimers(); + }); + }, + endDragging: () => { + fireEvent.dragEnd(draggable, { dataTransfer }); + act(() => { + jest.runAllTimers(); + }); + }, + dragOver: () => { + fireEvent.dragOver(droppable); + act(() => { + jest.runAllTimers(); + }); + }, + }; + }; + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('makes component draggable', () => { + const { draggable } = renderDraggable(); + expect(draggable).toHaveProperty('draggable', true); + }); + + test('removes selection on mouse down before dragging', async () => { + const removeAllRanges = jest.fn(); + global.getSelection = jest.fn(() => ({ removeAllRanges } as unknown as Selection)); + const { draggable } = renderDraggable(); + fireEvent.mouseDown(draggable); + expect(global.getSelection).toBeCalled(); + expect(removeAllRanges).toBeCalled(); + }); + + test('on drag start, sets text in dataTransfer', async () => { + const { startDragging } = renderDraggable(); + + startDragging(); + expect(dataTransfer.setData).toBeCalledWith('text', 'drag_this'); + }); + test('className is added when draggable is being dragged', async () => { + const { startDragging, draggable, endDragging } = renderDraggable({ + dragClassName: 'dragTest', + }); + expect(draggable).toHaveClass('domDraggable', EXACT); + startDragging(); + expect(draggable).toHaveClass('domDraggable domDraggable_active--move', EXACT); + endDragging(); + expect(draggable).toHaveClass('domDraggable', EXACT); + }); + + describe('keyboard mode', () => { + test('dragClassName is added to ghost when element is dragged', async () => { + const { startDraggingByKeyboard, dragOverToNextByKeyboard, droppable } = renderDraggable({ + dragClassName: 'dragTest', + }); + startDraggingByKeyboard(); + dragOverToNextByKeyboard(); + expect(droppable).toHaveClass('domDroppable domDroppable--active domDroppable--hover', EXACT); + expect(within(screen.getByTestId('domDragDropContainer')).getByText('Drag this')).toHaveClass( + 'dragTest' + ); + }); + }); +}); diff --git a/packages/kbn-dom-drag-drop/src/draggable.tsx b/packages/kbn-dom-drag-drop/src/draggable.tsx new file mode 100644 index 0000000000000..d8c6a55e4dd9e --- /dev/null +++ b/packages/kbn-dom-drag-drop/src/draggable.tsx @@ -0,0 +1,545 @@ +/* + * Copyright 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, { useContext, useCallback, useEffect, memo, useMemo } from 'react'; +import type { KeyboardEvent, ReactElement } from 'react'; +import classNames from 'classnames'; +import { keys, EuiScreenReaderOnly } from '@elastic/eui'; +import { + DragDropIdentifier, + DropIdentifier, + nextValidDropTarget, + ReorderContext, + RegisteredDropTargets, + DragDropAction, + useDragDropContext, +} from './providers'; +import { REORDER_ITEM_MARGIN } from './constants'; +import './sass/draggable.scss'; + +type DragEvent = React.DragEvent; + +/** + * The base props to the Draggable component. + */ +interface DraggableProps { + /** + * The CSS class(es) for the root element. + */ + className?: string; + /** + * CSS class to apply when the item is being dragged + */ + dragClassName?: string; + + /** + * The event handler that fires when this element is dragged. + */ + onDragStart?: ( + target?: DragEvent['currentTarget'] | KeyboardEvent['currentTarget'] + ) => void; + /** + * The event handler that fires when the dragging of this element ends. + */ + onDragEnd?: () => void; + /** + * The value associated with this item. + */ + value: DragDropIdentifier; + + /** + * The React element which will be passed the draggable handlers + */ + children: ReactElement; + + /** + * Disable any drag & drop behaviour + */ + isDisabled?: boolean; + + /** + * The optional test subject associated with this DOM element. + */ + dataTestSubj?: string; + + /** + * items belonging to the same group that can be reordered + */ + reorderableGroup?: Array<{ id: string }>; + + /** + * Indicates to the user whether the currently dragged item + * will be moved or copied + */ + dragType: 'copy' | 'move'; + + /** + * Order for keyboard dragging. This takes an array of numbers which will be used to order hierarchically + */ + order: number[]; +} + +/** + * The props for a draggable instance of that component. + */ +interface DraggableImplProps extends DraggableProps { + dndDispatch: React.Dispatch; + dataTestSubjPrefix?: string; + draggedItemProps?: { + keyboardMode: boolean; + hoveredDropTarget?: DropIdentifier; + dropTargetsByOrder: RegisteredDropTargets; + }; + extraKeyboardHandler?: (e: KeyboardEvent) => void; + ariaDescribedBy?: string; +} + +const REORDER_OFFSET = REORDER_ITEM_MARGIN / 2; + +/** + * Draggable component + * @param props + * @constructor + */ +export const Draggable = ({ reorderableGroup, ...props }: DraggableProps) => { + const [ + { dragging, dropTargetsByOrder, hoveredDropTarget, keyboardMode, dataTestSubjPrefix }, + dndDispatch, + ] = useDragDropContext(); + + if (props.isDisabled) { + return props.children; + } + + const isDragging = props.value.id === dragging?.id; + + const draggableProps = { + ...props, + draggedItemProps: isDragging + ? { + keyboardMode, + hoveredDropTarget, + dropTargetsByOrder, + } + : undefined, + dataTestSubjPrefix, + dndDispatch, + }; + if (reorderableGroup && reorderableGroup.length > 1) { + return ; + } else { + return ; + } +}; + +const removeSelection = () => { + const selection = window.getSelection(); + if (selection) { + selection.removeAllRanges(); + } +}; + +const DraggableImpl = memo(function DraggableImpl({ + dataTestSubj, + className, + dragClassName, + value, + children, + dndDispatch, + order, + draggedItemProps, + dataTestSubjPrefix, + dragType, + onDragStart, + onDragEnd, + extraKeyboardHandler, + ariaDescribedBy, +}: DraggableImplProps) { + const { keyboardMode, hoveredDropTarget, dropTargetsByOrder } = draggedItemProps || {}; + + const setTarget = useCallback( + (target?: DropIdentifier) => { + if (!target) { + dndDispatch({ + type: 'leaveDropTarget', + }); + } else { + dndDispatch({ + type: 'selectDropTarget', + payload: { + dropTarget: target, + dragging: value, + }, + }); + } + }, + [dndDispatch, value] + ); + + const setTargetOfIndex = useCallback( + (id: string, index: number) => { + const dropTargetsForActiveId = + dropTargetsByOrder && + Object.values(dropTargetsByOrder).filter((dropTarget) => dropTarget?.id === id); + setTarget(dropTargetsForActiveId?.[index]); + }, + [dropTargetsByOrder, setTarget] + ); + const modifierHandlers = useMemo(() => { + const onKeyUp = (e: KeyboardEvent) => { + e.preventDefault(); + if (hoveredDropTarget?.id && ['Shift', 'Alt', 'Control'].includes(e.key)) { + if (e.altKey) { + setTargetOfIndex(hoveredDropTarget.id, 1); + } else if (e.shiftKey) { + setTargetOfIndex(hoveredDropTarget.id, 2); + } else if (e.ctrlKey) { + // the control option is available either for new or existing cases, + // so need to offset based on some flags + const offsetIndex = + Number(hoveredDropTarget.humanData.canSwap) + + Number(hoveredDropTarget.humanData.canDuplicate); + setTargetOfIndex(hoveredDropTarget.id, offsetIndex + 1); + } else { + setTargetOfIndex(hoveredDropTarget.id, 0); + } + } + }; + const onKeyDown = (e: KeyboardEvent) => { + e.preventDefault(); + if (e.key === 'Alt' && hoveredDropTarget?.id) { + setTargetOfIndex(hoveredDropTarget.id, 1); + } else if (e.key === 'Shift' && hoveredDropTarget?.id) { + setTargetOfIndex(hoveredDropTarget.id, 2); + } else if (e.key === 'Control' && hoveredDropTarget?.id) { + // the control option is available either for new or existing cases, + // so need to offset based on some flags + const offsetIndex = + Number(hoveredDropTarget.humanData.canSwap) + + Number(hoveredDropTarget.humanData.canDuplicate); + setTargetOfIndex(hoveredDropTarget.id, offsetIndex + 1); + } + }; + return { onKeyDown, onKeyUp }; + }, [hoveredDropTarget, setTargetOfIndex]); + + const dragStart = useCallback( + (e: DragEvent | KeyboardEvent, keyboardModeOn?: boolean) => { + // Setting stopPropgagation causes Chrome failures, so + // we are manually checking if we've already handled this + // in a nested child, and doing nothing if so... + if (e && 'dataTransfer' in e && e.dataTransfer.getData('text')) { + return; + } + + // We only can reach the dragStart method if the element is draggable, + // so we know we have DraggableProps if we reach this code. + if (e && 'dataTransfer' in e) { + e.dataTransfer.setData('text', value.humanData.label); + } + + // Chrome causes issues if you try to render from within a + // dragStart event, so we drop a setTimeout to avoid that. + + const currentTarget = e?.currentTarget; + onDragStart?.(e?.currentTarget); + + // Apply an optional class to the element being dragged so the ghost + // can be styled. We must add it to the actual element for a single + // frame before removing it so the ghost picks up the styling. + const current = e.currentTarget; + + if (dragClassName && !current.classList.contains(dragClassName)) { + current.classList.add(dragClassName); + requestAnimationFrame(() => { + current.classList.remove(dragClassName); + }); + } + + setTimeout(() => { + dndDispatch({ + type: 'startDragging', + payload: { + ...(keyboardModeOn ? { keyboardMode: true } : {}), + dragging: { + ...value, + ghost: keyboardModeOn + ? { + children, + className: classNames(dragClassName), + style: { + width: currentTarget.offsetWidth, + minHeight: currentTarget?.offsetHeight, + zIndex: 1000, + }, + } + : undefined, + }, + }, + }); + }); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [dndDispatch, value, onDragStart] + ); + + const dragEnd = useCallback( + (e?: DragEvent) => { + e?.stopPropagation(); + + dndDispatch({ + type: 'endDragging', + payload: { dragging: value }, + }); + onDragEnd?.(); + }, + [dndDispatch, value, onDragEnd] + ); + + const setNextTarget = (e: KeyboardEvent, reversed = false) => { + const nextTarget = nextValidDropTarget( + dropTargetsByOrder, + hoveredDropTarget, + [order.join(',')], + (el) => el?.dropType !== 'reorder', + reversed + ); + if (typeof nextTarget === 'string' || nextTarget === undefined) { + return setTarget(undefined); + } else if (e.altKey) { + return setTargetOfIndex(nextTarget.id, 1); + } else if (e.shiftKey) { + return setTargetOfIndex(nextTarget.id, 2); + } else if (e.ctrlKey) { + return setTargetOfIndex(nextTarget.id, 3); + } + return setTarget(nextTarget); + }; + + const dropToSelectedDropTarget = () => { + if (hoveredDropTarget) { + const { dropType, onDrop } = hoveredDropTarget; + setTimeout(() => { + dndDispatch({ + type: 'dropToTarget', + payload: { + dragging: value, + dropTarget: hoveredDropTarget, + }, + }); + }); + onDrop(value, dropType); + } + }; + + const shouldShowGhostImageInstead = + dragType === 'move' && + keyboardMode && + hoveredDropTarget && + hoveredDropTarget.dropType !== 'reorder'; + + return ( +
+ +
+ ); +}); + +const ReorderableDraggableImpl = memo(function ReorderableDraggableImpl( + props: DraggableImplProps & { + reorderableGroup: Array<{ id: string }>; + dragging?: DragDropIdentifier; + } +) { + const [{ isReorderOn, reorderedItems, direction }, reorderDispatch] = useContext(ReorderContext); + + const { value, draggedItemProps, reorderableGroup, dndDispatch, dataTestSubjPrefix } = props; + + const { keyboardMode, hoveredDropTarget, dropTargetsByOrder } = draggedItemProps || {}; + const isDragging = !!draggedItemProps; + + const isFocusInGroup = keyboardMode + ? isDragging && + (!hoveredDropTarget || reorderableGroup.some((i) => i.id === hoveredDropTarget?.id)) + : isDragging; + + useEffect(() => { + return () => reorderDispatch({ type: 'dragEnd' }); + }, [reorderDispatch]); + + useEffect(() => { + reorderDispatch({ + type: 'setIsReorderOn', + payload: isFocusInGroup, + }); + }, [reorderDispatch, isFocusInGroup]); + + const onReorderableDragStart = ( + currentTarget?: DragEvent['currentTarget'] | KeyboardEvent['currentTarget'] + ) => { + if (currentTarget) { + setTimeout(() => { + reorderDispatch({ + type: 'registerDraggingItemHeight', + payload: currentTarget.clientHeight + REORDER_OFFSET, + }); + }); + } + }; + + const onReorderableDragEnd = () => { + reorderDispatch({ type: 'dragEnd' }); + }; + + const extraKeyboardHandler = (e: KeyboardEvent) => { + if (isReorderOn && keyboardMode) { + e.stopPropagation(); + e.preventDefault(); + let activeDropTargetIndex = reorderableGroup.findIndex((i) => i.id === value.id); + if (hoveredDropTarget) { + const index = reorderableGroup.findIndex((i) => i.id === hoveredDropTarget?.id); + if (index !== -1) activeDropTargetIndex = index; + } + if (e.key === keys.ARROW_LEFT || e.key === keys.ARROW_RIGHT) { + reorderDispatch({ type: 'reset' }); + } else if (keys.ARROW_DOWN === e.key) { + if (activeDropTargetIndex < reorderableGroup.length - 1) { + const nextTarget = nextValidDropTarget( + dropTargetsByOrder, + hoveredDropTarget, + [props.order.join(',')], + (el) => el?.dropType === 'reorder' + ); + onReorderableDragOver(nextTarget); + } + } else if (keys.ARROW_UP === e.key) { + if (activeDropTargetIndex > 0) { + const nextTarget = nextValidDropTarget( + dropTargetsByOrder, + hoveredDropTarget, + [props.order.join(',')], + (el) => el?.dropType === 'reorder', + true + ); + onReorderableDragOver(nextTarget); + } + } + } + }; + + const onReorderableDragOver = (target?: DropIdentifier) => { + if (!target) { + reorderDispatch({ type: 'reset' }); + dndDispatch({ type: 'leaveDropTarget' }); + return; + } + const droppingIndex = reorderableGroup.findIndex((i) => i.id === target.id); + const draggingIndex = reorderableGroup.findIndex((i) => i.id === value?.id); + if (draggingIndex === -1) { + return; + } + + dndDispatch({ + type: 'selectDropTarget', + payload: { + dropTarget: target, + dragging: value, + }, + }); + reorderDispatch({ + type: 'setReorderedItems', + payload: { draggingIndex, droppingIndex, items: reorderableGroup }, + }); + }; + + const areItemsReordered = keyboardMode && isDragging && reorderedItems.length; + + return ( +
acc + (el.height ?? 0) + REORDER_OFFSET, + 0 + )}px)`, + } + : undefined + } + > + +
+ ); +}); diff --git a/packages/kbn-dom-drag-drop/src/drop_overlay_wrapper.tsx b/packages/kbn-dom-drag-drop/src/drop_overlay_wrapper.tsx index 590106157f304..65470de4d68d8 100644 --- a/packages/kbn-dom-drag-drop/src/drop_overlay_wrapper.tsx +++ b/packages/kbn-dom-drag-drop/src/drop_overlay_wrapper.tsx @@ -35,15 +35,12 @@ export const DropOverlayWrapper: React.FC = ({ ...otherProps }) => { return ( -
+
{children} {isVisible && (
)} diff --git a/packages/kbn-dom-drag-drop/src/drop_targets/swap_duplicate_combine.tsx b/packages/kbn-dom-drag-drop/src/drop_targets/swap_duplicate_combine.tsx index ff565a3c3b4de..9aaf055a1fea4 100644 --- a/packages/kbn-dom-drag-drop/src/drop_targets/swap_duplicate_combine.tsx +++ b/packages/kbn-dom-drag-drop/src/drop_targets/swap_duplicate_combine.tsx @@ -51,7 +51,7 @@ function getPropsForDropType(type: 'swap' | 'duplicate' | 'combine') { } } -const getExtraDrop = ({ +const getExtraTarget = ({ type, isIncompatible, }: { @@ -64,8 +64,8 @@ const getExtraDrop = ({ gutterSize="s" justifyContent="spaceBetween" alignItems="center" - className={classNames('domDragDrop__extraDrop', { - 'domDragDrop-incompatibleExtraDrop': isIncompatible, + className={classNames('domDroppable__extraTarget', { + 'domDroppable--incompatibleExtraTarget': isIncompatible, })} > @@ -88,15 +88,15 @@ const getExtraDrop = ({ }; const customDropTargetsMap: Partial<{ [dropType in DropType]: React.ReactElement }> = { - replace_duplicate_incompatible: getExtraDrop({ type: 'duplicate', isIncompatible: true }), - duplicate_incompatible: getExtraDrop({ type: 'duplicate', isIncompatible: true }), - swap_incompatible: getExtraDrop({ type: 'swap', isIncompatible: true }), - replace_duplicate_compatible: getExtraDrop({ type: 'duplicate' }), - duplicate_compatible: getExtraDrop({ type: 'duplicate' }), - swap_compatible: getExtraDrop({ type: 'swap' }), - field_combine: getExtraDrop({ type: 'combine' }), - combine_compatible: getExtraDrop({ type: 'combine' }), - combine_incompatible: getExtraDrop({ type: 'combine', isIncompatible: true }), + replace_duplicate_incompatible: getExtraTarget({ type: 'duplicate', isIncompatible: true }), + duplicate_incompatible: getExtraTarget({ type: 'duplicate', isIncompatible: true }), + swap_incompatible: getExtraTarget({ type: 'swap', isIncompatible: true }), + replace_duplicate_compatible: getExtraTarget({ type: 'duplicate' }), + duplicate_compatible: getExtraTarget({ type: 'duplicate' }), + swap_compatible: getExtraTarget({ type: 'swap' }), + field_combine: getExtraTarget({ type: 'combine' }), + combine_compatible: getExtraTarget({ type: 'combine' }), + combine_incompatible: getExtraTarget({ type: 'combine', isIncompatible: true }), }; export const getCustomDropTarget = (dropType: DropType) => customDropTargetsMap?.[dropType] || null; @@ -112,7 +112,7 @@ export const getAdditionalClassesOnEnter = (dropType?: string) => { 'replace_duplicate_incompatible', ].includes(dropType) ) { - return 'domDragDrop-isReplacing'; + return 'domDroppable--replacing'; } }; @@ -128,6 +128,6 @@ export const getAdditionalClassesOnDroppable = (dropType?: string) => { 'combine_incompatible', ].includes(dropType) ) { - return 'domDragDrop-notCompatible'; + return 'domDroppable--incompatible'; } }; diff --git a/packages/kbn-dom-drag-drop/src/droppable.test.tsx b/packages/kbn-dom-drag-drop/src/droppable.test.tsx new file mode 100644 index 0000000000000..14c4c5a722021 --- /dev/null +++ b/packages/kbn-dom-drag-drop/src/droppable.test.tsx @@ -0,0 +1,487 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { fireEvent, screen, act, within } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { Droppable } from './droppable'; +import { Draggable } from './draggable'; +import { + dataTransfer, + generateDragDropValue, + renderWithDragDropContext, + EXACT, +} from './test_utils'; + +jest.useFakeTimers({ legacyFakeTimers: true }); + +const draggableValue = generateDragDropValue('drag_this'); + +describe('Droppable', () => { + const onDrop = jest.fn(); + + afterEach(() => { + jest.clearAllMocks(); + }); + + const renderTestComponents = (propsOverrides = [{}]) => { + const rtlRender = renderWithDragDropContext( + <> + + + + {propsOverrides.map((propOverrides, index) => ( + + + + ))} + + ); + + const draggable = screen.getByTestId('domDragDrop_domDraggable_drag_this'); + const droppables = screen.queryAllByTestId('domDragDrop-domDroppable'); + const droppable = droppables[0]; + const draggableKeyboardHandler = screen.getByTestId('domDragDrop-keyboardHandler'); + const droppableContainers = screen.queryAllByTestId('domDragDropContainer'); + return { + ...rtlRender, + draggable, + droppableContainer: droppableContainers[0], + startDragging: () => { + fireEvent.dragStart(draggable, { dataTransfer }); + act(() => { + jest.runAllTimers(); + }); + }, + drop: (droppableIndex = 0, options = {}) => { + const dropEvent = new MouseEvent('drop', { ...options, bubbles: true }); + fireEvent(droppables[droppableIndex], dropEvent); + act(() => { + jest.runAllTimers(); + }); + }, + dragOver: (droppableIndex = 0, options = {}) => { + // const dropEvent = new MouseEvent('dragOver', options); + // fireEvent(droppables[droppableIndex], dropEvent); + + fireEvent.dragOver(droppables[droppableIndex], options); + + act(() => { + jest.runAllTimers(); + }); + }, + dragLeave: (droppableIndex = 0) => { + fireEvent.dragLeave(droppables[droppableIndex]); + act(() => { + jest.runAllTimers(); + }); + }, + startDraggingByKeyboard: () => { + draggableKeyboardHandler.focus(); + userEvent.keyboard('{enter}'); + act(() => { + jest.runAllTimers(); + }); + }, + dropByKeyboard: () => { + draggableKeyboardHandler.focus(); + userEvent.keyboard('{enter}'); + act(() => { + jest.runAllTimers(); + }); + }, + dragOverToNextByKeyboard: () => { + userEvent.keyboard('{arrowright}'); + act(() => { + jest.runAllTimers(); + }); + }, + dragOverToPreviousByKeyboard: () => { + userEvent.keyboard('{arrowleft}'); + act(() => { + jest.runAllTimers(); + }); + }, + pressModifierKey: (key: '{Shift}' | '{Alt}' | '{Ctrl}') => { + userEvent.keyboard(key); + act(() => { + jest.runAllTimers(); + }); + }, + droppable, + droppables, + }; + }; + + test('receives additional classname when is active dropType', () => { + const { droppable, startDragging } = renderTestComponents([{ dropTypes: ['field_add'] }]); + + expect(droppable).toHaveClass('domDroppable', EXACT); + startDragging(); + expect(droppable).toHaveClass('domDroppable domDroppable--active', EXACT); + }); + test('receives additional classname when is active dropType and has custom class', () => { + const { droppable, startDragging } = renderTestComponents([ + { + dropTypes: ['field_add'], + getAdditionalClassesOnEnter: () => 'customClassOnEnter', + getAdditionalClassesOnDroppable: () => 'customClassOnActive', + }, + ]); + + expect(droppable).toHaveClass('domDroppable', EXACT); + startDragging(); + expect(droppable).toHaveClass('domDroppable domDroppable--active customClassOnActive', EXACT); + }); + test('receives additional classname when is active dropType and has custom class on enter until dragleave', () => { + const { droppable, startDragging, dragOver, dragLeave } = renderTestComponents([ + { + dropTypes: ['field_add'], + getAdditionalClassesOnEnter: () => 'customClassOnEnter', + getAdditionalClassesOnDroppable: () => 'customClassOnActive', + }, + ]); + + expect(droppable).toHaveClass('domDroppable', EXACT); + startDragging(); + dragOver(); + expect(droppable).toHaveClass( + 'domDroppable domDroppable--active domDroppable--hover customClassOnActive customClassOnEnter', + EXACT + ); + dragLeave(); + expect(droppable).toHaveClass('domDroppable domDroppable--active customClassOnActive', EXACT); + }); + test('receives additional classname when is active dropType and has custom class on enter until drop', () => { + const { droppable, startDragging, dragOver, drop } = renderTestComponents([ + { + dropTypes: ['field_add'], + getAdditionalClassesOnEnter: () => 'customClassOnEnter', + getAdditionalClassesOnDroppable: () => 'customClassOnActive', + }, + ]); + + expect(droppable).toHaveClass('domDroppable', EXACT); + startDragging(); + dragOver(); + expect(droppable).toHaveClass( + 'domDroppable domDroppable--active domDroppable--hover customClassOnActive customClassOnEnter', + EXACT + ); + drop(); + expect(droppable).toHaveClass('domDroppable', EXACT); + }); + test('gets special styling when another item is dragged if droppable doesnt have dropTypes', () => { + const { droppable, startDragging } = renderTestComponents(); + startDragging(); + expect(droppable).toHaveClass('domDroppable domDroppable--notAllowed', EXACT); + }); + + test('drop function is not called on dropTypes undefined', async () => { + const { drop, startDragging } = renderTestComponents(); + startDragging(); + drop(); + expect(onDrop).not.toHaveBeenCalled(); + }); + + test('onDrop callback is executed when dropping', async () => { + const { startDragging, drop } = renderTestComponents([ + { + dropTypes: ['field_add'], + onDrop, + }, + ]); + startDragging(); + drop(); + expect(onDrop).toBeCalledWith( + expect.objectContaining({ humanData: expect.objectContaining({ label: 'drag_this' }) }), + 'field_add' + ); + }); + + describe('keyboard mode', () => { + test('drop targets get highlighted when pressing arrow keys and draggable get action class too', () => { + const { + droppables, + startDraggingByKeyboard, + dropByKeyboard, + dragOverToNextByKeyboard, + draggable, + } = renderTestComponents([{ dropTypes: ['field_add'] }, { dropTypes: ['field_add'] }]); + startDraggingByKeyboard(); + + expect(draggable).toHaveClass('domDraggable', EXACT); + expect(droppables[0]).toHaveClass('domDroppable domDroppable--active', EXACT); + expect(droppables[1]).toHaveClass('domDroppable domDroppable--active', EXACT); + + dragOverToNextByKeyboard(); + expect(draggable).toHaveClass( + 'domDraggable domDraggable_dragover_keyboard--move domDraggable_dragover_keyboard--copy', + EXACT + ); + expect(droppables[0]).toHaveClass( + 'domDroppable domDroppable--active domDroppable--hover', + EXACT + ); + expect(droppables[1]).toHaveClass('domDroppable domDroppable--active', EXACT); + dragOverToNextByKeyboard(); + expect(droppables[0]).toHaveClass('domDroppable domDroppable--active', EXACT); + expect(droppables[1]).toHaveClass( + 'domDroppable domDroppable--active domDroppable--hover', + EXACT + ); + dropByKeyboard(); + expect(draggable).toHaveClass('domDraggable', EXACT); + expect(droppables[0]).toHaveClass('domDroppable', EXACT); + expect(droppables[1]).toHaveClass('domDroppable', EXACT); + }); + test('executes onDrop callback when drops on drop target', () => { + const firstDroppableOnDrop = jest.fn(); + const secondDroppableOnDrop = jest.fn(); + const { startDraggingByKeyboard, dropByKeyboard, dragOverToNextByKeyboard } = + renderTestComponents([ + { dropTypes: ['field_add'], onDrop: firstDroppableOnDrop }, + { dropTypes: ['field_add'], onDrop: secondDroppableOnDrop }, + ]); + startDraggingByKeyboard(); + // goes to first target + dragOverToNextByKeyboard(); + // goes to second target + dragOverToNextByKeyboard(); + // drops on second target + dropByKeyboard(); + expect(firstDroppableOnDrop).not.toBeCalled(); + expect(secondDroppableOnDrop).toHaveBeenCalledWith(draggableValue, 'field_add'); + }); + test('adds ghost to droppable when element is dragged over', async () => { + const { startDraggingByKeyboard, droppables, draggable, dragOverToNextByKeyboard } = + renderTestComponents([{ dropTypes: ['field_add'] }, { dropTypes: ['field_add'] }]); + startDraggingByKeyboard(); + dragOverToNextByKeyboard(); + expect(droppables[0]).toHaveClass( + 'domDroppable domDroppable--active domDroppable--hover', + EXACT + ); + const domDragDropContainers = screen.queryAllByTestId('domDragDropContainer'); + + const ghostElement = within(domDragDropContainers[0]).getByText('Drag this'); + + expect(ghostElement).toHaveClass('domDraggable_ghost', EXACT); + expect(ghostElement.textContent).toEqual(draggable.textContent); + }); + }); + + describe('multiple drop targets', () => { + test('renders extra drop targets', () => { + const { droppables } = renderTestComponents([ + { + dropTypes: ['move_compatible', 'duplicate_compatible', 'swap_compatible'], + getCustomDropTarget: (dropType: string) =>
{dropType}
, + }, + ]); + expect(droppables).toHaveLength(3); + }); + test('extra drop targets appear when dragging over and disappear when hoveredDropTarget changes', () => { + const { dragLeave, dragOver, startDragging, droppableContainer } = renderTestComponents([ + { + dropTypes: ['move_compatible', 'duplicate_compatible', 'swap_compatible'], + getCustomDropTarget: (dropType: string) =>
{dropType}
, + }, + ]); + startDragging(); + expect(droppableContainer).toHaveClass('domDroppable__container', { exact: true }); + dragOver(); + expect(droppableContainer).toHaveClass( + 'domDroppable__container domDroppable__container-active', + { exact: true } + ); + expect(screen.queryAllByTestId('domDragDropExtraTargets')[0]).toHaveClass( + 'domDroppable__extraTargets-visible' + ); + dragLeave(); + expect(screen.queryAllByTestId('domDragDropExtraTargets')[0]).not.toHaveClass( + 'domDroppable__extraTargets-visible' + ); + }); + + test('correct dropTarget is highlighted within drop targets with the same value and different dropTypes', () => { + const { startDragging, dragOver, droppables, dragLeave } = renderTestComponents([ + { + dropTypes: ['move_compatible', 'duplicate_compatible', 'swap_compatible'], + getCustomDropTarget: (dropType: string) =>
{dropType}
, + }, + ]); + startDragging(); + dragOver(1); + expect(droppables[0]).toHaveClass('domDroppable domDroppable--active', EXACT); + expect(droppables[1]).toHaveClass( + 'domDroppable domDroppable--active domDroppable--hover extraDrop', + EXACT + ); + expect(droppables[2]).toHaveClass('domDroppable domDroppable--active extraDrop', EXACT); + dragLeave(1); + expect(droppables[0]).toHaveClass('domDroppable domDroppable--active', EXACT); + expect(droppables[1]).toHaveClass('domDroppable domDroppable--active extraDrop', EXACT); + expect(droppables[2]).toHaveClass('domDroppable domDroppable--active extraDrop', EXACT); + }); + + test('onDrop callback is executed when dropping on extra drop target', () => { + const { startDragging, dragOver, drop } = renderTestComponents([ + { + dropTypes: ['move_compatible', 'duplicate_compatible', 'swap_compatible'], + onDrop, + getCustomDropTarget: (dropType: string) =>
{dropType}
, + }, + ]); + startDragging(); + dragOver(); + drop(); + expect(onDrop).toBeCalledWith(draggableValue, 'move_compatible'); + startDragging(); + dragOver(1); + drop(1); + expect(onDrop).toBeCalledWith(draggableValue, 'duplicate_compatible'); + startDragging(); + dragOver(2); + drop(2); + expect(onDrop).toBeCalledWith(draggableValue, 'swap_compatible'); + }); + test('pressing Alt or Shift when dragging over the main drop target sets extra drop target as active', () => { + const { startDragging, dragOver, drop } = renderTestComponents([ + { + dropTypes: ['move_compatible', 'duplicate_compatible', 'swap_compatible'], + onDrop, + getCustomDropTarget: (dropType: string) =>
{dropType}
, + }, + ]); + startDragging(); + dragOver(0, { altKey: true }); + drop(0, { altKey: true }); + expect(onDrop).toBeCalledWith(draggableValue, 'duplicate_compatible'); + + startDragging(); + dragOver(0, { shiftKey: true }); + drop(0, { shiftKey: true }); + expect(onDrop).toBeCalledWith(draggableValue, 'swap_compatible'); + }); + test('pressing Alt or Shift when dragging over the extra drop target does nothing', () => { + const { startDragging, dragOver, drop } = renderTestComponents([ + { + dropTypes: ['move_compatible', 'duplicate_compatible', 'swap_compatible'], + onDrop, + getCustomDropTarget: (dropType: string) =>
{dropType}
, + }, + ]); + startDragging(); + dragOver(1, { shiftKey: true }); + drop(1, { shiftKey: true }); + expect(onDrop).toBeCalledWith(draggableValue, 'duplicate_compatible'); + }); + describe('keyboard mode', () => { + test('user can go through all the drop targets ', () => { + const { startDraggingByKeyboard, dragOverToNextByKeyboard, droppables, pressModifierKey } = + renderTestComponents([ + { + dropTypes: ['move_compatible', 'duplicate_compatible', 'swap_compatible'], + getCustomDropTarget: (dropType: string) => ( +
{dropType}
+ ), + }, + { + dropTypes: ['move_compatible'], + getCustomDropTarget: (dropType: string) => ( +
{dropType}
+ ), + }, + ]); + startDraggingByKeyboard(); + dragOverToNextByKeyboard(); + expect(droppables[0]).toHaveClass('domDroppable--hover'); + pressModifierKey('{Alt}'); + expect(droppables[1]).toHaveClass('domDroppable--hover'); + pressModifierKey('{Shift}'); + expect(droppables[2]).toHaveClass('domDroppable--hover'); + dragOverToNextByKeyboard(); + expect(droppables[3]).toHaveClass('domDroppable--hover'); + dragOverToNextByKeyboard(); + // we circled back to the draggable (no drop target is selected) + dragOverToNextByKeyboard(); + expect(droppables[0]).toHaveClass('domDroppable--hover'); + }); + test('user can go through all the drop targets in reverse direction', () => { + const { + startDraggingByKeyboard, + dragOverToPreviousByKeyboard, + droppables, + pressModifierKey, + } = renderTestComponents([ + { + dropTypes: ['move_compatible', 'duplicate_compatible', 'swap_compatible'], + getCustomDropTarget: (dropType: string) =>
{dropType}
, + }, + { + dropTypes: ['move_compatible'], + getCustomDropTarget: (dropType: string) =>
{dropType}
, + }, + ]); + startDraggingByKeyboard(); + dragOverToPreviousByKeyboard(); + expect(droppables[3]).toHaveClass('domDroppable--hover'); + dragOverToPreviousByKeyboard(); + expect(droppables[0]).toHaveClass('domDroppable--hover'); + pressModifierKey('{Alt}'); + expect(droppables[1]).toHaveClass('domDroppable--hover'); + pressModifierKey('{Shift}'); + expect(droppables[2]).toHaveClass('domDroppable--hover'); + dragOverToPreviousByKeyboard(); + // we circled back to the draggable (no drop target is selected) + dragOverToPreviousByKeyboard(); + expect(droppables[3]).toHaveClass('domDroppable--hover'); + }); + test('user can drop on extra drop targets', () => { + const { + startDraggingByKeyboard, + dragOverToNextByKeyboard, + dropByKeyboard, + pressModifierKey, + } = renderTestComponents([ + { + dropTypes: ['move_compatible', 'duplicate_compatible', 'swap_compatible'], + onDrop, + getCustomDropTarget: (dropType: string) =>
{dropType}
, + }, + ]); + startDraggingByKeyboard(); + dragOverToNextByKeyboard(); + dropByKeyboard(); + expect(onDrop).toHaveBeenCalledWith(draggableValue, 'move_compatible'); + onDrop.mockClear(); + + startDraggingByKeyboard(); + dragOverToNextByKeyboard(); + pressModifierKey('{Alt}'); + dropByKeyboard(); + expect(onDrop).toHaveBeenCalledWith(draggableValue, 'duplicate_compatible'); + onDrop.mockClear(); + + startDraggingByKeyboard(); + dragOverToNextByKeyboard(); + pressModifierKey('{Shift}'); + dropByKeyboard(); + expect(onDrop).toHaveBeenCalledWith(draggableValue, 'swap_compatible'); + }); + }); + }); +}); diff --git a/packages/kbn-dom-drag-drop/src/droppable.tsx b/packages/kbn-dom-drag-drop/src/droppable.tsx new file mode 100644 index 0000000000000..1d56e2d0c4b75 --- /dev/null +++ b/packages/kbn-dom-drag-drop/src/droppable.tsx @@ -0,0 +1,481 @@ +/* + * Copyright 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, { useContext, useCallback, useEffect, memo, useState, useRef } from 'react'; +import type { ReactElement } from 'react'; +import classNames from 'classnames'; +import { EuiFlexItem, EuiFlexGroup } from '@elastic/eui'; +import useShallowCompareEffect from 'react-use/lib/useShallowCompareEffect'; +import { + DragDropIdentifier, + ReorderContext, + DropHandler, + Ghost, + DragDropAction, + DragContextState, + useDragDropContext, +} from './providers'; +import { DropType } from './types'; +import './sass/droppable.scss'; + +type DroppableEvent = React.DragEvent; + +const noop = () => {}; + +/** + * The base props to the Droppable component. + */ +export interface DroppableProps { + /** + * The CSS class(es) for the root element. + */ + className?: string; + + /** + * The event handler that fires when an item + * is dropped onto this Droppable component. + */ + onDrop?: DropHandler; + /** + * The value associated with this item. + */ + value: DragDropIdentifier; + + /** + * The React element which will be passed the draggable handlers + */ + children: ReactElement; + + /** + * Disable any drag & drop behaviour + */ + isDisabled?: boolean; + /** + * Additional class names to apply when another element is over the drop target + */ + getAdditionalClassesOnEnter?: (dropType?: DropType) => string | undefined; + /** + * Additional class names to apply when another element is droppable for a currently dragged item + */ + getAdditionalClassesOnDroppable?: (dropType?: DropType) => string | undefined; + + /** + * The optional test subject associated with this DOM element. + */ + dataTestSubj?: string; + + /** + * items belonging to the same group that can be reordered + */ + reorderableGroup?: Array<{ id: string }>; + + /** + * Indicates the type of drop targets - when undefined, the currently dragged item + * cannot be dropped onto this component. + */ + dropTypes?: DropType[]; + /** + * Order for keyboard dragging. This takes an array of numbers which will be used to order hierarchically + */ + order: number[]; + /** + * Extra drop targets by dropType + */ + getCustomDropTarget?: (dropType: DropType) => ReactElement | null; +} + +/** + * The props for a non-draggable instance of that component. + */ +interface DropsInnerProps extends DroppableProps { + dndState: DragContextState; + dndDispatch: React.Dispatch; +} + +/** + * Droppable component + * @param props + * @constructor + */ +export const Droppable = (props: DroppableProps) => { + const [dndState, dndDispatch] = useDragDropContext(); + + if (props.isDisabled) { + return props.children; + } + + const { dropTypes, reorderableGroup } = props; + + const dropProps = { + ...props, + dndState, + dndDispatch, + }; + if (reorderableGroup && reorderableGroup.length > 1 && dropTypes?.[0] === 'reorder') { + return ; + } + return ; +}; + +const DroppableImpl = memo(function DroppableImpl(props: DropsInnerProps) { + const { + dataTestSubj, + className, + onDrop, + value, + children, + dndState, + dndDispatch, + dropTypes, + order, + getAdditionalClassesOnEnter, + getAdditionalClassesOnDroppable, + getCustomDropTarget, + } = props; + + const { dragging, hoveredDropTarget, dataTestSubjPrefix, keyboardMode } = dndState; + + const [isInZone, setIsInZone] = useState(false); + const mainTargetRef = useRef(null); + + useShallowCompareEffect(() => { + if (dropTypes && dropTypes?.[0] && onDrop && keyboardMode) { + dndDispatch({ + type: 'registerDropTargets', + payload: dropTypes.reduce( + (acc, dropType, index) => ({ + ...acc, + [[...order, index].join(',')]: { ...value, onDrop, dropType }, + }), + {} + ), + }); + } + }, [order, dndDispatch, dropTypes, keyboardMode]); + + useEffect(() => { + let isMounted = true; + if (hoveredDropTarget && hoveredDropTarget.id !== value.id) { + setIsInZone(false); + } + setTimeout(() => { + if (!hoveredDropTarget && isMounted) { + setIsInZone(false); + } + }, 1000); + return () => { + isMounted = false; + }; + }, [hoveredDropTarget, setIsInZone, value.id]); + + const dragEnter = useCallback(() => { + if (!isInZone) { + setIsInZone(true); + } + }, [isInZone]); + + const getModifiedDropType = useCallback( + (e: DroppableEvent, dropType: DropType) => { + if (!dropTypes || dropTypes.length <= 1) { + return dropType; + } + const dropIndex = dropTypes.indexOf(dropType); + if (dropIndex > 0) { + return dropType; + } else if (dropIndex === 0) { + if (e.altKey && dropTypes[1]) { + return dropTypes[1]; + } else if (e.shiftKey && dropTypes[2]) { + return dropTypes[2]; + } else if (e.ctrlKey && (dropTypes.length > 3 ? dropTypes[3] : dropTypes[1])) { + return dropTypes.length > 3 ? dropTypes[3] : dropTypes[1]; + } + } + return dropType; + }, + [dropTypes] + ); + + const dragOver = (e: DroppableEvent, dropType: DropType) => { + e.preventDefault(); + if (!dragging || !onDrop) { + return; + } + + const modifiedDropType = getModifiedDropType(e, dropType); + + const isSelectedDropTarget = !!( + hoveredDropTarget?.id === value.id && hoveredDropTarget?.dropType === modifiedDropType + ); + // An optimization to prevent a bunch of React churn. + if (!isSelectedDropTarget) { + dndDispatch({ + type: 'selectDropTarget', + payload: { + dropTarget: { ...value, dropType: modifiedDropType, onDrop }, + dragging, + }, + }); + } + }; + + const dragLeave = useCallback(() => { + dndDispatch({ type: 'leaveDropTarget' }); + }, [dndDispatch]); + + const drop = useCallback( + (e: DroppableEvent, dropType: DropType) => { + e.preventDefault(); + e.stopPropagation(); + setIsInZone(false); + if (onDrop && dragging) { + const modifiedDropType = getModifiedDropType(e, dropType); + onDrop(dragging, modifiedDropType); + setTimeout(() => { + dndDispatch({ + type: 'dropToTarget', + payload: { + dragging, + dropTarget: { ...value, dropType: modifiedDropType, onDrop }, + }, + }); + }); + } + dndDispatch({ type: 'resetState' }); + }, + [dndDispatch, onDrop, dragging, getModifiedDropType, value] + ); + const getProps = (dropType?: DropType, dropChildren?: ReactElement) => { + const isSelectedDropTarget = Boolean( + hoveredDropTarget?.id === value.id && dropType === hoveredDropTarget?.dropType + ); + + return { + 'data-test-subj': dataTestSubj || `${dataTestSubjPrefix}-domDroppable`, + className: getClasses(dropType, dropChildren), + onDragEnter: dragEnter, + onDragLeave: dragLeave, + onDragOver: dropType + ? (e: DroppableEvent) => { + dragOver(e, dropType); + } + : noop, + onDrop: dropType + ? (e: DroppableEvent) => { + drop(e, dropType); + } + : noop, + ghost: + (isSelectedDropTarget && dropType !== 'reorder' && dragging?.ghost && dragging.ghost) || + undefined, + }; + }; + + const getClasses = (dropType?: DropType, dropChildren = children) => { + const isSelectedDropTarget = Boolean( + hoveredDropTarget?.id === value.id && dropType === hoveredDropTarget?.dropType + ); + const classesOnDroppable = getAdditionalClassesOnDroppable?.(dropType); + + const classes = classNames( + 'domDroppable', + { + 'domDroppable--active': dragging && dropType, + 'domDroppable--hover': dropType && isSelectedDropTarget, + 'domDroppable--notAllowed': + dragging && (!dropTypes || !dropTypes.length) && value.id !== dragging.id, + }, + classesOnDroppable && { [classesOnDroppable]: dragging && dropType } + ); + return classNames(classes, className, dropChildren.props.className); + }; + + const getMainTargetClasses = () => { + const classesOnEnter = getAdditionalClassesOnEnter?.(hoveredDropTarget?.dropType); + return classNames(classesOnEnter && { [classesOnEnter]: hoveredDropTarget?.id === value.id }); + }; + + const mainTargetProps = getProps(dropTypes && dropTypes[0]); + + return ( +
+ + {children} + + {dropTypes && dropTypes.length > 1 && ( + + {dropTypes.slice(1).map((dropType) => { + const dropChildren = getCustomDropTarget?.(dropType); + return dropChildren ? ( + + + {dropChildren} + + + ) : null; + })} + + )} +
+ ); +}); + +const SingleDropInner = ({ + ghost, + children, + ...rest +}: { + ghost?: Ghost; + children: ReactElement; + style?: React.CSSProperties; + className?: string; +}) => { + return ( + <> + {React.cloneElement(children, rest)} + {ghost + ? React.cloneElement(ghost.children, { + className: classNames( + ghost.children.props.className, + ghost.className, + 'domDraggable_ghost' + ), + style: ghost.style, + }) + : null} + + ); +}; + +const ReorderableDroppableImpl = memo(function ReorderableDroppableImpl( + props: DropsInnerProps & { reorderableGroup: Array<{ id: string }> } +) { + const { onDrop, value, dndState, dndDispatch, reorderableGroup, className } = props; + + const { dragging, dataTestSubjPrefix, hoveredDropTarget } = dndState; + const currentIndex = reorderableGroup.findIndex((i) => i.id === value.id); + + const [{ isReorderOn, reorderedItems, draggingHeight, direction }, reorderDispatch] = + useContext(ReorderContext); + + const heightRef = useRef(null); + + const isReordered = + isReorderOn && reorderedItems.some((el) => el.id === value.id) && reorderedItems.length; + + useEffect(() => { + if (isReordered && heightRef.current?.clientHeight) { + reorderDispatch({ + type: 'registerReorderedItemHeight', + payload: { id: value.id, height: heightRef.current.clientHeight }, + }); + } + }, [isReordered, reorderDispatch, value.id]); + + const onReorderableDragOver = (e: DroppableEvent) => { + e.preventDefault(); + // An optimization to prevent a bunch of React churn. + if (hoveredDropTarget?.id !== value?.id && onDrop) { + const draggingIndex = reorderableGroup.findIndex((i) => i.id === dragging?.id); + if (!dragging || draggingIndex === -1) { + return; + } + + const droppingIndex = currentIndex; + if (draggingIndex === droppingIndex) { + reorderDispatch({ type: 'reset' }); + } + + reorderDispatch({ + type: 'setReorderedItems', + payload: { draggingIndex, droppingIndex, items: reorderableGroup }, + }); + dndDispatch({ + type: 'selectDropTarget', + payload: { + dropTarget: { ...value, dropType: 'reorder', onDrop }, + dragging, + }, + }); + } + }; + + const onReorderableDrop = (e: DroppableEvent) => { + e.preventDefault(); + e.stopPropagation(); + + if (onDrop && dragging) { + onDrop(dragging, 'reorder'); + // setTimeout ensures it will run after dragEnd messaging + setTimeout(() => { + dndDispatch({ + type: 'dropToTarget', + payload: { + dragging, + dropTarget: { ...value, dropType: 'reorder', onDrop }, + }, + }); + }); + } + dndDispatch({ type: 'resetState' }); + }; + + return ( + <> +
i.id === value.id) + ? { + transform: `translateY(${direction}${draggingHeight}px)`, + } + : undefined + } + ref={heightRef} + data-test-subj={`${dataTestSubjPrefix}-translatableDrop`} + className="domDroppable--translatable" + > + +
+ +
{ + dndDispatch({ type: 'leaveDropTarget' }); + reorderDispatch({ type: 'reset' }); + }} + /> + + ); +}); diff --git a/packages/kbn-dom-drag-drop/src/index.ts b/packages/kbn-dom-drag-drop/src/index.ts index 9fa4f37103522..75d1d2b35db00 100644 --- a/packages/kbn-dom-drag-drop/src/index.ts +++ b/packages/kbn-dom-drag-drop/src/index.ts @@ -8,5 +8,6 @@ export * from './types'; export * from './providers'; -export * from './drag_drop'; +export * from './draggable'; +export * from './droppable'; export { DropOverlayWrapper, type DropOverlayWrapperProps } from './drop_overlay_wrapper'; diff --git a/packages/kbn-dom-drag-drop/src/providers/providers.tsx b/packages/kbn-dom-drag-drop/src/providers/providers.tsx index a036d65d75bc2..361cec5d889e6 100644 --- a/packages/kbn-dom-drag-drop/src/providers/providers.tsx +++ b/packages/kbn-dom-drag-drop/src/providers/providers.tsx @@ -21,9 +21,9 @@ import { import { DEFAULT_DATA_TEST_SUBJ } from '../constants'; import { announce } from './announcements'; -const initialState = { +const defaultState = { dragging: undefined, - activeDropTarget: undefined, + hoveredDropTarget: undefined, keyboardMode: false, dropTargetsByOrder: {}, dataTestSubjPrefix: DEFAULT_DATA_TEST_SUBJ, @@ -33,7 +33,7 @@ const initialState = { * * const [ state, dispatch ] = useDragDropContext(); */ -const DragContext = React.createContext([initialState, () => {}]); +const DragContext = React.createContext([defaultState, () => {}]); export function useDragDropContext() { const context = React.useContext(DragContext); @@ -127,7 +127,7 @@ const dragDropReducer = (state: DragContextState, action: DragDropAction) => { dropTargetsByOrder: undefined, dragging: undefined, keyboardMode: false, - activeDropTarget: undefined, + hoveredDropTarget: undefined, }; case 'registerDropTargets': return { @@ -143,17 +143,17 @@ const dragDropReducer = (state: DragContextState, action: DragDropAction) => { dropTargetsByOrder: undefined, dragging: undefined, keyboardMode: false, - activeDropTarget: undefined, + hoveredDropTarget: undefined, }; case 'leaveDropTarget': return { ...state, - activeDropTarget: undefined, + hoveredDropTarget: undefined, }; case 'selectDropTarget': return { ...state, - activeDropTarget: action.payload.dropTarget, + hoveredDropTarget: action.payload.dropTarget, }; case 'startDragging': return { @@ -222,23 +222,25 @@ const useA11yMiddleware = () => { export function RootDragDropProvider({ children, - dataTestSubj = DEFAULT_DATA_TEST_SUBJ, customMiddleware, + initialState = {}, }: { children: React.ReactNode; - dataTestSubj?: string; customMiddleware?: CustomMiddleware; + initialState?: Partial; }) { const { a11yMessage, a11yMiddleware } = useA11yMiddleware(); const middlewareFns = React.useMemo(() => { return customMiddleware ? [customMiddleware, a11yMiddleware] : [a11yMiddleware]; }, [customMiddleware, a11yMiddleware]); + const dataTestSubj = initialState.dataTestSubjPrefix || DEFAULT_DATA_TEST_SUBJ; + const [state, dispatch] = useReducerWithMiddleware( dragDropReducer, { + ...defaultState, ...initialState, - dataTestSubjPrefix: dataTestSubj, }, middlewareFns ); @@ -269,7 +271,7 @@ export function RootDragDropProvider({ export function nextValidDropTarget( dropTargetsByOrder: RegisteredDropTargets, - activeDropTarget: DropIdentifier | undefined, + hoveredDropTarget: DropIdentifier | undefined, draggingOrder: [string], filterElements: (el: DragDropIdentifier) => boolean = () => true, reverse = false @@ -278,18 +280,13 @@ export function nextValidDropTarget( return; } - const filteredTargets: Array<[string, DropIdentifier | undefined]> = Object.entries( - dropTargetsByOrder - ).filter(([, dropTarget]) => { - return dropTarget && filterElements(dropTarget); + const filteredTargets = Object.entries(dropTargetsByOrder).filter(([order, dropTarget]) => { + return dropTarget && order !== draggingOrder[0] && filterElements(dropTarget); }); - // filter out secondary targets - const uniqueIdTargets = filteredTargets.reduce( - ( - acc: Array<[string, DropIdentifier | undefined]>, - current: [string, DropIdentifier | undefined] - ) => { + // filter out secondary targets and targets with the same id as the dragging element + const uniqueIdTargets = filteredTargets.reduce>( + (acc, current) => { const [, currentDropTarget] = current; if (!currentDropTarget) { return acc; @@ -311,7 +308,7 @@ export function nextValidDropTarget( }); let currentActiveDropIndex = nextDropTargets.findIndex( - ([_, dropTarget]) => dropTarget?.id === activeDropTarget?.id + ([, dropTarget]) => typeof dropTarget === 'object' && dropTarget?.id === hoveredDropTarget?.id ); if (currentActiveDropIndex === -1) { diff --git a/packages/kbn-dom-drag-drop/src/providers/reorder_provider.tsx b/packages/kbn-dom-drag-drop/src/providers/reorder_provider.tsx index 814aecf4d08e1..cfa63ff238553 100644 --- a/packages/kbn-dom-drag-drop/src/providers/reorder_provider.tsx +++ b/packages/kbn-dom-drag-drop/src/providers/reorder_provider.tsx @@ -65,6 +65,10 @@ interface ResetAction { type: 'reset'; } +interface DragEndAction { + type: 'dragEnd'; +} + interface RegisterDraggingItemHeightAction { type: 'registerDraggingItemHeight'; payload: number; @@ -90,6 +94,7 @@ interface SetReorderedItemsAction { } type ReorderAction = + | DragEndAction | ResetAction | RegisterDraggingItemHeightAction | RegisterReorderedItemHeightAction @@ -98,6 +103,8 @@ type ReorderAction = const reorderReducer = (state: ReorderState, action: ReorderAction) => { switch (action.type) { + case 'dragEnd': + return { ...state, reorderedItems: [], isReorderOn: false }; case 'reset': return { ...state, reorderedItems: [] }; case 'registerDraggingItemHeight': @@ -110,7 +117,11 @@ const reorderReducer = (state: ReorderState, action: ReorderAction) => { ), }; case 'setIsReorderOn': - return { ...state, isReorderOn: action.payload }; + return { + ...state, + isReorderOn: action.payload, + reorderedItems: action.payload ? state.reorderedItems : [], + }; case 'setReorderedItems': const { items, draggingIndex, droppingIndex } = action.payload; return draggingIndex < droppingIndex @@ -146,7 +157,7 @@ export function ReorderProvider({ return (
1, })} > diff --git a/packages/kbn-dom-drag-drop/src/providers/types.tsx b/packages/kbn-dom-drag-drop/src/providers/types.tsx index e0a460569a70f..1a1d992f3ec12 100644 --- a/packages/kbn-dom-drag-drop/src/providers/types.tsx +++ b/packages/kbn-dom-drag-drop/src/providers/types.tsx @@ -22,6 +22,7 @@ export interface HumanData { export interface Ghost { children: React.ReactElement; + className?: string; style: React.CSSProperties; } @@ -56,7 +57,7 @@ export type DropIdentifier = DragDropIdentifier & { */ export type DropHandler = (dropped: DragDropIdentifier, dropType?: DropType) => void; -export type RegisteredDropTargets = Record | undefined; +export type RegisteredDropTargets = Record | undefined; export interface DragContextState { /** @@ -70,7 +71,7 @@ export interface DragContextState { /** * currently selected drop target */ - activeDropTarget?: DropIdentifier; + hoveredDropTarget?: DropIdentifier; /** * currently registered drop targets */ diff --git a/packages/kbn-dom-drag-drop/src/sass/drag_drop_mixins.scss b/packages/kbn-dom-drag-drop/src/sass/drag_drop_mixins.scss index 6e753b8b6db32..75c442515b690 100644 --- a/packages/kbn-dom-drag-drop/src/sass/drag_drop_mixins.scss +++ b/packages/kbn-dom-drag-drop/src/sass/drag_drop_mixins.scss @@ -8,16 +8,15 @@ $domDragDropZLevel3: 3; // from mixins // sass-lint:disable-block indentation, no-color-keywords - -// Static styles for a draggable item -@mixin mixinDomDraggable { - @include euiSlightShadow; - background: $euiColorEmptyShade; - cursor: grab; +@mixin mixinDomDragDrop { + transition: $euiAnimSpeedFast ease-in-out; + transition-property: background-color, border-color, opacity; + z-index: $domDragDropZLevel1; + border-radius: $euiBorderRadius; } // Hovering state for drag item and drop area -@mixin mixinDomDragDropHover { +@mixin mixinDomDraggableHover { &:hover { transform: translateX($euiSizeXS); transition: transform $euiAnimSpeedSlow ease-out; @@ -48,7 +47,7 @@ $domDragDropZLevel3: 3; } // Style for drop area while hovering with item -@mixin mixinDomDroppableActiveHover($borderWidth: $euiBorderWidthThin) { +@mixin mixinDomDroppableHover($borderWidth: $euiBorderWidthThin) { background-color: transparentize($euiColorVis0, .75) !important; &:before { border-color: $euiColorVis0 !important; diff --git a/packages/kbn-dom-drag-drop/src/sass/draggable.scss b/packages/kbn-dom-drag-drop/src/sass/draggable.scss new file mode 100644 index 0000000000000..c50bdfcb1ba92 --- /dev/null +++ b/packages/kbn-dom-drag-drop/src/sass/draggable.scss @@ -0,0 +1,44 @@ +@import './drag_drop_mixins'; + +// Draggable item +.domDraggable { + cursor: grab; + @include mixinDomDragDrop; + @include mixinDomDraggableHover; + + // Include a possible nested button like when using FieldButton + & .kbnFieldButton__button, + & .euiLink { + cursor: grab; + } + + &:focus { + @include euiFocusRing; + } +} + +.domDraggable--reorderable { + transform: translateY(0); + transition: transform $euiAnimSpeedFast ease-in-out; + position: relative; + z-index: $domDragDropZLevel1; +} + +.domDraggable__keyboardHandler { + top: 0; + position: absolute; + width: 100%; + height: 100%; + border-radius: $euiBorderRadius; + + &:focus, + &:focus-within { + @include euiFocusRing; + pointer-events: none; + z-index: $domDragDropZLevel2; + } +} + +.domDraggable_active--move, .domDraggable_dragover_keyboard--move { + opacity: 0; +} diff --git a/packages/kbn-dom-drag-drop/src/sass/drag_drop.scss b/packages/kbn-dom-drag-drop/src/sass/droppable.scss similarity index 50% rename from packages/kbn-dom-drag-drop/src/sass/drag_drop.scss rename to packages/kbn-dom-drag-drop/src/sass/droppable.scss index c68ae0c0d6f1e..e081a8f761010 100644 --- a/packages/kbn-dom-drag-drop/src/sass/drag_drop.scss +++ b/packages/kbn-dom-drag-drop/src/sass/droppable.scss @@ -1,14 +1,14 @@ @import './drag_drop_mixins'; -.domDragDrop { - transition: $euiAnimSpeedFast ease-in-out; - transition-property: background-color, border-color, opacity; - z-index: $domDragDropZLevel1; +// Drop area +.domDroppable { + @include mixinDomDragDrop; + &:not(.domDroppable__overlayWrapper) { + @include mixinDomDroppable; + } } -.domDragDrop_ghost { - @include mixinDomDraggable; - border: $euiBorderWidthThin dashed $euiBorderColor; +.domDraggable_ghost { position: absolute !important; // sass-lint:disable-line no-important margin: 0 !important; // sass-lint:disable-line no-important top: 0; @@ -22,30 +22,9 @@ outline-style: auto; // Chrome } -// Draggable item -.domDragDrop-isDraggable { - @include mixinDomDraggable; - @include mixinDomDragDropHover; - - // Include a possible nested button like when using FieldButton - & .kbnFieldButton__button, - & .euiLink { - cursor: grab; - } - - &:focus { - @include euiFocusRing; - } -} - -// Drop area -.domDragDrop-isDroppable:not(.domDragDrop__dropOverlayWrapper) { - @include mixinDomDroppable; -} - // Drop area when there's an item being dragged -.domDragDrop-isDropTarget { - &:not(.domDragDrop__dropOverlayWrapper) { +.domDroppable--active { + &:not(.domDroppable__overlayWrapper) { @include mixinDomDroppable; @include mixinDomDroppableActive; } @@ -56,27 +35,27 @@ } // Drop area while hovering with item -.domDragDrop-isActiveDropTarget:not(.domDragDrop__dropOverlayWrapper) { +.domDroppable--hover:not(.domDroppable__overlayWrapper) { z-index: $domDragDropZLevel3; - @include mixinDomDroppableActiveHover; + @include mixinDomDroppableHover; } // Drop area that is not allowed for current item -.domDragDrop-isNotDroppable { +.domDroppable--notAllowed { @include mixinDomDroppableNotAllowed; } // Drop area will be replacing existing content -.domDragDrop-isReplacing { +.domDroppable--replacing { text-decoration: line-through; } -.domDragDrop-notCompatible:not(.domDragDrop__dropOverlayWrapper) { +.domDroppable--incompatible:not(.domDroppable__overlayWrapper) { background-color: $euiColorHighlight !important; &:before { border: $euiBorderWidthThin dashed $euiColorVis5 !important; } - &.domDragDrop-isActiveDropTarget { + &.domDroppable--hover { background-color: rgba(251, 208, 17, .25) !important; &:before { border-color: $euiColorVis5 !important; @@ -84,61 +63,37 @@ } } -.domDragDrop__container { - position: relative; +.domDroppable__container { width: 100%; height: 100%; - - &.domDragDrop__container-active { + position: relative; + &.domDroppable__container-active { z-index: $domDragDropZLevel3; } + .domDroppable__container { + position: static; + } } $reorderItemMargin: $euiSizeS; -.domDragDrop__reorderableDrop { +.domDroppable--reorderable { position: absolute; width: 100%; top: 0; height: calc(100% + #{calc($reorderItemMargin / 2)}); } -.domDragDrop-translatableDrop { +.domDroppable--translatable { transform: translateY(0); transition: transform $euiAnimSpeedFast ease-in-out; pointer-events: none; - .domDragDrop-isDropTarget { - @include mixinDomDraggable; - } - - .domDragDrop-isActiveDropTarget { + .domDroppable--hover { z-index: $domDragDropZLevel3; } } -.domDragDrop-translatableDrag { - transform: translateY(0); - transition: transform $euiAnimSpeedFast ease-in-out; - position: relative; - z-index: $domDragDropZLevel1; -} - -.domDragDrop__keyboardHandler { - top: 0; - position: absolute; - width: 100%; - height: 100%; - border-radius: $euiBorderRadius; - - &:focus, - &:focus-within { - @include euiFocusRing; - pointer-events: none; - z-index: $domDragDropZLevel2; - } -} - -.domDragDrop__extraDrops { +.domDroppable__extraTargets { opacity: 0; visibility: hidden; position: absolute; @@ -150,58 +105,58 @@ $reorderItemMargin: $euiSizeS; max-width: $euiFormMaxWidth; } -.domDragDrop__extraDrops-visible { +.domDroppable__extraTargets-visible { opacity: 1; visibility: visible; } -.domDragDrop__extraDropWrapper { +.domDroppable__extraDropWrapper { position: relative; width: 100%; height: 100%; background: $euiColorLightestShade; border-radius: $euiSizeXS; - .domDragDrop__extraDrop, - .domDragDrop__extraDrop:before { + .domDroppable__extraTarget, + .domDroppable__extraTarget:before { border-radius: 0; } - &:first-child .domDragDrop__extraDrop, - &:first-child .domDragDrop__extraDrop:before { + &:first-child .domDroppable__extraTarget, + &:first-child .domDroppable__extraTarget:before { border-top-left-radius: $euiSizeXS; border-top-right-radius: $euiSizeXS; } - &:last-child .domDragDrop__extraDrop, - &:last-child .domDragDrop__extraDrop:before { + &:last-child .domDroppable__extraTarget, + &:last-child .domDroppable__extraTarget:before { border-bottom-left-radius: $euiSizeXS; border-bottom-right-radius: $euiSizeXS; } } // collapse borders -.domDragDrop__extraDropWrapper + .domDragDrop__extraDropWrapper { +.domDroppable__extraDropWrapper + .domDroppable__extraDropWrapper { margin-top: -1px; } -.domDragDrop__extraDrop { +.domDroppable__extraTarget { position: relative; height: $euiSizeXS * 8; min-width: $euiSize * 7; color: $euiColorSuccessText; padding: $euiSizeXS; - &.domDragDrop-incompatibleExtraDrop { + &.domDroppable--incompatibleExtraTarget { color: $euiColorWarningText; } } -.domDragDrop__dropOverlayWrapper { +.domDroppable__overlayWrapper { position: relative; height: 100%; } -.domDragDrop__dropOverlay { +.domDroppable_overlay { position: absolute; top: 0; left: 0; @@ -211,40 +166,21 @@ $reorderItemMargin: $euiSizeS; transition: $euiAnimSpeedFast ease-in-out; transition-property: background-color, border-color, opacity; - .domDragDrop-isDropTarget & { + .domDroppable--active & { @include mixinDomDroppable($euiBorderWidthThick); @include mixinDomDroppableActive($euiBorderWidthThick); } - .domDragDrop-isActiveDropTarget & { - @include mixinDomDroppableActiveHover($euiBorderWidthThick); + .domDroppable--hover & { + @include mixinDomDroppableHover($euiBorderWidthThick); } } .domDragDrop-isActiveGroup { background-color: transparentize($euiColorVis0, .75); - .domDragDrop-isKeyboardReorderInProgress { - .domDragDrop--isDragStarted { + .domDraggable_active_keyboard--reorderable { + .domDraggable_dragover_keyboard--copy { opacity: 1; } } - .domDragDrop-isActiveDropTarget, - .domDragDrop-isDropTarget { - background: $euiColorEmptyShade !important; - } -} - -.domDragDrop--isDragStarted { - opacity: .5; -} - -// Draggable item when it is moving -.domDragDrop-isHidden { - opacity: 0; - .domDragDrop__keyboardHandler { - &:focus, - &:focus-within { - animation: none; - } - } -} +} \ No newline at end of file diff --git a/packages/kbn-dom-drag-drop/src/test_utils.tsx b/packages/kbn-dom-drag-drop/src/test_utils.tsx new file mode 100644 index 0000000000000..2effba25c169f --- /dev/null +++ b/packages/kbn-dom-drag-drop/src/test_utils.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 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, { ReactElement } from 'react'; +import faker from 'faker'; +import { RenderOptions, render } from '@testing-library/react'; +import { DragContextState, RootDragDropProvider } from './providers'; + +export const EXACT = { + exact: true, +}; + +export const dataTransfer = { + setData: jest.fn(), + getData: jest.fn(), +}; + +export const generateDragDropValue = (label = faker.lorem.word()) => ({ + id: faker.random.uuid(), + humanData: { + label, + groupLabel: faker.lorem.word(), + position: 1, + canSwap: true, + canDuplicate: true, + layerNumber: 0, + }, +}); + +export const renderWithDragDropContext = ( + ui: ReactElement, + renderOptions?: RenderOptions, + contextStateOverrides: Partial = {} +): any => { + const { wrapper, ...options } = renderOptions || {}; + + const Wrapper: React.FC<{ + children: React.ReactNode; + }> = ({ children }) => { + return ( + {children} + ); + }; + + const rtlRender = render(ui, { wrapper: Wrapper, ...options }); + + return { + ...rtlRender, + }; +}; diff --git a/packages/kbn-unified-field-list/src/components/field_item_button/field_item_button.scss b/packages/kbn-unified-field-list/src/components/field_item_button/field_item_button.scss index 34fbaf1c1d600..87f8f8206c12f 100644 --- a/packages/kbn-unified-field-list/src/components/field_item_button/field_item_button.scss +++ b/packages/kbn-unified-field-list/src/components/field_item_button/field_item_button.scss @@ -42,7 +42,9 @@ .unifiedFieldListItemButton { width: 100%; - + @include euiSlightShadow; + background: $euiColorEmptyShade; + border-radius: $euiBorderRadius; &.kbnFieldButton { &:focus-within, &-isActive { @@ -66,6 +68,11 @@ } } +.unifiedFieldList__fieldPopover__fieldPopoverPanel .unifiedFieldListItemButton { + box-shadow: none; + background: none; +} + .unifiedFieldListItemButton--missing { background: lightOrDarkTheme(transparentize($euiColorMediumShade, .9), $euiColorEmptyShade); color: $euiColorDarkShade; @@ -96,7 +103,7 @@ &:hover, &[class*='-isActive'], - .domDragDrop__keyboardHandler:focus + & { + .domDraggable__keyboardHandler:focus + & { .unifiedFieldListItemButton__fieldIcon { opacity: 0; } diff --git a/packages/kbn-unified-field-list/src/components/field_list/field_list.tsx b/packages/kbn-unified-field-list/src/components/field_list/field_list.tsx index 8261d5795b61a..29bc5f00cddf9 100644 --- a/packages/kbn-unified-field-list/src/components/field_list/field_list.tsx +++ b/packages/kbn-unified-field-list/src/components/field_list/field_list.tsx @@ -65,7 +65,9 @@ export const FieldList: React.FC = ({ /> )} {!!prepend && {prepend}} - {children} + + {children} + {!!append && {append}} ); diff --git a/packages/kbn-unified-field-list/src/components/field_list_grouped/fields_accordion.scss b/packages/kbn-unified-field-list/src/components/field_list_grouped/fields_accordion.scss index 501b27969e768..3405a56c310cc 100644 --- a/packages/kbn-unified-field-list/src/components/field_list_grouped/fields_accordion.scss +++ b/packages/kbn-unified-field-list/src/components/field_list_grouped/fields_accordion.scss @@ -1,8 +1,3 @@ .unifiedFieldList__fieldsAccordion__titleTooltip { margin-right: $euiSizeXS; } - -.unifiedFieldList__fieldsAccordion__fieldItems { - // Quick fix for making sure the shadow and focus rings are visible outside the accordion bounds - padding: $euiSizeXS; -} diff --git a/packages/kbn-unified-field-list/src/components/field_list_grouped/fields_accordion.tsx b/packages/kbn-unified-field-list/src/components/field_list_grouped/fields_accordion.tsx index 89f67d7edba20..a112f7fe967ae 100644 --- a/packages/kbn-unified-field-list/src/components/field_list_grouped/fields_accordion.tsx +++ b/packages/kbn-unified-field-list/src/components/field_list_grouped/fields_accordion.tsx @@ -145,7 +145,7 @@ function InnerFieldsAccordion({ {hasLoaded && (!!fieldsCount ? ( -
    +
      {paginatedFields && paginatedFields.map((field, index) => ( diff --git a/packages/kbn-unified-field-list/src/containers/unified_field_list_item/field_list_item.tsx b/packages/kbn-unified-field-list/src/containers/unified_field_list_item/field_list_item.tsx index 8a9fd82a4e4bb..ae286ef26f09b 100644 --- a/packages/kbn-unified-field-list/src/containers/unified_field_list_item/field_list_item.tsx +++ b/packages/kbn-unified-field-list/src/containers/unified_field_list_item/field_list_item.tsx @@ -10,7 +10,7 @@ import React, { memo, useCallback, useMemo, useState } from 'react'; import { EuiSpacer, EuiTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { UiCounterMetricType } from '@kbn/analytics'; -import { DragDrop } from '@kbn/dom-drag-drop'; +import { Draggable } from '@kbn/dom-drag-drop'; import type { DataView, DataViewField } from '@kbn/data-views-plugin/public'; import type { SearchMode } from '../../types'; import { FieldItemButton, type FieldItemButtonProps } from '../../components/field_item_button'; @@ -333,8 +333,8 @@ function UnifiedFieldListItemComponent({ - + } closePopover={closePopover} data-test-subj={stateService.creationOptions.dataTestSubj?.fieldListItemPopoverDataTestSubj} diff --git a/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.scss b/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.scss index 08402941bf74b..617f7516effa6 100644 --- a/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.scss +++ b/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.scss @@ -25,11 +25,29 @@ } } +// This code is responsible for making sure that: +// * the shadow and focus rings are visible outside the accordion bounds, +// * the dragged element has a padding to the left and right, + .unifiedFieldListSidebar__list { - padding: $euiSizeS $euiSizeS 0; + padding: $euiSizeS $euiSizeXS 0 $euiSizeXS; + + > *, .euiAccordion__triggerWrapper, .euiAccordion__children, .unifiedFieldListItemButton { + padding-left: $euiSizeXS; + padding-right: $euiSizeXS; + } + + .unifiedFieldListSidebar__accordionContainer { + padding-left: 0; + padding-right: 0; + } @include euiBreakpoint('xs', 's') { padding: $euiSizeS 0 0 0; + > *, .euiAccordion__triggerWrapper, .unifiedFieldListSidebar__accordionContainer, .unifiedFieldListItemButton { + padding-left: 0; + padding-right: 0; + } } } @@ -54,14 +72,11 @@ .unifiedFieldListSidebar .unifiedFieldListItemButton { &.kbnFieldButton { margin-bottom: calc($euiSizeXS / 2); - } - - &.domDragDrop-isDraggable { - box-shadow: none; - } - - &:not(.unifiedFieldListItemButton__dragging) { - padding: 0; background: none; + box-shadow: none; } } + +.unifiedFieldListItemButton__dragging { + background: $euiColorEmptyShade; +} \ No newline at end of file diff --git a/packages/kbn-visualization-ui-components/components/dimension_buttons/dimension_button.tsx b/packages/kbn-visualization-ui-components/components/dimension_buttons/dimension_button.tsx index 1a72a9b612299..b30f5b691e5c9 100644 --- a/packages/kbn-visualization-ui-components/components/dimension_buttons/dimension_button.tsx +++ b/packages/kbn-visualization-ui-components/components/dimension_buttons/dimension_button.tsx @@ -14,6 +14,7 @@ import { EuiFlexGroup, EuiFlexItem, useEuiFontSize, + useEuiShadow, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { css } from '@emotion/react'; @@ -42,7 +43,7 @@ export interface DimensionButtonProps { message?: Message; } -export function DimensionButton({ +function DimensionButtonImpl({ groupLabel, children, onClick, @@ -56,6 +57,7 @@ export function DimensionButton({
      @@ -119,8 +122,8 @@ export function DimensionButton({ transition-property: color, opacity, background-color, transform; opacity: 0; - .domDragDrop:hover &, - .domDragDrop:focus-within & { + .domDraggable:hover &, + .domDraggable:focus-within & { opacity: 1; } &:hover, @@ -133,3 +136,5 @@ export function DimensionButton({
      ); } + +export const DimensionButton = React.memo(DimensionButtonImpl); diff --git a/src/plugins/discover/public/application/main/components/layout/discover_main_content.tsx b/src/plugins/discover/public/application/main/components/layout/discover_main_content.tsx index 07a37e3ba1bc3..092279d4243b5 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_main_content.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_main_content.tsx @@ -7,7 +7,7 @@ */ import { EuiFlexGroup, EuiFlexItem, EuiHorizontalRule } from '@elastic/eui'; -import { DragDrop, type DropType, DropOverlayWrapper } from '@kbn/dom-drag-drop'; +import { type DropType, DropOverlayWrapper, Droppable } from '@kbn/dom-drag-drop'; import React, { ReactElement, useCallback, useMemo } from 'react'; import { DataView } from '@kbn/data-views-plugin/common'; import { METRIC_TYPE } from '@kbn/analytics'; @@ -106,8 +106,7 @@ export const DiscoverMainContent = ({ const showChart = useAppStateSelector((state) => !state.hideChart); return ( - - + ); }; diff --git a/src/plugins/event_annotation_listing/public/components/group_editor_flyout/group_editor_controls/annotation_list.tsx b/src/plugins/event_annotation_listing/public/components/group_editor_flyout/group_editor_controls/annotation_list.tsx index 176190d07374b..597c30df90356 100644 --- a/src/plugins/event_annotation_listing/public/components/group_editor_flyout/group_editor_controls/annotation_list.tsx +++ b/src/plugins/event_annotation_listing/public/components/group_editor_flyout/group_editor_controls/annotation_list.tsx @@ -8,7 +8,8 @@ import { css } from '@emotion/react'; import { - DragDrop, + Droppable, + Draggable, DropTargetSwapDuplicateCombine, ReorderProvider, useDragDropContext, @@ -93,10 +94,10 @@ export const AnnotationList = ({ background-color: ${euiThemeVars.euiColorLightestShade}; padding: ${euiThemeVars.euiSizeS}; border-radius: ${euiThemeVars.euiBorderRadius}; - overflow: hidden; + overflow: visible; - .domDragDrop-isActiveGroup { - padding: ${euiThemeVars.euiSizeS}; + .domDragDrop-group { + padding: ${euiThemeVars.euiSizeXS} ${euiThemeVars.euiSizeS}; margin: -${euiThemeVars.euiSizeS} -${euiThemeVars.euiSizeS} 0 -${euiThemeVars.euiSizeS}; } `} @@ -106,11 +107,14 @@ export const AnnotationList = ({
      - { - const sourceAnnotation = source - ? annotations.find(({ id }) => id === source.id) - : undefined; - reorderAnnotations(sourceAnnotation, annotation); - }} > - selectAnnotation(annotation)} - onRemoveClick={() => - updateAnnotations(annotations.filter(({ id }) => id !== annotation.id)) - } - accessorConfig={getAnnotationAccessor(annotation)} - label={annotation.label} + { + const sourceAnnotation = source + ? annotations.find(({ id }) => id === source.id) + : undefined; + reorderAnnotations(sourceAnnotation, annotation); + }} > - - - + selectAnnotation(annotation)} + onRemoveClick={() => + updateAnnotations(annotations.filter(({ id }) => id !== annotation.id)) + } + accessorConfig={getAnnotationAccessor(annotation)} + label={annotation.label} + > + + + +
      ))} - - addNewAnnotation(sourceId)} +
      - addNewAnnotation()} - /> - + addNewAnnotation(sourceId)} + > + addNewAnnotation()} + /> + +
); }; diff --git a/test/functional/page_objects/discover_page.ts b/test/functional/page_objects/discover_page.ts index 9ec3bb1330305..18e15ea69bb1a 100644 --- a/test/functional/page_objects/discover_page.ts +++ b/test/functional/page_objects/discover_page.ts @@ -807,12 +807,12 @@ export class DiscoverPageObject extends FtrService { * */ public async dragFieldWithKeyboardToTable(fieldName: string) { const field = await this.find.byCssSelector( - `[data-test-subj="domDragDrop_draggable-${fieldName}"] [data-test-subj="domDragDrop-keyboardHandler"]` + `[data-test-subj="dscFieldListPanelField-${fieldName}"] [data-test-subj="domDragDrop-keyboardHandler"]` ); await field.focus(); await this.retry.try(async () => { await this.browser.pressKeys(this.browser.keys.ENTER); - await this.testSubjects.exists('.domDragDrop-isDropTarget'); // checks if we're in dnd mode and there's any drop target active + await this.testSubjects.exists('.domDroppable--active'); // checks if we're in dnd mode and there's any drop target active }); await this.browser.pressKeys(this.browser.keys.RIGHT); await this.browser.pressKeys(this.browser.keys.ENTER); diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/_field_list_item.scss b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/_field_list_item.scss index cc733972808e3..82767bf9249a7 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/_field_list_item.scss +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/_field_list_item.scss @@ -60,4 +60,4 @@ .mappingsEditor__fieldsListItem__actions { padding-left: $euiSizeS; -} +} \ No newline at end of file diff --git a/x-pack/plugins/lens/public/datasources/common/field_item.scss b/x-pack/plugins/lens/public/datasources/common/field_item.scss index 4e1949c19fc4a..b9927ae4e7bf8 100644 --- a/x-pack/plugins/lens/public/datasources/common/field_item.scss +++ b/x-pack/plugins/lens/public/datasources/common/field_item.scss @@ -1,4 +1,4 @@ .lnsFieldItem__fieldPanel { min-width: 260px; max-width: 300px; -} +} \ No newline at end of file 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 afd178a64ece5..46eeee7af1f43 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 @@ -23,7 +23,6 @@ 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 { loadFieldStats } from '@kbn/unified-field-list/src/services/field_stats'; -import { DOCUMENT_FIELD_NAME } from '../../../common/constants'; import { FieldIcon } from '@kbn/field-utils'; import { FieldStats, FieldPopoverFooter } from '@kbn/unified-field-list'; @@ -31,7 +30,7 @@ jest.mock('@kbn/unified-field-list/src/services/field_stats', () => ({ loadFieldStats: jest.fn().mockResolvedValue({}), })); -const clickField = async (wrapper: ReactWrapper, field: string) => { +const clickField = async (wrapper: ReactWrapper, field?: string) => { await act(async () => { await wrapper .find(`[data-test-subj="lnsFieldListPanelField-${field}"] .kbnFieldButton__button`) @@ -91,14 +90,14 @@ describe('Lens Field Item', () => { fields: [ { name: 'timestamp', - displayName: 'timestampLabel', + displayName: 'timestamp', type: 'date', aggregatable: true, searchable: true, }, { name: 'bytes', - displayName: 'bytesLabel', + displayName: 'bytes', type: 'number', aggregatable: true, searchable: true, @@ -154,7 +153,7 @@ describe('Lens Field Item', () => { filters: [], field: { name: 'bytes', - displayName: 'bytesLabel', + displayName: 'bytes', type: 'number', aggregatable: true, searchable: true, @@ -189,7 +188,7 @@ describe('Lens Field Item', () => { // Using .toContain over .toEqual because this element includes text from // which can't be seen, but shows in the text content expect(wrapper.find('[data-test-subj="lnsFieldListPanelField"]').first().text()).toContain( - 'bytesLabel' + 'bytes' ); }); @@ -260,7 +259,7 @@ describe('Lens Field Item', () => { const field = { name: 'test', - displayName: 'testLabel', + displayName: 'test', type: 'string', aggregatable: true, searchable: true, @@ -422,7 +421,7 @@ describe('Lens Field Item', () => { field: documentField, }); - await clickField(wrapper, DOCUMENT_FIELD_NAME); + await clickField(wrapper, documentField.name); await wrapper.update(); diff --git a/x-pack/plugins/lens/public/datasources/common/field_item.tsx b/x-pack/plugins/lens/public/datasources/common/field_item.tsx index 0cf86ab0494a0..efa13eb708e5a 100644 --- a/x-pack/plugins/lens/public/datasources/common/field_item.tsx +++ b/x-pack/plugins/lens/public/datasources/common/field_item.tsx @@ -22,7 +22,7 @@ import { FieldItemButton, type GetCustomFieldType, } from '@kbn/unified-field-list'; -import { DragDrop } from '@kbn/dom-drag-drop'; +import { Draggable } from '@kbn/dom-drag-drop'; import { generateFilters, getEsQueryConfig } from '@kbn/data-plugin/public'; import { type DatatableColumn } from '@kbn/expressions-plugin/common'; import { DatasourceDataPanelProps } from '../../types'; @@ -200,19 +200,18 @@ export function InnerFieldItem(props: FieldItemProps) { closePopover={closePopover} panelClassName="lnsFieldItem__fieldPanel" initialFocus=".lnsFieldItem__fieldPanel" - className="lnsFieldItem__popoverAnchor" data-test-subj="lnsFieldListPanelField" panelProps={{ 'data-test-subj': 'lnsFieldListPanelFieldContent', }} container={document.querySelector('.application') || undefined} button={ - {isTextBasedColumnField(field) ? ( @@ -223,7 +222,7 @@ export function InnerFieldItem(props: FieldItemProps) { ) : ( )} - + } renderHeader={() => { return ( diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/buttons/draggable_dimension_button.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/buttons/draggable_dimension_button.tsx index ae226521799eb..aa3315972b719 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/buttons/draggable_dimension_button.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/buttons/draggable_dimension_button.tsx @@ -7,11 +7,12 @@ import React, { useMemo, useCallback, ReactElement } from 'react'; import { - DragDrop, DragDropIdentifier, useDragDropContext, DropType, DropTargetSwapDuplicateCombine, + Draggable, + Droppable, } from '@kbn/dom-drag-drop'; import { isDraggedField } from '../../../../utils'; import { @@ -50,8 +51,8 @@ export function DraggableDimensionButton({ }; order: [2, number, number, number]; onDrop: (source: DragDropIdentifier, dropTarget: DragDropIdentifier, dropType?: DropType) => void; - onDragStart: () => void; - onDragEnd: () => void; + onDragStart?: () => void; + onDragEnd?: () => void; activeVisualization: Visualization; group: VisualizationDimensionGroupConfig; children: ReactElement; @@ -138,24 +139,29 @@ export function DraggableDimensionButton({ className="lnsLayerPanel__dimensionContainer" data-test-subj={group.dataTestSubj} > - 1 ? reorderableGroup : undefined} value={value} - onDrop={handleOnDrop} onDragStart={onDragStart} onDragEnd={onDragEnd} > - {children} - + 1 ? reorderableGroup : undefined} + value={value} + onDrop={handleOnDrop} + > + {children} + +
); } diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/buttons/empty_dimension_button.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/buttons/empty_dimension_button.tsx index 0c6195d51cfe4..f8562a161c2a7 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/buttons/empty_dimension_button.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/buttons/empty_dimension_button.tsx @@ -9,11 +9,11 @@ import React, { useMemo, useState, useEffect } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { - DragDrop, DragDropIdentifier, useDragDropContext, DropType, DropTargetSwapDuplicateCombine, + Droppable, } from '@kbn/dom-drag-drop'; import { EmptyDimensionButton as EmptyDimensionButtonInner } from '@kbn/visualization-ui-components'; import { css } from '@emotion/react'; @@ -180,7 +180,7 @@ export function EmptyDimensionButton({ return (
- )}
- +
); } diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss index f2e3c26258182..2776e57753d7a 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.scss @@ -78,7 +78,7 @@ } } -.domDragDrop-isReplacing { +.domDroppable--replacing { .dimensionTrigger__textLabel { text-decoration: line-through; } diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx index 119e5216488f2..f1b303527ebbe 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { screen, fireEvent, act } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { ChildDragDropProvider, DragDrop } from '@kbn/dom-drag-drop'; +import { ChildDragDropProvider, Droppable, Draggable } from '@kbn/dom-drag-drop'; import { FramePublicAPI, Visualization, VisualizationConfigProps } from '../../../types'; import { LayerPanel } from './layer_panel'; import { coreMock } from '@kbn/core/public/mocks'; @@ -25,7 +25,7 @@ import { import { createIndexPatternServiceMock } from '../../../mocks/data_views_service_mock'; import { DimensionButton } from '@kbn/visualization-ui-components'; import { LensAppState } from '../../../state_management'; -import { ProviderProps } from '@kbn/dom-drag-drop/src'; +import type { ProviderProps } from '@kbn/dom-drag-drop/src'; import { LayerPanelProps } from './types'; jest.mock('../../../id_generator'); @@ -676,9 +676,9 @@ describe('LayerPanel', () => { source: draggingField, }) ); - const dragDropElement = screen.getByTestId('lnsDragDrop'); - fireEvent.dragOver(dragDropElement); - fireEvent.drop(dragDropElement); + const droppableElement = screen.getByTestId('lnsDragDrop-domDroppable'); + fireEvent.dragOver(droppableElement); + fireEvent.drop(droppableElement); expect(onDropToDimension).toHaveBeenCalledWith( expect.objectContaining({ @@ -720,17 +720,17 @@ describe('LayerPanel', () => { ); expect( - instance.find('[data-test-subj="lnsGroupTestId"] DragDrop').first().prop('dropType') + instance.find('[data-test-subj="lnsGroupTestId"] Droppable').first().prop('dropType') ).toEqual(undefined); - const dragDropElement = instance - .find('[data-test-subj="lnsGroupTestId"] DragDrop') + const droppableElement = instance + .find('[data-test-subj="lnsGroupTestId"] Droppable') .first() .find(DimensionButton) .first(); - dragDropElement.simulate('dragOver'); - dragDropElement.simulate('drop'); + droppableElement.simulate('dragOver'); + droppableElement.simulate('drop'); expect(onDropToDimension).not.toHaveBeenCalled(); }); @@ -774,11 +774,11 @@ describe('LayerPanel', () => { // Simulate drop on the pre-populated dimension - const dragDropElement = instance - .find('[data-test-subj="lnsGroupTestId2"] DragDrop .domDragDrop') + const droppableElement = instance + .find('[data-test-subj="lnsGroupTestId2"] Droppable .domDroppable') .at(0); - dragDropElement.simulate('dragOver'); - dragDropElement.simulate('drop'); + droppableElement.simulate('dragOver'); + droppableElement.simulate('drop'); expect(onDropToDimension).toHaveBeenCalledWith( expect.objectContaining({ @@ -791,12 +791,12 @@ describe('LayerPanel', () => { // Simulate drop on the empty dimension - const updatedDragDropElement = instance - .find('[data-test-subj="lnsGroupTestId2"] DragDrop .domDragDrop') + const updatedDroppableElement = instance + .find('[data-test-subj="lnsGroupTestId2"] Droppable .domDroppable') .last(); - updatedDragDropElement.simulate('dragOver'); - updatedDragDropElement.simulate('drop'); + updatedDroppableElement.simulate('dragOver'); + updatedDroppableElement.simulate('drop'); expect(onDropToDimension).toHaveBeenCalledWith( expect.objectContaining({ @@ -828,7 +828,7 @@ describe('LayerPanel', () => { { attachTo: holder } ); act(() => { - instance.find(DragDrop).at(1).prop('onDrop')!(draggingOperation, 'reorder'); + instance.find(Droppable).at(1).prop('onDrop')!(draggingOperation, 'reorder'); }); expect(onDropToDimension).toHaveBeenCalledWith( expect.objectContaining({ @@ -837,7 +837,7 @@ describe('LayerPanel', () => { }) ); const secondButton = instance - .find(DragDrop) + .find(Draggable) .at(1) .find('[data-test-subj="lnsDragDrop-keyboardHandler"]') .at(1) @@ -864,7 +864,7 @@ describe('LayerPanel', () => { ); act(() => { - instance.find(DragDrop).at(2).prop('onDrop')!(draggingOperation, 'duplicate_compatible'); + instance.find(Droppable).at(2).prop('onDrop')!(draggingOperation, 'duplicate_compatible'); }); expect(onDropToDimension).toHaveBeenCalledWith( expect.objectContaining({ @@ -901,7 +901,7 @@ describe('LayerPanel', () => { ); act(() => { - instance.find(DragDrop).at(3).prop('onDrop')!(draggingOperation, 'replace_compatible'); + instance.find(Droppable).at(3).prop('onDrop')!(draggingOperation, 'replace_compatible'); }); expect(onDropToDimension).toHaveBeenCalledWith( expect.objectContaining({ @@ -946,7 +946,7 @@ describe('LayerPanel', () => { ); act(() => { - instance.find(DragDrop).at(3).prop('onDrop')!(draggingOperation, 'replace_compatible'); + instance.find(Droppable).at(3).prop('onDrop')!(draggingOperation, 'replace_compatible'); }); expect(onDropToDimension).toHaveBeenCalledWith( @@ -997,7 +997,7 @@ describe('LayerPanel', () => { ); act(() => { - instance.find(DragDrop).at(3).prop('onDrop')!(draggingOperation, 'replace_compatible'); + instance.find(Droppable).at(3).prop('onDrop')!(draggingOperation, 'replace_compatible'); }); expect(onDropToDimension).toHaveBeenCalledWith( @@ -1033,7 +1033,7 @@ describe('LayerPanel', () => { ); act(() => { - instance.find(DragDrop).at(3).prop('onDrop')!(draggingOperation, 'duplicate_compatible'); + instance.find(Droppable).at(3).prop('onDrop')!(draggingOperation, 'duplicate_compatible'); }); }); }); diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx index 6ed48175ef224..86fd90fbcb67b 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx @@ -49,8 +49,6 @@ export function LayerPanel(props: LayerPanelProps) { const [isPanelSettingsOpen, setPanelSettingsOpen] = useState(false); - const [hideTooltip, setHideTooltip] = useState(false); - const { framePublicAPI, layerId, @@ -552,8 +550,6 @@ export function LayerPanel(props: LayerPanelProps) { state={layerDatasourceState} layerDatasource={layerDatasource} datasourceLayers={framePublicAPI.datasourceLayers} - onDragStart={() => setHideTooltip(true)} - onDragEnd={() => setHideTooltip(false)} onDrop={onDrop} indexPatterns={dataViews.indexPatterns} > @@ -591,7 +587,6 @@ export function LayerPanel(props: LayerPanelProps) { {activeVisualization?.DimensionTriggerComponent?.({ columnId, label: columnLabelMap?.[columnId] ?? '', - hideTooltip, })} )} diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx index d99f6418870fa..f99eeaa7688a2 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx @@ -29,7 +29,7 @@ import { renderWithReduxStore, } from '../../mocks'; import { inspectorPluginMock } from '@kbn/inspector-plugin/public/mocks'; -import { DragDrop, useDragDropContext } from '@kbn/dom-drag-drop'; +import { Droppable, useDragDropContext } from '@kbn/dom-drag-drop'; import { uiActionsPluginMock } from '@kbn/ui-actions-plugin/public/mocks'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { expressionsPluginMock } from '@kbn/expressions-plugin/public/mocks'; @@ -626,7 +626,7 @@ describe('editor_frame', () => { instance.update(); act(() => { - instance.find('[data-test-subj="mockVisA"]').find(DragDrop).prop('onDrop')!( + instance.find('[data-test-subj="mockVisA"]').find(Droppable).prop('onDrop')!( { indexPatternId: '1', field: {}, @@ -711,7 +711,7 @@ describe('editor_frame', () => { instance.update(); act(() => { - instance.find(DragDrop).filter('[dataTestSubj="lnsWorkspace"]').prop('onDrop')!( + instance.find(Droppable).filter('[dataTestSubj="lnsWorkspace"]').prop('onDrop')!( { indexPatternId: '1', field: {}, diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.tsx index 7d2d256d37c67..45b11b1c7724b 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.tsx @@ -115,7 +115,10 @@ export function EditorFrame(props: EditorFrameProps) { }, []); return ( - + {getVisualizeGeoFieldMessage(props.fieldType)} -

-
+
diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx index c73f427fcd7f9..e6d67bb4eb3db 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx @@ -936,14 +936,12 @@ describe('workspace_panel', () => { datasourceState: {}, }), }); - expect(screen.getByTestId('lnsWorkspace').classList).toContain('domDragDrop-isDropTarget'); + expect(screen.getByTestId('lnsWorkspace').classList).toContain('domDroppable--active'); }); it('should refuse to drop if there are no suggestions', () => { renderWithDndAndRedux(); - expect(screen.getByTestId('lnsWorkspace').classList).not.toContain( - 'domDragDrop-isDropTarget' - ); + expect(screen.getByTestId('lnsWorkspace').classList).not.toContain('domDroppable--active'); }); }); }); diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx index 3e90a4179f9eb..c659d726f7b8a 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx @@ -25,7 +25,7 @@ import { VIS_EVENT_TO_TRIGGER } from '@kbn/visualizations-plugin/public'; import type { DefaultInspectorAdapters } from '@kbn/expressions-plugin/common'; import type { Datatable } from '@kbn/expressions-plugin/public'; import { DropIllustration } from '@kbn/chart-icons'; -import { DragDrop, useDragDropContext, DragDropIdentifier } from '@kbn/dom-drag-drop'; +import { useDragDropContext, DragDropIdentifier, Droppable } from '@kbn/dom-drag-drop'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import { ChartSizeSpec, isChartSizeEvent } from '@kbn/chart-expressions-common'; import { trackUiCounterEvents } from '../../../lens_ui_telemetry'; @@ -638,19 +638,18 @@ export const InnerWorkspacePanel = React.memo(function InnerWorkspacePanel({ : renderDragDropPrompt; return ( -
{renderWorkspaceContents()}
-
+ ); }; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.scss index 705b942cf85ff..db0ca2613cc2f 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.scss +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.scss @@ -46,7 +46,7 @@ } .lnsWorkspacePanel__dragDrop { - &.domDragDrop-isDropTarget { + &.domDroppable--active { p { transition: filter $euiAnimSpeedFast ease-in-out; filter: blur(5px); @@ -59,7 +59,7 @@ } } - &.domDragDrop-isActiveDropTarget { + &.domDroppable--hover { .lnsDropIllustration__hand { animation: lnsWorkspacePanel__illustrationPulseContinuous 1.5s ease-in-out 0s infinite normal forwards; } diff --git a/x-pack/plugins/lens/public/mocks/index.ts b/x-pack/plugins/lens/public/mocks/index.ts index f90ecc9b99fe9..f8bf55e3c2e8f 100644 --- a/x-pack/plugins/lens/public/mocks/index.ts +++ b/x-pack/plugins/lens/public/mocks/index.ts @@ -55,7 +55,7 @@ export function createMockedDragDropContext( dataTestSubjPrefix: 'lnsDragDrop', dragging: undefined, keyboardMode: false, - activeDropTarget: undefined, + hoveredDropTarget: undefined, dropTargetsByOrder: undefined, ...partialState, }, diff --git a/x-pack/plugins/lens/public/types.ts b/x-pack/plugins/lens/public/types.ts index e2419c09dfef4..cf8a1eaede8b5 100644 --- a/x-pack/plugins/lens/public/types.ts +++ b/x-pack/plugins/lens/public/types.ts @@ -1241,8 +1241,7 @@ export interface Visualization null | ReactElement<{ columnId: string; label: string; hideTooltip?: boolean }>; + }) => null | ReactElement<{ columnId: string; label: string }>; getAddLayerButtonComponent?: ( props: AddLayerButtonProps ) => null | ReactElement; diff --git a/x-pack/test/functional/apps/discover/visualize_field.ts b/x-pack/test/functional/apps/discover/visualize_field.ts index bbd5e94dc4c75..8df6c9541f0dc 100644 --- a/x-pack/test/functional/apps/discover/visualize_field.ts +++ b/x-pack/test/functional/apps/discover/visualize_field.ts @@ -116,7 +116,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.header.waitUntilLoadingHasFinished(); await retry.try(async () => { const breakdownLabel = await testSubjects.find( - 'lnsDragDrop_draggable-Top 3 values of extension.raw' + 'lnsDragDrop_domDraggable_Top 3 values of extension.raw' ); const lnsWorkspace = await testSubjects.find('lnsWorkspace'); diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index 734e7595a62bb..ccc7a7da38c57 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -370,7 +370,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont await retry.try(async () => { await browser.pressKeys(browserKey); await find.existsByCssSelector( - `.domDragDrop__extraDrop > [data-test-subj="domDragDrop-dropTarget-${metaToAction[metaKey]}"].domDragDrop-isActiveDropTarget` + `.domDroppable__extraTarget > [data-test-subj="domDragDrop-dropTarget-${metaToAction[metaKey]}"].domDroppable--hover` ); }); }, @@ -390,12 +390,12 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont metaKey?: 'shift' | 'alt' | 'ctrl' ) { const field = await find.byCssSelector( - `[data-test-subj="lnsDragDrop_draggable-${fieldName}"] [data-test-subj="lnsDragDrop-keyboardHandler"]` + `[data-test-subj="lnsFieldListPanelField-${fieldName}"] [data-test-subj="lnsDragDrop-keyboardHandler"]` ); await field.focus(); await retry.try(async () => { await browser.pressKeys(browser.keys.ENTER); - await testSubjects.exists('.domDragDrop-isDropTarget'); // checks if we're in dnd mode and there's any drop target active + await testSubjects.exists('.domDroppable--active'); // checks if we're in dnd mode and there's any drop target active }); for (let i = 0; i < steps; i++) { await browser.pressKeys(reverse ? browser.keys.LEFT : browser.keys.RIGHT); @@ -515,7 +515,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont * @param endIndex - the index of drop starting from 1 * */ async reorderDimensions(dimension: string, startIndex: number, endIndex: number) { - const dragging = `[data-test-subj='${dimension}']:nth-of-type(${startIndex}) .domDragDrop`; + const dragging = `[data-test-subj='${dimension}']:nth-of-type(${startIndex}) .domDraggable`; const dropping = `[data-test-subj='${dimension}']:nth-of-type(${endIndex}) [data-test-subj='lnsDragDrop-reorderableDropLayer'`; await find.existsByCssSelector(dragging); await browser.html5DragAndDrop(dragging, dropping); @@ -1611,7 +1611,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont const from = `lnsFieldListPanelField-${field}`; await this.dragEnterDrop( testSubjects.getCssSelector(from), - testSubjects.getCssSelector(`${to} > lnsDragDrop`), + testSubjects.getCssSelector(`${to} > lnsDragDrop-domDroppable`), testSubjects.getCssSelector(`${to} > domDragDrop-dropTarget-${type}`) ); await this.waitForVisualization(visDataTestSubj); @@ -1632,7 +1632,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont ) { await this.dragEnterDrop( testSubjects.getCssSelector(from), - testSubjects.getCssSelector(`${to} > lnsDragDrop`), + testSubjects.getCssSelector(`${to} > lnsDragDrop-domDroppable`), testSubjects.getCssSelector(`${to} > domDragDrop-dropTarget-${type}`) ); await this.waitForVisualization(visDataTestSubj); @@ -1808,7 +1808,12 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont `[data-test-subj="lnsIndexPattern${groupCapitalized}Fields"] .unifiedFieldListItemButton--${type}` ); // map to testSubjId - return Promise.all(allFieldsForType.map((el) => el.getAttribute('data-test-subj'))); + return Promise.all( + allFieldsForType.map(async (el) => { + const parent = await el.findByXpath('./..'); + return parent.getAttribute('data-test-subj'); + }) + ); }, async clickShareMenu() { diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/visualize_field.ts b/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/visualize_field.ts index 6027f3baed69d..29bba81403322 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/visualize_field.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/visualize_field.ts @@ -104,7 +104,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.header.waitUntilLoadingHasFinished(); await retry.try(async () => { const breakdownLabel = await testSubjects.find( - 'lnsDragDrop_draggable-Top 3 values of extension.raw' + 'lnsDragDrop_domDraggable_Top 3 values of extension.raw' ); const lnsWorkspace = await testSubjects.find('lnsWorkspace'); From daba8c1ae1299ac2e4d5d11a9f57d1feea6c2605 Mon Sep 17 00:00:00 2001 From: Coen Warmer Date: Thu, 21 Mar 2024 15:07:03 +0100 Subject: [PATCH 19/90] [ESLint i18n Rule] Smarter autofixing of incorrect i18n app identifier (#179149) ## Summary This adds two things to the ESLint rule for Translations package: 1. The `i18n_translate_should_start_with_the_right_id` rule has been updated so that it updates the part of the identifier that corresponds to the app identifier but keeps the rest of the identifier intact, including the `defaultMessage`. This allows engineers to 'transplant' translated strings from one app to another, with the rule updating the necessary parts for you while keeping its greedy mitts off the parts that shouldn't be updated. 2. `strings_should_be_translated_with_i18n` and `strings_should_be_translated_with_formatted_message` have been updated so they also kick in on `title` props, in addition to the existing `label` and `aria-label` props. **Before (sad!)** https://github.com/elastic/kibana/assets/535564/5ab8bbcc-d560-4bc2-9616-77513070f779 **New (happy!)** https://github.com/elastic/kibana/assets/535564/d4b5e504-8b71-4639-87a7-59c8825c043d --- ...ate_should_start_with_the_right_id.test.ts | 48 ++++++++++++++- ...ranslate_should_start_with_the_right_id.ts | 36 ++++++++++- ..._translated_with_formatted_message.test.ts | 60 ++++++++++++++++++- ...ld_be_translated_with_formatted_message.ts | 7 ++- ...ngs_should_be_translated_with_i18n.test.ts | 60 ++++++++++++++++++- .../strings_should_be_translated_with_i18n.ts | 7 ++- 6 files changed, 209 insertions(+), 9 deletions(-) diff --git a/packages/kbn-eslint-plugin-i18n/rules/i18n_translate_should_start_with_the_right_id.test.ts b/packages/kbn-eslint-plugin-i18n/rules/i18n_translate_should_start_with_the_right_id.test.ts index 39643837a9baf..d45a584588b3c 100644 --- a/packages/kbn-eslint-plugin-i18n/rules/i18n_translate_should_start_with_the_right_id.test.ts +++ b/packages/kbn-eslint-plugin-i18n/rules/i18n_translate_should_start_with_the_right_id.test.ts @@ -43,7 +43,7 @@ const babelTester = [ const invalid: RuleTester.InvalidTestCase[] = [ { - name: 'When a string literal is passed to i18n.translate, it should start with the correct i18n identifier.', + name: 'When a string literal is passed to i18n.translate, it should start with the correct i18n identifier, and if no existing defaultMessage is passed, it should add an empty default.', filename: '/x-pack/plugins/observability_solution/observability/public/test_component.ts', code: ` import { i18n } from '@kbn/i18n'; @@ -61,7 +61,51 @@ function TestComponent() { import { i18n } from '@kbn/i18n'; function TestComponent() { - const foo = i18n.translate('xpack.observability.testComponent.', { defaultMessage: '' }); + const foo = i18n.translate('xpack.observability.', { defaultMessage: '' }); +}`, + }, + { + name: 'When a string literal is passed to i18n.translate, and the root of the i18n identifier is not correct, it should keep the existing identifier but only update the right base app.', + filename: '/x-pack/plugins/observability_solution/observability/public/test_component.ts', + code: ` +import { i18n } from '@kbn/i18n'; + +function TestComponent() { + const foo = i18n.translate('foo.bar.baz'); +}`, + errors: [ + { + line: 5, + message: RULE_WARNING_MESSAGE, + }, + ], + output: ` +import { i18n } from '@kbn/i18n'; + +function TestComponent() { + const foo = i18n.translate('xpack.observability.bar.baz', { defaultMessage: '' }); +}`, + }, + { + name: 'When a string literal is passed to i18n.translate, and the root of the i18n identifier is not correct, it should keep the existing identifier but only update the right base app, and keep the default message if available.', + filename: '/x-pack/plugins/observability_solution/observability/public/test_component.ts', + code: ` +import { i18n } from '@kbn/i18n'; + +function TestComponent() { + const foo = i18n.translate('foo.bar.baz', { defaultMessage: 'giraffe' }); +}`, + errors: [ + { + line: 5, + message: RULE_WARNING_MESSAGE, + }, + ], + output: ` +import { i18n } from '@kbn/i18n'; + +function TestComponent() { + const foo = i18n.translate('xpack.observability.bar.baz', { defaultMessage: 'giraffe' }); }`, }, { diff --git a/packages/kbn-eslint-plugin-i18n/rules/i18n_translate_should_start_with_the_right_id.ts b/packages/kbn-eslint-plugin-i18n/rules/i18n_translate_should_start_with_the_right_id.ts index d6510ba588a4e..1b885fef77931 100644 --- a/packages/kbn-eslint-plugin-i18n/rules/i18n_translate_should_start_with_the_right_id.ts +++ b/packages/kbn-eslint-plugin-i18n/rules/i18n_translate_should_start_with_the_right_id.ts @@ -57,7 +57,7 @@ export const I18nTranslateShouldStartWithTheRightId: Rule.RuleModule = { translationFunction: 'i18n.translate', }); - if (!identifier || (identifier && !identifier.startsWith(`${i18nAppId}.`))) { + if (!identifier) { report({ node: node as any, message: RULE_WARNING_MESSAGE, @@ -76,6 +76,40 @@ export const I18nTranslateShouldStartWithTheRightId: Rule.RuleModule = { }, }); } + + if (identifier && !identifier.startsWith(`${i18nAppId}.`)) { + const oldI18nIdentifierArray = identifier.split('.'); + + const newI18nIdentifier = + oldI18nIdentifierArray[0] === 'xpack' + ? `${i18nAppId}.${oldI18nIdentifierArray.slice(2).join('.')}` + : `${i18nAppId}.${oldI18nIdentifierArray.slice(1).join('.')}`; + + let defaultMessage = ''; + + if ( + node.arguments[1] && + 'properties' in node.arguments[1] && + node.arguments[1].properties.length && + 'value' in node.arguments[1].properties[0] && + node.arguments[1].properties[0].value && + 'value' in node.arguments[1].properties[0].value && + typeof node.arguments[1].properties[0].value.value === 'string' + ) { + defaultMessage = node.arguments[1].properties[0].value.value; + } + + report({ + node: node as any, + message: RULE_WARNING_MESSAGE, + fix(fixer) { + return fixer.replaceTextRange( + node.range, + `i18n.translate('${newI18nIdentifier}', { defaultMessage: '${defaultMessage}' })` + ); + }, + }); + } }, } as Rule.RuleListener; }, diff --git a/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_formatted_message.test.ts b/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_formatted_message.test.ts index ce68d630f4c14..9afac95ae3a70 100644 --- a/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_formatted_message.test.ts +++ b/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_formatted_message.test.ts @@ -181,7 +181,7 @@ function TestComponent() { }`, }, { - name: 'JSX elements that have a label or aria-label prop with a string value should be translated with i18n', + name: 'JSX elements that have a label, aria-label or title prop with a string value should be translated with i18n', filename: '/x-pack/plugins/observability_solution/observability/public/test_component.tsx', code: ` import React from 'react'; @@ -191,12 +191,30 @@ function TestComponent() { return ( ) +} +function TestComponent2() { + return ( + + ) +} +function TestComponent3() { + return ( + + ) }`, errors: [ { line: 7, message: RULE_WARNING_MESSAGE, }, + { + line: 12, + message: RULE_WARNING_MESSAGE, + }, + { + line: 17, + message: RULE_WARNING_MESSAGE, + }, ], output: ` import React from 'react'; @@ -206,10 +224,20 @@ function TestComponent() { return ( } /> ) +} +function TestComponent2() { + return ( + } /> + ) +} +function TestComponent3() { + return ( + } /> + ) }`, }, { - name: 'JSX elements that have a label or aria-label prop with a JSXExpression value that is a string should be translated with i18n', + name: 'JSX elements that have a label, aria-label or title prop with a JSXExpression value that is a string should be translated with i18n', filename: '/x-pack/plugins/observability_solution/observability/public/test_component.tsx', code: ` import React from 'react'; @@ -219,12 +247,30 @@ function TestComponent() { return ( ) + } + function TestComponent2() { + return ( + + ) + } + function TestComponent3() { + return ( + + ) }`, errors: [ { line: 7, message: RULE_WARNING_MESSAGE, }, + { + line: 12, + message: RULE_WARNING_MESSAGE, + }, + { + line: 17, + message: RULE_WARNING_MESSAGE, + }, ], output: ` import React from 'react'; @@ -234,6 +280,16 @@ function TestComponent() { return ( } /> ) + } + function TestComponent2() { + return ( + } /> + ) + } + function TestComponent3() { + return ( + } /> + ) }`, }, ]; diff --git a/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_formatted_message.ts b/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_formatted_message.ts index 008aa2e559679..97cf3b053867a 100644 --- a/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_formatted_message.ts +++ b/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_formatted_message.ts @@ -75,7 +75,12 @@ export const StringsShouldBeTranslatedWithFormattedMessage: Rule.RuleModule = { }); }, JSXAttribute: (node: TSESTree.JSXAttribute) => { - if (node.name.name !== 'aria-label' && node.name.name !== 'label') return; + if ( + node.name.name !== 'aria-label' && + node.name.name !== 'label' && + node.name.name !== 'title' + ) + return; let val: string = ''; diff --git a/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_i18n.test.ts b/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_i18n.test.ts index 0fdf7aa047465..cb99d9a289e66 100644 --- a/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_i18n.test.ts +++ b/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_i18n.test.ts @@ -169,7 +169,7 @@ function TestComponent() { }`, }, { - name: 'JSX elements that have a label or aria-label prop with a string value should be translated with i18n', + name: 'JSX elements that have a label, aria-label or title prop with a string value should be translated with i18n', filename: '/x-pack/plugins/observability_solution/observability/public/test_component.tsx', code: ` import React from 'react'; @@ -179,12 +179,30 @@ function TestComponent() { return ( ) +} +function TestComponent2() { + return ( + + ) +} +function TestComponent3() { + return ( + + ) }`, errors: [ { line: 7, message: RULE_WARNING_MESSAGE, }, + { + line: 12, + message: RULE_WARNING_MESSAGE, + }, + { + line: 17, + message: RULE_WARNING_MESSAGE, + }, ], output: ` import React from 'react'; @@ -194,10 +212,20 @@ function TestComponent() { return ( ) +} +function TestComponent2() { + return ( + + ) +} +function TestComponent3() { + return ( + + ) }`, }, { - name: 'JSX elements that have a label or aria-label prop with a JSXExpression value that is a string should be translated with i18n', + name: 'JSX elements that have a label, aria-label or title prop with a JSXExpression value that is a string should be translated with i18n', filename: '/x-pack/plugins/observability_solution/observability/public/test_component.tsx', code: ` import React from 'react'; @@ -207,12 +235,30 @@ function TestComponent() { return ( ) +} +function TestComponent2() { + return ( + + ) +} +function TestComponent3() { + return ( + + ) }`, errors: [ { line: 7, message: RULE_WARNING_MESSAGE, }, + { + line: 12, + message: RULE_WARNING_MESSAGE, + }, + { + line: 17, + message: RULE_WARNING_MESSAGE, + }, ], output: ` import React from 'react'; @@ -222,6 +268,16 @@ function TestComponent() { return ( ) +} +function TestComponent2() { + return ( + + ) +} +function TestComponent3() { + return ( + + ) }`, }, ]; diff --git a/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_i18n.ts b/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_i18n.ts index ec8bdb13815fe..c41f640748d47 100644 --- a/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_i18n.ts +++ b/packages/kbn-eslint-plugin-i18n/rules/strings_should_be_translated_with_i18n.ts @@ -73,7 +73,12 @@ export const StringsShouldBeTranslatedWithI18n: Rule.RuleModule = { }); }, JSXAttribute: (node: TSESTree.JSXAttribute) => { - if (node.name.name !== 'aria-label' && node.name.name !== 'label') return; + if ( + node.name.name !== 'aria-label' && + node.name.name !== 'label' && + node.name.name !== 'title' + ) + return; let val: string = ''; From c89a0588a4b9fc850a5943c045bc8cd6913e23ad Mon Sep 17 00:00:00 2001 From: Konrad Szwarc Date: Thu, 21 Mar 2024 15:11:24 +0100 Subject: [PATCH 20/90] [EDR Workflows] New SO for internal user artifacts manifest (#178306) This is the initial step in tackling the problems with the current user artifacts manifest. It introduces a new Saved Object, along with a client to handle CRUD operations on the SO. Currently, the SO type is not exported. I recommend delaying the registration until we've implemented the manifest manager, which will be our next step. This is because implementing the manifest manager might reveal the necessity to alter the structure of the saved object. Once the SO is committed, making changes to its shape could become problematic. Commit that reversed SO registration - https://github.com/elastic/kibana/pull/178306/commits/0d692403842bcc648630d598ff8fa4dceb7546a9 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../server/endpoint/lib/artifacts/common.ts | 1 + .../lib/artifacts/saved_object_mappings.ts | 25 ++ .../schemas/artifacts/saved_objects.ts | 37 +++ .../services/artifacts/manifest_client.ts | 2 +- .../artifacts/unified_manifes_client.test.ts | 250 ++++++++++++++++++ .../artifacts/unified_manifest_client.ts | 188 +++++++++++++ .../endpoint/services/artifacts/utils.ts | 27 ++ .../endpoint/utils/create_so_find_iterable.ts | 149 +++++++++++ .../endpoint/utils/normalize_kuery.test.ts | 29 ++ .../server/endpoint/utils/normalize_kuery.ts | 13 + 10 files changed, 720 insertions(+), 1 deletion(-) create mode 100644 x-pack/plugins/security_solution/server/endpoint/services/artifacts/unified_manifes_client.test.ts create mode 100644 x-pack/plugins/security_solution/server/endpoint/services/artifacts/unified_manifest_client.ts create mode 100644 x-pack/plugins/security_solution/server/endpoint/services/artifacts/utils.ts create mode 100644 x-pack/plugins/security_solution/server/endpoint/utils/create_so_find_iterable.ts create mode 100644 x-pack/plugins/security_solution/server/endpoint/utils/normalize_kuery.test.ts create mode 100644 x-pack/plugins/security_solution/server/endpoint/utils/normalize_kuery.ts diff --git a/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/common.ts b/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/common.ts index e8499284e880f..e6f0cc7b1828e 100644 --- a/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/common.ts +++ b/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/common.ts @@ -31,6 +31,7 @@ export const ArtifactConstants = { export const ManifestConstants = { SAVED_OBJECT_TYPE: 'endpoint:user-artifact-manifest', + UNIFIED_SAVED_OBJECT_TYPE: 'endpoint:unified-user-artifact-manifest', }; export const getArtifactId = (artifact: InternalArtifactSchema) => { diff --git a/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/saved_object_mappings.ts b/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/saved_object_mappings.ts index dba96c2c084de..655fc247ac915 100644 --- a/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/saved_object_mappings.ts +++ b/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/saved_object_mappings.ts @@ -34,3 +34,28 @@ export const manifestType: SavedObjectsType = { mappings: manifestSavedObjectMappings, migrations, }; + +export const unifiedManifestSavedObjectType = ManifestConstants.UNIFIED_SAVED_OBJECT_TYPE; + +export const unifiedManifestSavedObjectMappings: SavedObjectsType['mappings'] = { + dynamic: false, + properties: { + artifactIds: { + type: 'keyword', + }, + policyId: { + type: 'keyword', + }, + semanticVersion: { + type: 'keyword', + }, + }, +}; + +export const unifiedManifestType: SavedObjectsType = { + name: unifiedManifestSavedObjectType, + indexPattern: SECURITY_SOLUTION_SAVED_OBJECT_INDEX, + hidden: false, + namespaceType: 'multiple', + mappings: unifiedManifestSavedObjectMappings, +}; diff --git a/x-pack/plugins/security_solution/server/endpoint/schemas/artifacts/saved_objects.ts b/x-pack/plugins/security_solution/server/endpoint/schemas/artifacts/saved_objects.ts index d37016c83e4c9..f0bc3a80d3406 100644 --- a/x-pack/plugins/security_solution/server/endpoint/schemas/artifacts/saved_objects.ts +++ b/x-pack/plugins/security_solution/server/endpoint/schemas/artifacts/saved_objects.ts @@ -77,3 +77,40 @@ export const internalManifestCreateSchema = t.intersection([ ), ]); export type InternalManifestCreateSchema = t.TypeOf; + +/** + * Unified Manifest + */ + +const internalUnifiedManifestBaseSchema = t.exact( + t.type({ + artifactIds: t.array(identifier), + policyId: identifier, + semanticVersion, + }) +); +export type InternalUnifiedManifestBaseSchema = t.TypeOf; + +const internalUnifiedManifestUpdateSchema = t.intersection([ + internalUnifiedManifestBaseSchema, + t.exact( + t.type({ + id: identifier, + }) + ), +]); +export type InternalUnifiedManifestUpdateSchema = t.TypeOf< + typeof internalUnifiedManifestUpdateSchema +>; + +export const internalUnifiedManifestSchema = t.intersection([ + internalUnifiedManifestBaseSchema, + t.exact( + t.type({ + id: identifier, + created: t.union([t.string, t.undefined]), + }) + ), +]); + +export type InternalUnifiedManifestSchema = t.TypeOf; diff --git a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_client.ts b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_client.ts index d2f0093c11812..7df87f330a649 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_client.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_client.ts @@ -14,7 +14,7 @@ import { validate } from '@kbn/securitysolution-io-ts-utils'; import type { ManifestSchemaVersion } from '../../../../common/endpoint/schema/common'; import { manifestSchemaVersion } from '../../../../common/endpoint/schema/common'; import { ManifestConstants } from '../../lib/artifacts'; -import type { InternalManifestSchema, InternalManifestCreateSchema } from '../../schemas/artifacts'; +import type { InternalManifestCreateSchema, InternalManifestSchema } from '../../schemas/artifacts'; interface UpdateManifestOpts { version: string; diff --git a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/unified_manifes_client.test.ts b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/unified_manifes_client.test.ts new file mode 100644 index 0000000000000..83a37e617caf7 --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/unified_manifes_client.test.ts @@ -0,0 +1,250 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { UNIFIED_MANIFEST_ALL_NAMESPACES, UnifiedManifestClient } from './unified_manifest_client'; +import { savedObjectsClientMock } from '@kbn/core/server/mocks'; +import { ManifestConstants } from '../../lib/artifacts'; +import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import type { InternalUnifiedManifestSchema } from '../../schemas'; + +describe('unified_manifest_client', () => { + let savedObjectsClient: ReturnType; + let unifiedManifestClient: UnifiedManifestClient; + + const mockUnifiedManifestAttributes = ({ + policyId, + artifactIds, + }: { policyId?: string; artifactIds?: string[] } = {}) => ({ + policyId: policyId ?? '123', + artifactIds: artifactIds ?? ['artifact-123'], + semanticVersion: '1.0.0', + }); + + const mockSoClientCallParams = ( + { id, version }: { id?: string; version?: string } = {}, + attachAttributes = true, + attachCreated = true + ) => ({ + ...(id && { id }), + type: ManifestConstants.UNIFIED_SAVED_OBJECT_TYPE, + ...(attachAttributes && { + attributes: mockUnifiedManifestAttributes(), + }), + ...(version && { version }), + }); + + beforeEach(() => { + savedObjectsClient = savedObjectsClientMock.create(); + unifiedManifestClient = new UnifiedManifestClient(savedObjectsClient); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('can create UnifiedManifestClient', () => { + expect(unifiedManifestClient).toBeInstanceOf(UnifiedManifestClient); + }); + + describe('Create methods', () => { + test('can create unified manifest', async () => { + await unifiedManifestClient.createUnifiedManifest(mockUnifiedManifestAttributes()); + expect(savedObjectsClient.bulkCreate).toHaveBeenCalledWith( + expect.arrayContaining([mockSoClientCallParams()]), + { initialNamespaces: [UNIFIED_MANIFEST_ALL_NAMESPACES] } + ); + }); + test('can create unified manifests', async () => { + await unifiedManifestClient.createUnifiedManifests([ + mockUnifiedManifestAttributes(), + mockUnifiedManifestAttributes(), + ]); + expect(savedObjectsClient.bulkCreate).toHaveBeenCalledWith( + expect.arrayContaining([mockSoClientCallParams(), mockSoClientCallParams()]), + { initialNamespaces: [UNIFIED_MANIFEST_ALL_NAMESPACES] } + ); + }); + }); + describe('Read methods', () => { + test('can get unified manifest by id', async () => { + await unifiedManifestClient.getUnifiedManifestById('123'); + expect(savedObjectsClient.bulkGet).toHaveBeenCalledWith( + expect.arrayContaining([mockSoClientCallParams({ id: '123' }, false)]), + { namespace: UNIFIED_MANIFEST_ALL_NAMESPACES } + ); + }); + + test('can get unified manifests by ids', async () => { + await unifiedManifestClient.getUnifiedManifestByIds(['123', '456']); + expect(savedObjectsClient.bulkGet).toHaveBeenCalledWith( + expect.arrayContaining([ + mockSoClientCallParams({ id: '123' }, false), + mockSoClientCallParams({ id: '456' }, false), + ]), + { namespace: UNIFIED_MANIFEST_ALL_NAMESPACES } + ); + }); + + test('can get unified manifest by policyId', async () => { + await unifiedManifestClient.getUnifiedManifestByPolicyId('123'); + expect(savedObjectsClient.find).toHaveBeenCalledWith({ + search: '123', + type: ManifestConstants.UNIFIED_SAVED_OBJECT_TYPE, + searchFields: ['policyId'], + namespaces: [UNIFIED_MANIFEST_ALL_NAMESPACES], + }); + }); + + test('can get all unified manifests', async () => { + const getMockAgentPolicyFetchAllAgentPolicies = (items: InternalUnifiedManifestSchema[]) => + 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); + } + }); + + unifiedManifestClient.fetchAllUnifiedManifests = getMockAgentPolicyFetchAllAgentPolicies( + Array.from({ length: 2001 }, (_, i) => { + return { + ...mockUnifiedManifestAttributes({ policyId: `policy-${i}` }), + id: `id-${i}`, + created: '1', + }; + }) + ); + + const cbFunc = jest.fn(); + await unifiedManifestClient.getAllUnifiedManifests(cbFunc); + + expect(cbFunc).toHaveBeenCalledTimes(3); + expect(cbFunc).toHaveBeenLastCalledWith([ + expect.objectContaining({ policyId: 'policy-2000', id: 'id-2000' }), + ]); + }); + }); + + describe('Update methods', () => { + const mockUnifiedManifest = (version = false) => ({ + id: '1234', + ...mockUnifiedManifestAttributes(), + ...(version && { version: 'abcd' }), + }); + + test('can update unified manifest', async () => { + await unifiedManifestClient.updateUnifiedManifest(mockUnifiedManifest(), { version: 'abcd' }); + expect(savedObjectsClient.bulkUpdate).toHaveBeenCalledWith( + expect.arrayContaining([ + mockSoClientCallParams({ id: '1234', version: 'abcd' }, true, false), + ]), + { namespace: UNIFIED_MANIFEST_ALL_NAMESPACES } + ); + }); + test('can update unified manifests', async () => { + await unifiedManifestClient.updateUnifiedManifests([ + mockUnifiedManifest(true), + mockUnifiedManifest(true), + ]); + expect(savedObjectsClient.bulkUpdate).toHaveBeenCalledWith( + expect.arrayContaining([ + mockSoClientCallParams({ id: '1234', version: 'abcd' }, true, false), + mockSoClientCallParams({ id: '1234', version: 'abcd' }, true, false), + ]), + { namespace: UNIFIED_MANIFEST_ALL_NAMESPACES } + ); + }); + }); + describe('Delete methods', () => { + test('can delete unified manifest', async () => { + await unifiedManifestClient.deleteUnifiedManifestById('123'); + expect(savedObjectsClient.bulkDelete).toHaveBeenCalledWith( + expect.arrayContaining([{ id: '123', type: ManifestConstants.UNIFIED_SAVED_OBJECT_TYPE }]), + { namespace: UNIFIED_MANIFEST_ALL_NAMESPACES } + ); + }); + test('can delete unified manifests', async () => { + await unifiedManifestClient.deleteUnifiedManifestByIds(['123', '456']); + expect(savedObjectsClient.bulkDelete).toHaveBeenCalledWith( + expect.arrayContaining([ + mockSoClientCallParams({ id: '123' }, false), + mockSoClientCallParams({ id: '456' }, false), + ]), + { namespace: UNIFIED_MANIFEST_ALL_NAMESPACES } + ); + }); + }); + describe('Utility methods', () => { + describe('fetchAllUnifiedManifests', () => { + const soList = Array.from({ length: 2 }, () => ({ + updated_at: '2020-01-01T00:00:00.000Z', + })); + + const createSOMock = (soResult?: []) => { + return { + saved_objects: !soResult + ? soList.map((soAttributes) => { + return { + score: 1, + id: 'so-123', + type: ManifestConstants.UNIFIED_SAVED_OBJECT_TYPE, + version: 'abc', + updated_at: soAttributes.updated_at, + attributes: mockUnifiedManifestAttributes(), + references: [], + sort: ['created_at'], + }; + }) + : soResult, + total: soList.length, + per_page: 10, + page: 1, + pit_id: 'pit-id-1', + }; + }; + + beforeEach(() => { + savedObjectsClient.find.mockResolvedValueOnce(createSOMock()); + savedObjectsClient.find.mockResolvedValueOnce(createSOMock()); + savedObjectsClient.find.mockResolvedValueOnce(createSOMock([])); + }); + + test('should provide item ids on every iteration', async () => { + for await (const items of unifiedManifestClient.fetchAllUnifiedManifests( + savedObjectsClient + )) { + expect(items.map((item) => item.id)).toEqual(['so-123', 'so-123']); + } + + expect(savedObjectsClient.find).toHaveBeenCalledTimes(3); + }); + + test('should use custom options when defined', async () => { + for await (const items of unifiedManifestClient.fetchAllUnifiedManifests( + savedObjectsClient, + { + kuery: 'one=two', + perPage: 12, + sortOrder: 'desc', + sortField: 'updated_by', + } + )) { + expect(items); + } + + expect(savedObjectsClient.find).toHaveBeenCalledWith( + expect.objectContaining({ + type: ManifestConstants.UNIFIED_SAVED_OBJECT_TYPE, + perPage: 12, + sortField: 'updated_by', + sortOrder: 'desc', + filter: 'one=two', + }) + ); + }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/unified_manifest_client.ts b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/unified_manifest_client.ts new file mode 100644 index 0000000000000..ae1acdbd8e4cf --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/unified_manifest_client.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 type { + SavedObjectsBulkDeleteResponse, + SavedObjectsBulkResponse, + SavedObjectsBulkUpdateResponse, + SavedObjectsClientContract, + SavedObjectsFindResponse, +} from '@kbn/core-saved-objects-api-server'; +import { createSoFindIterable } from '../../utils/create_so_find_iterable'; +import { mapUnifiedManifestSavedObjectToUnifiedManifest } from './utils'; +import type { + InternalUnifiedManifestBaseSchema, + InternalUnifiedManifestSchema, + InternalUnifiedManifestUpdateSchema, +} from '../../schemas'; +import { ManifestConstants } from '../../lib/artifacts'; +import { normalizeKuery } from '../../utils/normalize_kuery'; + +interface FetchAllUnifiedManifestsOptions { + perPage?: number; + kuery?: string; + sortField?: string; + sortOrder?: 'desc' | 'asc'; + fields?: string[]; +} + +export const UNIFIED_MANIFEST_ALL_NAMESPACES = '*'; + +export class UnifiedManifestClient { + private savedObjectsClient: SavedObjectsClientContract; + + constructor(savedObjectsClient: SavedObjectsClientContract) { + this.savedObjectsClient = savedObjectsClient; + } + + /** + * Create + */ + + public createUnifiedManifest( + manifest: InternalUnifiedManifestBaseSchema + ): Promise> { + return this.createUnifiedManifests([manifest]); + } + + public createUnifiedManifests( + manifests: InternalUnifiedManifestBaseSchema[] + ): Promise> { + return this.savedObjectsClient.bulkCreate( + manifests.map((attributes) => ({ + type: ManifestConstants.UNIFIED_SAVED_OBJECT_TYPE, + attributes, + })), + { initialNamespaces: [UNIFIED_MANIFEST_ALL_NAMESPACES] } + ); + } + + /** + * Read + */ + + public getUnifiedManifestByPolicyId( + policyId: string + ): Promise> { + return this.savedObjectsClient.find({ + type: ManifestConstants.UNIFIED_SAVED_OBJECT_TYPE, + search: policyId, + searchFields: ['policyId'], + namespaces: [UNIFIED_MANIFEST_ALL_NAMESPACES], + }); + } + + public getUnifiedManifestById( + manifestId: string + ): Promise> { + return this.getUnifiedManifestByIds([manifestId]); + } + + public getUnifiedManifestByIds( + manifestIds: string[] + ): Promise> { + return this.savedObjectsClient.bulkGet( + manifestIds.map((id) => ({ id, type: ManifestConstants.UNIFIED_SAVED_OBJECT_TYPE })), + { namespace: UNIFIED_MANIFEST_ALL_NAMESPACES } + ); + } + + public async getAllUnifiedManifests( + cb: (unifiedManifests: InternalUnifiedManifestSchema[]) => void | Promise, + options?: FetchAllUnifiedManifestsOptions + ): Promise { + const unifiedManifestsFetcher = this.fetchAllUnifiedManifests(this.savedObjectsClient, options); + + for await (const unifiedManifests of unifiedManifestsFetcher) { + if (cb.constructor.name === 'AsyncFunction') { + await cb(unifiedManifests); + } else { + cb(unifiedManifests); + } + } + } + + /** + * Update + */ + + public updateUnifiedManifest( + manifest: InternalUnifiedManifestUpdateSchema, + opts?: { version: string } + ): Promise> { + return this.updateUnifiedManifests([ + { ...manifest, ...(opts?.version ? { version: opts.version } : {}) }, + ]); + } + + public updateUnifiedManifests( + manifests: Array + ): Promise> { + return this.savedObjectsClient.bulkUpdate( + manifests.map((manifest) => { + const { id, version, ...attributes } = manifest; + return { + type: ManifestConstants.UNIFIED_SAVED_OBJECT_TYPE, + id, + attributes, + ...(version ? { version } : {}), + }; + }), + { namespace: UNIFIED_MANIFEST_ALL_NAMESPACES } + ); + } + + /** + * Delete + */ + + public deleteUnifiedManifestById(manifestId: string): Promise { + return this.deleteUnifiedManifestByIds([manifestId]); + } + + public deleteUnifiedManifestByIds( + manifestIds: string[] + ): Promise { + return this.savedObjectsClient.bulkDelete( + manifestIds.map((id) => ({ id, type: ManifestConstants.UNIFIED_SAVED_OBJECT_TYPE })), + { namespace: UNIFIED_MANIFEST_ALL_NAMESPACES } + ); + } + + /** + * Utils + */ + + public fetchAllUnifiedManifests( + soClient: SavedObjectsClientContract, + { + perPage = 1000, + fields = [], + kuery, + sortOrder = 'asc', + sortField = 'created', + }: FetchAllUnifiedManifestsOptions = {} + ): AsyncIterable { + return createSoFindIterable({ + soClient, + findRequest: { + type: ManifestConstants.UNIFIED_SAVED_OBJECT_TYPE, + perPage, + filter: kuery + ? normalizeKuery(ManifestConstants.UNIFIED_SAVED_OBJECT_TYPE, kuery) + : undefined, + sortOrder, + sortField, + fields, + namespaces: [UNIFIED_MANIFEST_ALL_NAMESPACES], + }, + resultsMapper(results) { + return results.saved_objects.map(mapUnifiedManifestSavedObjectToUnifiedManifest); + }, + }); + } +} diff --git a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/utils.ts b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/utils.ts new file mode 100644 index 0000000000000..f52eafbdc4529 --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/utils.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { SavedObject } from '@kbn/core-saved-objects-common/src/server_types'; +import type { + InternalUnifiedManifestBaseSchema, + InternalUnifiedManifestSchema, +} from '../../schemas'; + +export const mapUnifiedManifestSavedObjectToUnifiedManifest = ({ + id, + attributes: { artifactIds, policyId, semanticVersion }, + // eslint-disable-next-line @typescript-eslint/naming-convention + created_at, +}: SavedObject): InternalUnifiedManifestSchema => { + return { + id, + policyId, + semanticVersion, + created: created_at, + artifactIds, + }; +}; diff --git a/x-pack/plugins/security_solution/server/endpoint/utils/create_so_find_iterable.ts b/x-pack/plugins/security_solution/server/endpoint/utils/create_so_find_iterable.ts new file mode 100644 index 0000000000000..e6d62826f36df --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/utils/create_so_find_iterable.ts @@ -0,0 +1,149 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import type { + SavedObjectsClientContract, + SavedObjectsFindOptions, + SavedObjectsFindResponse, + SavedObjectsFindResult, +} from '@kbn/core-saved-objects-api-server'; + +export interface CreateSoFindIterableOptions { + soClient: SavedObjectsClientContract; + findRequest: Omit & + // sortField is required + Pick, 'sortField'>; + /** + * An optional callback for mapping the results retrieved from SavedObjects. If defined, the iterator + * `value` will be set to the data returned by this mapping function. + * + * @param data + */ + resultsMapper?: (data: SavedObjectsFindResponse) => any; + /** If a Point in Time should be used while executing the search. Defaults to `true` */ + usePointInTime?: boolean; + namespaces?: string[]; +} + +export type InferSoFindIteratorResultValue = + CreateSoFindIterableOptions['resultsMapper'] extends undefined + ? SavedObjectsFindResponse + : ReturnType>['resultsMapper']>; + +/** + * Creates an `AsyncIterable` that can be used to iterate (ex. via `for..await..of`) over all the data + * matching the search query. The search request to Saved Object will use `searchAfter`, thus can iterate over + * datasets above 10k items as well. + * + * @param options + */ +export const createSoFindIterable = ({ + soClient, + findRequest: { perPage = 1000, ...findOptions }, + resultsMapper, + usePointInTime = true, + namespaces = ['*'], +}: CreateSoFindIterableOptions): AsyncIterable< + InferSoFindIteratorResultValue +> => { + const keepAliveValue = '5m'; + let done = false; + let value: SavedObjectsFindResponse; + let searchAfterValue: SavedObjectsFindResult['sort'] | undefined; + let pointInTime: Promise<{ id: string }> = usePointInTime + ? soClient.openPointInTimeForType(findOptions.type, { keepAlive: keepAliveValue }) + : Promise.resolve({ id: '' }); + + const setValue = (findResponse: SavedObjectsFindResponse): void => { + value = resultsMapper ? resultsMapper(findResponse) : findResponse; + }; + + const setDone = async (): Promise => { + done = true; + + if (usePointInTime) { + const pitId = (await pointInTime).id; + + if (pitId) { + await soClient.closePointInTime(pitId); + } + } + }; + + const fetchData = async () => { + const findResult = await soClient + .find({ + ...findOptions, + ...(usePointInTime + ? { + pit: { + id: (await pointInTime).id, + keepAlive: keepAliveValue, + }, + } + : {}), + perPage, + searchAfter: searchAfterValue, + namespaces, + }) + .catch((e) => { + Error.captureStackTrace(e); + throw e; + }); + + const soItems = findResult.saved_objects; + const lastSearchHit = soItems[soItems.length - 1]; + + if (soItems.length === 0) { + setValue(findResult); + await setDone(); + return; + } + + // eslint-disable-next-line require-atomic-updates + searchAfterValue = lastSearchHit.sort; + // eslint-disable-next-line require-atomic-updates + pointInTime = Promise.resolve({ id: findResult.pit_id ?? '' }); + setValue(findResult); + + // If (for some reason) we don't have a `searchAfterValue`, + // then throw an error, or else we'll keep looping forever + if (!searchAfterValue) { + await setDone(); + throw new Error( + `Unable to store 'searchAfter' value. Last 'SavedObjectsFindResult' did not include a 'sort' property \n(did you forget to set the 'sortField' attribute on your SavedObjectsFindOptions?)':\n${JSON.stringify( + lastSearchHit + )}` + ); + } + }; + + const createIteratorResult = (): IteratorResult> => { + return { done, value }; + }; + + return { + [Symbol.asyncIterator]() { + return { + async next() { + if (!done) { + await fetchData(); + } + + return createIteratorResult(); + }, + + async return() { + done = true; + return createIteratorResult(); + }, + }; + }, + }; +}; diff --git a/x-pack/plugins/security_solution/server/endpoint/utils/normalize_kuery.test.ts b/x-pack/plugins/security_solution/server/endpoint/utils/normalize_kuery.test.ts new file mode 100644 index 0000000000000..aef3931ac5535 --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/utils/normalize_kuery.test.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { normalizeKuery } from './normalize_kuery'; + +describe('normalizeKuery', () => { + [ + { input: 'user.name: John', output: 'user.attributes.name: John' }, + { + input: 'user.name: John and user.age > 30', + output: 'user.attributes.name: John and user.attributes.age > 30', + }, + { input: 'product.name: Apple', output: 'product.name: Apple' }, + { input: '', output: '' }, + ].forEach(({ input, output }) => { + it(`should normalize Kuery with single occurrence:`, () => { + expect(normalizeKuery('user', input)).toEqual(output); + }); + }); + + it('should handle Kuery input without savedObjectType', () => { + const kueryInput = 'name: John'; + expect(normalizeKuery('', kueryInput)).toEqual(kueryInput); + }); +}); diff --git a/x-pack/plugins/security_solution/server/endpoint/utils/normalize_kuery.ts b/x-pack/plugins/security_solution/server/endpoint/utils/normalize_kuery.ts new file mode 100644 index 0000000000000..2cbb291768c62 --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/utils/normalize_kuery.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const normalizeKuery = (savedObjectType: string, kueryInput: string): string => { + return kueryInput.replace( + new RegExp(`${savedObjectType}\\.(?!attributes\\.)`, 'g'), + `${savedObjectType}.attributes.` + ); +}; From 4a7768c2427fab6e3991976813454c93439fbf76 Mon Sep 17 00:00:00 2001 From: Gloria Hornero Date: Thu, 21 Mar 2024 15:13:18 +0100 Subject: [PATCH 21/90] [Security Solution][Detection Engine] Removing unnecessary logins (#179066) ## Summary Having too many login calls for the same test can be problematic in MKI. In this PR we are removing the unnecessary calls since we are doing the login already in the beforeEach hook. --- .../rule_creation/indicator_match_rule.cy.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/indicator_match_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/indicator_match_rule.cy.ts index c62c13144b5ab..fb90eccb289fc 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/indicator_match_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/indicator_match_rule.cy.ts @@ -135,7 +135,6 @@ describe('indicator match', { tags: ['@ess', '@serverless'] }, () => { describe('Creating new indicator match rules', () => { describe('Index patterns', () => { beforeEach(() => { - login(); visit(CREATE_RULE_URL); selectIndicatorMatchType(); }); @@ -159,7 +158,6 @@ describe('indicator match', { tags: ['@ess', '@serverless'] }, () => { describe('Indicator index patterns', () => { beforeEach(() => { - login(); visit(CREATE_RULE_URL); selectIndicatorMatchType(); }); @@ -181,7 +179,6 @@ describe('indicator match', { tags: ['@ess', '@serverless'] }, () => { describe('custom query input', () => { beforeEach(() => { - login(); visit(CREATE_RULE_URL); selectIndicatorMatchType(); }); @@ -198,7 +195,6 @@ describe('indicator match', { tags: ['@ess', '@serverless'] }, () => { describe('custom indicator query input', () => { beforeEach(() => { - login(); visit(CREATE_RULE_URL); selectIndicatorMatchType(); }); @@ -215,7 +211,6 @@ describe('indicator match', { tags: ['@ess', '@serverless'] }, () => { describe('Indicator mapping', () => { beforeEach(() => { - login(); const rule = getNewThreatIndicatorRule(); visit(CREATE_RULE_URL); selectIndicatorMatchType(); @@ -414,7 +409,6 @@ describe('indicator match', { tags: ['@ess', '@serverless'] }, () => { describe('Schedule', () => { it('IM rule has 1h time interval and lookback by default', () => { - login(); visit(CREATE_RULE_URL); selectIndicatorMatchType(); fillDefineIndicatorMatchRuleAndContinue(getNewThreatIndicatorRule()); From 1b90076047f9f38728488598e80f9783578ed0a2 Mon Sep 17 00:00:00 2001 From: Milton Hultgren Date: Thu, 21 Mar 2024 15:29:30 +0100 Subject: [PATCH 22/90] [Obs AI Assistant] Fix passing of response language (#179064) https://github.com/elastic/kibana/pull/178405 made some changes to how the chat service passes data to the API, while doing this we missed to pass along the `responseLanguage` setting, breaking the language selection feature. This PR just wires those up again and adds a test to catch this for the future. --- .../public/service/complete.test.ts | 1 + .../public/service/complete.ts | 12 +- .../service/create_chat_service.test.ts | 118 +++++++++++------- .../public/service/create_chat_service.ts | 11 +- 4 files changed, 97 insertions(+), 45 deletions(-) diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.test.ts index eca7b6977a7c3..a0b7b8fe1447e 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.test.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.test.ts @@ -98,6 +98,7 @@ describe('complete', () => { messages, persist: false, signal: new AbortController().signal, + responseLanguage: 'orcish', ...params, }, requestCallback diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.ts index 812d486317b57..e979d7b7c910b 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/complete.ts @@ -44,6 +44,7 @@ export function complete( messages: initialMessages, persist, signal, + responseLanguage, }: { client: Pick; getScreenContexts: () => ObservabilityAIAssistantScreenContext[]; @@ -52,6 +53,7 @@ export function complete( messages: Message[]; persist: boolean; signal: AbortSignal; + responseLanguage: string; }, requestCallback: ( params: ObservabilityAIAssistantAPIClientRequestParamsOf<'POST /internal/observability_ai_assistant/chat/complete'> @@ -63,7 +65,14 @@ export function complete( const response$ = requestCallback({ params: { - body: { connectorId, messages: initialMessages, persist, screenContexts, conversationId }, + body: { + connectorId, + messages: initialMessages, + persist, + screenContexts, + conversationId, + responseLanguage, + }, }, }).pipe( filter( @@ -134,6 +143,7 @@ export function complete( messages: initialMessages.concat(nextMessages), signal, persist, + responseLanguage, }, requestCallback ).subscribe(subscriber); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.test.ts index 2a333d742c5ec..22dee179720ca 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.test.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.test.ts @@ -33,56 +33,55 @@ async function getConcatenatedMessage( } describe('createChatService', () => { - describe('chat', () => { - let service: ObservabilityAIAssistantChatService; - - const clientSpy = jest.fn(); - - function respondWithChunks({ chunks, status = 200 }: { status?: number; chunks: string[] }) { - const response = { - response: { - status, - body: new ReadableStream({ - start(controller) { - chunks.forEach((chunk) => { - controller.enqueue(new TextEncoder().encode(chunk)); - }); - controller.close(); - }, - }), - }, + let service: ObservabilityAIAssistantChatService; + const clientSpy = jest.fn(); + + function respondWithChunks({ chunks, status = 200 }: { status?: number; chunks: string[] }) { + const response = { + response: { + status, + body: new ReadableStream({ + start(controller) { + chunks.forEach((chunk) => { + controller.enqueue(new TextEncoder().encode(chunk)); + }); + controller.close(); + }, + }), + }, + }; + + clientSpy.mockResolvedValueOnce(response); + } + + beforeEach(async () => { + clientSpy.mockImplementationOnce(async () => { + return { + functionDefinitions: [], + contextDefinitions: [], }; + }); + service = await createChatService({ + analytics: { + optIn: () => {}, + reportEvent: () => {}, + telemetryCounter$: new Observable(), + }, + apiClient: clientSpy, + registrations: [], + signal: new AbortController().signal, + }); + }); - clientSpy.mockResolvedValueOnce(response); - } + afterEach(() => { + clientSpy.mockReset(); + }); + describe('chat', () => { function chat({ signal }: { signal: AbortSignal } = { signal: new AbortController().signal }) { return service.chat('my_test', { signal, messages: [], connectorId: '' }); } - beforeEach(async () => { - clientSpy.mockImplementationOnce(async () => { - return { - functionDefinitions: [], - contextDefinitions: [], - }; - }); - service = await createChatService({ - analytics: { - optIn: () => {}, - reportEvent: () => {}, - telemetryCounter$: new Observable(), - }, - apiClient: clientSpy, - registrations: [], - signal: new AbortController().signal, - }); - }); - - afterEach(() => { - clientSpy.mockReset(); - }); - it('correctly parses a stream of JSON lines', async () => { const chunk1 = '{"id":"my-id","type":"chatCompletionChunk","message":{"content":"My"}}\n{"id":"my-id","type":"chatCompletionChunk","message":{"content":" new"}}'; @@ -230,4 +229,37 @@ describe('createChatService', () => { ).rejects.toEqual(expect.any(AbortError)); }); }); + + describe('complete', () => { + it("sends the user's preferred response language to the API", async () => { + respondWithChunks({ + chunks: [ + '{"id":"my-id","type":"chatCompletionChunk","message":{"content":"Some message"}}', + ], + }); + + const response$ = service.complete({ + connectorId: '', + getScreenContexts: () => [], + messages: [], + persist: false, + signal: new AbortController().signal, + responseLanguage: 'orcish', + }); + + await getConcatenatedMessage(response$); + + expect(clientSpy).toHaveBeenNthCalledWith( + 2, + 'POST /internal/observability_ai_assistant/chat/complete', + expect.objectContaining({ + params: expect.objectContaining({ + body: expect.objectContaining({ + responseLanguage: 'orcish', + }), + }), + }) + ); + }); + }); }); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.ts index c92d2f7b3daf9..3b94b29bd0d32 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.ts @@ -199,7 +199,15 @@ export async function createChatService({ shareReplay() ); }, - complete({ getScreenContexts, connectorId, conversationId, messages, persist, signal }) { + complete({ + getScreenContexts, + connectorId, + conversationId, + messages, + persist, + signal, + responseLanguage, + }) { return complete( { getScreenContexts, @@ -209,6 +217,7 @@ export async function createChatService({ persist, signal, client, + responseLanguage, }, ({ params }) => { return from( From 28277c25df26796a8aa51cb4b8e82b0483c9cf83 Mon Sep 17 00:00:00 2001 From: Drew Tate Date: Thu, 21 Mar 2024 15:34:38 +0100 Subject: [PATCH 23/90] [ES|QL] case only requires two parameters (#179011) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Part of https://github.com/elastic/kibana/issues/177699 We had `case` marked as if it required three parameters when in reality it only requires two. Screenshot 2024-03-19 at 4 23 29 PM Note: we could consider testing these n-1 cases to prevent this kind of bug in the future. Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Marta Bondyra <4283304+mbondyra@users.noreply.github.com> --- .../kbn-monaco/src/esql/lib/ast/definitions/functions.ts | 2 +- .../lib/ast/validation/esql_validation_meta_tests.json | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts b/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts index 898c888799cff..46712fed700bd 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts +++ b/packages/kbn-monaco/src/esql/lib/ast/definitions/functions.ts @@ -592,7 +592,7 @@ export const evalFunctionsDefinitions: FunctionDefinition[] = [ { name: 'condition', type: 'boolean' }, { name: 'value', type: 'any' }, ], - minParams: 3, + minParams: 2, returnType: 'any', examples: [ `from index | eval type = case(languages <= 1, "monolingual", languages <= 2, "bilingual", "polyglot")`, diff --git a/packages/kbn-monaco/src/esql/lib/ast/validation/esql_validation_meta_tests.json b/packages/kbn-monaco/src/esql/lib/ast/validation/esql_validation_meta_tests.json index 4da93337bacfc..39d2ccd562c06 100644 --- a/packages/kbn-monaco/src/esql/lib/ast/validation/esql_validation_meta_tests.json +++ b/packages/kbn-monaco/src/esql/lib/ast/validation/esql_validation_meta_tests.json @@ -563,11 +563,11 @@ "error": false }, { - "query": "row var = case(true, \"a\", \"a\")", + "query": "row var = case(true, \"a\")", "error": false }, { - "query": "row case(true, \"a\", \"a\")", + "query": "row case(true, \"a\")", "error": false }, { @@ -4871,11 +4871,11 @@ "error": true }, { - "query": "from a_index | eval var = case(booleanField, stringField, stringField)", + "query": "from a_index | eval var = case(booleanField, stringField)", "error": false }, { - "query": "from a_index | eval case(booleanField, stringField, stringField)", + "query": "from a_index | eval case(booleanField, stringField)", "error": false }, { From fa9c0dc2bb87dcbd4cfea721b0181a77c8c497af Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 21 Mar 2024 15:01:12 +0000 Subject: [PATCH 24/90] skip flaky suite (#179001) --- .../reporting_and_security/validation.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/validation.ts b/x-pack/test/reporting_api_integration/reporting_and_security/validation.ts index d25cc876d05d8..532f7859bce0a 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security/validation.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security/validation.ts @@ -86,7 +86,8 @@ export default function ({ getService }: FtrProviderContext) { }); }); - describe('pngV2', () => { + // FLAKY: https://github.com/elastic/kibana/issues/179001 + describe.skip('pngV2', () => { it('fails if width or height are non-numeric', async () => { const downloadReportPath = await reportingAPI.postJobJSON('/api/reporting/generate/pngV2', { jobParams: createPngV2Params('cucucachoo'), From bb5418408eec560afe6a584a443dde2af4d96dc5 Mon Sep 17 00:00:00 2001 From: "Eyo O. Eyo" <7893459+eokoneyo@users.noreply.github.com> Date: Thu, 21 Mar 2024 16:29:20 +0100 Subject: [PATCH 25/90] Copy assets from appropriate directory for kbn-monaco (#178669) ## Summary Closes #178448 Per the configuration in kibana, Monaco by default will attempt to load the specific worker for each language using the public path record defined on `window.__kbnPublicPath__` [see here](https://github.com/elastic/kibana/blob/main/packages/kbn-monaco/src/register_globals.ts#L42) but an error occurs whilst attempting to request the script at the url we expect it to be at because it doesn't exist there, as seen here; Screenshot 2024-03-13 at 17 21 36 Ideally this works but with the current setup for CDN assets it doesn't map 1:1 to how the assets are expected, we should be copying from the directory `target_workers` to match the same definition for [building packages ](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/build_packages_task.ts#L111-L113), similar to what we have [here](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/create_cdn_assets_task.ts#L67-L74) which is what this PR introduces. The hypothesis above is verifiable by attempting to request the same resource on the same build of the deployment where the error is reported, with the `target_workers` path prepended, like so https://kibana.estccdn.com/552e8adcca05/bundles/kbn-monaco/target_workers/json.editor.worker.js we get the file. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- NOTICE.txt | 25 ++++++ .../src/jest/setup/polyfills.jsdom.js | 15 ++++ .../kbn-ui-shared-deps-src/src/polyfills.js | 82 +++++++++++++++++++ src/dev/build/tasks/create_cdn_assets_task.ts | 5 +- 4 files changed, 126 insertions(+), 1 deletion(-) diff --git a/NOTICE.txt b/NOTICE.txt index 0f79b16b0b043..ed8b96176e920 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -1,6 +1,31 @@ Kibana source code with Kibana X-Pack source code Copyright 2012-2024 Elasticsearch B.V. +--- +Adapted from remote-web-worker, which was available under a "MIT" license. + +MIT License (MIT) + +Copyright (c) 2022 Jan Nicklas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + --- Pretty handling of logarithmic axes. Copyright (c) 2007-2014 IOLA and Ole Laursen. diff --git a/packages/kbn-test/src/jest/setup/polyfills.jsdom.js b/packages/kbn-test/src/jest/setup/polyfills.jsdom.js index 8016e0bd2b910..dbe4213ca83f7 100644 --- a/packages/kbn-test/src/jest/setup/polyfills.jsdom.js +++ b/packages/kbn-test/src/jest/setup/polyfills.jsdom.js @@ -32,3 +32,18 @@ global.Blob = require('blob-polyfill').Blob; if (!global.hasOwnProperty('ResizeObserver')) { global.ResizeObserver = require('resize-observer-polyfill'); } + +if (!global.hasOwnProperty('Worker')) { + class Worker { + constructor(stringUrl) { + this.url = stringUrl; + this.onmessage = () => {}; + } + + postMessage(msg) { + this.onmessage(msg); + } + } + + global.Worker = Worker; +} diff --git a/packages/kbn-ui-shared-deps-src/src/polyfills.js b/packages/kbn-ui-shared-deps-src/src/polyfills.js index cc8e1f9b75d5c..b942b5e92ff3c 100644 --- a/packages/kbn-ui-shared-deps-src/src/polyfills.js +++ b/packages/kbn-ui-shared-deps-src/src/polyfills.js @@ -17,3 +17,85 @@ if (typeof window.Event === 'object') { require('whatwg-fetch'); require('symbol-observable'); + +/* @notice + * + * Adapted from remote-web-worker, which was available under a "MIT" license. + * + * MIT License (MIT) + * + * Copyright (c) 2022 Jan Nicklas + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +typeof window !== 'undefined' && + // eslint-disable-next-line no-global-assign + (Worker = ((BaseWorker) => + class Worker extends BaseWorker { + constructor(url, options) { + let scriptUrl = String(url); + let objectURLRef; + + try { + const isCrossOrigin = (URLObject) => + URLObject.protocol === 'https:' && URLObject.origin !== window.location.origin; + + scriptUrl = isCrossOrigin(new URL(scriptUrl)) // to bootstrap the actual script to work around the same origin policy. + ? (objectURLRef = URL.createObjectURL( + new Blob( + [ + // Replace the `importScripts` function with + // a patched version that will resolve relative URLs + // to the remote script URL. + // + // Without a patched `importScripts` Webpack 5 generated worker chunks will fail with the following error: + // + // Uncaught (in promise) DOMException: Failed to execute 'importScripts' on 'WorkerGlobalScope': + // The script at 'http://some.domain/worker.1e0e1e0e.js' failed to load. + // + // For minification, the inlined variable names are single letters: + // i = original importScripts + // a = arguments + // u = URL + `importScripts=((i)=>(...a)=>i(...a.map((u)=>''+new URL(u,"${scriptUrl}"))))(importScripts);importScripts("${scriptUrl}");`, + ], + { + type: 'text/javascript', + } + ) + )) + : scriptUrl; + } catch { + // provided url doesn't match the expectation for URL constructor, it will be used as is + } + + super(scriptUrl, options); + + this.addEventListener( + 'message', + function revokeURL() { + if (objectURLRef) { + URL.revokeObjectURL(objectURLRef); + objectURLRef = null; + } + }, + { once: true } + ); + } + })(Worker)); diff --git a/src/dev/build/tasks/create_cdn_assets_task.ts b/src/dev/build/tasks/create_cdn_assets_task.ts index 2555795d50d80..870fd05c4ae39 100644 --- a/src/dev/build/tasks/create_cdn_assets_task.ts +++ b/src/dev/build/tasks/create_cdn_assets_task.ts @@ -76,7 +76,10 @@ export const CreateCdnAssets: Task = { resolve(buildSource, 'node_modules/@kbn/core/target/public'), resolve(bundles, 'core') ); - await copyAll(resolve(buildSource, 'node_modules/@kbn/monaco'), resolve(bundles, 'kbn-monaco')); + await copyAll( + resolve(buildSource, 'node_modules/@kbn/monaco/target_workers'), + resolve(bundles, 'kbn-monaco') + ); // packages/core/apps/core-apps-server-internal/src/core_app.ts await copyAll( From 09176e6aea18650dbb414dc391cdb539715d8dae Mon Sep 17 00:00:00 2001 From: Gloria Hornero Date: Thu, 21 Mar 2024 16:45:43 +0100 Subject: [PATCH 26/90] [Security Solution][Explore] Fixes cases cypress tests in MKI environment (#179103) ## Summary In this PR we are fixing the failing cases cypress tests on mki. We were facing different issues: - Cases and connectors were not properly deleted - The SN server mock was not working properly on MKI ## Cases and connectors not deleted The way we were using to delete cases and connectors was not working because we are trying o modify internal indexes, something that is completely forbidden in MKI environments. To solve the issue, we are using our APIs to perform those actions. ## The SN server mock not working on MKI It seems a CSP/CORS issue, @cnasikas and I were investigating how to fix it without any success. As the test is checking the creation of a connector without taking into consideration the type, we changed it to Jira. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../e2e/explore/cases/attach_timeline.cy.ts | 8 +- .../e2e/explore/cases/connectors.cy.ts | 42 ++++------ .../cypress/e2e/explore/cases/creation.cy.ts | 7 +- .../e2e/explore/cases/privileges.cy.ts | 4 +- .../cypress/objects/case.ts | 16 ++++ .../cypress/screens/configure_cases.ts | 12 ++- .../cypress/tasks/api_calls/cases.ts | 22 ++++++ .../cypress/tasks/api_calls/common.ts | 79 ++++--------------- .../cypress/tasks/configure_cases.ts | 21 +++-- .../cypress/tsconfig.json | 1 + 10 files changed, 110 insertions(+), 102 deletions(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/attach_timeline.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/attach_timeline.cy.ts index 04f50c5b7afb9..0dfa0620acccb 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/attach_timeline.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/attach_timeline.cy.ts @@ -17,15 +17,15 @@ import { DESCRIPTION_INPUT, ADD_COMMENT_INPUT } from '../../../screens/create_ne import { getCase1 } from '../../../objects/case'; import { getTimeline } from '../../../objects/timeline'; import { createTimeline } from '../../../tasks/api_calls/timelines'; -import { deleteAllCasesItems, deleteTimelines } from '../../../tasks/api_calls/common'; -import { createCase } from '../../../tasks/api_calls/cases'; +import { deleteTimelines } from '../../../tasks/api_calls/common'; +import { createCase, deleteCases } from '../../../tasks/api_calls/cases'; describe('attach timeline to case', { tags: ['@ess', '@serverless'] }, () => { context('without cases created', () => { beforeEach(() => { login(); deleteTimelines(); - deleteAllCasesItems(); + deleteCases(); createTimeline(getTimeline()).then((response) => { cy.wrap(response.body.data.persistTimeline.timeline).as('myTimeline'); }); @@ -61,7 +61,7 @@ describe('attach timeline to case', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { login(); deleteTimelines(); - deleteAllCasesItems(); + deleteCases(); createTimeline(getTimeline()).then((response) => cy.wrap(response.body.data.persistTimeline.timeline.savedObjectId).as('timelineId') ); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/connectors.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/connectors.cy.ts index 31c2068b49db0..6506b0985ee20 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/connectors.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/connectors.cy.ts @@ -5,17 +5,14 @@ * 2.0. */ -import { getServiceNowConnector, getServiceNowITSMHealthResponse } from '../../../objects/case'; +import { getJiraConnector } from '../../../objects/case'; -import { SERVICE_NOW_MAPPING } from '../../../screens/configure_cases'; +import { CONNECTORS_DROPDOWN, MAPPING } from '../../../screens/configure_cases'; import { goToEditExternalConnection } from '../../../tasks/all_cases'; -import { deleteAllCasesItems, deleteConnectors } from '../../../tasks/api_calls/common'; -import { - addServiceNowConnector, - openAddNewConnectorOption, - verifyNewConnectorSelected, -} from '../../../tasks/configure_cases'; +import { deleteCases } from '../../../tasks/api_calls/cases'; +import { deleteConnectors } from '../../../tasks/api_calls/common'; +import { addJiraConnector, openAddNewConnectorOption } from '../../../tasks/configure_cases'; import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; @@ -25,8 +22,8 @@ describe('Cases connectors', { tags: ['@ess', '@serverless'] }, () => { const configureResult = { connector: { id: 'e271c3b8-f702-4fbc-98e0-db942b573bbd', - name: 'SN', - type: '.servicenow', + name: 'Jira', + type: '.jira', fields: null, }, closure_type: 'close-by-user', @@ -37,7 +34,7 @@ describe('Cases connectors', { tags: ['@ess', '@serverless'] }, () => { updated_by: null, customFields: [], mappings: [ - { source: 'title', target: 'short_description', action_type: 'overwrite' }, + { source: 'title', target: 'summary', action_type: 'overwrite' }, { source: 'description', target: 'description', action_type: 'overwrite' }, { source: 'comments', target: 'comments', action_type: 'append' }, ], @@ -46,15 +43,12 @@ describe('Cases connectors', { tags: ['@ess', '@serverless'] }, () => { owner: 'securitySolution', }; - const snConnector = getServiceNowConnector(); + const jiraConnector = getJiraConnector(); beforeEach(() => { login(); - deleteAllCasesItems(); - cy.intercept('GET', `${snConnector.URL}/api/x_elas2_inc_int/elastic_api/health*`, { - statusCode: 200, - body: getServiceNowITSMHealthResponse(), - }); + deleteCases(); + deleteConnectors(); cy.intercept('POST', '/api/actions/connector').as('createConnector'); cy.intercept({ method: '+(POST|PATCH)', url: '/api/cases/configure' }, (req) => { @@ -73,7 +67,7 @@ describe('Cases connectors', { tags: ['@ess', '@serverless'] }, () => { ...res.body[0], error: null, mappings: [ - { source: 'title', target: 'short_description', action_type: 'overwrite' }, + { source: 'title', target: 'summary', action_type: 'overwrite' }, { source: 'description', target: 'description', action_type: 'overwrite' }, { source: 'comments', target: 'comments', action_type: 'append' }, ], @@ -85,23 +79,19 @@ describe('Cases connectors', { tags: ['@ess', '@serverless'] }, () => { }); }); - after(() => { - deleteConnectors(); - }); - it('Configures a new connector', () => { visit(CASES_URL); goToEditExternalConnection(); openAddNewConnectorOption(); - addServiceNowConnector(snConnector); + addJiraConnector(jiraConnector); cy.wait('@createConnector').then(({ response }) => { cy.wrap(response?.statusCode).should('eql', 200); + cy.wait('@saveConnector').its('response.statusCode').should('eql', 200); - verifyNewConnectorSelected(snConnector); + cy.get(CONNECTORS_DROPDOWN).should('have.text', jiraConnector.connectorName); - cy.wait('@saveConnector').its('response.statusCode').should('eql', 200); - cy.get(SERVICE_NOW_MAPPING).first().should('have.text', 'short_description'); + cy.get(MAPPING).first().should('have.text', 'summary'); }); }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts index 780ce1168fa3a..d76f8e9fb9eec 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts @@ -53,13 +53,15 @@ import { visit, visitWithTimeRange } from '../../../tasks/navigation'; import { CASES_URL, OVERVIEW_URL } from '../../../urls/navigation'; import { ELASTICSEARCH_USERNAME } from '../../../env_var_names_constants'; -import { deleteAllCasesItems, deleteTimelines } from '../../../tasks/api_calls/common'; +import { deleteTimelines } from '../../../tasks/api_calls/common'; +import { deleteCases } from '../../../tasks/api_calls/cases'; // Tracked by https://github.com/elastic/security-team/issues/7696 describe('Cases', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { deleteTimelines(); - deleteAllCasesItems(); + deleteCases(); + createTimeline(getCase1().timeline).then((response) => cy .wrap({ @@ -81,6 +83,7 @@ describe('Cases', { tags: ['@ess', '@serverless'] }, () => { attachTimeline(this.mycase); createCase(); backToCases(); + filterStatusOpen(); cy.get(ALL_CASES_PAGE_TITLE).should('have.text', 'Cases'); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/privileges.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/privileges.cy.ts index cd1781ddd5885..b6bc15de24262 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/privileges.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/privileges.cy.ts @@ -9,7 +9,7 @@ import type { TestCaseWithoutTimeline } from '../../../objects/case'; import { ALL_CASES_CREATE_NEW_CASE_BTN, ALL_CASES_NAME } from '../../../screens/all_cases'; import { goToCreateNewCase } from '../../../tasks/all_cases'; -import { deleteAllCasesItems } from '../../../tasks/api_calls/common'; +import { deleteCases } from '../../../tasks/api_calls/cases'; import { backToCases, @@ -54,7 +54,7 @@ describe('Cases privileges', { tags: ['@ess'] }, () => { deleteUsersAndRoles(usersToCreate, rolesToCreate); createUsersAndRoles(usersToCreate, rolesToCreate); login(); - deleteAllCasesItems(); + deleteCases(); }); for (const user of [secAllUser, secReadCasesAllUser, secAllCasesNoDeleteUser]) { diff --git a/x-pack/test/security_solution_cypress/cypress/objects/case.ts b/x-pack/test/security_solution_cypress/cypress/objects/case.ts index f30f24fb6ff06..59ec7dccefa99 100644 --- a/x-pack/test/security_solution_cypress/cypress/objects/case.ts +++ b/x-pack/test/security_solution_cypress/cypress/objects/case.ts @@ -30,6 +30,14 @@ export interface Connector { password: string; } +export interface JiraConnector { + connectorName: string; + URL: string; + projectKey: string; + email: string; + token: string; +} + export interface JiraConnectorOptions { issueType: string; priority: string; @@ -104,6 +112,14 @@ export const getServiceNowConnector = (): Connector => ({ password: 'password', }); +export const getJiraConnector = (): JiraConnector => ({ + connectorName: 'New Jira connector', + URL: 'https://www.test.jira.com', + projectKey: 'test', + email: 'test@test.com', + token: '1234567', +}); + export const getServiceNowITSMHealthResponse = (): ServiceNowHealthResponse => ({ result: { name: 'Elastic', diff --git a/x-pack/test/security_solution_cypress/cypress/screens/configure_cases.ts b/x-pack/test/security_solution_cypress/cypress/screens/configure_cases.ts index 3e83a569d04ec..ab38480177be0 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/configure_cases.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/configure_cases.ts @@ -16,6 +16,16 @@ export const CONNECTOR_NAME = '[data-test-subj="nameInput"]'; export const CONNECTORS_DROPDOWN = '[data-test-subj="dropdown-connectors"]'; +export const JIRA_CONNECTOR_CARD = '[data-test-subj=".jira-card"]'; + +export const JIRA_API_TOKEN = '[data-test-subj="secrets.apiToken-input"'; + +export const JIRA_EMAIL = '[data-test-subj="secrets.email-input"]'; + +export const JIRA_PROJECT_KEY = '[data-test-subj="config.projectKey-input"]'; + +export const JIRA_URL = '[data-test-subj="config.apiUrl-input"]'; + export const PASSWORD = '[data-test-subj="connector-servicenow-password-form-input"]'; export const SAVE_BTN = '[data-test-subj="create-connector-flyout-save-btn"]'; @@ -28,4 +38,4 @@ export const URL = '[data-test-subj="credentialsApiUrlFromInput"]'; export const USERNAME = '[data-test-subj="connector-servicenow-username-form-input"]'; -export const SERVICE_NOW_MAPPING = 'code[data-test-subj="field-mapping-target"]'; +export const MAPPING = 'code[data-test-subj="field-mapping-target"]'; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/cases.ts b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/cases.ts index e75b408089d93..4e7366ff09320 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/cases.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/cases.ts @@ -5,7 +5,9 @@ * 2.0. */ +import { CasesFindResponse } from '@kbn/cases-plugin/common/types/api'; import type { TestCase } from '../../objects/case'; +import { rootRequest } from './common'; export const createCase = (newCase: TestCase) => cy.request({ @@ -28,3 +30,23 @@ export const createCase = (newCase: TestCase) => }, headers: { 'kbn-xsrf': 'cypress-creds', 'x-elastic-internal-origin': 'security-solution' }, }); + +export const getCases = () => + rootRequest({ + method: 'GET', + url: 'api/cases/_find', + }); + +export const deleteCases = () => { + getCases().then(($response) => { + if ($response.body.cases.length > 0) { + const ids = $response.body.cases.map((myCase) => { + return `"${myCase.id}"`; + }); + rootRequest({ + method: 'DELETE', + url: `/api/cases?ids=[${ids}]`, + }); + } + }); +}; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/common.ts b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/common.ts index 9a8d382118464..194bfd2a4129f 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/common.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/common.ts @@ -7,6 +7,7 @@ import { DATA_VIEW_PATH, INITIAL_REST_VERSION } from '@kbn/data-views-plugin/server/constants'; import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { AllConnectorsResponse } from '@kbn/actions-plugin/common/routes/connector/response'; import { ELASTICSEARCH_PASSWORD, ELASTICSEARCH_USERNAME } from '../../env_var_names_constants'; import { deleteAllDocuments } from './elasticsearch'; import { DEFAULT_ALERTS_INDEX_PATTERN } from './alerts'; @@ -115,71 +116,25 @@ export const deleteTimelines = () => { }); }; -export const deleteAllCasesItems = () => { - const kibanaIndexUrl = `${Cypress.env('ELASTICSEARCH_URL')}/.kibana_alerting_cases_\*`; - rootRequest({ - method: 'POST', - url: `${kibanaIndexUrl}/_delete_by_query?conflicts=proceed&refresh`, - body: { - query: { - bool: { - filter: [ - { - bool: { - should: [ - { - term: { - type: 'cases', - }, - }, - { - term: { - type: 'cases-configure', - }, - }, - { - term: { - type: 'cases-comments', - }, - }, - { - term: { - type: 'cases-user-action', - }, - }, - { - term: { - type: 'cases-connector-mappings', - }, - }, - ], - }, - }, - ], - }, - }, - }, +export const getConnectors = () => + rootRequest({ + method: 'GET', + url: 'api/actions/connectors', }); -}; export const deleteConnectors = () => { - const kibanaIndexUrl = `${Cypress.env('ELASTICSEARCH_URL')}/.kibana_alerting_cases_\*`; - rootRequest({ - method: 'POST', - url: `${kibanaIndexUrl}/_delete_by_query?conflicts=proceed&refresh`, - body: { - query: { - bool: { - filter: [ - { - match: { - type: 'action', - }, - }, - ], - }, - }, - }, + getConnectors().then(($response) => { + if ($response.body.length > 0) { + const ids = $response.body.map((connector) => { + return connector.id; + }); + ids.forEach((id) => { + rootRequest({ + method: 'DELETE', + url: `api/actions/connector/${id}`, + }); + }); + } }); }; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/configure_cases.ts b/x-pack/test/security_solution_cypress/cypress/tasks/configure_cases.ts index 1dc23d4969dc0..6c63d824c43d5 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/configure_cases.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/configure_cases.ts @@ -10,6 +10,11 @@ import { CONNECTOR, CONNECTOR_NAME, CONNECTORS_DROPDOWN, + JIRA_API_TOKEN, + JIRA_CONNECTOR_CARD, + JIRA_EMAIL, + JIRA_PROJECT_KEY, + JIRA_URL, PASSWORD, SAVE_BTN, SERVICE_NOW_CONNECTOR_CARD, @@ -18,7 +23,7 @@ import { } from '../screens/configure_cases'; import { MAIN_PAGE } from '../screens/security_main'; -import type { Connector } from '../objects/case'; +import type { Connector, JiraConnector } from '../objects/case'; export const addServiceNowConnector = (connector: Connector) => { cy.get(SERVICE_NOW_CONNECTOR_CARD).click(); @@ -29,6 +34,16 @@ export const addServiceNowConnector = (connector: Connector) => { cy.get(SAVE_BTN).click({ force: true }); }; +export const addJiraConnector = (connector: JiraConnector) => { + cy.get(JIRA_CONNECTOR_CARD).click(); + cy.get(CONNECTOR_NAME).type(connector.connectorName); + cy.get(JIRA_URL).type(connector.URL); + cy.get(JIRA_PROJECT_KEY).type(connector.projectKey); + cy.get(JIRA_EMAIL).type(connector.email); + cy.get(JIRA_API_TOKEN).type(connector.token); + cy.get(SAVE_BTN).click(); +}; + export const openAddNewConnectorOption = () => { cy.get(MAIN_PAGE).then(($page) => { if ($page.find(SERVICE_NOW_CONNECTOR_CARD).length !== 1) { @@ -40,10 +55,6 @@ export const openAddNewConnectorOption = () => { }); }; -export const verifyNewConnectorSelected = (connector: Connector) => { - cy.get(CONNECTORS_DROPDOWN).should('have.text', connector.connectorName); -}; - export const selectLastConnectorCreated = (id: string) => { cy.get(CONNECTORS_DROPDOWN).click({ force: true }); cy.get(CONNECTOR(id)).click(); diff --git a/x-pack/test/security_solution_cypress/cypress/tsconfig.json b/x-pack/test/security_solution_cypress/cypress/tsconfig.json index d6a08efd3073f..7c9c6ac50d57b 100644 --- a/x-pack/test/security_solution_cypress/cypress/tsconfig.json +++ b/x-pack/test/security_solution_cypress/cypress/tsconfig.json @@ -41,5 +41,6 @@ "@kbn/es-query", "@kbn/ml-plugin", "@kbn/license-management-plugin", + "@kbn/actions-plugin", ] } From ef899e40bf833c5e42be6cfcd5dff566c3aed8c8 Mon Sep 17 00:00:00 2001 From: Samiul Monir <150824886+Samiul-TheSoccerFan@users.noreply.github.com> Date: Thu, 21 Mar 2024 12:10:31 -0400 Subject: [PATCH 27/90] [Kibana] AI Playground (#178049) ## Summary We are planning to continue further development in `kibana` and this feature will be gated. ### 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 - [ ] [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 - [x] 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: Yan Savitski Co-authored-by: Joseph McElroy Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 1 + docs/developer/plugin-list.asciidoc | 4 + package.json | 6 + packages/kbn-optimizer/limits.yml | 1 + packages/kbn-test/jest-preset.js | 6 +- .../jest_integration_node/jest-preset.js | 6 +- tsconfig.base.json | 2 + x-pack/.i18nrc.json | 1 + .../common/__mocks__/initial_app_data.ts | 1 - .../enterprise_search/common/constants.ts | 2 +- .../common/locators/create_index_locator.tsx | 25 + .../enterprise_search/common/types/index.ts | 2 - x-pack/plugins/enterprise_search/kibana.jsonc | 3 +- .../__mocks__/kea_logic/kibana_logic.mock.ts | 2 + .../components/layout/page_template.tsx | 3 +- .../components/playground/playground.tsx | 43 ++ .../components/playground/types.ts | 19 + .../enterprise_search_content/index.tsx | 5 + .../enterprise_search_content/routes.ts | 1 + .../public/applications/index.tsx | 1 + .../shared/kibana/kibana_logic.ts | 3 + .../applications/shared/layout/nav.test.tsx | 6 + .../public/applications/shared/layout/nav.tsx | 12 + .../test_helpers/test_utils.test_helper.tsx | 3 +- .../enterprise_search/public/plugin.ts | 14 +- .../plugins/enterprise_search/server/index.ts | 2 - .../lib/enterprise_search_config_api.test.ts | 2 - .../lib/enterprise_search_config_api.ts | 2 - .../plugins/enterprise_search/tsconfig.json | 4 +- x-pack/plugins/search_playground/README.md | 3 + .../fetch_query_source_fields.mock.ts | 300 ++++++++++++ .../__mocks__/search_playground_mock.ts | 24 + .../plugins/search_playground/common/index.ts | 9 + .../plugins/search_playground/common/types.ts | 27 ++ .../plugins/search_playground/jest.config.js | 15 + x-pack/plugins/search_playground/kibana.jsonc | 21 + .../search_playground/public/application.tsx | 61 +++ .../public/components/app.tsx | 29 ++ .../public/components/chat.tsx | 175 +++++++ .../public/components/chat_sidebar.tsx | 88 ++++ .../message_list/assistant_message.tsx | 145 ++++++ .../message_list/citations_table.tsx | 69 +++ .../message_list/copy_action_button.tsx | 30 ++ .../components/message_list/message_list.tsx | 45 ++ .../message_list/retrieval_docs_flyout.tsx | 137 ++++++ .../message_list/system_message.tsx | 34 ++ .../components/message_list/user_message.tsx | 64 +++ .../public/components/question_input.tsx | 82 ++++ .../sources_panel/add_indices_field.tsx | 61 +++ .../sources_panel/create_index_callout.tsx | 61 +++ .../components/sources_panel/indices_list.tsx | 49 ++ .../sources_panel/indices_table.tsx | 50 ++ .../sources_panel_for_start_chat.tsx | 72 +++ .../sources_panel/sources_panel_sidebar.tsx | 58 +++ .../public/components/start_chat_panel.tsx | 66 +++ .../public/components/start_new_chat.tsx | 78 ++++ .../include_citations_field.tsx | 30 ++ .../instructions_field.tsx | 55 +++ .../summarization_panel/open_ai_icon.tsx | 17 + .../open_ai_key_callout.tsx | 40 ++ .../summarization_panel/open_ai_key_field.tsx | 65 +++ .../open_ai_key_flyout.tsx | 123 +++++ .../open_ai_summarization_model.tsx | 102 +++++ .../summarization_panel.tsx | 74 +++ .../summarization_panel_for_start_chat.tsx | 48 ++ .../public/components/telegram_icon.tsx | 17 + .../public/components/toolbar.tsx | 20 + .../view_code/create_api_key_form.tsx | 154 +++++++ .../components/view_code/view_code_action.tsx | 37 ++ .../components/view_code/view_code_flyout.tsx | 99 ++++ .../view_query/view_query_action.tsx | 31 ++ .../view_query/view_query_flyout.tsx | 205 +++++++++ .../search_playground/public/embeddable.tsx | 42 ++ .../public/hooks/use_ai_assist_chat.ts | 248 ++++++++++ .../public/hooks/use_auto_bottom_scroll.ts | 41 ++ .../public/hooks/use_chat.ts | 28 ++ .../public/hooks/use_create_api_key_query.ts | 45 ++ .../public/hooks/use_indices_fields.ts | 34 ++ .../public/hooks/use_kibana.ts | 11 + .../public/hooks/use_query_indices.ts | 38 ++ .../public/hooks/use_source_indices_field.ts | 28 ++ .../plugins/search_playground/public/index.ts | 14 + .../search_playground/public/plugin.ts | 45 ++ .../public/providers/playground_provider.tsx | 27 ++ .../plugins/search_playground/public/types.ts | 187 ++++++++ .../search_playground/public/utils/api.ts | 149 ++++++ .../public/utils/create_query.test.ts | 430 ++++++++++++++++++ .../public/utils/create_query.ts | 196 ++++++++ .../search_playground/public/utils/stream.ts | 172 +++++++ .../utils/transform_annotation_to_doc.ts | 13 + .../public/utils/transform_to_messages.ts | 37 ++ .../plugins/search_playground/server/index.ts | 15 + .../search_playground/server/plugin.ts | 36 ++ .../search_playground/server/routes.ts | 147 ++++++ .../plugins/search_playground/server/types.ts | 13 + .../search_playground/server/utils/assist.ts | 47 ++ .../server/utils/conversational_chain.ts | 179 ++++++++ .../server/utils/elasticsearch_retriever.ts | 95 ++++ .../server/utils/error_handler.ts | 18 + .../utils/fetch_query_source_fields.test.ts | 80 ++++ .../server/utils/fetch_query_source_fields.ts | 106 +++++ .../server/utils/get_citations.test.ts | 44 ++ .../server/utils/get_citations.ts | 23 + .../search_playground/server/utils/prompt.ts | 63 +++ .../server/utils/render_template.ts | 12 + .../plugins/search_playground/tsconfig.json | 34 ++ yarn.lock | 171 ++++++- 107 files changed, 5984 insertions(+), 36 deletions(-) create mode 100644 x-pack/plugins/enterprise_search/common/locators/create_index_locator.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/playground/playground.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/playground/types.ts create mode 100644 x-pack/plugins/search_playground/README.md create mode 100644 x-pack/plugins/search_playground/__mocks__/fetch_query_source_fields.mock.ts create mode 100644 x-pack/plugins/search_playground/__mocks__/search_playground_mock.ts create mode 100644 x-pack/plugins/search_playground/common/index.ts create mode 100644 x-pack/plugins/search_playground/common/types.ts create mode 100644 x-pack/plugins/search_playground/jest.config.js create mode 100644 x-pack/plugins/search_playground/kibana.jsonc create mode 100644 x-pack/plugins/search_playground/public/application.tsx create mode 100644 x-pack/plugins/search_playground/public/components/app.tsx create mode 100644 x-pack/plugins/search_playground/public/components/chat.tsx create mode 100644 x-pack/plugins/search_playground/public/components/chat_sidebar.tsx create mode 100644 x-pack/plugins/search_playground/public/components/message_list/assistant_message.tsx create mode 100644 x-pack/plugins/search_playground/public/components/message_list/citations_table.tsx create mode 100644 x-pack/plugins/search_playground/public/components/message_list/copy_action_button.tsx create mode 100644 x-pack/plugins/search_playground/public/components/message_list/message_list.tsx create mode 100644 x-pack/plugins/search_playground/public/components/message_list/retrieval_docs_flyout.tsx create mode 100644 x-pack/plugins/search_playground/public/components/message_list/system_message.tsx create mode 100644 x-pack/plugins/search_playground/public/components/message_list/user_message.tsx create mode 100644 x-pack/plugins/search_playground/public/components/question_input.tsx create mode 100644 x-pack/plugins/search_playground/public/components/sources_panel/add_indices_field.tsx create mode 100644 x-pack/plugins/search_playground/public/components/sources_panel/create_index_callout.tsx create mode 100644 x-pack/plugins/search_playground/public/components/sources_panel/indices_list.tsx create mode 100644 x-pack/plugins/search_playground/public/components/sources_panel/indices_table.tsx create mode 100644 x-pack/plugins/search_playground/public/components/sources_panel/sources_panel_for_start_chat.tsx create mode 100644 x-pack/plugins/search_playground/public/components/sources_panel/sources_panel_sidebar.tsx create mode 100644 x-pack/plugins/search_playground/public/components/start_chat_panel.tsx create mode 100644 x-pack/plugins/search_playground/public/components/start_new_chat.tsx create mode 100644 x-pack/plugins/search_playground/public/components/summarization_panel/include_citations_field.tsx create mode 100644 x-pack/plugins/search_playground/public/components/summarization_panel/instructions_field.tsx create mode 100644 x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_icon.tsx create mode 100644 x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_key_callout.tsx create mode 100644 x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_key_field.tsx create mode 100644 x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_key_flyout.tsx create mode 100644 x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_summarization_model.tsx create mode 100644 x-pack/plugins/search_playground/public/components/summarization_panel/summarization_panel.tsx create mode 100644 x-pack/plugins/search_playground/public/components/summarization_panel/summarization_panel_for_start_chat.tsx create mode 100644 x-pack/plugins/search_playground/public/components/telegram_icon.tsx create mode 100644 x-pack/plugins/search_playground/public/components/toolbar.tsx create mode 100644 x-pack/plugins/search_playground/public/components/view_code/create_api_key_form.tsx create mode 100644 x-pack/plugins/search_playground/public/components/view_code/view_code_action.tsx create mode 100644 x-pack/plugins/search_playground/public/components/view_code/view_code_flyout.tsx create mode 100644 x-pack/plugins/search_playground/public/components/view_query/view_query_action.tsx create mode 100644 x-pack/plugins/search_playground/public/components/view_query/view_query_flyout.tsx create mode 100644 x-pack/plugins/search_playground/public/embeddable.tsx create mode 100644 x-pack/plugins/search_playground/public/hooks/use_ai_assist_chat.ts create mode 100644 x-pack/plugins/search_playground/public/hooks/use_auto_bottom_scroll.ts create mode 100644 x-pack/plugins/search_playground/public/hooks/use_chat.ts create mode 100644 x-pack/plugins/search_playground/public/hooks/use_create_api_key_query.ts create mode 100644 x-pack/plugins/search_playground/public/hooks/use_indices_fields.ts create mode 100644 x-pack/plugins/search_playground/public/hooks/use_kibana.ts create mode 100644 x-pack/plugins/search_playground/public/hooks/use_query_indices.ts create mode 100644 x-pack/plugins/search_playground/public/hooks/use_source_indices_field.ts create mode 100644 x-pack/plugins/search_playground/public/index.ts create mode 100644 x-pack/plugins/search_playground/public/plugin.ts create mode 100644 x-pack/plugins/search_playground/public/providers/playground_provider.tsx create mode 100644 x-pack/plugins/search_playground/public/types.ts create mode 100644 x-pack/plugins/search_playground/public/utils/api.ts create mode 100644 x-pack/plugins/search_playground/public/utils/create_query.test.ts create mode 100644 x-pack/plugins/search_playground/public/utils/create_query.ts create mode 100644 x-pack/plugins/search_playground/public/utils/stream.ts create mode 100644 x-pack/plugins/search_playground/public/utils/transform_annotation_to_doc.ts create mode 100644 x-pack/plugins/search_playground/public/utils/transform_to_messages.ts create mode 100644 x-pack/plugins/search_playground/server/index.ts create mode 100644 x-pack/plugins/search_playground/server/plugin.ts create mode 100644 x-pack/plugins/search_playground/server/routes.ts create mode 100644 x-pack/plugins/search_playground/server/types.ts create mode 100644 x-pack/plugins/search_playground/server/utils/assist.ts create mode 100644 x-pack/plugins/search_playground/server/utils/conversational_chain.ts create mode 100644 x-pack/plugins/search_playground/server/utils/elasticsearch_retriever.ts create mode 100644 x-pack/plugins/search_playground/server/utils/error_handler.ts create mode 100644 x-pack/plugins/search_playground/server/utils/fetch_query_source_fields.test.ts create mode 100644 x-pack/plugins/search_playground/server/utils/fetch_query_source_fields.ts create mode 100644 x-pack/plugins/search_playground/server/utils/get_citations.test.ts create mode 100644 x-pack/plugins/search_playground/server/utils/get_citations.ts create mode 100644 x-pack/plugins/search_playground/server/utils/prompt.ts create mode 100644 x-pack/plugins/search_playground/server/utils/render_template.ts create mode 100644 x-pack/plugins/search_playground/tsconfig.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1c33310d98de5..ef24822f6ce5a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -685,6 +685,7 @@ packages/kbn-search-connectors @elastic/enterprise-search-frontend packages/kbn-search-errors @elastic/kibana-data-discovery examples/search_examples @elastic/kibana-data-discovery packages/kbn-search-index-documents @elastic/enterprise-search-frontend +x-pack/plugins/search_playground @elastic/enterprise-search-frontend packages/kbn-search-response-warnings @elastic/kibana-data-discovery x-pack/plugins/searchprofiler @elastic/kibana-management x-pack/test/security_api_integration/packages/helpers @elastic/kibana-security diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index 241dcd5f73648..4cc89a89659b5 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -753,6 +753,10 @@ Elastic. It uses Chromium and Puppeteer underneath to run the browser in headless mode. +|{kib-repo}blob/{branch}/x-pack/plugins/search_playground/README.md[searchPlayground] +|The Search Playground is a tool for developers to experiment with their own data using LLMs. + + |{kib-repo}blob/{branch}/x-pack/plugins/searchprofiler/README.md[searchprofiler] |The search profiler consumes the Profile API by sending a search API with profile: true enabled in the request body. The response contains diff --git a/package.json b/package.json index 5bb6a0cd6664d..d6a952f436b47 100644 --- a/package.json +++ b/package.json @@ -689,6 +689,7 @@ "@kbn/search-errors": "link:packages/kbn-search-errors", "@kbn/search-examples-plugin": "link:examples/search_examples", "@kbn/search-index-documents": "link:packages/kbn-search-index-documents", + "@kbn/search-playground": "link:x-pack/plugins/search_playground", "@kbn/search-response-warnings": "link:packages/kbn-search-response-warnings", "@kbn/searchprofiler-plugin": "link:x-pack/plugins/searchprofiler", "@kbn/security-hardening": "link:packages/kbn-security-hardening", @@ -883,6 +884,9 @@ "@kbn/watcher-plugin": "link:x-pack/plugins/watcher", "@kbn/xstate-utils": "link:packages/kbn-xstate-utils", "@kbn/zod-helpers": "link:packages/kbn-zod-helpers", + "@langchain/community": "^0.0.20", + "@langchain/core": "^0.1.45", + "@langchain/openai": "^0.0.12", "@loaders.gl/core": "^3.4.7", "@loaders.gl/json": "^3.4.7", "@loaders.gl/shapefile": "^3.4.7", @@ -919,6 +923,7 @@ "@turf/length": "^6.0.2", "@xstate/react": "^3.2.2", "adm-zip": "^0.5.9", + "ai": "^2.2.33", "ajv": "^8.12.0", "ansi-regex": "^6.0.1", "antlr4": "^4.13.1-patch-1", @@ -1119,6 +1124,7 @@ "strip-ansi": "^6.0.0", "styled-components": "^5.1.0", "suricata-sid-db": "^1.0.2", + "swr": "^2.2.5", "symbol-observable": "^1.2.0", "tar": "^6.1.15", "textarea-caret": "^3.1.0", diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 97c50ef8e22ef..5f51cd5fa41f9 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -126,6 +126,7 @@ pageLoadAssetSize: savedSearch: 16225 screenshotMode: 17856 screenshotting: 22870 + searchPlayground: 19325 searchprofiler: 67080 security: 81771 securitySolution: 82780 diff --git a/packages/kbn-test/jest-preset.js b/packages/kbn-test/jest-preset.js index de4e6032ba52f..f3343d0c8b843 100644 --- a/packages/kbn-test/jest-preset.js +++ b/packages/kbn-test/jest-preset.js @@ -105,10 +105,10 @@ module.exports = { transformIgnorePatterns: [ // ignore all node_modules except monaco-editor, monaco-yaml and react-monaco-editor which requires babel transforms to handle dynamic import() // since ESM modules are not natively supported in Jest yet (https://github.com/facebook/jest/issues/4842) - '[/\\\\]node_modules(?![\\/\\\\](byte-size|monaco-editor|monaco-yaml|monaco-languageserver-types|monaco-marker-data-provider|monaco-worker-manager|vscode-languageserver-types|react-monaco-editor|d3-interpolate|d3-color|langchain|langsmith|@cfworker|gpt-tokenizer|flat))[/\\\\].+\\.js$', + '[/\\\\]node_modules(?![\\/\\\\](byte-size|monaco-editor|monaco-yaml|monaco-languageserver-types|monaco-marker-data-provider|monaco-worker-manager|vscode-languageserver-types|react-monaco-editor|d3-interpolate|d3-color|langchain|langsmith|@cfworker|gpt-tokenizer|flat|@langchain))[/\\\\].+\\.js$', 'packages/kbn-pm/dist/index.js', - '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith))/dist/[/\\\\].+\\.js$', - '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith))/dist/util/[/\\\\].+\\.js$', + '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith|@langchain))/dist/[/\\\\].+\\.js$', + '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith|@langchain))/dist/util/[/\\\\].+\\.js$', ], // An array of regexp pattern strings that are matched against all source file paths, matched files to include/exclude for code coverage diff --git a/packages/kbn-test/jest_integration_node/jest-preset.js b/packages/kbn-test/jest_integration_node/jest-preset.js index 6472237c5dd17..95a6cde403de6 100644 --- a/packages/kbn-test/jest_integration_node/jest-preset.js +++ b/packages/kbn-test/jest_integration_node/jest-preset.js @@ -22,9 +22,9 @@ module.exports = { // An array of regexp pattern strings that are matched against, matched files will skip transformation: transformIgnorePatterns: [ // since ESM modules are not natively supported in Jest yet (https://github.com/facebook/jest/issues/4842) - '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith|gpt-tokenizer|flat))[/\\\\].+\\.js$', - '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith))/dist/[/\\\\].+\\.js$', - '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith))/dist/util/[/\\\\].+\\.js$', + '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith|gpt-tokenizer|flat|@langchain))[/\\\\].+\\.js$', + '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith|@langchain))/dist/[/\\\\].+\\.js$', + '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith|@langchain))/dist/util/[/\\\\].+\\.js$', ], setupFilesAfterEnv: [ '/packages/kbn-test/src/jest/setup/after_env.integration.js', diff --git a/tsconfig.base.json b/tsconfig.base.json index 674ca428983e6..d64319e211b71 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1364,6 +1364,8 @@ "@kbn/search-examples-plugin/*": ["examples/search_examples/*"], "@kbn/search-index-documents": ["packages/kbn-search-index-documents"], "@kbn/search-index-documents/*": ["packages/kbn-search-index-documents/*"], + "@kbn/search-playground": ["x-pack/plugins/search_playground"], + "@kbn/search-playground/*": ["x-pack/plugins/search_playground/*"], "@kbn/search-response-warnings": ["packages/kbn-search-response-warnings"], "@kbn/search-response-warnings/*": ["packages/kbn-search-response-warnings/*"], "@kbn/searchprofiler-plugin": ["x-pack/plugins/searchprofiler"], diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json index 03399acb752da..51ceb3b79f4fc 100644 --- a/x-pack/.i18nrc.json +++ b/x-pack/.i18nrc.json @@ -105,6 +105,7 @@ ], "xpack.runtimeFields": "plugins/runtime_fields", "xpack.screenshotting": "plugins/screenshotting", + "xpack.searchPlayground": "plugins/search_playground", "xpack.searchProfiler": "plugins/searchprofiler", "xpack.security": "plugins/security", "xpack.server": "legacy/server", diff --git a/x-pack/plugins/enterprise_search/common/__mocks__/initial_app_data.ts b/x-pack/plugins/enterprise_search/common/__mocks__/initial_app_data.ts index 957f2893540ce..5ed2c6893be5f 100644 --- a/x-pack/plugins/enterprise_search/common/__mocks__/initial_app_data.ts +++ b/x-pack/plugins/enterprise_search/common/__mocks__/initial_app_data.ts @@ -38,7 +38,6 @@ export const DEFAULT_INITIAL_APP_DATA = { hasIncrementalSyncEnabled: true, hasNativeConnectors: true, hasWebCrawler: true, - showAIPlayground: false, }, appSearch: { accountId: 'some-id-string', diff --git a/x-pack/plugins/enterprise_search/common/constants.ts b/x-pack/plugins/enterprise_search/common/constants.ts index f1f60450e3c4a..e5da9ee1c0e30 100644 --- a/x-pack/plugins/enterprise_search/common/constants.ts +++ b/x-pack/plugins/enterprise_search/common/constants.ts @@ -187,6 +187,7 @@ export const ENTERPRISE_SEARCH_ANALYTICS_LOGS_SOURCE_ID = 'ent-search-analytics- export const APP_SEARCH_URL = '/app/enterprise_search/app_search'; export const ENTERPRISE_SEARCH_ELASTICSEARCH_URL = '/app/enterprise_search/elasticsearch'; export const WORKPLACE_SEARCH_URL = '/app/enterprise_search/workplace_search'; +export const CREATE_NEW_INDEX_URL = '/search_indices/new_index'; export const ENTERPRISE_SEARCH_DOCUMENTS_DEFAULT_DOC_COUNT = 25; @@ -227,7 +228,6 @@ export const DEFAULT_PRODUCT_FEATURES: ProductFeatures = { hasIncrementalSyncEnabled: true, hasNativeConnectors: true, hasWebCrawler: true, - showAIPlayground: false, }; export const CONNECTORS_ACCESS_CONTROL_INDEX_PREFIX = '.search-acl-filter-'; diff --git a/x-pack/plugins/enterprise_search/common/locators/create_index_locator.tsx b/x-pack/plugins/enterprise_search/common/locators/create_index_locator.tsx new file mode 100644 index 0000000000000..c5d8b80125f62 --- /dev/null +++ b/x-pack/plugins/enterprise_search/common/locators/create_index_locator.tsx @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { LocatorDefinition } from '@kbn/share-plugin/common'; +import { SerializableRecord } from '@kbn/utility-types'; + +import { CREATE_NEW_INDEX_URL, ENTERPRISE_SEARCH_CONTENT_PLUGIN } from '../constants'; + +export type CreatIndexLocatorParams = SerializableRecord; + +export class CreatIndexLocatorDefinition implements LocatorDefinition { + public readonly id = 'CREATE_INDEX_LOCATOR_ID'; + + public readonly getLocation = async () => { + return { + app: ENTERPRISE_SEARCH_CONTENT_PLUGIN.ID, + path: CREATE_NEW_INDEX_URL, + state: {}, + }; + }; +} diff --git a/x-pack/plugins/enterprise_search/common/types/index.ts b/x-pack/plugins/enterprise_search/common/types/index.ts index 650a852f47e6b..1d9fb9b2cb0c1 100644 --- a/x-pack/plugins/enterprise_search/common/types/index.ts +++ b/x-pack/plugins/enterprise_search/common/types/index.ts @@ -43,8 +43,6 @@ export interface ProductFeatures { hasIncrementalSyncEnabled: boolean; hasNativeConnectors: boolean; hasWebCrawler: boolean; - // Temp Feature Flag for AI Playground page - showAIPlayground: boolean; } export interface SearchOAuth { diff --git a/x-pack/plugins/enterprise_search/kibana.jsonc b/x-pack/plugins/enterprise_search/kibana.jsonc index ff58e36304577..dbc9d4fad0081 100644 --- a/x-pack/plugins/enterprise_search/kibana.jsonc +++ b/x-pack/plugins/enterprise_search/kibana.jsonc @@ -23,7 +23,8 @@ "lens", "embeddable", "share", - "console" + "console", + "searchPlayground" ], "optionalPlugins": [ "customIntegrations", diff --git a/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts b/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts index bc397d3c1fcd6..80d42ffefe882 100644 --- a/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts +++ b/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts @@ -14,6 +14,7 @@ import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { LensPublicStart } from '@kbn/lens-plugin/public'; import { mlPluginMock } from '@kbn/ml-plugin/public/mocks'; +import { searchPlaygroundMock } from '@kbn/search-playground/__mocks__/search_playground_mock'; import { securityMock } from '@kbn/security-plugin/public/mocks'; import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; @@ -58,6 +59,7 @@ export const mockKibanaValues = { hasWebCrawler: true, }, renderHeaderActions: jest.fn(), + searchPlayground: searchPlaygroundMock.createStart(), security: securityMock.createStart(), setBreadcrumbs: jest.fn(), setChromeIsVisible: jest.fn(), diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/page_template.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/page_template.tsx index 0bc6dc03c4388..a4d514e0ec1d8 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/page_template.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/layout/page_template.tsx @@ -17,6 +17,7 @@ export const EnterpriseSearchContentPageTemplate: React.FC = children, pageChrome, pageViewTelemetry, + restrictWidth = true, ...pageTemplateProps }) => { return ( @@ -26,7 +27,7 @@ export const EnterpriseSearchContentPageTemplate: React.FC = items: useEnterpriseSearchNav(), name: ENTERPRISE_SEARCH_CONTENT_PLUGIN.NAME, }} - restrictWidth + restrictWidth={restrictWidth} setPageChrome={pageChrome && } > {pageViewTelemetry && ( diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/playground/playground.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/playground/playground.tsx new file mode 100644 index 0000000000000..f4e7dd4adb216 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/playground/playground.tsx @@ -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 React from 'react'; + +import { useValues } from 'kea'; + +import { i18n } from '@kbn/i18n'; + +import { KibanaLogic } from '../../../shared/kibana'; +import { EnterpriseSearchContentPageTemplate } from '../layout/page_template'; + +export const Playground: React.FC = () => { + const { searchPlayground } = useValues(KibanaLogic); + + return ( + + ], + }} + pageViewTelemetry="Playground" + restrictWidth={false} + customPageSections + bottomBorder="extended" + > + + + + ); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/playground/types.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/playground/types.ts new file mode 100644 index 0000000000000..71a46c5c9a1bc --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/playground/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. + */ + +export enum MessageRole { + 'user' = 'user', + 'assistant' = 'assistant', + 'system' = 'system', +} + +export interface Message { + id: string; + content: string | React.ReactNode; + createdAt?: Date; + role: MessageRole; +} diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/index.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/index.tsx index 2ec701aa9847b..ea219fe9fa6eb 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/index.tsx @@ -23,6 +23,7 @@ import { VersionMismatchPage } from '../shared/version_mismatch'; import { ConnectorsRouter } from './components/connectors/connectors_router'; import { CrawlersRouter } from './components/connectors/crawlers_router'; import { NotFound } from './components/not_found'; +import { Playground } from './components/playground/playground'; import { SearchIndicesRouter } from './components/search_indices'; import { CONNECTORS_PATH, @@ -31,6 +32,7 @@ import { ROOT_PATH, SEARCH_INDICES_PATH, SETUP_GUIDE_PATH, + PLAYGROUND_PATH, } from './routes'; export const EnterpriseSearchContent: React.FC = (props) => { @@ -82,6 +84,9 @@ export const EnterpriseSearchContentConfigured: React.FC + + + diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/routes.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/routes.ts index 8fc6fcbfb5272..902870752035c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/routes.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/routes.ts @@ -13,6 +13,7 @@ export const ERROR_STATE_PATH = '/error_state'; export const SEARCH_INDICES_PATH = `${ROOT_PATH}search_indices`; export const CONNECTORS_PATH = `${ROOT_PATH}connectors`; export const CRAWLERS_PATH = `${ROOT_PATH}crawlers`; +export const PLAYGROUND_PATH = `${ROOT_PATH}playground`; export const SETTINGS_PATH = `${ROOT_PATH}settings`; export const NEW_INDEX_PATH = `${SEARCH_INDICES_PATH}/new_index`; diff --git a/x-pack/plugins/enterprise_search/public/applications/index.tsx b/x-pack/plugins/enterprise_search/public/applications/index.tsx index 928b6bfbac46c..77fc9f181db3f 100644 --- a/x-pack/plugins/enterprise_search/public/applications/index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/index.tsx @@ -121,6 +121,7 @@ export const renderApp = ( params.setHeaderActionMenu( HeaderActions ? renderHeaderActions.bind(null, HeaderActions, store, params) : undefined ), + searchPlayground: plugins.searchPlayground, security, setBreadcrumbs: chrome.setBreadcrumbs, setChromeIsVisible: chrome.setIsVisible, diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts index 7361897b21ef9..12088c50ab88e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts @@ -25,6 +25,7 @@ import { GuidedOnboardingPluginStart } from '@kbn/guided-onboarding-plugin/publi import { LensPublicStart } from '@kbn/lens-plugin/public'; import { MlPluginStart } from '@kbn/ml-plugin/public'; import { ELASTICSEARCH_URL_PLACEHOLDER } from '@kbn/search-api-panels/constants'; +import { SearchPlaygroundPluginStart } from '@kbn/search-playground/public'; import { AuthenticatedUser, SecurityPluginStart } from '@kbn/security-plugin/public'; import { SharePluginStart } from '@kbn/share-plugin/public'; @@ -55,6 +56,7 @@ export interface KibanaLogicProps { productAccess: ProductAccess; productFeatures: ProductFeatures; renderHeaderActions(HeaderActions?: FC): void; + searchPlayground: SearchPlaygroundPluginStart; security: SecurityPluginStart; setBreadcrumbs(crumbs: ChromeBreadcrumb[]): void; setChromeIsVisible(isVisible: boolean): void; @@ -100,6 +102,7 @@ export const KibanaLogic = kea>({ productAccess: [props.productAccess, {}], productFeatures: [props.productFeatures, {}], renderHeaderActions: [props.renderHeaderActions, {}], + searchPlayground: [props.searchPlayground || {}, {}], security: [props.security, {}], setBreadcrumbs: [props.setBreadcrumbs, {}], setChromeIsVisible: [props.setChromeIsVisible, {}], diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx index d643a2371984c..b24f5251af259 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx @@ -57,6 +57,12 @@ const baseNavItems = [ items: undefined, name: 'Web crawlers', }, + { + href: '/app/enterprise_search/content/playground', + id: 'playground', + items: undefined, + name: 'Playground', + }, ], name: 'Content', }, diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx index 5f0efc3688d6d..4a3cb6dc197fc 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx @@ -26,6 +26,7 @@ import { import { SEARCH_APPLICATIONS_PATH, SearchApplicationViewTabs } from '../../applications/routes'; import { useIndicesNav } from '../../enterprise_search_content/components/search_index/indices/indices_nav'; import { + PLAYGROUND_PATH, CONNECTORS_PATH, CRAWLERS_PATH, SEARCH_INDICES_PATH, @@ -92,6 +93,17 @@ export const useEnterpriseSearchNav = () => { to: ENTERPRISE_SEARCH_CONTENT_PLUGIN.URL + CRAWLERS_PATH, }), }, + { + id: 'playground', + name: i18n.translate('xpack.enterpriseSearch.nav.PlaygroundTitle', { + defaultMessage: 'Playground', + }), + ...generateNavLink({ + shouldNotCreateHref: true, + shouldShowActiveForSubroutes: true, + to: ENTERPRISE_SEARCH_CONTENT_PLUGIN.URL + PLAYGROUND_PATH, + }), + }, ], name: i18n.translate('xpack.enterpriseSearch.nav.contentTitle', { defaultMessage: 'Content', diff --git a/x-pack/plugins/enterprise_search/public/applications/test_helpers/test_utils.test_helper.tsx b/x-pack/plugins/enterprise_search/public/applications/test_helpers/test_utils.test_helper.tsx index 571cb0e092416..86eeb909480f2 100644 --- a/x-pack/plugins/enterprise_search/public/applications/test_helpers/test_utils.test_helper.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/test_helpers/test_utils.test_helper.tsx @@ -22,6 +22,7 @@ import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { I18nProvider } from '@kbn/i18n-react'; import { LensPublicStart } from '@kbn/lens-plugin/public'; import { mlPluginMock } from '@kbn/ml-plugin/public/mocks'; +import { searchPlaygroundMock } from '@kbn/search-playground/__mocks__/search_playground_mock'; import { securityMock } from '@kbn/security-plugin/public/mocks'; import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; @@ -73,9 +74,9 @@ export const mockKibanaProps: KibanaLogicProps = { hasIncrementalSyncEnabled: true, hasNativeConnectors: true, hasWebCrawler: true, - showAIPlayground: false, }, renderHeaderActions: jest.fn(), + searchPlayground: searchPlaygroundMock.createStart(), security: securityMock.createStart(), setBreadcrumbs: jest.fn(), setChromeIsVisible: jest.fn(), diff --git a/x-pack/plugins/enterprise_search/public/plugin.ts b/x-pack/plugins/enterprise_search/public/plugin.ts index 721bdd4ff3bf6..81884546e44f4 100644 --- a/x-pack/plugins/enterprise_search/public/plugin.ts +++ b/x-pack/plugins/enterprise_search/public/plugin.ts @@ -18,14 +18,16 @@ import { DEFAULT_APP_CATEGORIES, } from '@kbn/core/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; + import { GuidedOnboardingPluginStart } from '@kbn/guided-onboarding-plugin/public'; import type { HomePublicPluginSetup } from '@kbn/home-plugin/public'; import { LensPublicStart } from '@kbn/lens-plugin/public'; import { LicensingPluginStart } from '@kbn/licensing-plugin/public'; import { MlPluginStart } from '@kbn/ml-plugin/public'; import { ELASTICSEARCH_URL_PLACEHOLDER } from '@kbn/search-api-panels/constants'; +import { SearchPlaygroundPluginStart } from '@kbn/search-playground/public'; import { SecurityPluginSetup, SecurityPluginStart } from '@kbn/security-plugin/public'; -import { SharePluginStart } from '@kbn/share-plugin/public'; +import { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; import { ANALYTICS_PLUGIN, @@ -40,6 +42,10 @@ import { VECTOR_SEARCH_PLUGIN, WORKPLACE_SEARCH_PLUGIN, } from '../common/constants'; +import { + CreatIndexLocatorDefinition, + CreatIndexLocatorParams, +} from '../common/locators/create_index_locator'; import { ClientConfigType, InitialAppData } from '../common/types'; import { docLinks } from './applications/shared/doc_links'; @@ -56,6 +62,7 @@ interface PluginsSetup { cloud?: CloudSetup; home?: HomePublicPluginSetup; security: SecurityPluginSetup; + share: SharePluginSetup; } export interface PluginsStart { @@ -67,6 +74,7 @@ export interface PluginsStart { lens: LensPublicStart; licensing: LicensingPluginStart; ml: MlPluginStart; + searchPlayground: SearchPlaygroundPluginStart; security: SecurityPluginStart; share: SharePluginStart; } @@ -143,7 +151,7 @@ export class EnterpriseSearchPlugin implements Plugin { if (!config.ui?.enabled) { return; } - const { cloud } = plugins; + const { cloud, share } = plugins; core.application.register({ appRoute: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.URL, @@ -320,6 +328,8 @@ export class EnterpriseSearchPlugin implements Plugin { visibleIn: [], }); + share.url.locators.create(new CreatIndexLocatorDefinition()); + if (config.canDeployEntSearch) { core.application.register({ appRoute: APP_SEARCH_PLUGIN.URL, diff --git a/x-pack/plugins/enterprise_search/server/index.ts b/x-pack/plugins/enterprise_search/server/index.ts index 949c66cc37892..53d8cbca7f540 100644 --- a/x-pack/plugins/enterprise_search/server/index.ts +++ b/x-pack/plugins/enterprise_search/server/index.ts @@ -39,8 +39,6 @@ export const configSchema = schema.object({ ui: schema.object({ enabled: schema.boolean({ defaultValue: true }), }), - // Temp Feature Flag for AI Playground page - showAIPlayground: schema.boolean({ defaultValue: false }), }); export type ConfigType = TypeOf; diff --git a/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.test.ts b/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.test.ts index 2b34ed6e3245f..fb17854f6f674 100644 --- a/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.test.ts +++ b/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.test.ts @@ -211,7 +211,6 @@ describe('callEnterpriseSearchConfigAPI', () => { hasDefaultIngestPipeline: false, hasNativeConnectors: false, hasWebCrawler: false, - showAIPlayground: false, host: '', }; @@ -225,7 +224,6 @@ describe('callEnterpriseSearchConfigAPI', () => { hasDefaultIngestPipeline: false, hasNativeConnectors: false, hasWebCrawler: false, - showAIPlayground: false, }, kibanaVersion: '1.0.0', }); diff --git a/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.ts b/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.ts index 1cfb6d033051f..90fccce31344b 100644 --- a/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.ts +++ b/x-pack/plugins/enterprise_search/server/lib/enterprise_search_config_api.ts @@ -56,7 +56,6 @@ export const callEnterpriseSearchConfigAPI = async ({ hasIncrementalSyncEnabled: config.hasIncrementalSyncEnabled, hasNativeConnectors: config.hasNativeConnectors, hasWebCrawler: config.hasWebCrawler, - showAIPlayground: config.showAIPlayground, }, kibanaVersion: kibanaPackageJson.version, }; @@ -112,7 +111,6 @@ export const callEnterpriseSearchConfigAPI = async ({ hasIncrementalSyncEnabled: config.hasIncrementalSyncEnabled, hasNativeConnectors: config.hasNativeConnectors, hasWebCrawler: config.hasWebCrawler, - showAIPlayground: config.showAIPlayground, }, publicUrl: stripTrailingSlash(data?.settings?.external_url), readOnlyMode: !!data?.settings?.read_only_mode, diff --git a/x-pack/plugins/enterprise_search/tsconfig.json b/x-pack/plugins/enterprise_search/tsconfig.json index afe5f39650f33..678654ed47a40 100644 --- a/x-pack/plugins/enterprise_search/tsconfig.json +++ b/x-pack/plugins/enterprise_search/tsconfig.json @@ -68,6 +68,8 @@ "@kbn/code-editor", "@kbn/console-plugin", "@kbn/core-notifications-browser", - "@kbn/es-errors" + "@kbn/es-errors", + "@kbn/search-playground", + "@kbn/utility-types" ] } diff --git a/x-pack/plugins/search_playground/README.md b/x-pack/plugins/search_playground/README.md new file mode 100644 index 0000000000000..a5f76ad957509 --- /dev/null +++ b/x-pack/plugins/search_playground/README.md @@ -0,0 +1,3 @@ +# Search Playground + +The Search Playground is a tool for developers to experiment with their own data using LLMs. diff --git a/x-pack/plugins/search_playground/__mocks__/fetch_query_source_fields.mock.ts b/x-pack/plugins/search_playground/__mocks__/fetch_query_source_fields.mock.ts new file mode 100644 index 0000000000000..21acf3b60f7ab --- /dev/null +++ b/x-pack/plugins/search_playground/__mocks__/fetch_query_source_fields.mock.ts @@ -0,0 +1,300 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 ELSER_PASSAGE_CHUNKED_TWO_INDICES_DOCS = [ + { + _index: 'workplace_index', + _id: '248629d8-64d7-4e91-a4eb-dbd8282d9f24', + _score: 1, + _ignored: ['metadata.summary.keyword', 'text.keyword'], + _source: { + metadata: { + summary: 'This policy', + rolePermissions: ['demo', 'manager'], + name: 'Work From Home Policy', + }, + vector: { + tokens: {}, + model_id: '.elser_model_2', + }, + text: 'Effective: March 2020', + }, + }, + { + _index: 'workplace_index2', + _id: 'b047762c-24eb-4846-aeb5-808346d54c54', + _score: 1, + _ignored: ['content.keyword', 'metadata.summary.keyword'], + _source: { + metadata: { + summary: + 'This policy outlines the guidelines for full-time remote work, including eligibility, equipment and resources, workspace requirements, communication expectations, performance expectations, time tracking and overtime, confidentiality and data security, health and well-being, and policy reviews and updates. Employees are encouraged to direct any questions or concerns', + rolePermissions: ['demo', 'manager'], + name: 'Work From Home Policy', + }, + content: 'Effective', + content_vector: { + tokens: {}, + model_id: '.elser_model_2', + }, + }, + }, +]; + +export const ELSER_PASSAGE_CHUNKED_TWO_INDICES = { + indices: ['workplace_index', 'workplace_index2'], + fields: { + 'vector.tokens': { + rank_features: { + type: 'rank_features', + metadata_field: false, + searchable: true, + aggregatable: false, + indices: ['workplace_index'], + }, + unmapped: { + type: 'unmapped', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index2'], + }, + }, + metadata: { + object: { + type: 'object', + metadata_field: false, + searchable: false, + aggregatable: false, + }, + }, + 'metadata.rolePermissions.keyword': { + keyword: { + type: 'keyword', + metadata_field: false, + searchable: true, + aggregatable: true, + }, + }, + 'metadata.name.keyword': { + keyword: { + type: 'keyword', + metadata_field: false, + searchable: true, + aggregatable: true, + }, + }, + 'metadata.summary': { + text: { + type: 'text', + metadata_field: false, + searchable: true, + aggregatable: false, + }, + }, + 'content_vector.tokens': { + rank_features: { + type: 'rank_features', + metadata_field: false, + searchable: true, + aggregatable: false, + indices: ['workplace_index2'], + }, + unmapped: { + type: 'unmapped', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index'], + }, + }, + content: { + unmapped: { + type: 'unmapped', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index'], + }, + text: { + type: 'text', + metadata_field: false, + searchable: true, + aggregatable: false, + indices: ['workplace_index2'], + }, + }, + 'vector.model_id': { + unmapped: { + type: 'unmapped', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index2'], + }, + text: { + type: 'text', + metadata_field: false, + searchable: true, + aggregatable: false, + indices: ['workplace_index'], + }, + }, + 'content.keyword': { + keyword: { + type: 'keyword', + metadata_field: false, + searchable: true, + aggregatable: true, + indices: ['workplace_index2'], + }, + unmapped: { + type: 'unmapped', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index'], + }, + }, + 'content_vector.model_id.keyword': { + keyword: { + type: 'keyword', + metadata_field: false, + searchable: true, + aggregatable: true, + indices: ['workplace_index2'], + }, + unmapped: { + type: 'unmapped', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index'], + }, + }, + 'metadata.summary.keyword': { + keyword: { + type: 'keyword', + metadata_field: false, + searchable: true, + aggregatable: true, + }, + }, + 'vector.model_id.keyword': { + keyword: { + type: 'keyword', + metadata_field: false, + searchable: true, + aggregatable: true, + indices: ['workplace_index'], + }, + unmapped: { + type: 'unmapped', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index2'], + }, + }, + content_vector: { + unmapped: { + type: 'unmapped', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index'], + }, + object: { + type: 'object', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index2'], + }, + }, + 'metadata.rolePermissions': { + text: { + type: 'text', + metadata_field: false, + searchable: true, + aggregatable: false, + }, + }, + 'content_vector.model_id': { + unmapped: { + type: 'unmapped', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index'], + }, + text: { + type: 'text', + metadata_field: false, + searchable: true, + aggregatable: false, + indices: ['workplace_index2'], + }, + }, + vector: { + unmapped: { + type: 'unmapped', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index2'], + }, + object: { + type: 'object', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index'], + }, + }, + 'text.keyword': { + keyword: { + type: 'keyword', + metadata_field: false, + searchable: true, + aggregatable: true, + indices: ['workplace_index'], + }, + unmapped: { + type: 'unmapped', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index2'], + }, + }, + text: { + unmapped: { + type: 'unmapped', + metadata_field: false, + searchable: false, + aggregatable: false, + indices: ['workplace_index2'], + }, + text: { + type: 'text', + metadata_field: false, + searchable: true, + aggregatable: false, + indices: ['workplace_index'], + }, + }, + 'metadata.name': { + text: { + type: 'text', + metadata_field: false, + searchable: true, + aggregatable: false, + }, + }, + }, +}; diff --git a/x-pack/plugins/search_playground/__mocks__/search_playground_mock.ts b/x-pack/plugins/search_playground/__mocks__/search_playground_mock.ts new file mode 100644 index 0000000000000..471d02ee9a468 --- /dev/null +++ b/x-pack/plugins/search_playground/__mocks__/search_playground_mock.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 { SearchPlaygroundPluginStart } from '../public'; + +export type Start = jest.Mocked; + +const createStartMock = (): Start => { + const startContract: Start = { + PlaygroundProvider: jest.fn(), + PlaygroundToolbar: jest.fn(), + Playground: jest.fn(), + }; + + return startContract; +}; + +export const searchPlaygroundMock = { + createStart: createStartMock, +}; diff --git a/x-pack/plugins/search_playground/common/index.ts b/x-pack/plugins/search_playground/common/index.ts new file mode 100644 index 0000000000000..5d1ac311112a7 --- /dev/null +++ b/x-pack/plugins/search_playground/common/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 PLUGIN_ID = 'searchPlayground'; +export const PLUGIN_NAME = 'Playground'; diff --git a/x-pack/plugins/search_playground/common/types.ts b/x-pack/plugins/search_playground/common/types.ts new file mode 100644 index 0000000000000..145ddf085df24 --- /dev/null +++ b/x-pack/plugins/search_playground/common/types.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export type IndicesQuerySourceFields = Record; + +interface ModelFields { + field: string; + model_id: string; + nested: boolean; +} + +export interface QuerySourceFields { + elser_query_fields: ModelFields[]; + dense_vector_query_fields: ModelFields[]; + bm25_query_fields: string[]; + source_fields: string[]; +} + +export enum APIRoutes { + POST_API_KEY = '/internal/search_playground/api_key', + POST_CHAT_MESSAGE = '/internal/search_playground/chat', + POST_QUERY_SOURCE_FIELDS = '/internal/search_playground/query_source_fields', +} diff --git a/x-pack/plugins/search_playground/jest.config.js b/x-pack/plugins/search_playground/jest.config.js new file mode 100644 index 0000000000000..d23d0d55128b5 --- /dev/null +++ b/x-pack/plugins/search_playground/jest.config.js @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../..', + roots: ['/x-pack/plugins/search_playground'], + coverageDirectory: '/target/kibana-coverage/jest/x-pack/plugins/search_playground', + coverageReporters: ['text', 'html'], + collectCoverageFrom: ['/x-pack/plugins/search_playground/{public,server}/**/*.{ts,tsx}'], +}; diff --git a/x-pack/plugins/search_playground/kibana.jsonc b/x-pack/plugins/search_playground/kibana.jsonc new file mode 100644 index 0000000000000..61f4cd97c1507 --- /dev/null +++ b/x-pack/plugins/search_playground/kibana.jsonc @@ -0,0 +1,21 @@ +{ + "type": "plugin", + "id": "@kbn/search-playground", + "owner": "@elastic/enterprise-search-frontend", + "plugin": { + "id": "searchPlayground", + "server": true, + "browser": true, + "configPath": [ + "xpack", + "searchPlayground" + ], + "requiredPlugins": [ + "navigation", + "security" + ], + "requiredBundles": [ + "kibanaReact" + ] + } +} diff --git a/x-pack/plugins/search_playground/public/application.tsx b/x-pack/plugins/search_playground/public/application.tsx new file mode 100644 index 0000000000000..e78028f01d51a --- /dev/null +++ b/x-pack/plugins/search_playground/public/application.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 ReactDOM from 'react-dom'; +import { CoreStart, AppMountParameters } from '@kbn/core/public'; +import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { I18nProvider } from '@kbn/i18n-react'; +import { BrowserRouter as Router } from '@kbn/shared-ux-router'; +import { i18n } from '@kbn/i18n'; +import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; +import { PLUGIN_ID } from '../common'; +import { AppPluginStartDependencies } from './types'; +import { App } from './components/app'; +import { PlaygroundProvider } from './providers/playground_provider'; + +export const renderApp = ( + core: CoreStart, + services: AppPluginStartDependencies, + { appBasePath, element }: AppMountParameters +) => { + const navigation = services.navigation; + + ReactDOM.render( + + + + + + + + + + + + + + , + element + ); + + return () => ReactDOM.unmountComponentAtNode(element); +}; diff --git a/x-pack/plugins/search_playground/public/components/app.tsx b/x-pack/plugins/search_playground/public/components/app.tsx new file mode 100644 index 0000000000000..0c6f900e3a32f --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/app.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 { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; + +import { Chat } from './chat'; + +export const App: React.FC = () => { + return ( + + + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/chat.tsx b/x-pack/plugins/search_playground/public/components/chat.tsx new file mode 100644 index 0000000000000..17df8d0e652a1 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/chat.tsx @@ -0,0 +1,175 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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, useState } from 'react'; +import { Controller, useFormContext } from 'react-hook-form'; +import { + EuiButtonIcon, + EuiFlexGroup, + EuiFlexItem, + EuiForm, + EuiHorizontalRule, + EuiSpacer, + useEuiTheme, +} from '@elastic/eui'; +import { v4 as uuidv4 } from 'uuid'; + +import { i18n } from '@kbn/i18n'; + +import { useAutoBottomScroll } from '../hooks/use_auto_bottom_scroll'; +import { ChatSidebar } from './chat_sidebar'; +import { useChat } from '../hooks/use_chat'; +import { ChatForm, ChatFormFields, MessageRole, SummarizationModelName } from '../types'; + +import { MessageList } from './message_list/message_list'; +import { QuestionInput } from './question_input'; +import { StartNewChat } from './start_new_chat'; + +import { TelegramIcon } from './telegram_icon'; +import { transformFromChatMessages } from '../utils/transform_to_messages'; + +export const Chat = () => { + const [showStartPage, setShowStartPage] = useState(true); + const { euiTheme } = useEuiTheme(); + const { + control, + watch, + formState: { isValid, isSubmitting }, + resetField, + handleSubmit, + } = useFormContext(); + const { messages, append, stop: stopRequest } = useChat(); + const selectedIndicesCount = watch(ChatFormFields.indices, []).length; + const messagesRef = useAutoBottomScroll([showStartPage]); + + const onSubmit = async (data: ChatForm) => { + await append( + { content: data.question, role: MessageRole.user, createdAt: new Date() }, + { + data: { + prompt: data[ChatFormFields.prompt], + indices: data[ChatFormFields.indices].join(), + api_key: data[ChatFormFields.openAIKey], + citations: data[ChatFormFields.citations], + elasticsearchQuery: JSON.stringify(data[ChatFormFields.elasticsearchQuery]), + summarization_model: + data[ChatFormFields.summarizationModel] ?? SummarizationModelName.gpt3_5_turbo_1106, + }, + } + ); + + resetField(ChatFormFields.question); + }; + const chatMessages = useMemo( + () => [ + { + id: uuidv4(), + role: MessageRole.system, + content: 'You can start chat now', + }, + ...transformFromChatMessages(messages), + ], + [messages] + ); + + if (showStartPage) { + return setShowStartPage(false)} />; + } + + return ( + + + + + {/* // Set scroll at the border of parent element*/} + + + + + + + + + + !!rule?.trim(), + }} + render={({ field }) => ( + + ) : ( + + ) + } + /> + )} + /> + + + + + + + + + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/chat_sidebar.tsx b/x-pack/plugins/search_playground/public/components/chat_sidebar.tsx new file mode 100644 index 0000000000000..d26aaaa58e93a --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/chat_sidebar.tsx @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiAccordion, + EuiFlexGroup, + EuiFlexItem, + EuiSpacer, + EuiText, + EuiTitle, + useEuiTheme, + useGeneratedHtmlId, +} from '@elastic/eui'; +import React, { useState } from 'react'; +import { i18n } from '@kbn/i18n'; +import { SourcesPanelSidebar } from './sources_panel/sources_panel_sidebar'; +import { SummarizationPanel } from './summarization_panel/summarization_panel'; + +interface ChatSidebarProps { + selectedIndicesCount: number; +} + +export const ChatSidebar: React.FC = ({ selectedIndicesCount }) => { + const { euiTheme } = useEuiTheme(); + const accordions = [ + { + id: useGeneratedHtmlId({ prefix: 'summarizationAccordion' }), + title: i18n.translate('xpack.searchPlayground.sidebar.summarizationTitle', { + defaultMessage: 'Summarization', + }), + children: , + }, + { + id: useGeneratedHtmlId({ prefix: 'sourcesAccordion' }), + title: i18n.translate('xpack.searchPlayground.sidebar.sourceTitle', { + defaultMessage: 'Sources', + }), + extraAction: !!selectedIndicesCount && ( + +

+ {i18n.translate('xpack.searchPlayground.sidebar.sourceIndicesCount', { + defaultMessage: '{count, number} {count, plural, one {Index} other {Indices}}', + values: { count: Number(selectedIndicesCount) }, + })} +

+
+ ), + children: , + }, + ]; + const [openAccordionId, setOpenAccordionId] = useState(accordions[0].id); + + return ( + + {accordions.map(({ id, title, extraAction, children }, index) => ( + + +
{title}
+ + } + extraAction={extraAction} + buttonProps={{ paddingSize: 'l' }} + forceState={openAccordionId === id ? 'open' : 'closed'} + onToggle={() => setOpenAccordionId(openAccordionId === id ? '' : id)} + > + {children} + +
+
+ ))} +
+ ); +}; diff --git a/x-pack/plugins/search_playground/public/components/message_list/assistant_message.tsx b/x-pack/plugins/search_playground/public/components/message_list/assistant_message.tsx new file mode 100644 index 0000000000000..b917205999ba7 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/message_list/assistant_message.tsx @@ -0,0 +1,145 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useState } from 'react'; + +import moment from 'moment'; + +import { + EuiButtonEmpty, + EuiComment, + EuiFlexGroup, + EuiSpacer, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import { FormattedMessage } from '@kbn/i18n-react'; +import { RetrievalDocsFlyout } from './retrieval_docs_flyout'; +import type { AIMessage as AIMessageType } from '../../types'; + +import { CopyActionButton } from './copy_action_button'; +import { CitationsTable } from './citations_table'; + +type AssistantMessageProps = Pick< + AIMessageType, + 'content' | 'createdAt' | 'citations' | 'retrievalDocs' +>; + +export const AssistantMessage: React.FC = ({ + content, + createdAt, + citations, + retrievalDocs, +}) => { + const [isDocsFlyoutOpen, setIsDocsFlyoutOpen] = useState(false); + const username = i18n.translate('xpack.searchPlayground.chat.message.assistant.username', { + defaultMessage: 'AI', + }); + + return ( + <> + {!!retrievalDocs?.length && ( + + +

+ +

+
+ setIsDocsFlyoutOpen(true)} + > + + + + {isDocsFlyoutOpen && ( + setIsDocsFlyoutOpen(false)} + retrievalDocs={retrievalDocs} + /> + )} + + } + /> + )} + + } + > + + +

+ +

+
+
+ + +

{content}

+
+ {!!citations?.length && ( + <> + + +

+ +

+
+ + + + )} +
+ + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/message_list/citations_table.tsx b/x-pack/plugins/search_playground/public/components/message_list/citations_table.tsx new file mode 100644 index 0000000000000..dbc9cc5e95ff9 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/message_list/citations_table.tsx @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useState } from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiBasicTable, EuiButtonEmpty, EuiText } from '@elastic/eui'; +import { AIMessage as AIMessageType, Doc } from '../../types'; + +type CitationsTableProps = Pick; + +export const CitationsTable: React.FC = ({ citations }) => { + const [itemIdToExpandedRowMap, setItemIdToExpandedRowMap] = useState< + Record + >({}); + const toggleDetails = (citation: Doc) => { + const itemIdToExpandedRowMapValues = { ...itemIdToExpandedRowMap }; + + if (itemIdToExpandedRowMapValues[citation.id]) { + delete itemIdToExpandedRowMapValues[citation.id]; + } else { + itemIdToExpandedRowMapValues[citation.id] = {citation.content}; + } + + setItemIdToExpandedRowMap(itemIdToExpandedRowMapValues); + }; + + return ( + { + const itemIdToExpandedRowMapValues = { ...itemIdToExpandedRowMap }; + + return ( + toggleDetails(citation)} + iconType={itemIdToExpandedRowMapValues[citation.id] ? 'arrowDown' : 'arrowRight'} + > + {i18n.translate('xpack.searchPlayground.chat.message.assistant.citations.snippet', { + defaultMessage: 'Snippet', + })} + + ); + }, + }, + ]} + items={citations} + itemId="id" + itemIdToExpandedRowMap={itemIdToExpandedRowMap} + isExpandable + /> + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/message_list/copy_action_button.tsx b/x-pack/plugins/search_playground/public/components/message_list/copy_action_button.tsx new file mode 100644 index 0000000000000..c55ac088c04e2 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/message_list/copy_action_button.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 React from 'react'; + +import { EuiButtonIcon } from '@elastic/eui'; + +interface CopyActionButtonProps { + copyText: string; + ariaLabel: string; +} + +export const CopyActionButton: React.FC = ({ copyText, ariaLabel }) => { + const handleCopy = () => { + navigator.clipboard.writeText(copyText); + }; + + return ( + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/message_list/message_list.tsx b/x-pack/plugins/search_playground/public/components/message_list/message_list.tsx new file mode 100644 index 0000000000000..17b04f5845bc0 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/message_list/message_list.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 React from 'react'; + +import { EuiCommentList } from '@elastic/eui'; + +import { AIMessage, Message, MessageRole } from '../../types'; + +import { AssistantMessage } from './assistant_message'; +import { SystemMessage } from './system_message'; +import { UserMessage } from './user_message'; + +interface MessageListProps { + messages: Message[]; +} + +const mapRoleToMessageComponent = { + [MessageRole.system]: (message: Message) => , + [MessageRole.user]: (message: Message) => ( + + ), + [MessageRole.assistant]: (message: Message) => ( + + ), +}; + +export const MessageList: React.FC = ({ messages }) => ( + + {messages.map((message) => ( + + {mapRoleToMessageComponent[message.role](message)} + + ))} + +); diff --git a/x-pack/plugins/search_playground/public/components/message_list/retrieval_docs_flyout.tsx b/x-pack/plugins/search_playground/public/components/message_list/retrieval_docs_flyout.tsx new file mode 100644 index 0000000000000..9ac8fa384ea0a --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/message_list/retrieval_docs_flyout.tsx @@ -0,0 +1,137 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { + EuiBadge, + EuiBasicTable, + EuiBasicTableColumn, + EuiCodeBlock, + EuiFlexGroup, + EuiFlexItem, + EuiFlyout, + EuiFlyoutBody, + EuiFlyoutHeader, + EuiPanel, + EuiSpacer, + EuiText, + EuiTextColor, + EuiTitle, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { Doc } from '../../types'; + +interface RetrievalDocsFlyoutProps { + onClose: () => void; + retrievalDocs: Doc[]; +} + +const RESULT_FIELDS_TRUNCATE_AT = 4; +const truncateFields = (doc: Doc) => + Object.entries(doc) + .slice(0, RESULT_FIELDS_TRUNCATE_AT) + .map(([field, value]) => ({ field, value })); + +export const RetrievalDocsFlyout: React.FC = ({ + onClose, + retrievalDocs, +}) => { + const columns: Array> = [ + { + field: 'field', + name: i18n.translate( + 'xpack.searchPlayground.chat.message.assistant.retrievalDoc.result.nameColumn', + { + defaultMessage: 'Field', + } + ), + render: (field: string) => { + return ( + + + "{field}" + + + ); + }, + truncateText: true, + width: '20%', + }, + { + field: 'value', + name: i18n.translate( + 'xpack.searchPlayground.chat.message.assistant.retrievalDoc.result.valueColumn', + { + defaultMessage: 'Value', + } + ), + render: (value: unknown) => ( + + {(typeof value === 'string' ? value : JSON.stringify(value)).slice(0, 255)} + + ), + }, + ]; + + return ( + + + +

+ {i18n.translate('xpack.searchPlayground.chat.message.assistant.retrievalDoc.title', { + defaultMessage: 'Documents retrieved', + })} +

+
+ + +

+ {i18n.translate('xpack.searchPlayground.chat.message.assistant.retrievalDoc.subtitle', { + defaultMessage: + 'The documents that were referenced in order to create an answer to your query', + })} +

+
+
+ + + {retrievalDocs.map((doc) => ( + + + + + {i18n.translate( + 'xpack.searchPlayground.chat.message.assistant.retrievalDoc.result.id', + { + defaultMessage: 'ID: {id}', + values: { id: doc.id }, + } + )} + + + + + {i18n.translate( + 'xpack.searchPlayground.chat.message.assistant.retrievalDoc.result.fromIndex', + { + defaultMessage: 'from', + } + )} + + workplace_index + + + + + + + ))} + + +
+ ); +}; diff --git a/x-pack/plugins/search_playground/public/components/message_list/system_message.tsx b/x-pack/plugins/search_playground/public/components/message_list/system_message.tsx new file mode 100644 index 0000000000000..16295299a914c --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/message_list/system_message.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { EuiComment } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +interface SystemMessageProps { + content: React.ReactNode; +} + +export const SystemMessage: React.FC = ({ content }) => { + return ( + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/message_list/user_message.tsx b/x-pack/plugins/search_playground/public/components/message_list/user_message.tsx new file mode 100644 index 0000000000000..3b0f51a5ccb87 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/message_list/user_message.tsx @@ -0,0 +1,64 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useEffect, useState } from 'react'; + +import moment from 'moment'; + +import { EuiComment, EuiText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { UserAvatar, UserProfileWithAvatar } from '@kbn/user-profile-components'; + +import type { Message as MessageType } from '../../types'; + +import { CopyActionButton } from './copy_action_button'; +import { useKibana } from '../../hooks/use_kibana'; + +type UserMessageProps = Pick; + +export const UserMessage: React.FC = ({ content, createdAt }) => { + const { services } = useKibana(); + const [currentUserProfile, setCurrentUserProfile] = useState(); + + useEffect(() => { + services.security?.userProfiles.getCurrent({ dataPath: 'avatar' }).then(setCurrentUserProfile); + }, [services]); + + return ( + + } + timelineAvatarAriaLabel={currentUserProfile?.user.username} + actions={ + + } + > + +

{content}

+
+
+ ); +}; diff --git a/x-pack/plugins/search_playground/public/components/question_input.tsx b/x-pack/plugins/search_playground/public/components/question_input.tsx new file mode 100644 index 0000000000000..0077e2ac7bf73 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/question_input.tsx @@ -0,0 +1,82 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback } from 'react'; + +import { i18n } from '@kbn/i18n'; +import { EuiTextArea, keys, useEuiTheme } from '@elastic/eui'; + +const MAX_HEIGHT = 200; + +interface QuestionInputProps { + value: string; + onChange: (value: string) => void; + button: React.ReactNode; + isDisabled?: boolean; +} + +export const QuestionInput: React.FC = ({ + value, + onChange, + button, + isDisabled, +}) => { + const { euiTheme } = useEuiTheme(); + const handleChange = useCallback( + (e: React.ChangeEvent) => { + onChange(e.target.value); + + e.target.style.height = 'auto'; + e.target.style.height = `${e.target.scrollHeight}px`; + }, + [onChange] + ); + const handleKeyDown = useCallback((event: React.KeyboardEvent) => { + if (event.key === keys.ENTER && !event.shiftKey) { + event.preventDefault(); + + event.currentTarget.form?.requestSubmit(); + } + }, []); + + return ( +
+ + +
+ {button} +
+
+ ); +}; diff --git a/x-pack/plugins/search_playground/public/components/sources_panel/add_indices_field.tsx b/x-pack/plugins/search_playground/public/components/sources_panel/add_indices_field.tsx new file mode 100644 index 0000000000000..c05923afd72d1 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/sources_panel/add_indices_field.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 { EuiComboBox, EuiFormRow } from '@elastic/eui'; +import React, { useState } from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiComboBoxOptionOption } from '@elastic/eui/src/components/combo_box/types'; +import { IndexName } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { useQueryIndices } from '../../hooks/use_query_indices'; + +interface AddIndicesFieldProps { + selectedIndices: IndexName[]; + onIndexSelect: (index: IndexName) => void; +} + +export const AddIndicesField: React.FC = ({ + selectedIndices, + onIndexSelect, +}) => { + const [query, setQuery] = useState(''); + const { indices, isLoading } = useQueryIndices(query); + const handleChange = (value: Array>) => { + if (value?.[0]?.label) { + onIndexSelect(value[0].label); + } + }; + const handleSearchChange = (searchValue: string) => { + setQuery(searchValue); + }; + + return ( + + ({ + label: index, + disabled: selectedIndices.includes(index), + }))} + isClearable={false} + /> + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/sources_panel/create_index_callout.tsx b/x-pack/plugins/search_playground/public/components/sources_panel/create_index_callout.tsx new file mode 100644 index 0000000000000..1698570a8d221 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/sources_panel/create_index_callout.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 { EuiButton, EuiCallOut, EuiSpacer, EuiText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import React, { useCallback, useMemo } from 'react'; +import { useKibana } from '../../hooks/use_kibana'; + +export const CreateIndexCallout: React.FC = () => { + const { + services: { application, share }, + } = useKibana(); + const createIndexLocator = useMemo( + () => share.url.locators.get('CREATE_INDEX_LOCATOR_ID'), + [share.url.locators] + ); + const handleNavigateToIndex = useCallback(async () => { + const createIndexUrl = await createIndexLocator?.getUrl({}); + + if (createIndexUrl) { + application?.navigateToUrl(createIndexUrl); + } + }, [application, createIndexLocator]); + + return ( + + +

+ +

+
+ + + + +
+ ); +}; diff --git a/x-pack/plugins/search_playground/public/components/sources_panel/indices_list.tsx b/x-pack/plugins/search_playground/public/components/sources_panel/indices_list.tsx new file mode 100644 index 0000000000000..b127c1ecd8419 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/sources_panel/indices_list.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 { EuiFormRow, EuiListGroup, EuiListGroupItem } from '@elastic/eui'; +import React from 'react'; +import { i18n } from '@kbn/i18n'; + +interface IndicesListProps { + indices: string[]; + onRemoveClick: (index: string) => void; + hasBorder?: boolean; +} + +export const IndicesList: React.FC = ({ indices, onRemoveClick, hasBorder }) => + indices?.length ? ( + + + {indices.map((index) => ( + onRemoveClick(index), + disabled: indices.length === 1, + }} + /> + ))} + + + ) : null; diff --git a/x-pack/plugins/search_playground/public/components/sources_panel/indices_table.tsx b/x-pack/plugins/search_playground/public/components/sources_panel/indices_table.tsx new file mode 100644 index 0000000000000..85f53eec44be4 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/sources_panel/indices_table.tsx @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiBasicTable, EuiLink } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; + +interface IndicesTableProps { + indices: string[]; + onRemoveClick: (index: string) => void; +} + +export const IndicesTable: React.FC = ({ indices, onRemoveClick }) => ( + ({ index }))} + columns={[ + { + field: 'index', + name: i18n.translate('xpack.searchPlayground.sources.indices.table.label', { + defaultMessage: 'Selected indices', + }), + truncateText: true, + render: (index: string) => {index}, + }, + { + actions: [ + { + type: 'icon', + name: i18n.translate('xpack.searchPlayground.sources.indices.table.remove.label', { + defaultMessage: 'Remove', + }), + description: i18n.translate( + 'xpack.searchPlayground.sources.indices.table.remove.description', + { + defaultMessage: 'Remove index', + } + ), + icon: 'minusInCircle', + onClick: (item: { index: string }) => onRemoveClick(item.index), + }, + ], + }, + ]} + hasActions + /> +); diff --git a/x-pack/plugins/search_playground/public/components/sources_panel/sources_panel_for_start_chat.tsx b/x-pack/plugins/search_playground/public/components/sources_panel/sources_panel_for_start_chat.tsx new file mode 100644 index 0000000000000..a907cf0d86547 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/sources_panel/sources_panel_for_start_chat.tsx @@ -0,0 +1,72 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner } from '@elastic/eui'; +import React, { useEffect } from 'react'; +import { i18n } from '@kbn/i18n'; +import { useController } from 'react-hook-form'; +import { AddIndicesField } from './add_indices_field'; +import { IndicesTable } from './indices_table'; +import { StartChatPanel } from '../start_chat_panel'; +import { CreateIndexCallout } from './create_index_callout'; +import { useSourceIndicesField } from '../../hooks/use_source_indices_field'; +import { useQueryIndices } from '../../hooks/use_query_indices'; +import { ChatFormFields } from '../../types'; +import { useIndicesFields } from '../../hooks/use_indices_fields'; +import { createQuery, getDefaultQueryFields } from '../../utils/create_query'; + +export const SourcesPanelForStartChat: React.FC = () => { + const { selectedIndices, removeIndex, addIndex } = useSourceIndicesField(); + const { indices, isLoading } = useQueryIndices(); + const { fields } = useIndicesFields(selectedIndices || []); + + const { + field: { onChange: elasticsearchQueryOnChange }, + } = useController({ + name: ChatFormFields.elasticsearchQuery, + defaultValue: {}, + }); + + useEffect(() => { + if (fields) { + const defaultFields = getDefaultQueryFields(fields); + elasticsearchQueryOnChange(createQuery(defaultFields, fields)); + } + }, [fields, elasticsearchQueryOnChange]); + + return ( + + {!!selectedIndices?.length && ( + + + + )} + + {isLoading && ( + + + + )} + + {!isLoading && !!indices?.length && ( + + + + )} + + {!isLoading && !indices?.length && } + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/sources_panel/sources_panel_sidebar.tsx b/x-pack/plugins/search_playground/public/components/sources_panel/sources_panel_sidebar.tsx new file mode 100644 index 0000000000000..76a68605c9b0a --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/sources_panel/sources_panel_sidebar.tsx @@ -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 React, { useEffect } from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiCallOut, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { useController } from 'react-hook-form'; +import { useSourceIndicesField } from '../../hooks/use_source_indices_field'; +import { useIndicesFields } from '../../hooks/use_indices_fields'; +import { createQuery, getDefaultQueryFields } from '../../utils/create_query'; +import { ChatFormFields } from '../../types'; +import { AddIndicesField } from './add_indices_field'; +import { IndicesList } from './indices_list'; + +export const SourcesPanelSidebar: React.FC = () => { + const { selectedIndices, removeIndex, addIndex } = useSourceIndicesField(); + const { fields } = useIndicesFields(selectedIndices || []); + + const { + field: { onChange: elasticsearchQueryOnChange }, + } = useController({ + name: ChatFormFields.elasticsearchQuery, + defaultValue: {}, + }); + + useEffect(() => { + if (fields) { + const defaultFields = getDefaultQueryFields(fields); + elasticsearchQueryOnChange(createQuery(defaultFields, fields)); + } + }, [selectedIndices, fields, elasticsearchQueryOnChange]); + + return ( + + + + + + + + + + + + + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/start_chat_panel.tsx b/x-pack/plugins/search_playground/public/components/start_chat_panel.tsx new file mode 100644 index 0000000000000..c155dfd16828e --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/start_chat_panel.tsx @@ -0,0 +1,66 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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, + EuiIcon, + EuiPanel, + EuiSpacer, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import React from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; + +interface StartChatPanelProps { + title: string; + description: string | React.ReactNode; + isValid?: boolean; +} + +export const StartChatPanel: React.FC = ({ + title, + description, + children, + isValid, +}) => ( + + + +
{title}
+
+ + {isValid && ( + + + + + +

+ +

+
+
+
+ )} +
+ + + + + +

{description}

+
+ + {children} +
+
+); diff --git a/x-pack/plugins/search_playground/public/components/start_new_chat.tsx b/x-pack/plugins/search_playground/public/components/start_new_chat.tsx new file mode 100644 index 0000000000000..4720f1122fae6 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/start_new_chat.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 { EuiButton, EuiFlexGroup, EuiFlexItem, EuiIcon, EuiTitle, useEuiTheme } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import React from 'react'; +import { useFormContext } from 'react-hook-form'; +import { SourcesPanelForStartChat } from './sources_panel/sources_panel_for_start_chat'; +import { SummarizationPanelForStartChat } from './summarization_panel/summarization_panel_for_start_chat'; +import { ChatFormFields } from '../types'; + +const maxWidthPage = 640; + +interface StartNewChatProps { + onStartClick: () => void; +} + +export const StartNewChat: React.FC = ({ onStartClick }) => { + const { euiTheme } = useEuiTheme(); + const { watch } = useFormContext(); + + return ( + + + + + +

+ +

+
+ + +
+
+ + + + + + + + + + + + + + +
+
+ ); +}; diff --git a/x-pack/plugins/search_playground/public/components/summarization_panel/include_citations_field.tsx b/x-pack/plugins/search_playground/public/components/summarization_panel/include_citations_field.tsx new file mode 100644 index 0000000000000..51c5dabe0e293 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/summarization_panel/include_citations_field.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 React from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiFormRow, EuiSwitch } from '@elastic/eui'; + +interface IncludeCitationsFieldProps { + checked: boolean; + onChange: (value: boolean) => void; +} + +export const IncludeCitationsField: React.FC = ({ + checked, + onChange, +}) => ( + + onChange(e.target.checked)} + /> + +); diff --git a/x-pack/plugins/search_playground/public/components/summarization_panel/instructions_field.tsx b/x-pack/plugins/search_playground/public/components/summarization_panel/instructions_field.tsx new file mode 100644 index 0000000000000..864026ad1172b --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/summarization_panel/instructions_field.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 React from 'react'; + +import { EuiFormRow, EuiIcon, EuiTextArea, EuiToolTip } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +interface InstructionsFieldProps { + value?: string; + onChange: (value: string) => void; +} + +export const InstructionsField: React.FC = ({ value, onChange }) => { + const handlePromptChange = (e: React.ChangeEvent) => + onChange(e.target.value); + + return ( + + <> + + {i18n.translate('xpack.searchPlayground.sidebar.instructionsField.label', { + defaultMessage: 'Instructions', + })} + + + + + } + > + + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_icon.tsx b/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_icon.tsx new file mode 100644 index 0000000000000..ed56c974dac91 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_icon.tsx @@ -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 React from 'react'; + +export const OpenAIIcon = () => ( + + + +); diff --git a/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_key_callout.tsx b/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_key_callout.tsx new file mode 100644 index 0000000000000..6438914915951 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_key_callout.tsx @@ -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 React from 'react'; + +import { EuiButton, EuiCallOut } from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; + +interface OpenAIKeyCalloutProps { + openAIFlyOutOpen: () => void; +} + +export const OpenAIKeyCallout: React.FC = ({ openAIFlyOutOpen }) => { + return ( + +

+ {i18n.translate('xpack.searchPlayground.sidebar.openAICallout.description', { + defaultMessage: + 'The AI Playground uses OpenAl models for summarization. Add your OpenAI API key to continue.', + })} +

+ + {i18n.translate('xpack.searchPlayground.sidebar.openAICallout.buttonLabelText', { + defaultMessage: 'Add OpenAI API Key', + })} + +
+ ); +}; diff --git a/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_key_field.tsx b/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_key_field.tsx new file mode 100644 index 0000000000000..2ac65c9e386d0 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_key_field.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 { EuiButton, EuiFieldPassword, EuiFlexGroup, EuiFormRow, keys } from '@elastic/eui'; +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import { useFormContext } from 'react-hook-form'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { ChatFormFields } from '../../types'; + +export const OpenAIKeyField: React.FC = () => { + const [openAITempValue, setOpenAITempValue] = React.useState(''); + const { setValue, watch } = useFormContext(); + const openAIKey = watch(ChatFormFields.openAIKey); + const handleSaveValue = () => { + if (openAITempValue) { + setValue(ChatFormFields.openAIKey, openAITempValue); + } + }; + + return ( + + + { + if (keys.ENTER === key) { + handleSaveValue(); + } + }} + onChange={(e) => setOpenAITempValue(e.target.value)} + /> + + {openAIKey && openAIKey === openAITempValue ? ( + + + + ) : ( + + + + )} + + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_key_flyout.tsx b/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_key_flyout.tsx new file mode 100644 index 0000000000000..13d430e4f8aff --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_key_flyout.tsx @@ -0,0 +1,123 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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, + EuiButtonEmpty, + EuiFieldPassword, + EuiFlexGroup, + EuiFlexItem, + EuiFlyout, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, + EuiFormRow, + EuiLink, + EuiSpacer, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import React, { useState } from 'react'; + +export interface OpenAIKeyFlyOutProps { + openAPIKey: string; + onClose: () => void; + onSave: (key: string) => void; +} + +export const OpenAIKeyFlyOut: React.FC = ({ + openAPIKey, + onClose, + onSave, +}) => { + const [apiKey, setApiKey] = useState(openAPIKey); + + const handleSave = () => { + onSave(apiKey); + onClose(); + }; + + return ( + + + +

+ {i18n.translate('xpack.searchPlayground.sidebar.openAIFlyOut.headerTitle', { + defaultMessage: 'OpenAI API Key', + })} +

+
+ +
+ + + + + + + + } + > + + setApiKey(e.target.value)} + /> + + + + + + + + + + + + + + + + + + + +
+ ); +}; diff --git a/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_summarization_model.tsx b/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_summarization_model.tsx new file mode 100644 index 0000000000000..322b8c1a61354 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/summarization_panel/open_ai_summarization_model.tsx @@ -0,0 +1,102 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { + EuiButtonEmpty, + EuiFlexGroup, + EuiFlexItem, + EuiFormRow, + EuiIcon, + EuiSuperSelect, + EuiSuperSelectOption, + EuiToolTip, +} from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; +import { SummarizationModelName } from '../../types'; + +import { OpenAIIcon } from './open_ai_icon'; + +const renderSelectOptions = (label: string) => ( + + + + + {label} + +); + +const SummarizationModel: Array> = [ + { + value: SummarizationModelName.gpt3_5, + inputDisplay: renderSelectOptions(SummarizationModelName.gpt3_5), + }, + { + value: SummarizationModelName.gpt3_5_turbo_1106, + inputDisplay: renderSelectOptions(SummarizationModelName.gpt3_5_turbo_1106), + }, + { + value: SummarizationModelName.gpt3_5_turbo_16k, + inputDisplay: renderSelectOptions(SummarizationModelName.gpt3_5_turbo_16k), + }, + { + value: SummarizationModelName.gpt3_5_turbo_16k_0613, + inputDisplay: renderSelectOptions(SummarizationModelName.gpt3_5_turbo_16k_0613), + }, + { + value: SummarizationModelName.gpt3_5_turbo, + inputDisplay: renderSelectOptions(SummarizationModelName.gpt3_5_turbo), + }, +]; + +interface OpenAISummarizationModelProps { + openAIFlyOutOpen: () => void; + model: string; + onSelect: (key: string) => void; +} + +export const OpenAISummarizationModel: React.FC = ({ + model = SummarizationModelName.gpt3_5_turbo_1106, + onSelect, + openAIFlyOutOpen, +}) => { + const onChange = (value: string) => { + onSelect(value); + }; + + return ( + + <> + + {i18n.translate('xpack.searchPlayground.sidebar.summarizationModel.label', { + defaultMessage: 'Summarization Model', + })} + + + + + } + labelAppend={ + openAIFlyOutOpen()}> + {i18n.translate('xpack.searchPlayground.sidebar.summarizationModel.editLabel', { + defaultMessage: 'Edit OpenAI API key', + })} + + } + > + + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/summarization_panel/summarization_panel.tsx b/x-pack/plugins/search_playground/public/components/summarization_panel/summarization_panel.tsx new file mode 100644 index 0000000000000..e9b926cf44eb4 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/summarization_panel/summarization_panel.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, { useState } from 'react'; +import { Controller, useFormContext } from 'react-hook-form'; + +import { IncludeCitationsField } from './include_citations_field'; +import { InstructionsField } from './instructions_field'; +import { ChatFormFields } from '../../types'; +import { OpenAIKeyFlyOut } from './open_ai_key_flyout'; +import { OpenAISummarizationModel } from './open_ai_summarization_model'; + +export const SummarizationPanel: React.FC = () => { + const { control } = useFormContext(); + const [isOpenAIFlyOutOpen, setIsOpenAIFlyOutOpen] = useState(false); + + const onCloseOpenAIFlyOut = () => { + setIsOpenAIFlyOutOpen(!isOpenAIFlyOutOpen); + }; + const handleOpenAIFlyOut = () => { + setIsOpenAIFlyOutOpen(true); + }; + + return ( + <> + {isOpenAIFlyOutOpen && ( + ( + + )} + /> + )} + + ( + + )} + /> + + } + /> + + ( + + )} + /> + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/summarization_panel/summarization_panel_for_start_chat.tsx b/x-pack/plugins/search_playground/public/components/summarization_panel/summarization_panel_for_start_chat.tsx new file mode 100644 index 0000000000000..fe35bbae6ca89 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/summarization_panel/summarization_panel_for_start_chat.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 React from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiLink } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { useFormContext } from 'react-hook-form'; +import { OpenAIKeyField } from './open_ai_key_field'; +import { StartChatPanel } from '../start_chat_panel'; +import { ChatFormFields } from '../../types'; + +const openAIApiKeyLink = 'https://platform.openai.com/api-keys'; + +export const SummarizationPanelForStartChat: React.FC = () => { + const { watch } = useFormContext(); + + return ( + + + + ), + }} + /> + } + isValid={watch(ChatFormFields.openAIKey)} + > + + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/telegram_icon.tsx b/x-pack/plugins/search_playground/public/components/telegram_icon.tsx new file mode 100644 index 0000000000000..749f6e102df84 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/telegram_icon.tsx @@ -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 React from 'react'; + +export const TelegramIcon = () => ( + + + +); diff --git a/x-pack/plugins/search_playground/public/components/toolbar.tsx b/x-pack/plugins/search_playground/public/components/toolbar.tsx new file mode 100644 index 0000000000000..67f35c5adee57 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/toolbar.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 { EuiFlexGroup } from '@elastic/eui'; +import React from 'react'; +import { ViewCodeAction } from './view_code/view_code_action'; +import { ViewQueryAction } from './view_query/view_query_action'; + +export const Toolbar: React.FC = () => { + return ( + + + + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/view_code/create_api_key_form.tsx b/x-pack/plugins/search_playground/public/components/view_code/create_api_key_form.tsx new file mode 100644 index 0000000000000..b0014c7286af3 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/view_code/create_api_key_form.tsx @@ -0,0 +1,154 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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, + EuiButtonEmpty, + EuiFieldText, + EuiFlexGroup, + EuiForm, + EuiFormControlLayout, + EuiFormRow, + EuiText, +} from '@elastic/eui'; +import React, { Controller, useForm } from 'react-hook-form'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { useCreateApiKeyQuery } from '../../hooks/use_create_api_key_query'; +import { useKibana } from '../../hooks/use_kibana'; + +enum ApiKeyFormFields { + Name = 'name', + ExpireInDays = 'expiresInDays', +} + +interface ApiKeyForm { + [ApiKeyFormFields.Name]: string; + [ApiKeyFormFields.ExpireInDays]: number; +} + +export const CreateApiKeyForm = () => { + const { http } = useKibana().services; + const managementApiKeysLinks = http.basePath.prepend('/app/management/security/api_keys'); + const { + control, + getValues, + reset, + formState: { isDirty, isValid }, + handleSubmit, + } = useForm(); + const { action, isLoading, isSuccess, isError } = useCreateApiKeyQuery(); + const onSubmit = async (data: ApiKeyForm) => { + await action(data); + + reset(getValues()); + }; + + return ( + + + ( + + )} + /> + + + + ( + + + + + + } + > + + + )} + /> + + + + + {isSuccess && !isDirty ? ( + + + + ) : ( + + + + )} + + + + + + + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/view_code/view_code_action.tsx b/x-pack/plugins/search_playground/public/components/view_code/view_code_action.tsx new file mode 100644 index 0000000000000..53680a1565a02 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/view_code/view_code_action.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useState } from 'react'; +import { EuiButton } from '@elastic/eui'; +import { useFormContext } from 'react-hook-form'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { ChatForm, ChatFormFields } from '../../types'; +import { ViewCodeFlyout } from './view_code_flyout'; + +export const ViewCodeAction: React.FC = () => { + const { watch } = useFormContext(); + const [showFlyout, setShowFlyout] = useState(false); + const selectedIndices = watch(ChatFormFields.indices); + + return ( + <> + {showFlyout && setShowFlyout(false)} />} + setShowFlyout(true)} + disabled={!selectedIndices || selectedIndices?.length === 0} + > + + + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/view_code/view_code_flyout.tsx b/x-pack/plugins/search_playground/public/components/view_code/view_code_flyout.tsx new file mode 100644 index 0000000000000..d11e89ee6fc9f --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/view_code/view_code_flyout.tsx @@ -0,0 +1,99 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiFormLabel, + EuiCodeBlock, + EuiFlyout, + EuiFlyoutBody, + EuiFlyoutHeader, + EuiSpacer, + EuiSteps, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import React, { useMemo } from 'react'; +import { CreateApiKeyForm } from './create_api_key_form'; + +interface ViewCodeFlyoutProps { + onClose: () => void; +} + +export const ViewCodeFlyout: React.FC = ({ onClose }) => { + const steps = useMemo( + () => [ + { + title: i18n.translate('xpack.searchPlayground.viewCode.flyout.step.apiKeyTitle', { + defaultMessage: 'Generate and copy an API key', + }), + children: ( + <> + +

+ +

+
+ + + + ), + }, + { + title: i18n.translate('xpack.searchPlayground.viewCode.flyout.step.createApplication', { + defaultMessage: 'Create application', + }), + children: ( + <> + + + + + + npm install + + + ), + }, + ], + [] + ); + + return ( + + + +

+ +

+
+ + +

+ +

+
+
+ + + +
+ ); +}; diff --git a/x-pack/plugins/search_playground/public/components/view_query/view_query_action.tsx b/x-pack/plugins/search_playground/public/components/view_query/view_query_action.tsx new file mode 100644 index 0000000000000..c2971ec87ed17 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/view_query/view_query_action.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 React, { useState } from 'react'; +import { EuiButtonEmpty } from '@elastic/eui'; +import { useFormContext } from 'react-hook-form'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { ViewQueryFlyout } from './view_query_flyout'; +import { ChatForm, ChatFormFields } from '../../types'; + +export const ViewQueryAction: React.FC = () => { + const [showFlyout, setShowFlyout] = useState(false); + const { watch } = useFormContext(); + const selectedIndices: string[] = watch(ChatFormFields.indices); + + return ( + <> + {showFlyout && setShowFlyout(false)} />} + setShowFlyout(true)} disabled={selectedIndices?.length === 0}> + + + + ); +}; diff --git a/x-pack/plugins/search_playground/public/components/view_query/view_query_flyout.tsx b/x-pack/plugins/search_playground/public/components/view_query/view_query_flyout.tsx new file mode 100644 index 0000000000000..cc271bd8fe1e5 --- /dev/null +++ b/x-pack/plugins/search_playground/public/components/view_query/view_query_flyout.tsx @@ -0,0 +1,205 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiAccordion, + EuiBasicTable, + EuiButton, + EuiButtonEmpty, + EuiCodeBlock, + EuiFlexGroup, + EuiFlexItem, + EuiFlyout, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, + EuiPanel, + EuiSpacer, + EuiSwitch, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import React, { useEffect, useMemo, useState } from 'react'; +import { useController, useFormContext } from 'react-hook-form'; +import { useIndicesFields } from '../../hooks/use_indices_fields'; +import { ChatForm, ChatFormFields } from '../../types'; +import { createQuery, getDefaultQueryFields } from '../../utils/create_query'; + +interface ViewQueryFlyoutProps { + onClose: () => void; +} + +export const ViewQueryFlyout: React.FC = ({ onClose }) => { + const { watch } = useFormContext(); + const selectedIndices: string[] = watch(ChatFormFields.indices); + const { fields } = useIndicesFields(selectedIndices || []); + const defaultFields = useMemo(() => getDefaultQueryFields(fields), [fields]); + const [queryFields, setQueryFields] = useState(defaultFields); + + const { + field: { onChange }, + } = useController({ + name: ChatFormFields.elasticsearchQuery, + defaultValue: {}, + }); + + useEffect(() => { + if (selectedIndices?.length > 0) { + setQueryFields(defaultFields); + } + }, [selectedIndices, defaultFields]); + + const isQueryFieldSelected = (index: string, field: string) => { + return queryFields[index].includes(field); + }; + + const toggleQueryField = (index: string, field: string) => { + if (isQueryFieldSelected(index, field)) { + setQueryFields({ + ...queryFields, + [index]: queryFields[index].filter((x: string) => x !== field), + }); + } else { + setQueryFields({ + ...queryFields, + [index]: [...queryFields[index], field], + }); + } + }; + + const saveQuery = () => { + onChange(createQuery(queryFields, fields)); + + onClose(); + }; + + return ( + + + +

+ +

+
+ + +

+ +

+
+
+ + + + + {JSON.stringify(createQuery(queryFields, fields), null, 2)} + + + + + +
+ +
+
+ {Object.entries(fields).map(([index, group]) => ( + + + +
{index}
+ + } + > + + ({ + field: typeof field === 'string' ? field : field.field, + }))} + columns={[ + { + field: 'field', + name: i18n.translate( + 'xpack.searchPlayground.viewQuery.flyout.table.field', + { defaultMessage: 'Field' } + ), + truncateText: false, + render: (field: string) => field, + }, + { + actions: [ + { + name: 'toggle', + description: i18n.translate( + 'xpack.searchPlayground.viewQuery.flyout.table.toggle', + { defaultMessage: 'Toggle field' } + ), + isPrimary: true, + render: ({ field }: { field: string }) => ( + toggleQueryField(index, field)} + compressed + /> + ), + }, + ], + }, + ]} + hasActions + /> +
+
+
+ ))} +
+
+
+
+ + + + + + + + + + + + + + +
+ ); +}; diff --git a/x-pack/plugins/search_playground/public/embeddable.tsx b/x-pack/plugins/search_playground/public/embeddable.tsx new file mode 100644 index 0000000000000..982060f3ac670 --- /dev/null +++ b/x-pack/plugins/search_playground/public/embeddable.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, { ComponentType, lazy, LazyExoticComponent, Suspense } from 'react'; +import type { App } from './components/app'; +import type { PlaygroundProvider as PlaygroundProviderComponent } from './providers/playground_provider'; +import type { Toolbar } from './components/toolbar'; + +const lazyRender = +

( + Component: LazyExoticComponent> + ): React.FC> => + (props) => + ( + + + + ); + +export const Playground = lazyRender>( + lazy(async () => ({ + default: (await import('./components/app')).App, + })) +); + +export const PlaygroundToolbar = lazyRender>( + lazy(async () => ({ + default: (await import('./components/toolbar')).Toolbar, + })) +); + +export const PlaygroundProvider = lazyRender< + React.ComponentProps +>( + lazy(async () => ({ + default: (await import('./providers/playground_provider')).PlaygroundProvider, + })) +); diff --git a/x-pack/plugins/search_playground/public/hooks/use_ai_assist_chat.ts b/x-pack/plugins/search_playground/public/hooks/use_ai_assist_chat.ts new file mode 100644 index 0000000000000..54c74ae025db7 --- /dev/null +++ b/x-pack/plugins/search_playground/public/hooks/use_ai_assist_chat.ts @@ -0,0 +1,248 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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, useEffect, useRef, useState } from 'react'; +import useSWR, { KeyedMutator } from 'swr'; +import { v4 as uuidv4 } from 'uuid'; +import { fetchApi } from '../utils/api'; + +import type { + ChatRequest, + ChatRequestOptions, + CreateMessage, + Message, + UseChatHelpers, + UseChatOptions, +} from '../types'; +import { MessageRole } from '../types'; + +const getStreamedResponse = async ( + api: string | ((init: RequestInit) => Promise), + chatRequest: ChatRequest, + mutate: KeyedMutator, + extraMetadataRef: React.MutableRefObject, + messagesRef: React.MutableRefObject, + abortControllerRef: React.MutableRefObject +) => { + const previousMessages = messagesRef.current; + mutate(chatRequest.messages, false); + + const constructedMessagesPayload = chatRequest.messages.map(({ role, content }) => ({ + role, + content, + })); + + return await fetchApi({ + api, + messages: constructedMessagesPayload, + body: { + data: chatRequest.data, + ...extraMetadataRef.current.body, + ...chatRequest.options?.body, + }, + headers: { + ...extraMetadataRef.current.headers, + ...chatRequest.options?.headers, + }, + abortController: () => abortControllerRef.current, + appendMessage(message) { + mutate([...chatRequest.messages, message], false); + }, + handleFailure() { + mutate(previousMessages, false); + }, + onUpdate(merged) { + mutate([...chatRequest.messages, ...merged], false); + }, + }); +}; + +export function useAIAssistChat({ + api = '/api/chat', + id = 'chat', + initialInput = '', + onError, + headers, + body, +}: UseChatOptions & { + key?: string; +} = {}): UseChatHelpers { + const chatKey = [typeof api === 'string' ? api : 'function', id]; + + const [initialMessagesFallback] = useState([]); + + // Store the chat state in SWR, using the chatId as the key to share states. + const { data: messages, mutate } = useSWR([chatKey, 'messages'], null, { + fallbackData: initialMessagesFallback, + }); + + const { data: isLoading = false, mutate: mutateLoading } = useSWR( + [chatKey, 'loading'], + null + ); + + const { data: error = undefined, mutate: setError } = useSWR( + [chatKey, 'error'], + null + ); + + const messagesRef = useRef(messages || []); + useEffect(() => { + messagesRef.current = messages || []; + }, [messages]); + + const abortControllerRef = useRef(null); + + const extraMetadataRef = useRef({ + headers, + body, + }); + + useEffect(() => { + extraMetadataRef.current = { + headers, + body, + }; + }, [headers, body]); + + const triggerRequest = useCallback( + async (chatRequest: ChatRequest) => { + try { + mutateLoading(true); + setError(undefined); + + const abortController = new AbortController(); + abortControllerRef.current = abortController; + + await getStreamedResponse( + api, + chatRequest, + mutate, + extraMetadataRef, + messagesRef, + abortControllerRef + ); + + abortControllerRef.current = null; + } catch (err) { + if ((err as any).name === 'AbortError') { + abortControllerRef.current = null; + return null; + } + + if (onError && err instanceof Error) { + onError(err); + } + + setError(err as Error); + } finally { + mutateLoading(false); + } + }, + [ + mutate, + mutateLoading, + api, + extraMetadataRef, + onError, + setError, + messagesRef, + abortControllerRef, + ] + ); + + const append = useCallback( + async (message: Message | CreateMessage, { options, data }: ChatRequestOptions = {}) => { + if (!message.id) { + message.id = uuidv4(); + } + + const chatRequest: ChatRequest = { + messages: messagesRef.current.concat(message as Message), + options, + data, + }; + + return triggerRequest(chatRequest); + }, + [triggerRequest] + ); + + const reload = useCallback( + async ({ options }: ChatRequestOptions = {}) => { + if (messagesRef.current.length === 0) return null; + + const chatRequest: ChatRequest = { + messages: messagesRef.current, + options, + }; + + return triggerRequest(chatRequest); + }, + [triggerRequest] + ); + + const stop = useCallback(() => { + if (abortControllerRef.current) { + abortControllerRef.current.abort(); + abortControllerRef.current = null; + } + }, []); + + const setMessages = useCallback( + (newMessages: Message[]) => { + mutate(newMessages, false); + messagesRef.current = newMessages; + }, + [mutate] + ); + + const [input, setInput] = useState(initialInput); + + const handleSubmit = useCallback( + (e: React.FormEvent, options: ChatRequestOptions = {}, metadata?: unknown) => { + if (metadata) { + extraMetadataRef.current = { + ...extraMetadataRef.current, + ...metadata, + }; + } + + e.preventDefault(); + if (!input) return; + + append( + { + content: input, + role: MessageRole.user, + createdAt: new Date(), + }, + options + ); + setInput(''); + }, + [input, append] + ); + + const handleInputChange = (e: any) => { + setInput(e.target.value); + }; + + return { + messages: messages || [], + error, + append, + reload, + stop, + setMessages, + input, + setInput, + handleInputChange, + handleSubmit, + isLoading, + }; +} diff --git a/x-pack/plugins/search_playground/public/hooks/use_auto_bottom_scroll.ts b/x-pack/plugins/search_playground/public/hooks/use_auto_bottom_scroll.ts new file mode 100644 index 0000000000000..185d84db89ba9 --- /dev/null +++ b/x-pack/plugins/search_playground/public/hooks/use_auto_bottom_scroll.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 { useEffect, useRef, useState } from 'react'; + +export const useAutoBottomScroll = (deps?: any[]): React.RefObject => { + const ref = useRef(null); + const [isAutoScrollMode, setAutoBottomScroll] = useState(true); + + useEffect(() => { + if (ref.current && isAutoScrollMode) { + ref.current.scrollTop = ref.current.scrollHeight; + } + }); + + useEffect(() => { + const currentRef = ref.current; + const calculateAutoScroll = () => { + if (ref.current) { + const newIsAutoScrollMode = + ref.current.scrollTop + ref.current.clientHeight === ref.current.scrollHeight; + + if (newIsAutoScrollMode !== isAutoScrollMode) { + setAutoBottomScroll(newIsAutoScrollMode); + } + } + }; + + currentRef?.addEventListener('scroll', calculateAutoScroll); + + return () => { + currentRef?.removeEventListener('scroll', calculateAutoScroll); + }; + }, [isAutoScrollMode, deps]); + + return ref; +}; diff --git a/x-pack/plugins/search_playground/public/hooks/use_chat.ts b/x-pack/plugins/search_playground/public/hooks/use_chat.ts new file mode 100644 index 0000000000000..8c52d8c1aef27 --- /dev/null +++ b/x-pack/plugins/search_playground/public/hooks/use_chat.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useAIAssistChat } from './use_ai_assist_chat'; +import { useKibana } from './use_kibana'; +import { APIRoutes, UseChatHelpers } from '../types'; + +export const useChat = (): UseChatHelpers => { + const { services } = useKibana(); + + const chatHelpers = useAIAssistChat({ + api: async (request: RequestInit) => { + const response = await services.http.post(APIRoutes.POST_CHAT_MESSAGE, { + ...request, + rawResponse: true, + asResponse: true, + }); + + return response.response!; + }, + }); + + return chatHelpers; +}; diff --git a/x-pack/plugins/search_playground/public/hooks/use_create_api_key_query.ts b/x-pack/plugins/search_playground/public/hooks/use_create_api_key_query.ts new file mode 100644 index 0000000000000..1bf1b32a2eeb5 --- /dev/null +++ b/x-pack/plugins/search_playground/public/hooks/use_create_api_key_query.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMutation } from '@tanstack/react-query'; +import { useFormContext } from 'react-hook-form'; +import { useKibana } from './use_kibana'; +import { APIRoutes, ChatFormFields } from '../types'; + +interface UseApiKeyQueryParams { + name: string; + expiresInDays: number; +} + +export const useCreateApiKeyQuery = () => { + const { services } = useKibana(); + const { getValues } = useFormContext(); + + const { data, isError, isLoading, isSuccess, mutateAsync } = useMutation({ + mutationFn: async ({ name, expiresInDays }: UseApiKeyQueryParams) => { + const response = await services.http.post<{ + apiKey: { encoded: string; name: string; expiration: number }; + }>(APIRoutes.POST_API_KEY, { + body: JSON.stringify({ + name, + expiresInDays, + indices: getValues(ChatFormFields.indices), + }), + }); + + return response.apiKey.encoded; + }, + }); + + return { + apiKey: data, + isLoading, + isSuccess, + isError, + action: mutateAsync, + }; +}; diff --git a/x-pack/plugins/search_playground/public/hooks/use_indices_fields.ts b/x-pack/plugins/search_playground/public/hooks/use_indices_fields.ts new file mode 100644 index 0000000000000..1e0dc14850836 --- /dev/null +++ b/x-pack/plugins/search_playground/public/hooks/use_indices_fields.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useQuery } from '@tanstack/react-query'; +import { useKibana } from './use_kibana'; +import { APIRoutes, IndicesQuerySourceFields } from '../types'; + +export const useIndicesFields = (indices: string[]) => { + const { services } = useKibana(); + + const { data, isLoading } = useQuery({ + enabled: indices.length > 0, + queryKey: ['fields', indices.toString()], + initialData: {}, + queryFn: async () => { + const response = await services.http.post( + APIRoutes.POST_QUERY_SOURCE_FIELDS, + { + body: JSON.stringify({ + indices, + }), + } + ); + + return response; + }, + }); + + return { fields: data!, isLoading }; +}; diff --git a/x-pack/plugins/search_playground/public/hooks/use_kibana.ts b/x-pack/plugins/search_playground/public/hooks/use_kibana.ts new file mode 100644 index 0000000000000..90fa7597e17dc --- /dev/null +++ b/x-pack/plugins/search_playground/public/hooks/use_kibana.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useKibana as _useKibana } from '@kbn/kibana-react-plugin/public'; +import { AppServicesContext } from '../types'; + +export const useKibana = () => _useKibana(); diff --git a/x-pack/plugins/search_playground/public/hooks/use_query_indices.ts b/x-pack/plugins/search_playground/public/hooks/use_query_indices.ts new file mode 100644 index 0000000000000..a5806c1412f28 --- /dev/null +++ b/x-pack/plugins/search_playground/public/hooks/use_query_indices.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useQuery } from '@tanstack/react-query'; +import { IndexName } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { useKibana } from './use_kibana'; +import { ElasticsearchIndex } from '../types'; + +export const useQueryIndices = ( + query: string = '' +): { indices: IndexName[]; isLoading: boolean } => { + const { services } = useKibana(); + + const { data, isLoading } = useQuery({ + queryKey: ['indices', query], + queryFn: async () => { + const response = await services.http.get<{ + indices: ElasticsearchIndex[]; + }>('/internal/enterprise_search/indices', { + query: { + from: 0, + only_show_search_optimized_indices: false, + return_hidden_indices: false, + search_query: query, + size: 20, + }, + }); + + return response.indices.map((index) => index.name); + }, + }); + + return { indices: data || [], isLoading }; +}; diff --git a/x-pack/plugins/search_playground/public/hooks/use_source_indices_field.ts b/x-pack/plugins/search_playground/public/hooks/use_source_indices_field.ts new file mode 100644 index 0000000000000..1192c475d36c5 --- /dev/null +++ b/x-pack/plugins/search_playground/public/hooks/use_source_indices_field.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { IndexName } from '@elastic/elasticsearch/lib/api/types'; +import { useController } from 'react-hook-form'; +import { ChatFormFields } from '../types'; + +export const useSourceIndicesField = () => { + const { + field: { value: selectedIndices, onChange }, + } = useController({ name: ChatFormFields.indices, defaultValue: [] }); + const addIndex = (newIndex: IndexName) => { + onChange([...selectedIndices, newIndex]); + }; + const removeIndex = (index: IndexName) => { + onChange(selectedIndices.filter((indexName: string) => indexName !== index)); + }; + + return { + selectedIndices, + addIndex, + removeIndex, + }; +}; diff --git a/x-pack/plugins/search_playground/public/index.ts b/x-pack/plugins/search_playground/public/index.ts new file mode 100644 index 0000000000000..b7fc5397bf51e --- /dev/null +++ b/x-pack/plugins/search_playground/public/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 { SearchPlaygroundPlugin } from './plugin'; + +export function plugin() { + return new SearchPlaygroundPlugin(); +} + +export type { SearchPlaygroundPluginSetup, SearchPlaygroundPluginStart } from './types'; diff --git a/x-pack/plugins/search_playground/public/plugin.ts b/x-pack/plugins/search_playground/public/plugin.ts new file mode 100644 index 0000000000000..41eb85215eda1 --- /dev/null +++ b/x-pack/plugins/search_playground/public/plugin.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CoreSetup, Plugin, CoreStart, AppMountParameters } from '@kbn/core/public'; +import { PLUGIN_ID, PLUGIN_NAME } from '../common'; +import { PlaygroundToolbar, PlaygroundProvider, Playground } from './embeddable'; +import { + AppPluginStartDependencies, + SearchPlaygroundPluginSetup, + SearchPlaygroundPluginStart, +} from './types'; + +export class SearchPlaygroundPlugin + implements Plugin +{ + public setup(core: CoreSetup): SearchPlaygroundPluginSetup { + return {}; + + core.application.register({ + id: PLUGIN_ID, + appRoute: '/app/search_playground', + title: PLUGIN_NAME, + async mount(params: AppMountParameters) { + const { renderApp } = await import('./application'); + const [coreStart, depsStart] = await core.getStartServices(); + + return renderApp(coreStart, depsStart as AppPluginStartDependencies, params); + }, + }); + } + + public start(core: CoreStart, deps: AppPluginStartDependencies): SearchPlaygroundPluginStart { + return { + PlaygroundProvider, + PlaygroundToolbar, + Playground, + }; + } + + public stop() {} +} diff --git a/x-pack/plugins/search_playground/public/providers/playground_provider.tsx b/x-pack/plugins/search_playground/public/providers/playground_provider.tsx new file mode 100644 index 0000000000000..54e9b3363411f --- /dev/null +++ b/x-pack/plugins/search_playground/public/providers/playground_provider.tsx @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { FormProvider, useForm } from 'react-hook-form'; +import { ChatForm } from '../types'; + +const queryClient = new QueryClient({}); + +export const PlaygroundProvider: React.FC = ({ children }) => { + const form = useForm({ + defaultValues: { + prompt: 'You are an assistant for question-answering tasks.', + }, + }); + + return ( + + {children} + + ); +}; diff --git a/x-pack/plugins/search_playground/public/types.ts b/x-pack/plugins/search_playground/public/types.ts new file mode 100644 index 0000000000000..f0a97b092dd5f --- /dev/null +++ b/x-pack/plugins/search_playground/public/types.ts @@ -0,0 +1,187 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + HealthStatus, + IndexName, + IndicesStatsIndexMetadataState, + QueryDslQueryContainer, + Uuid, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; +import { SecurityPluginStart } from '@kbn/security-plugin/public'; +import { HttpStart } from '@kbn/core-http-browser'; +import React from 'react'; +import { SharePluginStart } from '@kbn/share-plugin/public'; +import type { App } from './components/app'; +import type { PlaygroundProvider as PlaygroundProviderComponent } from './providers/playground_provider'; +import type { Toolbar } from './components/toolbar'; + +export * from '../common/types'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchPlaygroundPluginSetup {} +export interface SearchPlaygroundPluginStart { + PlaygroundProvider: React.FC>; + PlaygroundToolbar: React.FC>; + Playground: React.FC>; +} + +export interface AppPluginStartDependencies { + navigation: NavigationPublicPluginStart; +} + +export interface AppServicesContext { + http: HttpStart; + security: SecurityPluginStart; + share: SharePluginStart; +} + +export enum ChatFormFields { + question = 'question', + citations = 'citations', + prompt = 'prompt', + openAIKey = 'api_key', + indices = 'indices', + elasticsearchQuery = 'elasticsearch_query', + summarizationModel = 'summarization_model', +} + +export interface ChatForm { + [ChatFormFields.question]: string; + [ChatFormFields.prompt]: string; + [ChatFormFields.citations]: boolean; + [ChatFormFields.openAIKey]: string; + [ChatFormFields.indices]: string[]; + [ChatFormFields.summarizationModel]: string; + [ChatFormFields.elasticsearchQuery]: QueryDslQueryContainer; +} + +export enum MessageRole { + 'user' = 'human', + 'assistant' = 'assistant', + 'system' = 'system', +} + +export interface Message { + id: string; + content: string | React.ReactNode; + createdAt?: Date; + annotations?: Annotation[]; + role: MessageRole; +} + +export interface DocAnnotation { + metadata: { id: string; score: number }; + pageContent: string; +} + +export interface Annotation { + type: 'citations' | 'retrieved_docs'; + documents: DocAnnotation[]; +} + +export interface Doc { + id: string; + content: string; +} + +export interface AIMessage extends Message { + role: MessageRole.assistant; + citations: Doc[]; + retrievalDocs: Doc[]; +} + +export enum SummarizationModelName { + gpt3_5 = 'gpt-3.5-turbo', + gpt3_5_turbo_1106 = 'gpt-3.5-turbo-1106', + gpt3_5_turbo_16k = 'gpt-3.5-turbo-16k', + gpt3_5_turbo_16k_0613 = 'gpt-3.5-turbo-16k-0613', + gpt3_5_turbo = 'gpt-3.5-turbo-instruct', +} + +export interface ElasticsearchIndex { + count: number; // Elasticsearch _count + has_in_progress_syncs?: boolean; // these default to false if not a connector or crawler + has_pending_syncs?: boolean; + health?: HealthStatus; + hidden: boolean; + name: IndexName; + status?: IndicesStatsIndexMetadataState; + total: { + docs: { + count: number; // Lucene count (includes nested documents) + deleted: number; + }; + store: { + size_in_bytes: string; + }; + }; + uuid?: Uuid; +} + +export type JSONValue = null | string | number | boolean | { [x: string]: JSONValue } | JSONValue[]; + +export interface ChatRequestOptions { + options?: RequestOptions; + data?: Record; +} + +export type CreateMessage = Omit & { + id?: Message['id']; +}; + +export interface ChatRequest extends Pick { + messages: Message[]; +} + +export interface UseChatOptions { + api?: string | ((init: RequestInit) => Promise); + id?: string; + initialInput?: string; + onError?: (error: Error) => void; + headers?: Record | Headers; + body?: object; +} + +export interface AssistantMessage { + id: string; + role: 'assistant'; + content: Array<{ + type: 'text'; + text: { + value: string; + }; + }>; +} + +export interface RequestOptions { + headers?: Record | Headers; + body?: object; +} + +export interface UseChatHelpers { + messages: Message[]; + error: undefined | Error; + append: ( + message: Message | CreateMessage, + chatRequestOptions?: ChatRequestOptions + ) => Promise; + reload: (chatRequestOptions?: ChatRequestOptions) => Promise; + stop: () => void; + setMessages: (messages: Message[]) => void; + input: string; + setInput: React.Dispatch>; + handleInputChange: ( + e: React.ChangeEvent | React.ChangeEvent + ) => void; + handleSubmit: ( + e: React.FormEvent, + chatRequestOptions?: ChatRequestOptions + ) => void; + isLoading: boolean; +} diff --git a/x-pack/plugins/search_playground/public/utils/api.ts b/x-pack/plugins/search_playground/public/utils/api.ts new file mode 100644 index 0000000000000..3cdf8053547b0 --- /dev/null +++ b/x-pack/plugins/search_playground/public/utils/api.ts @@ -0,0 +1,149 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { v4 as uuidv4 } from 'uuid'; +import { readDataStream } from './stream'; +import { Annotation, Message, MessageRole } from '../types'; + +export async function fetchApi({ + api, + messages, + body, + headers, + abortController, + handleFailure, + onUpdate, +}: { + api: string | ((init: RequestInit) => Promise); + messages: Array>; + body: Record; + headers?: HeadersInit; + appendMessage: (message: Message) => void; + abortController?: () => AbortController | null; + handleFailure: () => void; + onUpdate: (mergedMessages: Message[]) => void; +}) { + const requestInit = { + method: 'POST', + body: JSON.stringify({ + messages, + ...body, + }), + headers: { + 'Content-Type': 'application/json', + ...headers, + }, + signal: abortController?.()?.signal, + }; + + const apiRequest = typeof api === 'string' ? fetch(api, requestInit) : api(requestInit); + + const apiResponse = await apiRequest.catch((error) => { + handleFailure(); + throw error; + }); + + if (!apiResponse.ok) { + handleFailure(); + throw new Error((await apiResponse.text()) || 'Failed to fetch the chat response.'); + } + + if (!apiResponse.body) { + throw new Error('The response body is empty.'); + } + + const reader = apiResponse.body.getReader(); + + return await parseDataStream({ + reader, + abortControllerRef: abortController != null ? { current: abortController() } : undefined, + update: onUpdate, + }); +} + +interface PrefixMap { + text?: Message; +} + +function assignAnnotationsToMessage( + message: T, + annotations: Annotation[] | undefined +): T { + if (!message || !annotations || !annotations.length) return message; + return { ...message, annotations: [...annotations] } as T; +} + +export async function parseDataStream({ + reader, + abortControllerRef, + update, + generateId = uuidv4, + getCurrentDate = () => new Date(), +}: { + reader: ReadableStreamDefaultReader; + abortControllerRef?: { + current: AbortController | null; + }; + update: (mergedMessages: Message[]) => void; + generateId?: () => string; + getCurrentDate?: () => Date; +}) { + const createdAt = getCurrentDate(); + const prefixMap: PrefixMap = {}; + let messageAnnotations: Annotation[] | undefined; + + for await (const { type, value } of readDataStream(reader, { + isAborted: () => abortControllerRef?.current === null, + })) { + if (type === 'text') { + if (prefixMap.text) { + prefixMap.text = { + ...prefixMap.text, + content: (prefixMap.text.content || '') + value, + }; + } else { + prefixMap.text = { + id: generateId(), + role: MessageRole.assistant, + content: value, + createdAt, + }; + } + } + + let responseMessage = prefixMap.text; + + if (type === 'message_annotations') { + if (!messageAnnotations) { + messageAnnotations = [...(value as unknown as Annotation[])]; + } else { + messageAnnotations.push(...(value as unknown as Annotation[])); + } + + responseMessage = assignAnnotationsToMessage(prefixMap.text, messageAnnotations); + } + + if (messageAnnotations?.length) { + const messagePrefixKeys: Array = ['text']; + messagePrefixKeys.forEach((key) => { + if (prefixMap[key]) { + (prefixMap[key] as Message).annotations = [...messageAnnotations!]; + } + }); + } + + const mergedMessages = [responseMessage].filter(Boolean).map((message) => ({ + ...assignAnnotationsToMessage(message, messageAnnotations), + })) as Message[]; + + update(mergedMessages); + } + + return { + messages: [prefixMap.text].filter(Boolean) as Message[], + }; +} diff --git a/x-pack/plugins/search_playground/public/utils/create_query.test.ts b/x-pack/plugins/search_playground/public/utils/create_query.test.ts new file mode 100644 index 0000000000000..ba663144f4e43 --- /dev/null +++ b/x-pack/plugins/search_playground/public/utils/create_query.test.ts @@ -0,0 +1,430 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { IndicesQuerySourceFields } from '../types'; +import { createQuery, getDefaultQueryFields, getDefaultSourceFields } from './create_query'; + +describe('create_query', () => { + describe('createQuery', () => { + it('should return a query', () => { + const fields = { + index1: ['field1'], + }; + + const fieldDescriptors: IndicesQuerySourceFields = { + index1: { + elser_query_fields: [{ field: 'field1', model_id: 'model1', nested: false }], + dense_vector_query_fields: [], + bm25_query_fields: [], + source_fields: [], + }, + }; + + expect(createQuery(fields, fieldDescriptors)).toEqual({ + query: { + bool: { + should: [ + { + text_expansion: { + field1: { + model_id: 'model1', + model_text: '{query}', + }, + }, + }, + ], + minimum_should_match: 1, + }, + }, + }); + }); + + it('should return a query from multiple ', () => { + const fields = { + index1: ['field1'], + index2: ['field1'], + }; + + const fieldDescriptors: IndicesQuerySourceFields = { + index1: { + elser_query_fields: [{ field: 'field1', model_id: 'model1', nested: false }], + dense_vector_query_fields: [], + bm25_query_fields: [], + source_fields: [], + }, + index2: { + elser_query_fields: [{ field: 'field1', model_id: 'model1', nested: false }], + dense_vector_query_fields: [], + bm25_query_fields: [], + source_fields: [], + }, + }; + + expect(createQuery(fields, fieldDescriptors)).toEqual({ + query: { + bool: { + should: [ + { + text_expansion: { + field1: { + model_id: 'model1', + model_text: '{query}', + }, + }, + }, + ], + minimum_should_match: 1, + }, + }, + }); + }); + + it('should return a query from multiple fields', () => { + const fields = { + index1: ['field1'], + index2: ['field2'], + }; + + const fieldDescriptors: IndicesQuerySourceFields = { + index1: { + elser_query_fields: [{ field: 'field1', model_id: 'model1', nested: false }], + dense_vector_query_fields: [], + bm25_query_fields: [], + source_fields: [], + }, + index2: { + elser_query_fields: [{ field: 'field2', model_id: 'model1', nested: false }], + dense_vector_query_fields: [], + bm25_query_fields: [], + source_fields: [], + }, + }; + + expect(createQuery(fields, fieldDescriptors)).toEqual({ + query: { + bool: { + should: [ + { + text_expansion: { + field1: { + model_id: 'model1', + model_text: '{query}', + }, + }, + }, + { + text_expansion: { + field2: { + model_id: 'model1', + model_text: '{query}', + }, + }, + }, + ], + minimum_should_match: 1, + }, + }, + }); + }); + + it('should return a hybrid query', () => { + const fields = { + index1: ['field1', 'content', 'title'], + index2: ['field2'], + }; + + const fieldDescriptors: IndicesQuerySourceFields = { + index1: { + elser_query_fields: [{ field: 'field1', model_id: 'model1', nested: false }], + dense_vector_query_fields: [], + bm25_query_fields: ['content', 'title'], + source_fields: [], + }, + index2: { + elser_query_fields: [{ field: 'field2', model_id: 'model1', nested: false }], + dense_vector_query_fields: [], + bm25_query_fields: [], + source_fields: [], + }, + }; + + expect(createQuery(fields, fieldDescriptors)).toEqual({ + query: { + bool: { + should: [ + { + text_expansion: { + field1: { + model_id: 'model1', + model_text: '{query}', + }, + }, + }, + { + multi_match: { + query: '{query}', + fields: ['content', 'title'], + }, + }, + { + text_expansion: { + field2: { + model_id: 'model1', + model_text: '{query}', + }, + }, + }, + ], + minimum_should_match: 1, + }, + }, + }); + }); + + it('dense vector only', () => { + const fields = { + index1: ['field1'], + }; + + const fieldDescriptors: IndicesQuerySourceFields = { + index1: { + elser_query_fields: [], + dense_vector_query_fields: [{ field: 'field1', model_id: 'model1', nested: false }], + bm25_query_fields: ['content', 'title'], + source_fields: [], + }, + index2: { + elser_query_fields: [{ field: 'field2', model_id: 'model1', nested: false }], + dense_vector_query_fields: [], + bm25_query_fields: [], + source_fields: [], + }, + }; + + expect(createQuery(fields, fieldDescriptors)).toEqual({ + knn: [ + { + field: 'field1', + k: 10, + num_candidates: 100, + query_vector_builder: { + text_embedding: { + model_id: 'model1', + model_text: '{query}', + }, + }, + }, + ], + }); + }); + + it('dense vector + bm25 only', () => { + const fields = { + index1: ['field1', 'title', 'content'], + }; + + const fieldDescriptors: IndicesQuerySourceFields = { + index1: { + elser_query_fields: [], + dense_vector_query_fields: [{ field: 'field1', model_id: 'model1', nested: false }], + bm25_query_fields: ['content', 'title'], + source_fields: [], + }, + }; + + expect(createQuery(fields, fieldDescriptors)).toEqual({ + query: { + bool: { + should: [ + { + multi_match: { + query: '{query}', + fields: ['title', 'content'], + }, + }, + ], + minimum_should_match: 1, + }, + }, + knn: [ + { + field: 'field1', + k: 10, + num_candidates: 100, + query_vector_builder: { + text_embedding: { + model_id: 'model1', + model_text: '{query}', + }, + }, + }, + ], + }); + }); + }); + + describe('getDefaultQueryFields', () => { + it('should return default ELSER query fields', () => { + const fieldDescriptors: IndicesQuerySourceFields = { + index1: { + elser_query_fields: [{ field: 'field1', model_id: 'model1', nested: false }], + dense_vector_query_fields: [{ field: 'field1', model_id: 'dense_model', nested: false }], + bm25_query_fields: [], + source_fields: [], + }, + }; + + expect(getDefaultQueryFields(fieldDescriptors)).toEqual({ index1: ['field1'] }); + }); + + it('should return default elser query fields for multiple indices', () => { + const fieldDescriptors: IndicesQuerySourceFields = { + index1: { + elser_query_fields: [{ field: 'field1', model_id: 'model1', nested: false }], + dense_vector_query_fields: [ + { field: 'dv_field1', model_id: 'dense_model', nested: false }, + ], + bm25_query_fields: [], + source_fields: [], + }, + index2: { + elser_query_fields: [{ field: 'vector', model_id: 'model1', nested: false }], + dense_vector_query_fields: [ + { field: 'dv_field1', model_id: 'dense_model', nested: false }, + ], + bm25_query_fields: [], + source_fields: [], + }, + }; + + expect(getDefaultQueryFields(fieldDescriptors)).toEqual({ + index1: ['field1'], + index2: ['vector'], + }); + }); + + it('should return elser query fields for default fields', () => { + const fieldDescriptors: IndicesQuerySourceFields = { + index1: { + elser_query_fields: [{ field: 'field1', model_id: 'model1', nested: false }], + dense_vector_query_fields: [ + { field: 'dv_field1', model_id: 'dense_model', nested: false }, + ], + bm25_query_fields: [], + source_fields: [], + }, + index2: { + elser_query_fields: [{ field: 'vector', model_id: 'model1', nested: false }], + dense_vector_query_fields: [ + { field: 'dv_field1', model_id: 'dense_model', nested: false }, + ], + bm25_query_fields: [], + source_fields: [], + }, + }; + + expect(getDefaultQueryFields(fieldDescriptors)).toEqual({ + index1: ['field1'], + index2: ['vector'], + }); + }); + + it('should fallback to dense vector fields for index', () => { + const fieldDescriptors: IndicesQuerySourceFields = { + index1: { + elser_query_fields: [], + dense_vector_query_fields: [ + { field: 'dv_field1', model_id: 'dense_model', nested: false }, + ], + bm25_query_fields: [], + source_fields: [], + }, + }; + + expect(getDefaultQueryFields(fieldDescriptors)).toEqual({ index1: ['dv_field1'] }); + }); + + it('should fallback to all BM25 fields in index, using suggested fields', () => { + const fieldDescriptors: IndicesQuerySourceFields = { + index1: { + elser_query_fields: [], + dense_vector_query_fields: [], + bm25_query_fields: ['title', 'text', 'content'], + source_fields: [], + }, + }; + + expect(getDefaultQueryFields(fieldDescriptors)).toEqual({ + index1: ['title', 'text', 'content'], + }); + }); + + it('should fallback to all BM25 fields in index, only using first unrecognised field', () => { + const fieldDescriptors: IndicesQuerySourceFields = { + index1: { + elser_query_fields: [], + dense_vector_query_fields: [], + bm25_query_fields: ['unknown1', 'unknown2'], + source_fields: [], + }, + }; + + expect(getDefaultQueryFields(fieldDescriptors)).toEqual({ + index1: ['unknown1'], + }); + }); + }); + + describe('getDefaultSourceFields', () => { + it('should return default source fields', () => { + const fieldDescriptors: IndicesQuerySourceFields = { + 'search-search-labs': { + elser_query_fields: [], + dense_vector_query_fields: [], + bm25_query_fields: [ + 'additional_urls', + 'title', + 'links', + 'id', + 'url_host', + 'url_path', + 'url_path_dir3', + 'body_content', + 'domains', + 'url', + 'url_scheme', + 'meta_description', + 'headings', + 'url_path_dir2', + 'url_path_dir1', + ], + source_fields: [ + 'additional_urls', + 'title', + 'links', + 'id', + 'url_host', + 'url_path', + 'url_path_dir3', + 'body_content', + 'domains', + 'url', + 'url_scheme', + 'meta_description', + 'headings', + 'url_path_dir2', + 'url_path_dir1', + ], + }, + }; + + expect(getDefaultSourceFields(fieldDescriptors)).toEqual({ + 'search-search-labs': ['body_content'], + }); + }); + }); +}); diff --git a/x-pack/plugins/search_playground/public/utils/create_query.ts b/x-pack/plugins/search_playground/public/utils/create_query.ts new file mode 100644 index 0000000000000..4649e9c9d6523 --- /dev/null +++ b/x-pack/plugins/search_playground/public/utils/create_query.ts @@ -0,0 +1,196 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { IndicesQuerySourceFields } from '../types'; + +type IndexFields = Record; + +// These fields are used to suggest the fields to use for the query +// If the field is not found in the suggested fields, +// we will use the first field for BM25 and all fields for vectors +const SUGGESTED_SPARSE_FIELDS = [ + 'vector.tokens', // LangChain field +]; + +const SUGGESTED_BM25_FIELDS = ['title', 'body_content', 'text', 'content']; + +const SUGGESTED_DENSE_VECTOR_FIELDS = ['content_vector.tokens']; + +const SUGGESTED_SOURCE_FIELDS = ['body_content', 'content', 'text']; + +interface Matches { + queryMatches: any[]; + knnMatches: any[]; +} + +export function createQuery(fields: IndexFields, fieldDescriptors: IndicesQuerySourceFields) { + const boolMatches = Object.keys(fields).reduce( + (acc, index) => { + const indexFields = fields[index]; + const indexFieldDescriptors = fieldDescriptors[index]; + + const sparseMatches = + indexFields.map((field) => { + const elserField = indexFieldDescriptors.elser_query_fields.find( + (x) => x.field === field + ); + + if (elserField) { + // when another index has the same field, we don't want to duplicate the match rule + const hasExistingSparseMatch = acc.queryMatches.find( + (x: any) => + x?.text_expansion?.[field] && + x?.text_expansion?.[field].model_id === elserField?.model_id + ); + + if (hasExistingSparseMatch) { + return null; + } + + return { + text_expansion: { + [elserField.field]: { + model_id: elserField.model_id, + model_text: '{query}', + }, + }, + }; + } + return null; + }) || []; + + const bm25Fields = indexFields.filter((field) => + indexFieldDescriptors.bm25_query_fields.includes(field) + ); + + const bm25Match = + bm25Fields.length > 0 + ? { + multi_match: { + query: '{query}', + fields: bm25Fields, + }, + } + : null; + + const knnMatches = indexFields + .map((field) => { + const denseVectorField = indexFieldDescriptors.dense_vector_query_fields.find( + (x) => x.field === field + ); + + if (denseVectorField) { + return { + field: denseVectorField.field, + k: 10, + num_candidates: 100, + query_vector_builder: { + text_embedding: { + model_id: denseVectorField.model_id, + model_text: '{query}', + }, + }, + }; + } + return null; + }) + .filter((x) => !!x); + + const matches = [...sparseMatches, bm25Match].filter((x) => !!x); + + return { + queryMatches: [...acc.queryMatches, ...matches], + knnMatches: [...acc.knnMatches, ...knnMatches], + }; + }, + { + queryMatches: [], + knnMatches: [], + } + ); + + return { + ...(boolMatches.queryMatches.length > 0 + ? { + query: { + bool: { + should: boolMatches.queryMatches, + minimum_should_match: 1, + }, + }, + } + : {}), + ...(boolMatches.knnMatches.length > 0 ? { knn: boolMatches.knnMatches } : {}), + }; +} + +export function getDefaultSourceFields(fieldDescriptors: IndicesQuerySourceFields): IndexFields { + const indexFields = Object.keys(fieldDescriptors).reduce( + (acc: IndexFields, index: string) => { + const indexFieldDescriptors = fieldDescriptors[index]; + + const suggested = indexFieldDescriptors.source_fields.filter((x) => + SUGGESTED_SOURCE_FIELDS.includes(x) + ); + + return { + ...acc, + [index]: suggested, + }; + }, + {} + ); + + return indexFields; +} + +export function getDefaultQueryFields(fieldDescriptors: IndicesQuerySourceFields): IndexFields { + const indexFields = Object.keys(fieldDescriptors).reduce( + (acc: IndexFields, index: string) => { + const indexFieldDescriptors = fieldDescriptors[index]; + const fields: string[] = []; + + if (indexFieldDescriptors.elser_query_fields.length > 0) { + const suggested = indexFieldDescriptors.elser_query_fields.filter((x) => + SUGGESTED_SPARSE_FIELDS.includes(x.field) + ); + if (suggested.length > 0) { + fields.push(...suggested.map((x) => x.field)); + } else { + fields.push(...indexFieldDescriptors.elser_query_fields.map((x) => x.field)); + } + } else if (indexFieldDescriptors.dense_vector_query_fields.length > 0) { + const suggested = indexFieldDescriptors.dense_vector_query_fields.filter((x) => + SUGGESTED_DENSE_VECTOR_FIELDS.includes(x.field) + ); + + if (suggested.length > 0) { + fields.push(...suggested.map((x) => x.field)); + } else { + fields.push(...indexFieldDescriptors.dense_vector_query_fields.map((x) => x.field)); + } + } else if (indexFieldDescriptors.bm25_query_fields.length > 0) { + const suggested = indexFieldDescriptors.bm25_query_fields.filter((x) => + SUGGESTED_BM25_FIELDS.includes(x) + ); + if (suggested.length > 0) { + fields.push(...suggested); + } else { + fields.push(indexFieldDescriptors.bm25_query_fields[0]); + } + } + + return { + ...acc, + [index]: fields, + }; + }, + {} + ); + + return indexFields; +} diff --git a/x-pack/plugins/search_playground/public/utils/stream.ts b/x-pack/plugins/search_playground/public/utils/stream.ts new file mode 100644 index 0000000000000..57146263d2653 --- /dev/null +++ b/x-pack/plugins/search_playground/public/utils/stream.ts @@ -0,0 +1,172 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { JSONValue } from '../types'; + +export interface StreamPart { + code: CODE; + name: NAME; + parse: (value: JSONValue) => { type: NAME; value: TYPE }; +} + +type StreamParts = + | typeof textStreamPart + | typeof errorStreamPart + | typeof messageAnnotationsStreamPart; +/** + * Maps the type of a stream part to its value type. + */ +type StreamPartValueType = { + [P in StreamParts as P['name']]: ReturnType['value']; +}; + +export type StreamPartType = + | ReturnType + | ReturnType + | ReturnType; + +const NEWLINE = '\n'.charCodeAt(0); + +const concatChunks = (chunks: Uint8Array[], totalLength: number) => { + const concatenatedChunks = new Uint8Array(totalLength); + + let offset = 0; + for (const chunk of chunks) { + concatenatedChunks.set(chunk, offset); + offset += chunk.length; + } + chunks.length = 0; + + return concatenatedChunks; +}; + +export async function* readDataStream( + reader: ReadableStreamDefaultReader, + { isAborted }: { isAborted?: () => boolean } = {} +): AsyncGenerator { + const decoder = new TextDecoder(); + const chunks: Uint8Array[] = []; + let totalLength = 0; + + while (true) { + const { value } = await reader.read(); + + if (value) { + chunks.push(value); + totalLength += value.length; + if (value[value.length - 1] !== NEWLINE) { + continue; + } + } + + if (chunks.length === 0) { + break; + } + + const concatenatedChunks = concatChunks(chunks, totalLength); + totalLength = 0; + + const streamParts = decoder + .decode(concatenatedChunks, { stream: true }) + .split('\n') + .filter((line) => line !== '') + .map(parseStreamPart); + + for (const streamPart of streamParts) { + yield streamPart; + } + + if (isAborted?.()) { + reader.cancel(); + break; + } + } +} + +const createStreamPart = ( + code: CODE, + name: NAME, + parse: (value: JSONValue) => { type: NAME; value: TYPE } +): StreamPart => { + return { + code, + name, + parse, + }; +}; + +const textStreamPart = createStreamPart('0', 'text', (value) => { + if (typeof value !== 'string') { + throw new Error('"text" parts expect a string value.'); + } + return { type: 'text', value }; +}); + +const errorStreamPart = createStreamPart('3', 'error', (value) => { + if (typeof value !== 'string') { + throw new Error('"error" parts expect a string value.'); + } + return { type: 'error', value }; +}); + +const messageAnnotationsStreamPart = createStreamPart('8', 'message_annotations', (value) => { + if (!Array.isArray(value)) { + throw new Error('"message_annotations" parts expect an array value.'); + } + + return { type: 'message_annotations', value }; +}); + +const streamParts = [textStreamPart, errorStreamPart, messageAnnotationsStreamPart] as const; + +type StreamPartMap = { + [P in StreamParts as P['code']]: P; +}; + +const streamPartsByCode: StreamPartMap = streamParts.reduce( + (acc, part) => ({ + ...acc, + [part.code]: part, + }), + {} as StreamPartMap +); + +const validCodes = streamParts.map((part) => part.code); + +export const parseStreamPart = (line: string): StreamPartType => { + const firstSeparatorIndex = line.indexOf(':'); + + if (firstSeparatorIndex === -1) { + throw new Error('Failed to parse stream string. No separator found.'); + } + + const prefix = line.slice(0, firstSeparatorIndex) as keyof StreamPartMap; + + if (!validCodes.includes(prefix)) { + throw new Error(`Failed to parse stream string. Invalid code ${prefix}.`); + } + + const code = prefix as keyof StreamPartMap; + + const textValue = line.slice(firstSeparatorIndex + 1); + const jsonValue: JSONValue = JSON.parse(textValue); + + return streamPartsByCode[code].parse(jsonValue); +}; + +export const formatStreamPart = ( + type: T, + value: StreamPartValueType[T] +): string => { + const streamPart = streamParts.find((part) => part.name === type); + + if (!streamPart) { + throw new Error(`Invalid stream part type: ${type as string}`); + } + + return `${streamPart.code}:${JSON.stringify(value)}\n`; +}; diff --git a/x-pack/plugins/search_playground/public/utils/transform_annotation_to_doc.ts b/x-pack/plugins/search_playground/public/utils/transform_annotation_to_doc.ts new file mode 100644 index 0000000000000..ae5fdeb989990 --- /dev/null +++ b/x-pack/plugins/search_playground/public/utils/transform_annotation_to_doc.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 { DocAnnotation, Doc } from '../types'; + +export const transformAnnotationToDoc = (docAnnotation: DocAnnotation): Doc => ({ + id: docAnnotation.metadata.id, + content: docAnnotation.pageContent, +}); diff --git a/x-pack/plugins/search_playground/public/utils/transform_to_messages.ts b/x-pack/plugins/search_playground/public/utils/transform_to_messages.ts new file mode 100644 index 0000000000000..76c7fb76fa5c4 --- /dev/null +++ b/x-pack/plugins/search_playground/public/utils/transform_to_messages.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { AIMessage, Message, MessageRole, UseChatHelpers } from '../types'; +import { transformAnnotationToDoc } from './transform_annotation_to_doc'; + +export const transformFromChatMessages = (messages: UseChatHelpers['messages']): Message[] => + messages.map(({ id, content, createdAt, role, annotations }) => { + const commonMessageProp = { + id, + content, + createdAt, + role: role === MessageRole.assistant ? MessageRole.assistant : MessageRole.user, + }; + + if (role === MessageRole.assistant) { + return { + ...commonMessageProp, + citations: Array.isArray(annotations) + ? annotations + .find((annotation) => annotation.type === 'citations') + ?.documents?.map(transformAnnotationToDoc) + : [], + retrievalDocs: Array.isArray(annotations) + ? annotations + .find((annotation) => annotation.type === 'retrieved_docs') + ?.documents?.map(transformAnnotationToDoc) + : [], + } as AIMessage; + } + + return commonMessageProp; + }); diff --git a/x-pack/plugins/search_playground/server/index.ts b/x-pack/plugins/search_playground/server/index.ts new file mode 100644 index 0000000000000..b47f80abe4854 --- /dev/null +++ b/x-pack/plugins/search_playground/server/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 { PluginInitializerContext } from '@kbn/core/server'; + +export async function plugin(initializerContext: PluginInitializerContext) { + const { SearchPlaygroundPlugin } = await import('./plugin'); + return new SearchPlaygroundPlugin(initializerContext); +} + +export type { SearchPlaygroundPluginSetup, SearchPlaygroundPluginStart } from './types'; diff --git a/x-pack/plugins/search_playground/server/plugin.ts b/x-pack/plugins/search_playground/server/plugin.ts new file mode 100644 index 0000000000000..3bdcff27a817e --- /dev/null +++ b/x-pack/plugins/search_playground/server/plugin.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { PluginInitializerContext, CoreSetup, CoreStart, Plugin, Logger } from '@kbn/core/server'; + +import { SearchPlaygroundPluginSetup, SearchPlaygroundPluginStart } from './types'; +import { defineRoutes } from './routes'; + +export class SearchPlaygroundPlugin + implements Plugin +{ + private readonly logger: Logger; + + constructor(initializerContext: PluginInitializerContext) { + this.logger = initializerContext.logger.get(); + } + + public setup(core: CoreSetup) { + this.logger.debug('searchPlayground: Setup'); + const router = core.http.createRouter(); + + defineRoutes({ router, log: this.logger }); + + return {}; + } + + public start(core: CoreStart) { + return {}; + } + + public stop() {} +} diff --git a/x-pack/plugins/search_playground/server/routes.ts b/x-pack/plugins/search_playground/server/routes.ts new file mode 100644 index 0000000000000..5f8fcd836fd0e --- /dev/null +++ b/x-pack/plugins/search_playground/server/routes.ts @@ -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 { schema } from '@kbn/config-schema'; +import { ChatOpenAI } from '@langchain/openai'; +import { streamFactory } from '@kbn/ml-response-stream/server'; +import { Logger } from '@kbn/logging'; +import { IRouter } from '@kbn/core/server'; +import { fetchFields } from './utils/fetch_query_source_fields'; +import { AssistClientOptionsWithClient, createAssist as Assist } from './utils/assist'; +import { ConversationalChain } from './utils/conversational_chain'; +import { Prompt } from './utils/prompt'; +import { errorHandler } from './utils/error_handler'; +import { APIRoutes } from './types'; + +export function defineRoutes({ log, router }: { log: Logger; router: IRouter }) { + router.post( + { + path: APIRoutes.POST_QUERY_SOURCE_FIELDS, + validate: { + body: schema.object({ + indices: schema.arrayOf(schema.string()), + }), + }, + }, + errorHandler(async (context, request, response) => { + const { client } = (await context.core).elasticsearch; + + const { indices } = request.body; + + const fields = await fetchFields(client, indices); + + return response.ok({ + body: fields, + }); + }) + ); + + router.post( + { + path: APIRoutes.POST_CHAT_MESSAGE, + validate: { + body: schema.object({ + data: schema.any(), + messages: schema.any(), + }), + }, + }, + errorHandler(async (context, request, response) => { + const { client } = (await context.core).elasticsearch; + + const aiClient = Assist({ + es_client: client.asCurrentUser, + } as AssistClientOptionsWithClient); + + const { messages, data } = await request.body; + + const model = new ChatOpenAI({ + openAIApiKey: data.api_key, + }); + + const chain = ConversationalChain({ + model, + rag: { + index: data.indices, + retriever: (question: string) => { + try { + const query = JSON.parse(data.elasticsearchQuery.replace(/{query}/g, question)); + return query.query; + } catch (e) { + log.error('Failed to parse the Elasticsearch query', e); + } + }, + }, + prompt: Prompt(data.prompt, { + citations: data.citations, + context: true, + type: 'openai', + }), + }); + + const stream = await chain.stream(aiClient, messages); + + const { end, push, responseWithHeaders } = streamFactory(request.headers, log); + + const reader = (stream as ReadableStream).getReader(); + const textDecoder = new TextDecoder(); + + async function pushStreamUpdate() { + reader.read().then(({ done, value }: { done: boolean; value?: Uint8Array }) => { + if (done) { + end(); + return; + } + push(textDecoder.decode(value)); + pushStreamUpdate(); + }); + } + + pushStreamUpdate(); + + return response.ok(responseWithHeaders); + }) + ); + + router.post( + { + path: APIRoutes.POST_API_KEY, + validate: { + body: schema.object({ + name: schema.string(), + expiresInDays: schema.number(), + indices: schema.arrayOf(schema.string()), + }), + }, + }, + errorHandler(async (context, request, response) => { + const { name, expiresInDays, indices } = request.body; + const { client } = (await context.core).elasticsearch; + + const apiKey = await client.asCurrentUser.security.createApiKey({ + name, + expiration: `${expiresInDays}d`, + role_descriptors: { + [`playground-${name}-role`]: { + cluster: [], + indices: [ + { + names: indices, + privileges: ['read'], + }, + ], + }, + }, + }); + + return response.ok({ + body: { apiKey }, + headers: { 'content-type': 'application/json' }, + }); + }) + ); +} diff --git a/x-pack/plugins/search_playground/server/types.ts b/x-pack/plugins/search_playground/server/types.ts new file mode 100644 index 0000000000000..bf28b884df0b1 --- /dev/null +++ b/x-pack/plugins/search_playground/server/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. + */ + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchPlaygroundPluginSetup {} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchPlaygroundPluginStart {} + +export * from '../common/types'; diff --git a/x-pack/plugins/search_playground/server/utils/assist.ts b/x-pack/plugins/search_playground/server/utils/assist.ts new file mode 100644 index 0000000000000..82847394ea4e9 --- /dev/null +++ b/x-pack/plugins/search_playground/server/utils/assist.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Client as ElasticsearchClient } from '@elastic/elasticsearch'; + +export interface AssistClientOptionsWithCreds { + cloud_id: string; + api_key: string; +} +export interface AssistClientOptionsWithClient { + es_client: ElasticsearchClient; +} + +export type AssistOptions = AssistClientOptionsWithCreds | AssistClientOptionsWithClient; + +export class AssistClient { + private options: AssistOptions; + protected client: ElasticsearchClient; + + constructor(options: AssistOptions) { + this.options = options as AssistClientOptionsWithCreds; + if ('es_client' in options) { + this.client = (options as AssistClientOptionsWithClient).es_client; + } else { + this.client = new ElasticsearchClient({ + cloud: { + id: this.options.cloud_id, + }, + auth: { + apiKey: this.options.api_key, + }, + }); + } + } + + getClient() { + return this.client; + } +} + +export function createAssist(options: AssistOptions) { + return new AssistClient(options); +} diff --git a/x-pack/plugins/search_playground/server/utils/conversational_chain.ts b/x-pack/plugins/search_playground/server/utils/conversational_chain.ts new file mode 100644 index 0000000000000..c4f5bc353a08b --- /dev/null +++ b/x-pack/plugins/search_playground/server/utils/conversational_chain.ts @@ -0,0 +1,179 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { Document } from '@langchain/core/documents'; +import { BaseChatModel } from '@langchain/core/language_models/chat_models'; +import { ChatPromptTemplate, PromptTemplate } from '@langchain/core/prompts'; +import { Runnable, RunnableLambda, RunnableSequence } from '@langchain/core/runnables'; +import { BytesOutputParser, StringOutputParser } from '@langchain/core/output_parsers'; +import { + createStreamDataTransformer, + experimental_StreamData, + Message as VercelChatMessage, +} from 'ai'; +import { ElasticsearchRetriever } from './elasticsearch_retriever'; +import { renderTemplate } from './render_template'; + +import { AssistClient } from './assist'; +import { getCitations } from './get_citations'; + +interface RAGOptions { + index: string; + retriever: (question: string) => object; + doc_context?: string; + hit_doc_mapper?: (hit: SearchHit) => Document; + content_field?: string; +} + +interface ConversationalChainOptions { + model: BaseChatModel; + prompt: string; + rag?: RAGOptions; +} + +const CONDENSE_QUESTION_TEMPLATE = `Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language. Be verbose in your answer. + +Chat History: +{chat_history} + +Follow Up Input: {question} +Standalone question:`; + +const condenseQuestionPrompt = PromptTemplate.fromTemplate(CONDENSE_QUESTION_TEMPLATE); + +const formatVercelMessages = (chatHistory: VercelChatMessage[]) => { + const formattedDialogueTurns = chatHistory.map((message) => { + if (message.role === 'user') { + return `Human: ${message.content}`; + } else if (message.role === 'assistant') { + return `Assistant: ${message.content}`; + } else { + return `${message.role}: ${message.content}`; + } + }); + return formattedDialogueTurns.join('\n'); +}; + +class ConversationalChainFn { + options: ConversationalChainOptions; + + constructor(options: ConversationalChainOptions) { + this.options = options; + } + + async stream(client: AssistClient, msgs: VercelChatMessage[]) { + const data = new experimental_StreamData(); + + const messages = msgs ?? []; + const previousMessages = messages.slice(0, -1); + const question = messages[messages.length - 1]!.content; + const retrievedDocs: Document[] = []; + + let retrievalChain: Runnable = RunnableLambda.from((input) => ''); + + if (this.options.rag) { + const retriever = new ElasticsearchRetriever({ + retriever: this.options.rag.retriever, + index: this.options.rag.index, + client: client.getClient(), + content_field: this.options.rag.content_field ?? 'text', + hit_doc_mapper: this.options.rag.hit_doc_mapper ?? undefined, + k: 3, + }); + + const buildContext = (docs: Document[]) => { + const template = this.options.rag?.doc_context ?? `{pageContent}`; + + const serializedDocs = docs.map((doc, i) => + renderTemplate( + ` + position: ${i + 1} + ${template}`, + { + pageContent: doc.pageContent, + ...doc.metadata, + } + ) + ); + return serializedDocs.join('\n'); + }; + + retrievalChain = retriever.pipe(buildContext); + } + + const standaloneQuestionChain = RunnableSequence.from([ + condenseQuestionPrompt, + this.options.model, + new StringOutputParser(), + ]); + + const prompt = ChatPromptTemplate.fromTemplate(this.options.prompt); + + const answerChain = RunnableSequence.from([ + { + context: RunnableSequence.from([(input) => input.question, retrievalChain]), + chat_history: (input) => input.chat_history, + question: (input) => input.question, + }, + prompt, + this.options.model, + ]); + + const conversationalRetrievalQAChain = RunnableSequence.from([ + { + question: standaloneQuestionChain, + chat_history: (input) => input.chat_history, + }, + answerChain, + new BytesOutputParser(), + ]); + + const stream = await conversationalRetrievalQAChain.stream( + { + question, + chat_history: formatVercelMessages(previousMessages), + }, + { + callbacks: [ + { + handleRetrieverEnd(documents) { + retrievedDocs.push(...documents); + data.appendMessageAnnotation({ + type: 'retrieved_docs', + documents: documents as any, + }); + }, + handleChainEnd(outputs, runId, parentRunId) { + if (outputs?.constructor?.name === 'AIMessageChunk') { + data.appendMessageAnnotation({ + type: 'citations', + documents: getCitations( + outputs.content as string, + 'inline', + retrievedDocs + ) as any, + }); + } + + // check that main chain (without parent) is finished: + if (parentRunId == null) { + data.close(); + } + }, + }, + ], + } + ); + + return stream.pipeThrough(createStreamDataTransformer(true)).pipeThrough(data.stream); + } +} + +export function ConversationalChain(options: ConversationalChainOptions): ConversationalChainFn { + return new ConversationalChainFn(options); +} diff --git a/x-pack/plugins/search_playground/server/utils/elasticsearch_retriever.ts b/x-pack/plugins/search_playground/server/utils/elasticsearch_retriever.ts new file mode 100644 index 0000000000000..78e23c677e53d --- /dev/null +++ b/x-pack/plugins/search_playground/server/utils/elasticsearch_retriever.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 { BaseRetriever, type BaseRetrieverInput } from '@langchain/core/retrievers'; +import { Document } from '@langchain/core/documents'; +import { Client } from '@elastic/elasticsearch'; +import { SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +export interface ElasticsearchRetrieverInput extends BaseRetrieverInput { + /** + * The body of the query to send to Elasticsearch + */ + retriever: (query: string) => object; + /** + * The name of the field the content resides in + */ + content_field: string | ((hit: SearchHit) => Document); + + index: string; + + client: Client; + + k: number; + + hit_doc_mapper?: HitDocMapper; +} + +type HitDocMapper = (hit: SearchHit) => Document; + +export class ElasticsearchRetriever extends BaseRetriever { + static lc_name() { + return 'ElasticsearchRetriever'; + } + + lc_namespace = ['langchain', 'retrievers', 'elasticsearch']; + + query_body_fn: (query: string) => object; + + index: string; + + content_field: string | ((hit: SearchHit) => Document); + + hit_doc_mapper?: HitDocMapper; + + k: number; + + client: Client; + + constructor(params: ElasticsearchRetrieverInput) { + super(params); + this.content_field = params.content_field; + this.query_body_fn = params.retriever; + this.content_field = params.content_field; + + this.index = params.index; + this.k = params.k; + this.client = params.client; + } + + async _getRelevantDocuments(query: string): Promise { + try { + const results = await this.client.search({ + index: this.index, + query: this.query_body_fn(query), + size: this.k, + }); + + const hits = results.hits.hits; + + let mapper: HitDocMapper = (hit: SearchHit) => { + return new Document({ + pageContent: hit._source[this.content_field as string], + metadata: { + score: hit._score, + id: hit._id, + }, + }); + }; + + if (this.hit_doc_mapper) { + mapper = this.hit_doc_mapper; + } + + const documents = hits.map(mapper); + + return documents; + } catch (error) { + throw error; + } + } +} diff --git a/x-pack/plugins/search_playground/server/utils/error_handler.ts b/x-pack/plugins/search_playground/server/utils/error_handler.ts new file mode 100644 index 0000000000000..fd668b56a02ed --- /dev/null +++ b/x-pack/plugins/search_playground/server/utils/error_handler.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 { RequestHandlerWrapper } from '@kbn/core-http-server'; + +export const errorHandler: RequestHandlerWrapper = (handler) => { + return async (context, request, response) => { + try { + return await handler(context, request, response); + } catch (e) { + throw e; + } + }; +}; diff --git a/x-pack/plugins/search_playground/server/utils/fetch_query_source_fields.test.ts b/x-pack/plugins/search_playground/server/utils/fetch_query_source_fields.test.ts new file mode 100644 index 0000000000000..e4217637cb8cc --- /dev/null +++ b/x-pack/plugins/search_playground/server/utils/fetch_query_source_fields.test.ts @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + ELSER_PASSAGE_CHUNKED_TWO_INDICES, + ELSER_PASSAGE_CHUNKED_TWO_INDICES_DOCS, +} from '../../__mocks__/fetch_query_source_fields.mock'; +import { parseFieldsCapabilities } from './fetch_query_source_fields'; + +describe('fetch_query_source_fields', () => { + describe('parseFieldsCapabilities', () => { + it("should return the correct fields for the index 'workplace_index'", () => { + expect( + parseFieldsCapabilities(ELSER_PASSAGE_CHUNKED_TWO_INDICES, [ + { + index: 'workplace_index', + doc: ELSER_PASSAGE_CHUNKED_TWO_INDICES_DOCS[0], + }, + { + index: 'workplace_index2', + doc: ELSER_PASSAGE_CHUNKED_TWO_INDICES_DOCS[1], + }, + ]) + ).toEqual({ + workplace_index: { + elser_query_fields: [ + { + field: 'vector.tokens', + model_id: '.elser_model_2', + nested: false, + }, + ], + dense_vector_query_fields: [], + bm25_query_fields: [ + 'metadata.summary', + 'vector.model_id', + 'metadata.rolePermissions', + 'text', + 'metadata.name', + ], + source_fields: [ + 'metadata.summary', + 'vector.model_id', + 'metadata.rolePermissions', + 'text', + 'metadata.name', + ], + }, + workplace_index2: { + elser_query_fields: [ + { + field: 'content_vector.tokens', + model_id: '.elser_model_2', + nested: false, + }, + ], + dense_vector_query_fields: [], + bm25_query_fields: [ + 'metadata.summary', + 'content', + 'metadata.rolePermissions', + 'content_vector.model_id', + 'metadata.name', + ], + source_fields: [ + 'metadata.summary', + 'content', + 'metadata.rolePermissions', + 'content_vector.model_id', + 'metadata.name', + ], + }, + }); + }); + }); +}); diff --git a/x-pack/plugins/search_playground/server/utils/fetch_query_source_fields.ts b/x-pack/plugins/search_playground/server/utils/fetch_query_source_fields.ts new file mode 100644 index 0000000000000..c751e8bfd361f --- /dev/null +++ b/x-pack/plugins/search_playground/server/utils/fetch_query_source_fields.ts @@ -0,0 +1,106 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FieldCapsResponse, SearchHit } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; +import { get } from 'lodash'; +import { IndicesQuerySourceFields } from '../types'; + +export const fetchFields = async ( + client: IScopedClusterClient, + indices: string[] +): Promise => { + const fieldCapabilities = await client.asCurrentUser.fieldCaps({ + fields: '*', + filters: '-metadata', + include_unmapped: true, + index: indices, + }); + + const indexDocs = []; + + for (const index of indices) { + const x = await client.asCurrentUser.search({ + index, + body: { + query: { + match_all: {}, + }, + size: 1, + }, + }); + + if (x.hits.total !== 0) { + indexDocs.push({ + index, + doc: x.hits.hits[0], + }); + } + } + + return parseFieldsCapabilities(fieldCapabilities, indexDocs); +}; + +const getModelField = (field: string, indexDoc: any) => { + return get(indexDoc.doc, `_source.${[field.replace('.tokens', '.model_id')]}`); +}; + +export const parseFieldsCapabilities = ( + fieldCapsResponse: FieldCapsResponse, + indexDocs: Array<{ index: string; doc: SearchHit }> +): IndicesQuerySourceFields => { + const { fields, indices: indexOrIndices } = fieldCapsResponse; + const indices = Array.isArray(indexOrIndices) ? indexOrIndices : [indexOrIndices]; + + const indicesFieldsMap = indices.reduce((acc, index) => { + acc[index] = { + elser_query_fields: [], + dense_vector_query_fields: [], + bm25_query_fields: [], + source_fields: [], + }; + return acc; + }, {}); + + const querySourceFields = Object.keys(fields).reduce( + (acc: IndicesQuerySourceFields, fieldKey) => { + const field = fields[fieldKey]; + // if the field is present in all indices, the indices property is not present + const indicesPresentIn: string[] = + 'unmapped' in field + ? indices.filter((index) => !field.unmapped.indices!.includes(index)) + : (indices as unknown as string[]); + + for (const index of indicesPresentIn) { + const indexDoc = indexDocs.find((x) => x.index === index); + if ('rank_features' in field) { + const elserModelField = { + field: fieldKey, + model_id: getModelField(fieldKey, indexDoc), + nested: false, + }; + acc[index].elser_query_fields.push(elserModelField); + } else if ('dense_vector' in field) { + const denseVectorField = { + field: fieldKey, + model_id: getModelField(fieldKey, indexDoc), + nested: false, + }; + acc[index].dense_vector_query_fields.push(denseVectorField); + } else if ('text' in field && field.text.searchable) { + acc[index].bm25_query_fields.push(fieldKey); + acc[index].source_fields.push(fieldKey); + } + } + + return acc; + }, + indicesFieldsMap + ); + + return querySourceFields; +}; diff --git a/x-pack/plugins/search_playground/server/utils/get_citations.test.ts b/x-pack/plugins/search_playground/server/utils/get_citations.test.ts new file mode 100644 index 0000000000000..71269d7f4ba63 --- /dev/null +++ b/x-pack/plugins/search_playground/server/utils/get_citations.test.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 { Document } from '@langchain/core/documents'; +import { getCitations } from './get_citations'; + +describe('getCitations', () => { + test('should enrich citations', () => { + const answer = [ + 'NASA stands for North America South America region.', + 'It is a region within the sales organization that includes the United States, Canada, Mexico, as well as Central and South America.', + 'It is divided into two areas, North America and South America, each of which is led by an Area Vice-President. Laura Martinez is the', + 'Area Vice-President of North America, and Gary Johnson is the Area Vice-President of South America [1].', + ].join(' '); + + const docs: Document[] = [ + { + pageContent: 'snippet 1', + metadata: { + id: 'test-doc', + }, + }, + { + pageContent: 'snippet 2', + metadata: { + id: 'test2-doc', + }, + }, + ]; + + expect(getCitations(answer, 'inline', docs)).toEqual([ + { + pageContent: 'snippet 1', + metadata: { + id: 'test-doc', + }, + }, + ]); + }); +}); diff --git a/x-pack/plugins/search_playground/server/utils/get_citations.ts b/x-pack/plugins/search_playground/server/utils/get_citations.ts new file mode 100644 index 0000000000000..c8fd5281f4a47 --- /dev/null +++ b/x-pack/plugins/search_playground/server/utils/get_citations.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Document } from '@langchain/core/documents'; + +export function getCitations( + answer: string, + citationStyle: 'inline' | 'footnote', + docs: Document[] +) { + const gatheredCitations = answer.match(/\[\d+\]/g); + if (!gatheredCitations) return []; + + return docs.filter((doc, i) => { + return gatheredCitations.some((citation) => { + return i + 1 === parseInt(citation.slice(1, -1), 10); + }); + }); +} diff --git a/x-pack/plugins/search_playground/server/utils/prompt.ts b/x-pack/plugins/search_playground/server/utils/prompt.ts new file mode 100644 index 0000000000000..764f95732f9cc --- /dev/null +++ b/x-pack/plugins/search_playground/server/utils/prompt.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. + */ + +const OpenAIPrompt = (systemInstructions: string) => { + return ` + Instructions: + ${systemInstructions} + + Context: + {context} + + Question: {question} + Answer: + `; +}; + +const MistralPrompt = (systemInstructions: string) => { + return ` + [INST]${systemInstructions}[/INST] + + [INST] + Context: + {context} + + Question: {question} + Answer: + [/INST] + `; +}; + +interface PromptTemplateOptions { + citations?: boolean; + context?: boolean; + type?: 'openai' | 'mistral'; +} + +export const Prompt = (instructions: string, options: PromptTemplateOptions) => { + const systemInstructions = ` + - ${instructions} + ${ + options.context + ? '- Answer questions truthfully and factually using only the information presented.' + : '' + } + - If you don't know the answer, just say that you don't know, don't make up an answer! + ${ + options.citations + ? '- You must always cite the document where the answer was extracted using inline academic citation style [], using the position.' + : '' + } + - Use markdown format for code examples. + - You are correct, factual, precise, and reliable. + `; + + return { + openai: OpenAIPrompt, + mistral: MistralPrompt, + }[options.type || 'openai'](systemInstructions); +}; diff --git a/x-pack/plugins/search_playground/server/utils/render_template.ts b/x-pack/plugins/search_playground/server/utils/render_template.ts new file mode 100644 index 0000000000000..61b2b7c39decf --- /dev/null +++ b/x-pack/plugins/search_playground/server/utils/render_template.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderTemplate as lcRenderTemplate } from '@langchain/core/prompts'; + +export function renderTemplate(template: string, inputValues: Record) { + return lcRenderTemplate(template, 'f-string', inputValues); +} diff --git a/x-pack/plugins/search_playground/tsconfig.json b/x-pack/plugins/search_playground/tsconfig.json new file mode 100644 index 0000000000000..4373613fc2d7b --- /dev/null +++ b/x-pack/plugins/search_playground/tsconfig.json @@ -0,0 +1,34 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + }, + "include": [ + "__mocks__/**/*", + "common/**/*", + "public/**/*", + "server/**/*", + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/core", + "@kbn/core-elasticsearch-server", + "@kbn/core-http-browser", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/kibana-react-plugin", + "@kbn/logging", + "@kbn/ml-response-stream", + "@kbn/security-plugin", + "@kbn/user-profile-components", + "@kbn/react-kibana-context-theme", + "@kbn/shared-ux-router", + "@kbn/shared-ux-page-kibana-template", + "@kbn/navigation-plugin", + "@kbn/core-http-server", + "@kbn/share-plugin" + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/yarn.lock b/yarn.lock index 53ff07f181e2b..dfb4200eba94a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5775,6 +5775,10 @@ version "0.0.0" uid "" +"@kbn/search-playground@link:x-pack/plugins/search_playground": + version "0.0.0" + uid "" + "@kbn/search-response-warnings@link:packages/kbn-search-response-warnings": version "0.0.0" uid "" @@ -6639,6 +6643,57 @@ resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919" integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== +"@langchain/community@^0.0.20": + version "0.0.20" + resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.0.20.tgz#a64307e959545fa0b4ed6b67d5aba3437cd76879" + integrity sha512-maPMjvF50Z+4eMs7HKmY3wfT+k6IjULqLUVPtVdN1zSGobRvnUIbQMKUY2IXVTZmaMXKBAIob+49X8vjO2snDQ== + dependencies: + "@langchain/core" "~0.1.16" + "@langchain/openai" "~0.0.10" + flat "^5.0.2" + langsmith "~0.0.48" + uuid "^9.0.0" + zod "^3.22.3" + +"@langchain/core@^0.1.45", "@langchain/core@~0.1.13", "@langchain/core@~0.1.16", "@langchain/core@~0.1.41": + version "0.1.45" + resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.1.45.tgz#8acb3d85ca868489cb2d047da981f17b0b246f3e" + integrity sha512-3kjaScJwwUu1so3o4Lvr+tNKIGP/+dORZ4avZYve5qRtIiegRG7J3W66d//Gcgs5UwwfVgadj5ELGvWWUym8TA== + dependencies: + ansi-styles "^5.0.0" + camelcase "6" + decamelize "1.2.0" + js-tiktoken "^1.0.8" + langsmith "~0.1.7" + ml-distance "^4.0.0" + p-queue "^6.6.2" + p-retry "4" + uuid "^9.0.0" + zod "^3.22.4" + zod-to-json-schema "^3.22.3" + +"@langchain/openai@^0.0.12": + version "0.0.12" + resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.12.tgz#4c6a4dda3ca96f103482f389299e018340aa2b75" + integrity sha512-MR9x1xRXwJpdYlVx9Tga89q/MvxPrSTYyA5vy9tQ8dfQHNWnlgmI4gB/hDIsWUu1ooScagD4wW+aTnohTX+g+g== + dependencies: + "@langchain/core" "~0.1.13" + js-tiktoken "^1.0.7" + openai "^4.24.2" + zod "^3.22.3" + zod-to-json-schema "3.20.3" + +"@langchain/openai@~0.0.10": + version "0.0.16" + resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.16.tgz#f3a75ef8b5e2e2fcc3adcad66f5defa13e8eb4a1" + integrity sha512-GUEeyQ4/pwqr60sPwadrlN5DLe8a3sOhF3ZC96bJTqt9P6rmBQTxwYSHysmsRL/VN9k79+CsqTQ1krrwbocDmQ== + dependencies: + "@langchain/core" "~0.1.41" + js-tiktoken "^1.0.7" + openai "^4.26.0" + zod "^3.22.4" + zod-to-json-schema "^3.22.3" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" @@ -11224,6 +11279,19 @@ aggregate-error@^3.0.0, aggregate-error@^3.1.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ai@^2.2.33: + version "2.2.37" + resolved "https://registry.yarnpkg.com/ai/-/ai-2.2.37.tgz#49bae60229937bde351d72d3ff721ccb8060edb2" + integrity sha512-JIYm5N1muGVqBqWnvkt29FmXhESoO5TcDxw74OE41SsM+uIou6NPDDs0XWb/ABcd1gmp6k5zym64KWMPM2xm0A== + dependencies: + eventsource-parser "1.0.0" + nanoid "3.3.6" + solid-swr-store "0.10.7" + sswr "2.0.0" + swr "2.2.0" + swr-store "0.10.6" + swrv "1.0.4" + airbnb-js-shims@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz#db481102d682b98ed1daa4c5baa697a05ce5c040" @@ -13424,6 +13492,11 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +client-only@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + cliui@^3.0.3: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -14812,7 +14885,7 @@ decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@1.2.0, decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -16593,6 +16666,11 @@ events@^3.0.0, events@^3.2.0, events@^3.3.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== +eventsource-parser@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-1.0.0.tgz#6332e37fd5512e3c8d9df05773b2bf9e152ccc04" + integrity sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g== + eventsource-parser@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-1.1.1.tgz#576f8bcf391c5e5ccdea817abd9ead36d1754247" @@ -20611,10 +20689,10 @@ js-string-escape@^1.0.1: resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= -js-tiktoken@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.7.tgz#56933fcd2093e8304060dfde3071bda91812e6f5" - integrity sha512-biba8u/clw7iesNEWLOLwrNGoBP2lA+hTaBLs/D45pJdUPFXyxD6nhcDVtADChghv4GgyAiMKYMiRx7x6h7Biw== +js-tiktoken@^1.0.7, js-tiktoken@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.10.tgz#2b343ec169399dcee8f9ef9807dbd4fafd3b30dc" + integrity sha512-ZoSxbGjvGyMT13x6ACo9ebhDha/0FHdKA+OsQcMOWcm1Zs7r90Rhk5lhERLzji+3rA7EKpXCgwXcM5fF3DMpdA== dependencies: base64-js "^1.5.1" @@ -21044,6 +21122,17 @@ langsmith@^0.0.48, langsmith@~0.0.48: p-retry "4" uuid "^9.0.0" +langsmith@~0.1.7: + version "0.1.13" + resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.13.tgz#cdaa653c1300c7277c46ecdbd6d416bde9c95f6d" + integrity sha512-iyGrsaWhZ70F1aG8T8Nd4iH33Z0JFMdxbfBbaRV/+LkJDH4PByZHNJbApT6G2pQmmYD0cei9oW7kXp89N5SXXQ== + dependencies: + "@types/uuid" "^9.0.1" + commander "^10.0.1" + p-queue "^6.6.2" + p-retry "4" + uuid "^9.0.0" + language-subtag-registry@~0.3.2: version "0.3.21" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" @@ -22894,11 +22983,16 @@ nanoid@3.3.3: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== -nanoid@^3.3.1, nanoid@^3.3.6: +nanoid@3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +nanoid@^3.3.1, nanoid@^3.3.6: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + nanomatch@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" @@ -23651,10 +23745,10 @@ open@^8.0.9, open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -openai@^4.17.0, openai@^4.24.1: - version "4.24.1" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.24.1.tgz#3759001eca835228289fcf18c1bd8d35dae538ba" - integrity sha512-ezm/O3eiZMnyBqirUnWm9N6INJU1WhNtz+nK/Zj/2oyKvRz9pgpViDxa5wYOtyGYXPn1sIKBV0I/S4BDhtydqw== +openai@^4.17.0, openai@^4.24.1, openai@^4.24.2, openai@^4.26.0: + version "4.28.4" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.28.4.tgz#d4bf1f53a89ef151bf066ef284489e12e7dd1657" + integrity sha512-RNIwx4MT/F0zyizGcwS+bXKLzJ8QE9IOyigDG/ttnwB220d58bYjYFp0qjvGwEFBO6+pvFVIDABZPGDl46RFsg== dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4" @@ -27904,6 +27998,11 @@ socks@^2.7.1: ip-address "^9.0.5" smart-buffer "^4.2.0" +solid-swr-store@0.10.7: + version "0.10.7" + resolved "https://registry.yarnpkg.com/solid-swr-store/-/solid-swr-store-0.10.7.tgz#9511308f01250a1509efbfaad5b481be7517e436" + integrity sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g== + sonic-boom@^1.0.2: version "1.3.0" resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.3.0.tgz#5c77c846ce6c395dddf2eb8e8e65f9cc576f2e76" @@ -28243,6 +28342,13 @@ ssri@^8.0.1: dependencies: minipass "^3.1.1" +sswr@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sswr/-/sswr-2.0.0.tgz#db5e1f7c44addb8316de8e7efe23b7ea2cba090d" + integrity sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w== + dependencies: + swrev "^4.0.0" + stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -28917,6 +29023,38 @@ swagger2openapi@^7.0.6: yaml "^1.10.0" yargs "^17.0.1" +swr-store@0.10.6: + version "0.10.6" + resolved "https://registry.yarnpkg.com/swr-store/-/swr-store-0.10.6.tgz#1856bda886e87dbed40c8c9874c1b1624d2e502d" + integrity sha512-xPjB1hARSiRaNNlUQvWSVrG5SirCjk2TmaUyzzvk69SZQan9hCJqw/5rG9iL7xElHU784GxRPISClq4488/XVw== + dependencies: + dequal "^2.0.3" + +swr@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/swr/-/swr-2.2.0.tgz#575c6ac1bec087847f4c86a39ccbc0043c834d6a" + integrity sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ== + dependencies: + use-sync-external-store "^1.2.0" + +swr@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/swr/-/swr-2.2.5.tgz#063eea0e9939f947227d5ca760cc53696f46446b" + integrity sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg== + dependencies: + client-only "^0.0.1" + use-sync-external-store "^1.2.0" + +swrev@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/swrev/-/swrev-4.0.0.tgz#83da6983c7ef9d71ac984a9b169fc197cbf18ff8" + integrity sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA== + +swrv@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/swrv/-/swrv-1.0.4.tgz#278b4811ed4acbb1ae46654972a482fd1847e480" + integrity sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g== + symbol-observable@^1.1.0, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -31801,15 +31939,20 @@ zip-stream@^4.1.0: compress-commons "^4.1.0" readable-stream "^3.6.0" +zod-to-json-schema@3.20.3: + version "3.20.3" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.20.3.tgz#8c95d8c20f20455ffa0b4b526c29703f35f6d787" + integrity sha512-/Q3wnyxAfCt94ZcrGiXXoiAfRqasxl9CX64LZ9fj+4dKH68zulUtU0uk1WMxQPfAxQ0ZI70dKzcoW7hHj+DwSQ== + zod-to-json-schema@^3.20.4, zod-to-json-schema@^3.22.3: version "3.22.3" resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.22.3.tgz#1c71f9fa23f80b2f3b5eed537afa8a13a66a5200" integrity sha512-9isG8SqRe07p+Aio2ruBZmLm2Q6Sq4EqmXOiNpDxp+7f0LV6Q/LX65fs5Nn+FV/CzfF3NLBoksXbS2jNYIfpKw== -zod@^3.22.3: - version "3.22.3" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.3.tgz#2fbc96118b174290d94e8896371c95629e87a060" - integrity sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug== +zod@^3.22.3, zod@^3.22.4: + version "3.22.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== zwitch@^1.0.0: version "1.0.5" From 9aca526de665b8670f8032ce71b911822cb89083 Mon Sep 17 00:00:00 2001 From: jennypavlova Date: Thu, 21 Mar 2024 17:55:51 +0100 Subject: [PATCH 28/90] [APM] Add small fixes to APM service overview dashboards tab (#179084) ## Summary While working on [#176070](https://github.com/elastic/kibana/issues/176070) I found some small things we can improve/fix in the APM service overview dashboards tab. This PR: - fixes typos - adds missing translation - improves loading state when linking a dashboard ( disables the cancel button and puts the save button in the loading state) https://github.com/elastic/kibana/assets/14139027/7790841c-4ade-46fc-a9f1-0239c0e385cd --- .../actions/goto_dashboard.tsx | 2 +- .../actions/link_dashboard.tsx | 2 +- .../actions/save_dashboard_modal.tsx | 38 ++++++++++--------- .../actions/unlink_dashboard.tsx | 2 +- .../app/service_dashboards/context_menu.tsx | 14 +++++-- .../service_dashboards/dashboard_selector.tsx | 4 +- .../app/service_dashboards/index.tsx | 8 ++-- 7 files changed, 40 insertions(+), 30 deletions(-) diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/goto_dashboard.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/goto_dashboard.tsx index f196077c41a4d..1d1c923e6a597 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/goto_dashboard.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/goto_dashboard.tsx @@ -30,7 +30,7 @@ export function GotoDashboard({ data-test-subj="apmGotoDashboardGoToDashboardButton" color="text" size="s" - iconType={'visGauge'} + iconType="visGauge" href={url} > {i18n.translate('xpack.apm.serviceDashboards.contextMenu.goToDashboard', { diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/link_dashboard.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/link_dashboard.tsx index 0db2654c1d66b..03dc390fc93ce 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/link_dashboard.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/link_dashboard.tsx @@ -29,7 +29,7 @@ export function LinkDashboard({ setIsModalVisible(true)} > diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/save_dashboard_modal.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/save_dashboard_modal.tsx index 6872b0d2cc805..406a1b3e43190 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/save_dashboard_modal.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/save_dashboard_modal.tsx @@ -53,29 +53,29 @@ export function SaveDashboardModal({ const { data: allAvailableDashboards, status } = useDashboardFetcher(); const history = useHistory(); - let defaultOption: EuiComboBoxOptionOption | undefined; + const [isLoading, setIsLoading] = useState(false); - const [serviceFiltersEnabled, setserviceFiltersEnabled] = useState( + const [serviceFiltersEnabled, setServiceFiltersEnabled] = useState( (currentDashboard?.serviceEnvironmentFilterEnabled && currentDashboard?.serviceNameFilterEnabled) ?? true ); - if (currentDashboard) { - const { title, dashboardSavedObjectId } = currentDashboard; - defaultOption = { label: title, value: dashboardSavedObjectId }; - } - - const [selectedDashboard, setSelectedDashboard] = useState( - defaultOption ? [defaultOption] : [] + const [selectedDashboard, setSelectedDashboard] = useState< + Array> + >( + currentDashboard + ? [ + { + label: currentDashboard.title, + value: currentDashboard.dashboardSavedObjectId, + }, + ] + : [] ); const isEditMode = !!currentDashboard?.id; - const reloadCustomDashboards = useCallback(() => { - onRefresh(); - }, [onRefresh]); - const options = allAvailableDashboards?.map( (dashboardItem: DashboardItem) => ({ label: dashboardItem.attributes.title, @@ -92,6 +92,7 @@ export function SaveDashboardModal({ const [newDashboard] = selectedDashboard; try { if (newDashboard.value) { + setIsLoading(true); await callApmApi('POST /internal/apm/custom-dashboard', { params: { query: { customDashboardId: currentDashboard?.id }, @@ -117,7 +118,7 @@ export function SaveDashboardModal({ dashboardId: newDashboard.value, }), }); - reloadCustomDashboards(); + onRefresh(); } } catch (error) { console.error(error); @@ -132,6 +133,7 @@ export function SaveDashboardModal({ text: error.body.message, }); } + setIsLoading(false); onClose(); }, [ @@ -139,7 +141,7 @@ export function SaveDashboardModal({ notifications.toasts, serviceFiltersEnabled, onClose, - reloadCustomDashboards, + onRefresh, isEditMode, serviceName, currentDashboard, @@ -170,7 +172,7 @@ export function SaveDashboardModal({

} - onChange={() => setserviceFiltersEnabled(!serviceFiltersEnabled)} + onChange={() => setServiceFiltersEnabled(!serviceFiltersEnabled)} checked={serviceFiltersEnabled} /> @@ -220,6 +222,7 @@ export function SaveDashboardModal({ {i18n.translate( 'xpack.apm.serviceDashboards.selectDashboard.cancel', @@ -231,6 +234,7 @@ export function SaveDashboardModal({ {isEditMode diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/unlink_dashboard.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/unlink_dashboard.tsx index c43d3d289b767..3e68e8f54ebef 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/unlink_dashboard.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/actions/unlink_dashboard.tsx @@ -85,7 +85,7 @@ export function UnlinkDashboard({ setIsModalVisible(true)} > diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/context_menu.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/context_menu.tsx index 2eb48b7f66848..bf7da532054bf 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/context_menu.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/context_menu.tsx @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - +import { i18n } from '@kbn/i18n'; import React, { useState } from 'react'; import { EuiButtonIcon, @@ -36,7 +36,10 @@ export function ContextMenu({ items }: Props) { display="base" size="s" iconType="boxesVertical" - aria-label="More" + aria-label={i18n.translate( + 'xpack.apm.serviceDashboards.contextMenu.moreLabel', + { defaultMessage: 'More' } + )} onClick={onButtonClick} /> } @@ -47,8 +50,11 @@ export function ContextMenu({ items }: Props) { > ( - {item} + items={items.map((item, index) => ( + + {' '} + {item} + ))} /> diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/dashboard_selector.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/dashboard_selector.tsx index 7dbcbe714a428..5925340151a7d 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/dashboard_selector.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/dashboard_selector.tsx @@ -90,8 +90,8 @@ export function DashboardSelector({ selectedDashboard ? [ { - value: selectedDashboard?.dashboardSavedObjectId, - label: selectedDashboard?.title, + value: selectedDashboard.dashboardSavedObjectId, + label: selectedDashboard.title, }, ] : [] diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/index.tsx index 7426ec382b87f..4bfe04df040b3 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/index.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/service_dashboards/index.tsx @@ -83,7 +83,7 @@ export function ServiceDashboards() { ); useEffect(() => { - const filteredServiceDashbords = (data?.serviceDashboards ?? []).reduce( + const filteredServiceDashboards = (data?.serviceDashboards ?? []).reduce( ( result: MergedServiceDashboard[], serviceDashboard: SavedApmCustomDashboard @@ -102,8 +102,8 @@ export function ServiceDashboards() { [] ); - setServiceDashboards(filteredServiceDashbords); - }, [allAvailableDashboards, data?.serviceDashboards]); + setServiceDashboards(filteredServiceDashboards); + }, [allAvailableDashboards, data]); const getCreationOptions = useCallback((): Promise => { @@ -127,7 +127,6 @@ export function ServiceDashboards() { timeRange: { from: rangeFrom, to: rangeTo }, query: { query: kuery, language: 'kuery' }, }); - // eslint-disable-next-line react-hooks/exhaustive-deps }, [ dataView, serviceName, @@ -136,6 +135,7 @@ export function ServiceDashboards() { dashboard, rangeFrom, rangeTo, + currentDashboard, ]); const getLocatorParams = useCallback( From 7ca14caca7d463a3a4e75fe54e4f9635b8d40ed7 Mon Sep 17 00:00:00 2001 From: Milton Hultgren Date: Thu, 21 Mar 2024 18:12:19 +0100 Subject: [PATCH 29/90] [Obs AI Assistant] Fix error in reranking prompt (#179164) --- .../observability_ai_assistant/server/functions/context.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/context.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/context.ts index 422c0287e15d7..7db8f63e273f9 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/context.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/context.ts @@ -216,7 +216,7 @@ async function scoreSuggestions({ const newUserMessageContent = dedent(`Given the following question, score the documents that are relevant to the question. on a scale from 0 to 7, - 0 being completely relevant, and 7 being extremely relevant. Information is relevant to the question if it helps in + 0 being completely irrelevant, and 7 being extremely relevant. Information is relevant to the question if it helps in answering the question. Judge it according to the following criteria: - The document is relevant to the question, and the rest of the conversation From 386c29094df6f189da57b1a7c5ddc839e610e559 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Thu, 21 Mar 2024 18:31:58 +0100 Subject: [PATCH 30/90] status service: get rid of `calculateDepthRecursive` (#179160) ## Summary We were spending a lot of time in `calculateDepthRecursive` Screenshot 2024-03-21 at 13 46 00 And it could fully be avoided given the plugin service already sorts the plugins. This PR changes the way the plugin system exposes its `PluginDependencies` so that the keys are topologically ordered (same order we use to setup / start the plugins) and then use that ordering directly from the status service. --- .../src/plugins_system.test.ts | 6 +- .../src/plugins_system.ts | 162 ++++++++++-------- .../core-plugins-server-internal/src/types.ts | 10 ++ .../src/plugins_status.ts | 62 ++----- 4 files changed, 113 insertions(+), 127 deletions(-) diff --git a/packages/core/plugins/core-plugins-server-internal/src/plugins_system.test.ts b/packages/core/plugins/core-plugins-server-internal/src/plugins_system.test.ts index 1ddc4c08f915c..e99ed47ca43f0 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/plugins_system.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/plugins_system.test.ts @@ -128,7 +128,7 @@ test('getPlugins returns the list of plugins', () => { expect(pluginsSystem.getPlugins()).toEqual([pluginA, pluginB]); }); -test('getPluginDependencies returns dependency tree of symbols', () => { +test('getPluginDependencies returns dependency tree with keys topologically sorted', () => { pluginsSystem.addPlugin(createPlugin('plugin-a', { required: ['no-dep'] })); pluginsSystem.addPlugin( createPlugin('plugin-b', { required: ['plugin-a'], optional: ['no-dep', 'other'] }) @@ -138,6 +138,7 @@ test('getPluginDependencies returns dependency tree of symbols', () => { expect(pluginsSystem.getPluginDependencies()).toMatchInlineSnapshot(` Object { "asNames": Map { + "no-dep" => Array [], "plugin-a" => Array [ "no-dep", ], @@ -145,9 +146,9 @@ test('getPluginDependencies returns dependency tree of symbols', () => { "plugin-a", "no-dep", ], - "no-dep" => Array [], }, "asOpaqueIds": Map { + Symbol(no-dep) => Array [], Symbol(plugin-a) => Array [ Symbol(no-dep), ], @@ -155,7 +156,6 @@ test('getPluginDependencies returns dependency tree of symbols', () => { Symbol(plugin-a), Symbol(no-dep), ], - Symbol(no-dep) => Array [], }, } `); diff --git a/packages/core/plugins/core-plugins-server-internal/src/plugins_system.ts b/packages/core/plugins/core-plugins-server-internal/src/plugins_system.ts index a47c82f73aca7..a929044cd6037 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/plugins_system.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/plugins_system.ts @@ -34,6 +34,7 @@ export class PluginsSystem { private readonly log: Logger; // `satup`, the past-tense version of the noun `setup`. private readonly satupPlugins: PluginName[] = []; + private sortedPluginNames?: Set; constructor(private readonly coreContext: CoreContext, public readonly type: T) { this.log = coreContext.logger.get('plugins-system', this.type); @@ -47,6 +48,9 @@ export class PluginsSystem { } this.plugins.set(plugin.name, plugin); + + // clear sorted plugin name cache on addition + this.sortedPluginNames = undefined; } public getPlugins() { @@ -54,32 +58,31 @@ export class PluginsSystem { } /** - * @returns a ReadonlyMap of each plugin and an Array of its available dependencies + * @returns a Map of each plugin and an Array of its available dependencies * @internal */ public getPluginDependencies(): PluginDependencies { - const asNames = new Map( - [...this.plugins].map(([name, plugin]) => [ + const asNames = new Map(); + const asOpaqueIds = new Map(); + + for (const pluginName of this.getTopologicallySortedPluginNames()) { + const plugin = this.plugins.get(pluginName)!; + const dependencies = [ + ...new Set([ + ...plugin.requiredPlugins, + ...plugin.optionalPlugins.filter((optPlugin) => this.plugins.has(optPlugin)), + ]), + ]; + + asNames.set( plugin.name, - [ - ...new Set([ - ...plugin.requiredPlugins, - ...plugin.optionalPlugins.filter((optPlugin) => this.plugins.has(optPlugin)), - ]), - ].map((depId) => this.plugins.get(depId)!.name), - ]) - ); - const asOpaqueIds = new Map( - [...this.plugins].map(([name, plugin]) => [ + dependencies.map((depId) => this.plugins.get(depId)!.name) + ); + asOpaqueIds.set( plugin.opaqueId, - [ - ...new Set([ - ...plugin.requiredPlugins, - ...plugin.optionalPlugins.filter((optPlugin) => this.plugins.has(optPlugin)), - ]), - ].map((depId) => this.plugins.get(depId)!.opaqueId), - ]) - ); + dependencies.map((depId) => this.plugins.get(depId)!.opaqueId) + ); + } return { asNames, asOpaqueIds }; } @@ -298,67 +301,74 @@ export class PluginsSystem { return publicPlugins; } - /** - * Gets topologically sorted plugin names that are registered with the plugin system. - * Ordering is possible if and only if the plugins graph has no directed cycles, - * that is, if it is a directed acyclic graph (DAG). If plugins cannot be ordered - * an error is thrown. - * - * Uses Kahn's Algorithm to sort the graph. - */ private getTopologicallySortedPluginNames() { - // We clone plugins so we can remove handled nodes while we perform the - // topological ordering. If the cloned graph is _not_ empty at the end, we - // know we were not able to topologically order the graph. We exclude optional - // dependencies that are not present in the plugins graph. - const pluginsDependenciesGraph = new Map( - [...this.plugins.entries()].map(([pluginName, plugin]) => { - return [ - pluginName, - new Set([ - ...plugin.requiredPlugins, - ...plugin.optionalPlugins.filter((dependency) => this.plugins.has(dependency)), - ]), - ] as [PluginName, Set]; - }) - ); - - // First, find a list of "start nodes" which have no outgoing edges. At least - // one such node must exist in a non-empty acyclic graph. - const pluginsWithAllDependenciesSorted = [...pluginsDependenciesGraph.keys()].filter( - (pluginName) => pluginsDependenciesGraph.get(pluginName)!.size === 0 - ); - - const sortedPluginNames = new Set(); - while (pluginsWithAllDependenciesSorted.length > 0) { - const sortedPluginName = pluginsWithAllDependenciesSorted.pop()!; - - // We know this plugin has all its dependencies sorted, so we can remove it - // and include into the final result. - pluginsDependenciesGraph.delete(sortedPluginName); - sortedPluginNames.add(sortedPluginName); - - // Go through the rest of the plugins and remove `sortedPluginName` from their - // unsorted dependencies. - for (const [pluginName, dependencies] of pluginsDependenciesGraph) { - // If we managed delete `sortedPluginName` from dependencies let's check - // whether it was the last one and we can mark plugin as sorted. - if (dependencies.delete(sortedPluginName) && dependencies.size === 0) { - pluginsWithAllDependenciesSorted.push(pluginName); - } - } + if (!this.sortedPluginNames) { + this.sortedPluginNames = getTopologicallySortedPluginNames(this.plugins); } + return this.sortedPluginNames; + } +} - if (pluginsDependenciesGraph.size > 0) { - const edgesLeft = JSON.stringify([...pluginsDependenciesGraph.keys()]); - throw new Error( - `Topological ordering of plugins did not complete, these plugins have cyclic or missing dependencies: ${edgesLeft}` - ); +/** + * Gets topologically sorted plugin names that are registered with the plugin system. + * Ordering is possible if and only if the plugins graph has no directed cycles, + * that is, if it is a directed acyclic graph (DAG). If plugins cannot be ordered + * an error is thrown. + * + * Uses Kahn's Algorithm to sort the graph. + */ +const getTopologicallySortedPluginNames = (plugins: Map) => { + // We clone plugins so we can remove handled nodes while we perform the + // topological ordering. If the cloned graph is _not_ empty at the end, we + // know we were not able to topologically order the graph. We exclude optional + // dependencies that are not present in the plugins graph. + const pluginsDependenciesGraph = new Map( + [...plugins.entries()].map(([pluginName, plugin]) => { + return [ + pluginName, + new Set([ + ...plugin.requiredPlugins, + ...plugin.optionalPlugins.filter((dependency) => plugins.has(dependency)), + ]), + ] as [PluginName, Set]; + }) + ); + + // First, find a list of "start nodes" which have no outgoing edges. At least + // one such node must exist in a non-empty acyclic graph. + const pluginsWithAllDependenciesSorted = [...pluginsDependenciesGraph.keys()].filter( + (pluginName) => pluginsDependenciesGraph.get(pluginName)!.size === 0 + ); + + const sortedPluginNames = new Set(); + while (pluginsWithAllDependenciesSorted.length > 0) { + const sortedPluginName = pluginsWithAllDependenciesSorted.pop()!; + + // We know this plugin has all its dependencies sorted, so we can remove it + // and include into the final result. + pluginsDependenciesGraph.delete(sortedPluginName); + sortedPluginNames.add(sortedPluginName); + + // Go through the rest of the plugins and remove `sortedPluginName` from their + // unsorted dependencies. + for (const [pluginName, dependencies] of pluginsDependenciesGraph) { + // If we managed delete `sortedPluginName` from dependencies let's check + // whether it was the last one and we can mark plugin as sorted. + if (dependencies.delete(sortedPluginName) && dependencies.size === 0) { + pluginsWithAllDependenciesSorted.push(pluginName); + } } + } - return sortedPluginNames; + if (pluginsDependenciesGraph.size > 0) { + const edgesLeft = JSON.stringify([...pluginsDependenciesGraph.keys()]); + throw new Error( + `Topological ordering of plugins did not complete, these plugins have cyclic or missing dependencies: ${edgesLeft}` + ); } -} + + return sortedPluginNames; +}; const buildReverseDependencyMap = ( pluginMap: Map diff --git a/packages/core/plugins/core-plugins-server-internal/src/types.ts b/packages/core/plugins/core-plugins-server-internal/src/types.ts index def1a27a4c26f..195b4910f71dd 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/types.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/types.ts @@ -10,6 +10,16 @@ import type { PluginName, PluginOpaqueId } from '@kbn/core-base-common'; /** @internal */ export interface PluginDependencies { + /** + * Plugin to dependencies map with plugin names as key/values. + * + * Keys sorted by plugin topological order (root plugins first, leaf plugins last). + */ asNames: ReadonlyMap; + /** + * Plugin to dependencies map with plugin opaque ids as key/values. + * + * Keys sorted by plugin topological order (root plugins first, leaf plugins last). + */ asOpaqueIds: ReadonlyMap; } diff --git a/packages/core/status/core-status-server-internal/src/plugins_status.ts b/packages/core/status/core-status-server-internal/src/plugins_status.ts index 7de22e23cc97e..a34fb8a98d794 100644 --- a/packages/core/status/core-status-server-internal/src/plugins_status.ts +++ b/packages/core/status/core-status-server-internal/src/plugins_status.ts @@ -23,7 +23,6 @@ import { takeUntil, delay, } from 'rxjs/operators'; -import { sortBy } from 'lodash'; import { isDeepStrictEqual } from 'util'; import type { PluginName } from '@kbn/core-base-common'; import { ServiceStatusLevels, type CoreStatus, type ServiceStatus } from '@kbn/core-status-common'; @@ -45,7 +44,6 @@ export interface Deps { interface PluginData { [name: PluginName]: { name: PluginName; - depth: number; // depth of this plugin in the dependency tree (root plugins will have depth = 1) dependencies: PluginName[]; reverseDependencies: PluginName[]; reportedStatus?: PluginStatus; @@ -81,7 +79,8 @@ export class PluginsStatusService { constructor(deps: Deps, private readonly statusTimeoutMs: number = STATUS_TIMEOUT_MS) { this.pluginData = this.initPluginData(deps.pluginDependencies); this.rootPlugins = this.getRootPlugins(); - this.orderedPluginNames = this.getOrderedPluginNames(); + // plugin dependencies keys are already sorted + this.orderedPluginNames = [...deps.pluginDependencies.keys()]; this.coreSubscription = deps.core$ .pipe( @@ -216,23 +215,20 @@ export class PluginsStatusService { private initPluginData(pluginDependencies: ReadonlyMap): PluginData { const pluginData: PluginData = {}; - if (pluginDependencies) { - pluginDependencies.forEach((dependencies, name) => { - pluginData[name] = { - name, - depth: 0, - dependencies, - reverseDependencies: [], - derivedStatus: defaultStatus, - }; - }); + pluginDependencies.forEach((dependencies, name) => { + pluginData[name] = { + name, + dependencies, + reverseDependencies: [], + derivedStatus: defaultStatus, + }; + }); - pluginDependencies.forEach((dependencies, name) => { - dependencies.forEach((dependency) => { - pluginData[dependency].reverseDependencies.push(name); - }); + pluginDependencies.forEach((dependencies, name) => { + dependencies.forEach((dependency) => { + pluginData[dependency].reverseDependencies.push(name); }); - } + }); return pluginData; } @@ -248,36 +244,6 @@ export class PluginsStatusService { ); } - /** - * Obtain a list of plugins names, ordered by depth. - * @see {calculateDepthRecursive} - * @returns {PluginName[]} a list of plugins, ordered by depth + name - */ - private getOrderedPluginNames(): PluginName[] { - this.rootPlugins.forEach((plugin) => { - this.calculateDepthRecursive(plugin, 1); - }); - - return sortBy(Object.values(this.pluginData), ['depth', 'name']).map(({ name }) => name); - } - - /** - * Calculate the depth of the given plugin, knowing that it's has at least the specified depth - * The depth of a plugin is determined by how many levels of dependencies the plugin has above it. - * We define root plugins as depth = 1, plugins that only depend on root plugins will have depth = 2 - * and so on so forth - * @param {PluginName} plugin the name of the plugin whose depth must be calculated - * @param {number} depth the minimum depth that we know for sure this plugin has - */ - private calculateDepthRecursive(plugin: PluginName, depth: number): void { - const pluginData = this.pluginData[plugin]; - pluginData.depth = Math.max(pluginData.depth, depth); - const newDepth = depth + 1; - pluginData.reverseDependencies.forEach((revDep) => - this.calculateDepthRecursive(revDep, newDepth) - ); - } - /** * Updates the root plugins statuses according to the current core services status */ From 771d97e8b95813672edeb0c518b25ba99783343a Mon Sep 17 00:00:00 2001 From: Ramon Butter Date: Thu, 21 Mar 2024 18:39:47 +0100 Subject: [PATCH 31/90] deepmerge in merging apm-configuration (#179048) We faced an issue where APM global labels sourced from the kibana configuration were overriden when `ELASTIC_APM_GLOBAL_LABELS` was set in the run-time. I suspect this is due to the fact hat the use a shallow merge at this point, and the labels are nested inside both configuration ( `configFromKibanaConfig`, and `configFromEnv` ). ``` config = Object { ... "globalLabels": Object { .... }, ... } ``` Didn't set up my IDE to actually test this. But added a unit test which will hopefully give some feedback --------- Co-authored-by: Jean-Louis Leysens --- .../kbn-apm-config-loader/src/config.test.ts | 20 +++++++++++++++++-- packages/kbn-apm-config-loader/src/config.ts | 6 +++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/kbn-apm-config-loader/src/config.test.ts b/packages/kbn-apm-config-loader/src/config.test.ts index ac139b220768c..caf3b800b444b 100644 --- a/packages/kbn-apm-config-loader/src/config.test.ts +++ b/packages/kbn-apm-config-loader/src/config.test.ts @@ -7,9 +7,9 @@ */ import type { AgentConfigOptions, Labels } from 'elastic-apm-node'; import { - packageMock, - mockedRootDir, gitRevExecMock, + mockedRootDir, + packageMock, readUuidFileMock, resetAllMocks, } from './config.test.mocks'; @@ -152,6 +152,7 @@ describe('ApmConfiguration', () => { delete process.env.ELASTIC_APM_SECRET_TOKEN; delete process.env.ELASTIC_APM_API_KEY; delete process.env.ELASTIC_APM_SERVER_URL; + delete process.env.ELASTIC_APM_GLOBAL_LABELS; delete process.env.NODE_ENV; }); @@ -184,6 +185,21 @@ describe('ApmConfiguration', () => { }) ); }); + + it('ELASTIC_APM_GLOBAL_LABELS', () => { + process.env.ELASTIC_APM_GLOBAL_LABELS = 'test1=1,test2=2'; + const config = new ApmConfiguration(mockedRootDir, {}, true); + + expect(config.getConfig('serviceName')).toEqual( + expect.objectContaining({ + globalLabels: { + git_rev: 'sha', + test1: '1', + test2: '2', + }, + }) + ); + }); }); it('does not override the environment from NODE_ENV if already set in the config file', () => { diff --git a/packages/kbn-apm-config-loader/src/config.ts b/packages/kbn-apm-config-loader/src/config.ts index f25feafe90eb7..efe228be8157e 100644 --- a/packages/kbn-apm-config-loader/src/config.ts +++ b/packages/kbn-apm-config-loader/src/config.ts @@ -7,6 +7,7 @@ */ import { join } from 'path'; +import deepmerge from 'deepmerge'; import { merge } from 'lodash'; import { execSync } from 'child_process'; import { getDataPath } from '@kbn/utils'; @@ -295,7 +296,10 @@ export class ApmConfiguration { const { servicesOverrides, redactUsers, ...configFromKibanaConfig } = this.getConfigFromKibanaConfig(); const configFromEnv = this.getConfigFromEnv(configFromKibanaConfig); - const config = merge({}, configFromKibanaConfig, configFromEnv); + const config = [configFromKibanaConfig, configFromEnv].reduce( + (acc, conf) => deepmerge(acc, conf), + {} + ); if (config.active === false && config.contextPropagationOnly !== false) { throw new Error( From 4d51cad82fdbbe5b958c51d12d9070db8a023a1b Mon Sep 17 00:00:00 2001 From: amyjtechwriter <61687663+amyjtechwriter@users.noreply.github.com> Date: Thu, 21 Mar 2024 17:40:52 +0000 Subject: [PATCH 32/90] [DOCS] Discover troubleshooting blog link (#179109) Request to link from Discover page to a blog [troubleshooting guide for Discover](https://www.elastic.co/blog/troubleshooting-guide-common-issues-kibana-discover-load). I've put it under a Troubleshooting heading on the [Discover index page](https://www.elastic.co/guide/en/kibana/current/discover.html), but if you think it would be better included in the What's next? section just let me know and I'll move it. Screenshot 2024-03-20 at 20 18 45 Relates to:#178046 --- docs/user/discover.asciidoc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/user/discover.asciidoc b/docs/user/discover.asciidoc index d60ccb2ccd0de..ddd06b06c9cd8 100644 --- a/docs/user/discover.asciidoc +++ b/docs/user/discover.asciidoc @@ -334,6 +334,11 @@ For more about this and other rules provided in {alert-features}, go to <> to better meet your needs. +[float] +=== Troubleshooting + +* {blog-ref}troubleshooting-guide-common-issues-kibana-discover-load[Learn how to resolve common issues with Discover.] + -- include::{kibana-root}/docs/discover/document-explorer.asciidoc[] From 3be6e23ae756971011414f8ac33f0d75ad9efdea Mon Sep 17 00:00:00 2001 From: Gloria Hornero Date: Thu, 21 Mar 2024 19:39:58 +0100 Subject: [PATCH 33/90] [Security Solution] [Cypress] Changes the way to delete all the timelines (#178935) ## Summary After investigating the failure of the test `should save timelines as new` inside `x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/creation.cy.ts` spec file in MKI environment, we found out the issue was that the timelines created by the previous tests were not deleted. That was the reason why the assertion `cy.get(ROWS).should('have.length', '2');` fails. `deleteTimelines()` was not failing in Cypress, but when we executed the query using the developer tools on an MKI environment, we were getting a 403 because we were trying to access an internal index, something that is completely forbidden in MKI environments. The reason why this query was not failing in Cypress, is because we are using a pattern doing so at the developer tools, does not throw any error, but targeting a specific index does. To solve the issue around the timelines not being deleted, we are using our APIs. --- .../sourcerer/sourcerer_timeline.cy.ts | 3 +-- .../e2e/explore/cases/attach_timeline.cy.ts | 3 +-- .../cypress/e2e/explore/cases/creation.cy.ts | 3 +-- .../alerts/ransomware_detection.cy.ts | 2 +- .../alerts/ransomware_prevention.cy.ts | 2 +- .../timeline_templates/creation.cy.ts | 2 +- .../timeline_templates/export.cy.ts | 3 +-- .../timelines/correlation_tab.cy.ts | 2 +- .../investigations/timelines/creation.cy.ts | 3 +-- .../timelines/esql/search_filter.cy.ts | 4 ++-- .../e2e/investigations/timelines/export.cy.ts | 2 +- .../investigations/timelines/notes_tab.cy.ts | 4 +--- .../timelines/open_timeline.cy.ts | 2 +- .../investigations/timelines/overview.cy.tsx | 7 ++++-- .../investigations/timelines/query_tab.cy.ts | 2 +- .../timelines/row_renderers.cy.ts | 2 +- .../timelines/search_or_filter.cy.ts | 2 +- .../investigations/timelines/url_state.cy.ts | 2 +- .../cypress/tasks/api_calls/common.ts | 21 ---------------- .../cypress/tasks/api_calls/timelines.ts | 24 ++++++++++++++++++- 20 files changed, 46 insertions(+), 49 deletions(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/sourcerer/sourcerer_timeline.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/sourcerer/sourcerer_timeline.cy.ts index f720d11689d1a..bb83d4cfbe007 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/sourcerer/sourcerer_timeline.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/sourcerer/sourcerer_timeline.cy.ts @@ -10,7 +10,6 @@ import { DEFAULT_INDEX_PATTERN, } from '@kbn/security-solution-plugin/common/constants'; -import { deleteTimelines } from '../../../../tasks/api_calls/common'; import { login } from '../../../../tasks/login'; import { visitWithTimeRange } from '../../../../tasks/navigation'; @@ -33,7 +32,7 @@ import { } from '../../../../tasks/sourcerer'; import { openTimelineUsingToggle } from '../../../../tasks/security_main'; import { SOURCERER } from '../../../../screens/sourcerer'; -import { createTimeline } from '../../../../tasks/api_calls/timelines'; +import { createTimeline, deleteTimelines } from '../../../../tasks/api_calls/timelines'; import { getTimeline, getTimelineModifiedSourcerer } from '../../../../objects/timeline'; import { closeTimeline, openTimelineById } from '../../../../tasks/timeline'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/attach_timeline.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/attach_timeline.cy.ts index 0dfa0620acccb..a56390010b882 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/attach_timeline.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/attach_timeline.cy.ts @@ -16,8 +16,7 @@ import { import { DESCRIPTION_INPUT, ADD_COMMENT_INPUT } from '../../../screens/create_new_case'; import { getCase1 } from '../../../objects/case'; import { getTimeline } from '../../../objects/timeline'; -import { createTimeline } from '../../../tasks/api_calls/timelines'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; +import { createTimeline, deleteTimelines } from '../../../tasks/api_calls/timelines'; import { createCase, deleteCases } from '../../../tasks/api_calls/cases'; describe('attach timeline to case', { tags: ['@ess', '@serverless'] }, () => { diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts index d76f8e9fb9eec..9da58cc8e406e 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts @@ -39,7 +39,7 @@ import { TIMELINE_QUERY, TIMELINE_TITLE } from '../../../screens/timeline'; import { OVERVIEW_CASE_DESCRIPTION, OVERVIEW_CASE_NAME } from '../../../screens/overview'; import { goToCaseDetails, goToCreateNewCase } from '../../../tasks/all_cases'; -import { createTimeline } from '../../../tasks/api_calls/timelines'; +import { createTimeline, deleteTimelines } from '../../../tasks/api_calls/timelines'; import { openCaseTimeline } from '../../../tasks/case_details'; import { attachTimeline, @@ -53,7 +53,6 @@ import { visit, visitWithTimeRange } from '../../../tasks/navigation'; import { CASES_URL, OVERVIEW_URL } from '../../../urls/navigation'; import { ELASTICSEARCH_USERNAME } from '../../../env_var_names_constants'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; import { deleteCases } from '../../../tasks/api_calls/cases'; // Tracked by https://github.com/elastic/security-team/issues/7696 diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_detection.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_detection.cy.ts index a225d08780166..a4908a1035f39 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_detection.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_detection.cy.ts @@ -14,7 +14,7 @@ import { ALERTS_HISTOGRAM_SERIES, ALERT_RULE_NAME, MESSAGE } from '../../../scre import { TIMELINE_QUERY, TIMELINE_VIEW_IN_ANALYZER } from '../../../screens/timeline'; import { selectAlertsHistogram } from '../../../tasks/alerts'; import { openTimelineUsingToggle } from '../../../tasks/security_main'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; +import { deleteTimelines } from '../../../tasks/api_calls/timelines'; describe('Ransomware Detection Alerts', { tags: ['@ess', '@serverless'] }, () => { before(() => { diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_prevention.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_prevention.cy.ts index abc00b14c466a..c7078783466e9 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_prevention.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/ransomware_prevention.cy.ts @@ -12,7 +12,7 @@ import { ALERTS_URL } from '../../../urls/navigation'; import { ALERTS_HISTOGRAM_SERIES, ALERT_RULE_NAME, MESSAGE } from '../../../screens/alerts'; import { TIMELINE_VIEW_IN_ANALYZER } from '../../../screens/timeline'; import { selectAlertsHistogram } from '../../../tasks/alerts'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; +import { deleteTimelines } from '../../../tasks/api_calls/timelines'; import { createTimeline } from '../../../tasks/api_calls/timelines'; import { getTimeline } from '../../../objects/timeline'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timeline_templates/creation.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timeline_templates/creation.cy.ts index 2c640bf3d4492..40efaa1f20883 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timeline_templates/creation.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timeline_templates/creation.cy.ts @@ -16,7 +16,7 @@ import { } from '../../../screens/timeline'; import { TIMELINES_DESCRIPTION, TIMELINES_USERNAME } from '../../../screens/timelines'; import { createTimeline } from '../../../tasks/api_calls/timelines'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; +import { deleteTimelines } from '../../../tasks/api_calls/timelines'; import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timeline_templates/export.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timeline_templates/export.cy.ts index caf9271adb19b..2f32c15ac8b86 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timeline_templates/export.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timeline_templates/export.cy.ts @@ -14,9 +14,8 @@ import { } from '../../../objects/timeline'; import { TIMELINE_TEMPLATES_URL } from '../../../urls/navigation'; -import { createTimelineTemplate } from '../../../tasks/api_calls/timelines'; +import { createTimelineTemplate, deleteTimelines } from '../../../tasks/api_calls/timelines'; import { searchByTitle } from '../../../tasks/table_pagination'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; describe('Export timelines', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/correlation_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/correlation_tab.cy.ts index 2318a4c4ef452..70f7d82e34629 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/correlation_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/correlation_tab.cy.ts @@ -21,7 +21,7 @@ import { addEqlToTimeline, saveTimeline, clearEqlInTimeline } from '../../../tas import { TIMELINES_URL } from '../../../urls/navigation'; import { EQL_QUERY_VALIDATION_ERROR } from '../../../screens/create_new_rule'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; +import { deleteTimelines } from '../../../tasks/api_calls/timelines'; describe('Correlation tab', { tags: ['@ess', '@serverless'] }, () => { const eql = 'any where process.name == "zsh"'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/creation.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/creation.cy.ts index 88fbf7a238aeb..b11fb0b8cf88f 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/creation.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/creation.cy.ts @@ -23,9 +23,8 @@ import { } from '../../../screens/timeline'; import { LOADING_INDICATOR } from '../../../screens/security_header'; import { ROWS } from '../../../screens/timelines'; -import { createTimelineTemplate } from '../../../tasks/api_calls/timelines'; +import { createTimelineTemplate, deleteTimelines } from '../../../tasks/api_calls/timelines'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; import { login } from '../../../tasks/login'; import { visit, visitWithTimeRange } from '../../../tasks/navigation'; import { openTimelineUsingToggle } from '../../../tasks/security_main'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/search_filter.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/search_filter.cy.ts index 73bb13b20236b..15263ff5d6b83 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/search_filter.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/search_filter.cy.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { deleteTimelines } from '../../../../tasks/api_calls/common'; import { GET_LOCAL_DATE_PICKER_START_DATE_POPOVER_BUTTON } from '../../../../screens/date_picker'; import { setStartDate, @@ -25,10 +24,11 @@ import { addFieldToTable, convertEditorNonBreakingSpaceToSpace, } from '../../../../tasks/discover'; -import { createNewTimeline, goToEsqlTab, openActiveTimeline } from '../../../../tasks/timeline'; import { login } from '../../../../tasks/login'; import { visitWithTimeRange } from '../../../../tasks/navigation'; import { ALERTS_URL } from '../../../../urls/navigation'; +import { deleteTimelines } from '../../../../tasks/api_calls/timelines'; +import { openActiveTimeline, createNewTimeline, goToEsqlTab } from '../../../../tasks/timeline'; const DEFAULT_DATE = '~ 15 minutes ago'; const INITIAL_START_DATE = 'Jan 18, 2021 @ 20:33:29.186'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/export.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/export.cy.ts index cbcc6fc758963..4c98e9d2f9241 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/export.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/export.cy.ts @@ -13,7 +13,7 @@ import { } from '../../../tasks/timelines'; import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; +import { deleteTimelines } from '../../../tasks/api_calls/timelines'; import { TIMELINES_URL } from '../../../urls/navigation'; import { TOASTER } from '../../../screens/alerts_detection_rules'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/notes_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/notes_tab.cy.ts index dd7c775a32118..c9ff65129bfe1 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/notes_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/notes_tab.cy.ts @@ -18,14 +18,12 @@ import { MARKDOWN_INVESTIGATE_BUTTON, } from '../../../screens/timeline'; import { MODAL_CONFIRMATION_BTN } from '../../../screens/alerts_detection_rules'; -import { createTimeline } from '../../../tasks/api_calls/timelines'; +import { createTimeline, deleteTimelines } from '../../../tasks/api_calls/timelines'; import { login } from '../../../tasks/login'; import { visitTimeline } from '../../../tasks/navigation'; import { addNotesToTimeline, goToNotesTab } from '../../../tasks/timeline'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; - const author = Cypress.env('ELASTICSEARCH_USERNAME'); const link = 'https://www.elastic.co/'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/open_timeline.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/open_timeline.cy.ts index 6c1ec9b093df7..1d6b54e8339e6 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/open_timeline.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/open_timeline.cy.ts @@ -25,7 +25,7 @@ import { refreshTimelinesUntilTimeLinePresent, } from '../../../tasks/timeline'; import { TIMELINES_URL } from '../../../urls/navigation'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; +import { deleteTimelines } from '../../../tasks/api_calls/timelines'; describe('Open timeline modal', { tags: ['@serverless', '@ess'] }, () => { beforeEach(function () { diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/overview.cy.tsx b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/overview.cy.tsx index 16b6c58146915..ec8583c287de5 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/overview.cy.tsx +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/overview.cy.tsx @@ -19,10 +19,13 @@ import { import { login } from '../../../tasks/login'; import { visit } from '../../../tasks/navigation'; -import { createTimeline, favoriteTimeline } from '../../../tasks/api_calls/timelines'; +import { + createTimeline, + deleteTimelines, + favoriteTimeline, +} from '../../../tasks/api_calls/timelines'; import { TIMELINES_URL } from '../../../urls/navigation'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; describe('timeline overview search', { tags: ['@ess', 'serverless'] }, () => { beforeEach(() => { diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/query_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/query_tab.cy.ts index acd3f4eb2176e..3cd3f1148f471 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/query_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/query_tab.cy.ts @@ -14,7 +14,7 @@ import { TIMELINE_QUERY, NOTE_CARD_CONTENT, } from '../../../screens/timeline'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; +import { deleteTimelines } from '../../../tasks/api_calls/timelines'; import { addNoteToTimeline } from '../../../tasks/api_calls/notes'; import { createTimeline } from '../../../tasks/api_calls/timelines'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/row_renderers.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/row_renderers.cy.ts index 4867ba79183f3..09e04c28e4975 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/row_renderers.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/row_renderers.cy.ts @@ -16,7 +16,7 @@ import { TIMELINE_ROW_RENDERERS_SURICATA_LINK_TOOLTIP, TIMELINE_ROW_RENDERERS_MODAL_CLOSE_BUTTON, } from '../../../screens/timeline'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; +import { deleteTimelines } from '../../../tasks/api_calls/timelines'; import { waitForWelcomePanelToBeLoaded } from '../../../tasks/common'; import { waitForAllHostsToBeLoaded } from '../../../tasks/hosts/all_hosts'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/search_or_filter.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/search_or_filter.cy.ts index ad72dfd2f6ca3..1c55f606d4a72 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/search_or_filter.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/search_or_filter.cy.ts @@ -20,7 +20,7 @@ import { selectKqlSearchMode, } from '../../../tasks/timeline'; import { waitForTimelinesPanelToBeLoaded } from '../../../tasks/timelines'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; +import { deleteTimelines } from '../../../tasks/api_calls/timelines'; import { hostsUrl, TIMELINES_URL } from '../../../urls/navigation'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/url_state.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/url_state.cy.ts index ddd65d69c5fed..23403fc7b101d 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/url_state.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/url_state.cy.ts @@ -16,7 +16,7 @@ import { getNewRule } from '../../../objects/rule'; import { login } from '../../../tasks/login'; import { visit, visitWithTimeRange } from '../../../tasks/navigation'; import { TIMELINES_URL } from '../../../urls/navigation'; -import { deleteTimelines } from '../../../tasks/api_calls/common'; +import { deleteTimelines } from '../../../tasks/api_calls/timelines'; describe('Open timeline', { tags: ['@serverless', '@ess'] }, () => { let timelineSavedObjectId: string | null = null; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/common.ts b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/common.ts index 194bfd2a4129f..897a0a3a0ec8e 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/common.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/common.ts @@ -95,27 +95,6 @@ export const deleteEndpointExceptionList = () => { }); }; -export const deleteTimelines = () => { - const kibanaIndexUrl = `${Cypress.env('ELASTICSEARCH_URL')}/.kibana_\*`; - rootRequest({ - method: 'POST', - url: `${kibanaIndexUrl}/_delete_by_query?conflicts=proceed&refresh`, - body: { - query: { - bool: { - filter: [ - { - match: { - type: 'siem-ui-timeline', - }, - }, - ], - }, - }, - }, - }); -}; - export const getConnectors = () => rootRequest({ method: 'GET', diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/timelines.ts b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/timelines.ts index 620a105a2b98e..e6c13eb4b5988 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/timelines.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/timelines.ts @@ -5,7 +5,10 @@ * 2.0. */ -import type { TimelineResponse } from '@kbn/security-solution-plugin/common/api/timeline'; +import type { + AllTimelinesResponse, + TimelineResponse, +} from '@kbn/security-solution-plugin/common/api/timeline'; import type { CompleteTimeline } from '../../objects/timeline'; import { rootRequest } from './common'; @@ -141,3 +144,22 @@ export const favoriteTimeline = ({ templateTimelineVersion: templateTimelineVersion || null, }, }); + +export const getAllTimelines = () => + rootRequest({ + method: 'GET', + url: 'api/timelines?page_size=100&page_index=1&sort_field=updated&sort_order=desc&timeline_type=default', + }); + +export const deleteTimelines = () => { + getAllTimelines().then(($timelines) => { + const savedObjectIds = $timelines.body.timeline.map((timeline) => timeline.savedObjectId); + rootRequest({ + method: 'DELETE', + url: 'api/timeline', + body: { + savedObjectIds, + }, + }); + }); +}; From c81301bd5666bff4d28e8d72227f288a57be0658 Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Thu, 21 Mar 2024 15:16:16 -0400 Subject: [PATCH 34/90] [Response Ops][Actions] Adding `getAll` to UnsecuredActionsClient (#179090) ## Summary Adds unsecured version of the `getAll` function that is exposed via the `unsecuredActionsClient` on the actions plugin start contract. This version doesn't expect any user request and doesn't check RBAC. Actions saved objects are accessed via the internal saved objects repository (instead of a saved objects client scoped to the request) and an ES client that uses the internal user (instead of scoped to the request). This function returns all connectors for the give space ID and preconfigured connectors but does not return system actions. ## To Verify 1. Run this PR and create a connector via the UI or API in multiple different spaces. 2. In `x-pack/plugins/alerting/server/plugin.ts` in the start function, add the following: ``` const unsecuredActionsClient = plugins.actions.getUnsecuredActionsClient(); unsecuredActionsClient.getAll('default').then((results) => { console.log('default connectors'); console.log(JSON.stringify(results)); }); unsecuredActionsClient.getAll().then((results) => { console.log(JSON.stringify(results)); }); ``` 3. Restart Kibana and verify that the appropriate connectors were returned and logged. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../connector/methods/get_all/get_all.test.ts | 451 +++++++++++++++++- .../connector/methods/get_all/get_all.ts | 96 +++- .../connector/methods/get_all/index.ts | 2 +- .../connector/methods/get_all/types/params.ts | 17 +- .../data/connector/find_connectors_so.ts | 6 +- .../data/connector/search_connectors_so.ts | 4 +- .../server/data/connector/types/params.ts | 9 +- x-pack/plugins/actions/server/plugin.ts | 6 +- .../unsecured_actions_client.mock.ts | 1 + .../unsecured_actions_client.test.ts | 105 +++- .../unsecured_actions_client.ts | 41 +- x-pack/plugins/actions/tsconfig.json | 3 +- .../server/unsecured_actions_simulation.ts | 29 ++ .../actions/get_all_unsecured_actions.ts | 209 ++++++++ .../spaces_only/tests/actions/index.ts | 1 + 15 files changed, 927 insertions(+), 53 deletions(-) create mode 100644 x-pack/test/alerting_api_integration/spaces_only/tests/actions/get_all_unsecured_actions.ts diff --git a/x-pack/plugins/actions/server/application/connector/methods/get_all/get_all.test.ts b/x-pack/plugins/actions/server/application/connector/methods/get_all/get_all.test.ts index 2e264300490f8..2032653712a59 100644 --- a/x-pack/plugins/actions/server/application/connector/methods/get_all/get_all.test.ts +++ b/x-pack/plugins/actions/server/application/connector/methods/get_all/get_all.test.ts @@ -10,7 +10,10 @@ import { ActionsAuthorization } from '../../../../authorization/actions_authoriz import { connectorTokenClientMock } from '../../../../lib/connector_token_client.mock'; import { getOAuthJwtAccessToken } from '../../../../lib/get_oauth_jwt_access_token'; import { getOAuthClientCredentialsAccessToken } from '../../../../lib/get_oauth_client_credentials_access_token'; -import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; +import { + savedObjectsClientMock, + savedObjectsRepositoryMock, +} from '@kbn/core-saved-objects-api-server-mocks'; import { actionsAuthorizationMock } from '../../../../authorization/actions_authorization.mock'; import { elasticsearchServiceMock } from '@kbn/core-elasticsearch-server-mocks'; import { actionExecutorMock } from '../../../../lib/action_executor.mock'; @@ -21,6 +24,7 @@ import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; import { Logger } from '@kbn/logging'; import { eventLogClientMock } from '@kbn/event-log-plugin/server/event_log_client.mock'; import { ActionTypeRegistry } from '../../../../action_type_registry'; +import { getAllUnsecured } from './get_all'; jest.mock('@kbn/core-saved-objects-utils-server', () => { const actual = jest.requireActual('@kbn/core-saved-objects-utils-server'); @@ -77,6 +81,7 @@ const logger = loggingSystemMock.create().get() as jest.Mocked; const eventLogClient = eventLogClientMock.create(); const getEventLogClient = jest.fn(); const connectorTokenClient = connectorTokenClientMock.create(); +const internalSavedObjectsRepository = savedObjectsRepositoryMock.create(); let actionsClient: ActionsClient; let actionTypeRegistry: ActionTypeRegistry; @@ -551,3 +556,447 @@ describe('getAll()', () => { ); }); }); + +describe('getAllUnsecured()', () => { + beforeEach(() => { + jest.resetAllMocks(); + jest.clearAllMocks(); + }); + + test('calls internalSavedObjectRepository with parameters and returns inMemoryConnectors correctly', async () => { + const expectedResult = { + total: 1, + per_page: 10, + page: 1, + saved_objects: [ + { + id: '1', + type: 'type', + attributes: { + name: 'test', + isMissingSecrets: false, + config: { + foo: 'bar', + }, + secrets: 'this should not be returned', + }, + score: 1, + references: [], + }, + ], + }; + internalSavedObjectsRepository.find.mockResolvedValueOnce(expectedResult); + scopedClusterClient.asInternalUser.search.mockResponse( + // @ts-expect-error not full search response + { + aggregations: { + '1': { doc_count: 6 }, + testPreconfigured: { doc_count: 2 }, + 'system-connector-.cases': { doc_count: 2 }, + }, + } + ); + + const result = await getAllUnsecured({ + esClient: scopedClusterClient.asInternalUser, + inMemoryConnectors: [ + { + id: 'testPreconfigured', + actionTypeId: '.slack', + secrets: {}, + isPreconfigured: true, + isDeprecated: false, + isSystemAction: false, + name: 'test', + config: { + foo: 'bar', + }, + }, + /** + * System actions will not + * be returned from getAllUnsecured + */ + { + id: 'system-connector-.cases', + actionTypeId: '.cases', + name: 'System action: .cases', + config: {}, + secrets: {}, + isDeprecated: false, + isMissingSecrets: false, + isPreconfigured: false, + isSystemAction: true, + }, + ], + internalSavedObjectsRepository, + kibanaIndices, + logger, + spaceId: 'default', + }); + + expect(result).toEqual([ + { + id: '1', + name: 'test', + isMissingSecrets: false, + config: { foo: 'bar' }, + isPreconfigured: false, + isDeprecated: false, + isSystemAction: false, + referencedByCount: 6, + }, + { + id: 'testPreconfigured', + actionTypeId: '.slack', + name: 'test', + isPreconfigured: true, + isSystemAction: false, + isDeprecated: false, + referencedByCount: 2, + }, + ]); + + expect(internalSavedObjectsRepository.find).toHaveBeenCalledWith({ + perPage: 10000, + type: 'action', + }); + + expect(scopedClusterClient.asInternalUser.search).toHaveBeenCalledWith({ + index: kibanaIndices, + ignore_unavailable: true, + body: { + aggs: { + '1': { + filter: { + bool: { + must: { + nested: { + path: 'references', + query: { + bool: { + filter: { + bool: { + must: [ + { + term: { + 'references.id': '1', + }, + }, + { + term: { + 'references.type': 'action', + }, + }, + ], + }, + }, + }, + }, + }, + }, + }, + }, + }, + testPreconfigured: { + filter: { + bool: { + must: { + nested: { + path: 'references', + query: { + bool: { + filter: { + bool: { + must: [ + { + term: { + 'references.id': 'testPreconfigured', + }, + }, + { + term: { + 'references.type': 'action', + }, + }, + ], + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + size: 0, + query: { + match_all: {}, + }, + }, + }); + + expect(auditLogger.log).not.toHaveBeenCalled(); + expect(authorization.ensureAuthorized).not.toHaveBeenCalled(); + }); + + test('passed custom space id if defined', async () => { + const expectedResult = { + total: 1, + per_page: 10, + page: 1, + saved_objects: [ + { + id: '1', + type: 'type', + attributes: { + name: 'test', + isMissingSecrets: false, + config: { + foo: 'bar', + }, + secrets: 'this should not be returned', + }, + score: 1, + references: [], + }, + ], + }; + internalSavedObjectsRepository.find.mockResolvedValueOnce(expectedResult); + scopedClusterClient.asInternalUser.search.mockResponse( + // @ts-expect-error not full search response + { + aggregations: { + '1': { doc_count: 6 }, + testPreconfigured: { doc_count: 2 }, + 'system-connector-.cases': { doc_count: 2 }, + }, + } + ); + + const result = await getAllUnsecured({ + esClient: scopedClusterClient.asInternalUser, + inMemoryConnectors: [ + { + id: 'testPreconfigured', + actionTypeId: '.slack', + secrets: {}, + isPreconfigured: true, + isDeprecated: false, + isSystemAction: false, + name: 'test', + config: { + foo: 'bar', + }, + }, + /** + * System actions will not + * be returned from getAllUnsecured + */ + { + id: 'system-connector-.cases', + actionTypeId: '.cases', + name: 'System action: .cases', + config: {}, + secrets: {}, + isDeprecated: false, + isMissingSecrets: false, + isPreconfigured: false, + isSystemAction: true, + }, + ], + internalSavedObjectsRepository, + kibanaIndices, + logger, + spaceId: 'custom', + }); + + expect(result).toEqual([ + { + id: '1', + name: 'test', + isMissingSecrets: false, + config: { foo: 'bar' }, + isPreconfigured: false, + isDeprecated: false, + isSystemAction: false, + referencedByCount: 6, + }, + { + id: 'testPreconfigured', + actionTypeId: '.slack', + name: 'test', + isPreconfigured: true, + isSystemAction: false, + isDeprecated: false, + referencedByCount: 2, + }, + ]); + + expect(internalSavedObjectsRepository.find).toHaveBeenCalledWith({ + perPage: 10000, + type: 'action', + namespaces: ['custom'], + }); + + expect(scopedClusterClient.asInternalUser.search).toHaveBeenCalledWith({ + index: kibanaIndices, + ignore_unavailable: true, + body: { + aggs: { + '1': { + filter: { + bool: { + must: { + nested: { + path: 'references', + query: { + bool: { + filter: { + bool: { + must: [ + { + term: { + 'references.id': '1', + }, + }, + { + term: { + 'references.type': 'action', + }, + }, + ], + }, + }, + }, + }, + }, + }, + }, + }, + }, + testPreconfigured: { + filter: { + bool: { + must: { + nested: { + path: 'references', + query: { + bool: { + filter: { + bool: { + must: [ + { + term: { + 'references.id': 'testPreconfigured', + }, + }, + { + term: { + 'references.type': 'action', + }, + }, + ], + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + size: 0, + query: { + match_all: {}, + }, + }, + }); + + expect(auditLogger.log).not.toHaveBeenCalled(); + expect(authorization.ensureAuthorized).not.toHaveBeenCalled(); + }); + + test('validates connectors before return', async () => { + internalSavedObjectsRepository.find.mockResolvedValueOnce({ + total: 1, + per_page: 10, + page: 1, + saved_objects: [ + { + id: '1', + type: 'type', + attributes: { + name: 'test', + isMissingSecrets: false, + config: { + foo: 'bar', + }, + }, + score: 1, + references: [], + }, + ], + }); + scopedClusterClient.asInternalUser.search.mockResponse( + // @ts-expect-error not full search response + { + aggregations: { + '1': { doc_count: 6 }, + testPreconfigured: { doc_count: 2 }, + }, + } + ); + + const result = await getAllUnsecured({ + esClient: scopedClusterClient.asInternalUser, + inMemoryConnectors: [ + { + id: 'testPreconfigured', + actionTypeId: '.slack', + secrets: {}, + isPreconfigured: true, + isDeprecated: false, + isSystemAction: false, + name: 'test', + config: { + foo: 'bar', + }, + }, + ], + internalSavedObjectsRepository, + kibanaIndices, + logger, + spaceId: 'default', + }); + + expect(result).toEqual([ + { + config: { + foo: 'bar', + }, + id: '1', + isDeprecated: false, + isMissingSecrets: false, + isPreconfigured: false, + isSystemAction: false, + name: 'test', + referencedByCount: 6, + }, + { + actionTypeId: '.slack', + id: 'testPreconfigured', + isDeprecated: false, + isPreconfigured: true, + isSystemAction: false, + name: 'test', + referencedByCount: 2, + }, + ]); + + expect(logger.warn).toHaveBeenCalledWith( + 'Error validating connector: 1, Error: [actionTypeId]: expected value of type [string] but got [undefined]' + ); + }); +}); diff --git a/x-pack/plugins/actions/server/application/connector/methods/get_all/get_all.ts b/x-pack/plugins/actions/server/application/connector/methods/get_all/get_all.ts index 8d764a9c632e0..9c3b9c13924fd 100644 --- a/x-pack/plugins/actions/server/application/connector/methods/get_all/get_all.ts +++ b/x-pack/plugins/actions/server/application/connector/methods/get_all/get_all.ts @@ -9,12 +9,28 @@ * Get all actions with in-memory connectors */ import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { AuditLogger } from '@kbn/security-plugin-types-server'; +import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { omit } from 'lodash'; +import { InMemoryConnector } from '../../../..'; +import { SavedObjectClientForFind } from '../../../../data/connector/types/params'; import { connectorWithExtraFindDataSchema } from '../../schemas'; import { findConnectorsSo, searchConnectorsSo } from '../../../../data/connector'; import { GetAllParams, InjectExtraFindDataParams } from './types'; import { ConnectorAuditAction, connectorAuditEvent } from '../../../../lib/audit_events'; import { connectorFromSavedObject, isConnectorDeprecated } from '../../lib'; import { ConnectorWithExtraFindData } from '../../types'; +import { GetAllUnsecuredParams } from './types/params'; + +interface GetAllHelperOpts { + auditLogger?: AuditLogger; + esClient: ElasticsearchClient; + inMemoryConnectors: InMemoryConnector[]; + kibanaIndices: string[]; + logger: Logger; + namespace?: string; + savedObjectsClient: SavedObjectClientForFind; +} export async function getAll({ context, @@ -32,28 +48,70 @@ export async function getAll({ throw error; } + return await getAllHelper({ + auditLogger: context.auditLogger, + esClient: context.scopedClusterClient.asInternalUser, + inMemoryConnectors: includeSystemActions + ? context.inMemoryConnectors + : context.inMemoryConnectors.filter((connector) => !connector.isSystemAction), + kibanaIndices: context.kibanaIndices, + logger: context.logger, + savedObjectsClient: context.unsecuredSavedObjectsClient, + }); +} + +export async function getAllUnsecured({ + esClient, + inMemoryConnectors, + internalSavedObjectsRepository, + kibanaIndices, + logger, + spaceId, +}: GetAllUnsecuredParams): Promise { + const namespace = spaceId && spaceId !== 'default' ? spaceId : undefined; + + const connectors = await getAllHelper({ + esClient, + // Unsecured execution does not currently support system actions so we filter them out + inMemoryConnectors: inMemoryConnectors.filter((connector) => !connector.isSystemAction), + kibanaIndices, + logger, + namespace, + savedObjectsClient: internalSavedObjectsRepository, + }); + + return connectors.map((connector) => omit(connector, 'secrets')); +} + +async function getAllHelper({ + auditLogger, + esClient, + inMemoryConnectors, + kibanaIndices, + logger, + namespace, + savedObjectsClient, +}: GetAllHelperOpts): Promise { const savedObjectsActions = ( - await findConnectorsSo({ unsecuredSavedObjectsClient: context.unsecuredSavedObjectsClient }) + await findConnectorsSo({ savedObjectsClient, namespace }) ).saved_objects.map((rawAction) => connectorFromSavedObject(rawAction, isConnectorDeprecated(rawAction.attributes)) ); - savedObjectsActions.forEach(({ id }) => - context.auditLogger?.log( - connectorAuditEvent({ - action: ConnectorAuditAction.FIND, - savedObject: { type: 'action', id }, - }) - ) - ); - - const inMemoryConnectorsFiltered = includeSystemActions - ? context.inMemoryConnectors - : context.inMemoryConnectors.filter((connector) => !connector.isSystemAction); + if (auditLogger) { + savedObjectsActions.forEach(({ id }) => + auditLogger.log( + connectorAuditEvent({ + action: ConnectorAuditAction.FIND, + savedObject: { type: 'action', id }, + }) + ) + ); + } const mergedResult = [ ...savedObjectsActions, - ...inMemoryConnectorsFiltered.map((inMemoryConnector) => ({ + ...inMemoryConnectors.map((inMemoryConnector) => ({ id: inMemoryConnector.id, actionTypeId: inMemoryConnector.actionTypeId, name: inMemoryConnector.name, @@ -64,8 +122,8 @@ export async function getAll({ ].sort((a, b) => a.name.localeCompare(b.name)); const connectors = await injectExtraFindData({ - kibanaIndices: context.kibanaIndices, - scopedClusterClient: context.scopedClusterClient, + kibanaIndices, + esClient, connectors: mergedResult, }); @@ -74,7 +132,7 @@ export async function getAll({ try { connectorWithExtraFindDataSchema.validate(connector); } catch (e) { - context.logger.warn(`Error validating connector: ${connector.id}, ${e}`); + logger.warn(`Error validating connector: ${connector.id}, ${e}`); } }); @@ -83,7 +141,7 @@ export async function getAll({ async function injectExtraFindData({ kibanaIndices, - scopedClusterClient, + esClient, connectors, }: InjectExtraFindDataParams): Promise { const aggs: Record = {}; @@ -121,7 +179,7 @@ async function injectExtraFindData({ }; } - const aggregationResult = await searchConnectorsSo({ scopedClusterClient, kibanaIndices, aggs }); + const aggregationResult = await searchConnectorsSo({ esClient, kibanaIndices, aggs }); return connectors.map((connector) => ({ ...connector, diff --git a/x-pack/plugins/actions/server/application/connector/methods/get_all/index.ts b/x-pack/plugins/actions/server/application/connector/methods/get_all/index.ts index dcbc4c6fbc957..5b3da65578d65 100644 --- a/x-pack/plugins/actions/server/application/connector/methods/get_all/index.ts +++ b/x-pack/plugins/actions/server/application/connector/methods/get_all/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export { getAll } from './get_all'; +export { getAll, getAllUnsecured } from './get_all'; diff --git a/x-pack/plugins/actions/server/application/connector/methods/get_all/types/params.ts b/x-pack/plugins/actions/server/application/connector/methods/get_all/types/params.ts index 4e5157a1fdce0..ca0afdb782f7d 100644 --- a/x-pack/plugins/actions/server/application/connector/methods/get_all/types/params.ts +++ b/x-pack/plugins/actions/server/application/connector/methods/get_all/types/params.ts @@ -5,7 +5,10 @@ * 2.0. */ -import { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; +import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { ISavedObjectsRepository, Logger } from '@kbn/core/server'; +import { AuditLogger } from '@kbn/security-plugin/server'; +import { InMemoryConnector } from '../../../../..'; import { ActionsClientContext } from '../../../../../actions_client'; import { Connector } from '../../../types'; @@ -14,8 +17,18 @@ export interface GetAllParams { context: ActionsClientContext; } +export interface GetAllUnsecuredParams { + auditLogger?: AuditLogger; + esClient: ElasticsearchClient; + inMemoryConnectors: InMemoryConnector[]; + internalSavedObjectsRepository: ISavedObjectsRepository; + kibanaIndices: string[]; + logger: Logger; + spaceId: string; +} + export interface InjectExtraFindDataParams { kibanaIndices: string[]; - scopedClusterClient: IScopedClusterClient; + esClient: ElasticsearchClient; connectors: Connector[]; } diff --git a/x-pack/plugins/actions/server/data/connector/find_connectors_so.ts b/x-pack/plugins/actions/server/data/connector/find_connectors_so.ts index da232f5b2aa83..238ae18a1b62b 100644 --- a/x-pack/plugins/actions/server/data/connector/find_connectors_so.ts +++ b/x-pack/plugins/actions/server/data/connector/find_connectors_so.ts @@ -9,10 +9,12 @@ import { FindConnectorsSoResult, FindConnectorsSoParams } from './types'; import { MAX_ACTIONS_RETURNED } from './constants'; export const findConnectorsSo = async ({ - unsecuredSavedObjectsClient, + savedObjectsClient, + namespace, }: FindConnectorsSoParams): Promise => { - return unsecuredSavedObjectsClient.find({ + return savedObjectsClient.find({ perPage: MAX_ACTIONS_RETURNED, type: 'action', + ...(namespace ? { namespaces: [namespace] } : {}), }); }; diff --git a/x-pack/plugins/actions/server/data/connector/search_connectors_so.ts b/x-pack/plugins/actions/server/data/connector/search_connectors_so.ts index 09d3ae3b532d9..ab549899348ae 100644 --- a/x-pack/plugins/actions/server/data/connector/search_connectors_so.ts +++ b/x-pack/plugins/actions/server/data/connector/search_connectors_so.ts @@ -8,11 +8,11 @@ import { SearchConnectorsSoParams } from './types'; export const searchConnectorsSo = async ({ - scopedClusterClient, + esClient, kibanaIndices, aggs, }: SearchConnectorsSoParams) => { - return scopedClusterClient.asInternalUser.search({ + return esClient.search({ index: kibanaIndices, ignore_unavailable: true, body: { diff --git a/x-pack/plugins/actions/server/data/connector/types/params.ts b/x-pack/plugins/actions/server/data/connector/types/params.ts index 73d8ea6dadd14..c23447fb37486 100644 --- a/x-pack/plugins/actions/server/data/connector/types/params.ts +++ b/x-pack/plugins/actions/server/data/connector/types/params.ts @@ -5,18 +5,21 @@ * 2.0. */ -import { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; +import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import { SavedObjectsClient } from '@kbn/core/server'; +export type SavedObjectClientForFind = Pick; export interface SearchConnectorsSoParams { kibanaIndices: string[]; - scopedClusterClient: IScopedClusterClient; + esClient: ElasticsearchClient; aggs: Record; } export interface FindConnectorsSoParams { - unsecuredSavedObjectsClient: SavedObjectsClientContract; + savedObjectsClient: SavedObjectClientForFind; + namespace?: string; } export interface GetConnectorSoParams { diff --git a/x-pack/plugins/actions/server/plugin.ts b/x-pack/plugins/actions/server/plugin.ts index 33383e526e36d..1ef28b10e6440 100644 --- a/x-pack/plugins/actions/server/plugin.ts +++ b/x-pack/plugins/actions/server/plugin.ts @@ -486,18 +486,22 @@ export class ActionsPlugin implements Plugin { const internalSavedObjectsRepository = core.savedObjects.createInternalRepository([ + ACTION_SAVED_OBJECT_TYPE, ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, ]); return new UnsecuredActionsClient({ actionExecutor: actionExecutor!, - internalSavedObjectsRepository, + clusterClient: core.elasticsearch.client, executionEnqueuer: createBulkUnsecuredExecutionEnqueuerFunction({ taskManager: plugins.taskManager, connectorTypeRegistry: actionTypeRegistry!, inMemoryConnectors: this.inMemoryConnectors, configurationUtilities: actionsConfigUtils, }), + inMemoryConnectors: this.inMemoryConnectors, + internalSavedObjectsRepository, + kibanaIndices: core.savedObjects.getAllIndices(), logger: this.logger, }); }; diff --git a/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.mock.ts b/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.mock.ts index 4cbbfa1604dc1..748847d579eeb 100644 --- a/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.mock.ts +++ b/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.mock.ts @@ -11,6 +11,7 @@ export type UnsecuredActionsClientMock = jest.Mocked; const createUnsecuredActionsClientMock = () => { const mocked: UnsecuredActionsClientMock = { + getAll: jest.fn(), execute: jest.fn(), bulkEnqueueExecution: jest.fn(), }; diff --git a/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.test.ts b/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.test.ts index 5df39e28fcbc1..89145d80eea19 100644 --- a/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.test.ts +++ b/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.test.ts @@ -6,28 +6,125 @@ */ import { v4 as uuidv4 } from 'uuid'; -import { loggingSystemMock, savedObjectsRepositoryMock } from '@kbn/core/server/mocks'; +import { + elasticsearchServiceMock, + loggingSystemMock, + savedObjectsRepositoryMock, +} from '@kbn/core/server/mocks'; import { asNotificationExecutionSource } from '../lib'; import { actionExecutorMock } from '../lib/action_executor.mock'; import { UnsecuredActionsClient } from './unsecured_actions_client'; +import { Logger } from '@kbn/core/server'; +import { getAllUnsecured } from '../application/connector/methods/get_all/get_all'; + +jest.mock('../application/connector/methods/get_all/get_all'); + +const mockGetAllUnsecured = getAllUnsecured as jest.MockedFunction; const internalSavedObjectsRepository = savedObjectsRepositoryMock.create(); const actionExecutor = actionExecutorMock.create(); const executionEnqueuer = jest.fn(); -const logger = loggingSystemMock.create().get(); - +const logger = loggingSystemMock.create().get() as jest.Mocked; +const clusterClient = elasticsearchServiceMock.createClusterClient(); +const inMemoryConnectors = [ + { + id: 'testPreconfigured', + actionTypeId: '.slack', + secrets: {}, + isPreconfigured: true, + isDeprecated: false, + isSystemAction: false, + name: 'test', + config: { + foo: 'bar', + }, + }, + /** + * System actions will not + * be returned from getAllUnsecured + */ + { + id: 'system-connector-.cases', + actionTypeId: '.cases', + name: 'System action: .cases', + config: {}, + secrets: {}, + isDeprecated: false, + isMissingSecrets: false, + isPreconfigured: false, + isSystemAction: true, + }, +]; let unsecuredActionsClient: UnsecuredActionsClient; beforeEach(() => { jest.resetAllMocks(); unsecuredActionsClient = new UnsecuredActionsClient({ actionExecutor, - internalSavedObjectsRepository, + clusterClient, executionEnqueuer, + inMemoryConnectors, + internalSavedObjectsRepository, + kibanaIndices: ['.kibana'], logger, }); }); +describe('getAll()', () => { + test('calls getAllUnsecured library method with appropriate parameters', async () => { + const expectedResult = [ + { + actionTypeId: 'test', + id: '1', + name: 'test', + isMissingSecrets: false, + config: { foo: 'bar' }, + isPreconfigured: false, + isDeprecated: false, + isSystemAction: false, + referencedByCount: 6, + }, + { + id: 'testPreconfigured', + actionTypeId: '.slack', + name: 'test', + isPreconfigured: true, + isSystemAction: false, + isDeprecated: false, + referencedByCount: 2, + }, + ]; + mockGetAllUnsecured.mockResolvedValueOnce(expectedResult); + const result = await unsecuredActionsClient.getAll('default'); + expect(result).toEqual(expectedResult); + expect(mockGetAllUnsecured).toHaveBeenCalledWith({ + esClient: clusterClient.asInternalUser, + inMemoryConnectors, + kibanaIndices: ['.kibana'], + logger, + internalSavedObjectsRepository, + spaceId: 'default', + }); + }); + + test('throws error if getAllUnsecured throws errors', async () => { + mockGetAllUnsecured.mockImplementationOnce(() => { + throw new Error('failfail'); + }); + await expect( + unsecuredActionsClient.getAll('customSpace') + ).rejects.toThrowErrorMatchingInlineSnapshot(`"failfail"`); + expect(mockGetAllUnsecured).toHaveBeenCalledWith({ + esClient: clusterClient.asInternalUser, + inMemoryConnectors, + kibanaIndices: ['.kibana'], + logger, + internalSavedObjectsRepository, + spaceId: 'customSpace', + }); + }); +}); + describe('execute()', () => { test('throws error when executing action with not allowed requester id', async () => { await expect( diff --git a/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts b/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts index 96449380a82cd..8331f6890486c 100644 --- a/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts +++ b/x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts @@ -6,7 +6,7 @@ */ import { v4 as uuidv4 } from 'uuid'; -import { ISavedObjectsRepository, Logger } from '@kbn/core/server'; +import { IClusterClient, ISavedObjectsRepository, Logger } from '@kbn/core/server'; import { BulkUnsecuredExecutionEnqueuer, ExecuteOptions, @@ -17,8 +17,10 @@ import { asNotificationExecutionSource, type RelatedSavedObjects, } from '../lib'; -import { ActionTypeExecutorResult } from '../types'; +import { ActionTypeExecutorResult, InMemoryConnector } from '../types'; import { asBackgroundTaskExecutionSource } from '../lib/action_execution_source'; +import { ConnectorWithExtraFindData } from '../application/connector/types'; +import { getAllUnsecured } from '../application/connector/methods/get_all/get_all'; // requests from the notification service (for system notification) const NOTIFICATION_REQUESTER_ID = 'notifications'; @@ -37,8 +39,11 @@ const ALLOWED_REQUESTER_IDS = [ export interface UnsecuredActionsClientOpts { actionExecutor: ActionExecutorContract; - internalSavedObjectsRepository: ISavedObjectsRepository; + clusterClient: IClusterClient; executionEnqueuer: BulkUnsecuredExecutionEnqueuer; + inMemoryConnectors: InMemoryConnector[]; + internalSavedObjectsRepository: ISavedObjectsRepository; + kibanaIndices: string[]; logger: Logger; } @@ -48,6 +53,7 @@ type UnsecuredExecuteOptions = Omit & { }; export interface IUnsecuredActionsClient { + getAll: (spaceId: string) => Promise; execute: (opts: UnsecuredExecuteOptions) => Promise>; bulkEnqueueExecution: ( requesterId: string, @@ -56,17 +62,7 @@ export interface IUnsecuredActionsClient { } export class UnsecuredActionsClient { - private readonly actionExecutor: ActionExecutorContract; - private readonly internalSavedObjectsRepository: ISavedObjectsRepository; - private readonly executionEnqueuer: BulkUnsecuredExecutionEnqueuer; - private readonly logger: Logger; - - constructor(params: UnsecuredActionsClientOpts) { - this.actionExecutor = params.actionExecutor; - this.executionEnqueuer = params.executionEnqueuer; - this.internalSavedObjectsRepository = params.internalSavedObjectsRepository; - this.logger = params.logger; - } + constructor(private readonly opts: UnsecuredActionsClientOpts) {} public async execute({ requesterId, @@ -83,14 +79,14 @@ export class UnsecuredActionsClient { } if (!relatedSavedObjects) { - this.logger.warn( + this.opts.logger.warn( `Calling "execute" in UnsecuredActionsClient without any relatedSavedObjects data. Consider including this for traceability.` ); } const source = this.getSourceFromRequester(requesterId, id, relatedSavedObjects); - return this.actionExecutor.executeUnsecured({ + return this.opts.actionExecutor.executeUnsecured({ actionExecutionId: uuidv4(), actionId: id, params, @@ -123,7 +119,18 @@ export class UnsecuredActionsClient { ...source, }; }); - return this.executionEnqueuer(this.internalSavedObjectsRepository, actionsToEnqueue); + return this.opts.executionEnqueuer(this.opts.internalSavedObjectsRepository, actionsToEnqueue); + } + + public async getAll(spaceId: string): Promise { + return getAllUnsecured({ + esClient: this.opts.clusterClient.asInternalUser, + inMemoryConnectors: this.opts.inMemoryConnectors, + kibanaIndices: this.opts.kibanaIndices, + logger: this.opts.logger, + internalSavedObjectsRepository: this.opts.internalSavedObjectsRepository, + spaceId, + }); } private getSourceFromRequester( diff --git a/x-pack/plugins/actions/tsconfig.json b/x-pack/plugins/actions/tsconfig.json index d30c8bdde7d60..aae2d31c7aa09 100644 --- a/x-pack/plugins/actions/tsconfig.json +++ b/x-pack/plugins/actions/tsconfig.json @@ -44,7 +44,8 @@ "@kbn/core-logging-server-mocks", "@kbn/serverless", "@kbn/actions-types", - "@kbn/core-test-helpers-kbn-server" + "@kbn/core-test-helpers-kbn-server", + "@kbn/security-plugin-types-server" ], "exclude": [ "target/**/*", diff --git a/x-pack/test/alerting_api_integration/common/plugins/actions_simulators/server/unsecured_actions_simulation.ts b/x-pack/test/alerting_api_integration/common/plugins/actions_simulators/server/unsecured_actions_simulation.ts index 675dbe50afd54..536abe2d3526e 100644 --- a/x-pack/test/alerting_api_integration/common/plugins/actions_simulators/server/unsecured_actions_simulation.ts +++ b/x-pack/test/alerting_api_integration/common/plugins/actions_simulators/server/unsecured_actions_simulation.ts @@ -94,4 +94,33 @@ export function initPlugin(router: IRouter, coreSetup: CoreSetup, + res: KibanaResponseFactory + ): Promise> { + const [_, { actions }] = await coreSetup.getStartServices(); + const { body } = req; + + try { + const unsecuredActionsClient = actions.getUnsecuredActionsClient(); + const { spaceId } = body; + const result = await unsecuredActionsClient.getAll(spaceId); + + return res.ok({ body: { status: 'success', result } }); + } catch (err) { + return res.ok({ body: { status: 'error', error: `${err}` } }); + } + } + ); } diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get_all_unsecured_actions.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get_all_unsecured_actions.ts new file mode 100644 index 0000000000000..3183f19771f16 --- /dev/null +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get_all_unsecured_actions.ts @@ -0,0 +1,209 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 '../../../../common/ftr_provider_context'; +import { getUrlPrefix, ObjectRemover } from '../../../common/lib'; +import { Spaces } from '../../scenarios'; + +// eslint-disable-next-line import/no-default-export +export default function createUnsecuredActionTests({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const kibanaServer = getService('kibanaServer'); + + const preconfiguredConnectors = [ + { + id: 'preconfigured-alert-history-es-index', + actionTypeId: '.index', + name: 'Alert history Elasticsearch index', + isPreconfigured: true, + isDeprecated: false, + isSystemAction: false, + referencedByCount: 0, + }, + { + id: 'notification-email', + actionTypeId: '.email', + name: 'Notification Email Connector', + isPreconfigured: true, + isDeprecated: false, + isSystemAction: false, + referencedByCount: 0, + }, + { + id: 'preconfigured-es-index-action', + actionTypeId: '.index', + name: 'preconfigured_es_index_action', + isPreconfigured: true, + isDeprecated: false, + isSystemAction: false, + referencedByCount: 0, + }, + { + id: 'my-deprecated-servicenow', + actionTypeId: '.servicenow', + name: 'ServiceNow#xyz', + isPreconfigured: true, + isDeprecated: true, + isSystemAction: false, + referencedByCount: 0, + }, + { + id: 'my-deprecated-servicenow-default', + actionTypeId: '.servicenow', + name: 'ServiceNow#xyz', + isPreconfigured: true, + isDeprecated: true, + isSystemAction: false, + referencedByCount: 0, + }, + { + id: 'my-slack1', + actionTypeId: '.slack', + name: 'Slack#xyz', + isPreconfigured: true, + isDeprecated: false, + isSystemAction: false, + referencedByCount: 0, + }, + { + id: 'custom-system-abc-connector', + actionTypeId: 'system-abc-action-type', + name: 'SystemABC', + isPreconfigured: true, + isDeprecated: false, + isSystemAction: false, + referencedByCount: 0, + }, + { + id: 'preconfigured.test.index-record', + actionTypeId: 'test.index-record', + name: 'Test:_Preconfigured_Index_Record', + isPreconfigured: true, + isDeprecated: false, + isSystemAction: false, + referencedByCount: 0, + }, + { + id: 'my-test-email', + actionTypeId: '.email', + name: 'TestEmail#xyz', + isPreconfigured: true, + isDeprecated: false, + isSystemAction: false, + referencedByCount: 0, + }, + ]; + + describe('get all unsecured actions', () => { + const objectRemover = new ObjectRemover(supertest); + + // need to wait for kibanaServer to settle ... + before(() => { + kibanaServer.resolveUrl(`/api/get_all_unsecured_actions`); + }); + + after(() => objectRemover.removeAll()); + + it('should successfully get all actions', async () => { + // Create a connector + const { body: createdConnector1 } = await supertest + .post(`${getUrlPrefix(Spaces.space1.id)}/api/actions/connector`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'zzz - My action1', + connector_type_id: 'test.index-record', + config: { + unencrypted: `This value shouldn't get encrypted`, + }, + secrets: { + encrypted: 'This value should be encrypted', + }, + }) + .expect(200); + objectRemover.add(Spaces.space1.id, createdConnector1.id, 'action', 'actions'); + + const { body: createdConnector2 } = await supertest + .post(`${getUrlPrefix(Spaces.other.id)}/api/actions/connector`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'zzz - My action2', + connector_type_id: 'test.index-record', + config: { + unencrypted: `This value shouldn't get encrypted`, + }, + secrets: { + encrypted: 'This value should be encrypted', + }, + }) + .expect(200); + objectRemover.add(Spaces.other.id, createdConnector2.id, 'action', 'actions'); + + const space1SpaceResponse = await supertest + .post(`/api/get_all_unsecured_actions`) + .set('kbn-xsrf', 'xxx') + .send({ + spaceId: Spaces.space1.id, + }) + .expect(200); + expect(space1SpaceResponse.body.status).to.eql('success'); + + // the custom ssl connectors have dynamic ports, so remove them before + // comparing to what we expect + const preconfiguredWithSpace1Connector = space1SpaceResponse.body.result.filter( + (conn: { id: string }) => !conn.id.startsWith('custom.ssl.') + ); + expect(preconfiguredWithSpace1Connector).to.eql([ + ...preconfiguredConnectors, + { + id: createdConnector1.id, + isPreconfigured: false, + isDeprecated: false, + name: 'zzz - My action1', + actionTypeId: 'test.index-record', + isMissingSecrets: false, + isSystemAction: false, + config: { + unencrypted: `This value shouldn't get encrypted`, + }, + referencedByCount: 0, + }, + ]); + + const otherSpaceResponse = await supertest + .post(`/api/get_all_unsecured_actions`) + .set('kbn-xsrf', 'xxx') + .send({ + spaceId: Spaces.other.id, + }) + .expect(200); + expect(otherSpaceResponse.body.status).to.eql('success'); + + // the custom ssl connectors have dynamic ports, so remove them before + // comparing to what we expect + const preconfiguredWithOtherSpaceConnector = otherSpaceResponse.body.result.filter( + (conn: { id: string }) => !conn.id.startsWith('custom.ssl.') + ); + expect(preconfiguredWithOtherSpaceConnector).to.eql([ + ...preconfiguredConnectors, + { + id: createdConnector2.id, + isPreconfigured: false, + isDeprecated: false, + name: 'zzz - My action2', + actionTypeId: 'test.index-record', + isMissingSecrets: false, + isSystemAction: false, + config: { + unencrypted: `This value shouldn't get encrypted`, + }, + referencedByCount: 0, + }, + ]); + }); + }); +} diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts index 89f1d48285ae2..4f5832debebda 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts @@ -31,6 +31,7 @@ export default function actionsTests({ loadTestFile, getService }: FtrProviderCo loadTestFile(require.resolve('./type_not_enabled')); loadTestFile(require.resolve('./schedule_unsecured_action')); loadTestFile(require.resolve('./execute_unsecured_action')); + loadTestFile(require.resolve('./get_all_unsecured_actions')); loadTestFile(require.resolve('./check_registered_connector_types')); loadTestFile(require.resolve('./max_queued_actions_circuit_breaker')); From 09b5cf1131dae46d95ace8a44a741816619edda9 Mon Sep 17 00:00:00 2001 From: Antonio Date: Thu, 21 Mar 2024 22:19:46 +0100 Subject: [PATCH 35/90] [Connectors][Jira] Add support for custom fields in the API. (#178627) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #177011 ## Summary This PR extends the Jira connector API to support custom fields. ## Testing This takes a few steps so bear with me. ### Preconditions 1. [Create a custom field in Jira.](https://support.atlassian.com/jira-cloud-administration/docs/create-a-custom-field/) 2. Use the Jira API to get the ID of the custom field. 1. First you need to [fetch all issue types](https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-issues/#api-rest-api-2-issue-createmeta-projectidorkey-issuetypes-get) from Jira to get the correct issue ID. 2. Then you can call the [get create issue metadata API](https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-issues/#api-rest-api-2-issue-createmeta-projectidorkey-issuetypes-issuetypeid-get), using one of the issue ids found in the previous step, to find the ID of the custom field you created. 3. Create a Jira connector and find its ID. Alternatively, you can talk to me and I'll tell you the ID of some custom fields I created in the ROC Jira project 😄 ### Executing the action Make the following API call ``` POST /api/actions/connector//_execute { "params": { "subAction": "pushToService", "subActionParams": { "incident": { "summary": "Whatever", "description": "Whatever", "issueType": "10006", "otherFields": { "YOUR_CUSTOM_FIELD_ID": "Whatever" } }, "comments": [] } } } ``` ### Verification Login to Jira and verify that a new issue was created with the corresponding custom field populated with the value you defined. ### Checklist Delete any items that do not apply to this PR. - [x] [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 ### For maintainers - [x] 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) ## Release notes Extend the Jira connector API to support the `otherFields ` property to pass additional fields to be used when updating or creating issues via the [Jira API](https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-issues/#api-rest-api-2-issue-post). --- .../connector_types.test.ts.snap | 69 ++++++++++++ .../synthetics/common/rules/alert_actions.ts | 1 + .../uptime/common/rules/alert_actions.ts | 1 + x-pack/plugins/stack_connectors/README.md | 37 ++++--- .../connector_types/jira/jira_params.test.tsx | 1 + .../server/connector_types/jira/api.test.ts | 61 +++++++++++ .../server/connector_types/jira/constants.ts | 8 ++ .../server/connector_types/jira/mocks.ts | 1 + .../connector_types/jira/schema.test.ts | 79 ++++++++++++++ .../server/connector_types/jira/schema.ts | 50 ++++++--- .../connector_types/jira/service.test.ts | 85 +++++++++++++++ .../server/connector_types/jira/service.ts | 5 +- .../connector_types/jira/translations.ts | 12 +++ .../server/connector_types/jira/validators.ts | 18 ++++ .../tests/actions/connector_types/jira.ts | 102 ++++++++++++++++++ 15 files changed, 495 insertions(+), 35 deletions(-) create mode 100644 x-pack/plugins/stack_connectors/server/connector_types/jira/constants.ts create mode 100644 x-pack/plugins/stack_connectors/server/connector_types/jira/schema.test.ts diff --git a/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap b/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap index 9b74e91c6eac5..cd582c8459ce7 100644 --- a/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap +++ b/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap @@ -3794,6 +3794,75 @@ Object { ], "type": "alternatives", }, + "otherFields": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "value": Object { + "flags": Object { + "error": [Function], + }, + "type": "any", + }, + }, + "name": "entries", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "record", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, "parent": Object { "flags": Object { "default": null, diff --git a/x-pack/plugins/observability_solution/synthetics/common/rules/alert_actions.ts b/x-pack/plugins/observability_solution/synthetics/common/rules/alert_actions.ts index 02402c8eed944..3a11325d78b1a 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/rules/alert_actions.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/rules/alert_actions.ts @@ -240,6 +240,7 @@ function getJiraActionParams({ defaultActionMessage }: Translations): JiraAction priority: '2', labels: null, parent: null, + otherFields: null, }, comments: [], }, diff --git a/x-pack/plugins/observability_solution/uptime/common/rules/alert_actions.ts b/x-pack/plugins/observability_solution/uptime/common/rules/alert_actions.ts index d0232bddea632..007a49be1ba81 100644 --- a/x-pack/plugins/observability_solution/uptime/common/rules/alert_actions.ts +++ b/x-pack/plugins/observability_solution/uptime/common/rules/alert_actions.ts @@ -232,6 +232,7 @@ function getJiraActionParams({ defaultActionMessage }: Translations): JiraAction priority: '2', labels: null, parent: null, + otherFields: null, }, comments: [], }, diff --git a/x-pack/plugins/stack_connectors/README.md b/x-pack/plugins/stack_connectors/README.md index 40199153902c0..3543ee5f775a3 100644 --- a/x-pack/plugins/stack_connectors/README.md +++ b/x-pack/plugins/stack_connectors/README.md @@ -41,7 +41,7 @@ Table of Contents - [`subActionParams (severity)`](#subactionparams-severity) - [Swimlane](#swimlane) - [`params`](#params-5) - - [| severity | The severity of the incident. | string _(optional)_ |](#-severity-----the-severity-of-the-incident-----string-optional-) + - [| severity | The severity of the incident. | string _(optional)_ |](#-severity-----the-severity-of-the-incident-----string-optional-) - [Ospgenie](#ospgenie) - [`params`](#params-6) - [PagerDuty](#pagerduty) @@ -63,6 +63,7 @@ In addition to the documented configurations, several built in connector type of ## ServiceNow ITSM The [ServiceNow ITSM user documentation `params`](https://www.elastic.co/guide/en/kibana/master/servicenow-action-type.html) lists configuration properties for the `pushToService` subaction. In addition, several other subaction types are available. + ### `params` | Property | Description | Type | @@ -102,7 +103,6 @@ No parameters for the `getFields` subaction. Provide an empty object `{}`. | ---------- | ------------------------------------- | ------ | | externalId | The ID of the incident in ServiceNow. | string | - #### `subActionParams (getChoices)` | Property | Description | Type | @@ -139,7 +139,7 @@ The following table describes the properties of the `incident` object. | priority | The priority in ServiceNow. | string _(optional)_ | | dest_ip | A list of destination IPs related to the security incident. The IPs will be added as observables to the security incident. | (string \| string[]) _(optional)_ | | source_ip | A list of source IPs related to the security incident. The IPs will be added as observables to the security incident. | (string \| string[]) _(optional)_ | -| malware_hash | A list of malware hashes related to the security incident. The hashes will be added as observables to the security incident. | (string \| string[]) _(optional)_ | +| malware_hash | A list of malware hashes related to the security incident. The hashes will be added as observables to the security incident. | (string \| string[]) _(optional)_ | | malware_url | A list of malware URLs related to the security incident. The URLs will be added as observables to the security incident. | (string \| string[]) _(optional)_ | | category | The category in ServiceNow. | string _(optional)_ | | subcategory | The subcategory in ServiceNow. | string _(optional)_ | @@ -156,7 +156,6 @@ No parameters for the `getFields` subaction. Provide an empty object `{}`. | ---------- | ---------------------------------------------- | ------ | | externalId | The ID of the security incident in ServiceNow. | string | - #### `subActionParams (getChoices)` | Property | Description | Type | @@ -164,9 +163,11 @@ No parameters for the `getFields` subaction. Provide an empty object `{}`. | fields | An array of fields. Example: `[priority, category]`. | string[] | --- + ## ServiceNow ITOM The [ServiceNow ITOM user documentation `params`](https://www.elastic.co/guide/en/kibana/master/servicenow-itom-action-type.html) lists configuration properties for the `addEvent` subaction. In addition, several other subaction types are available. + ### `params` | Property | Description | Type | @@ -176,7 +177,6 @@ The [ServiceNow ITOM user documentation `params`](https://www.elastic.co/guide/e #### `subActionParams (addEvent)` - | Property | Description | Type | | --------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------- | | source | The name of the event source type. | string _(optional)_ | @@ -200,9 +200,11 @@ Refer to [ServiceNow documentation](https://docs.servicenow.com/bundle/rome-it-o | fields | An array of fields. Example: `[severity]`. | string[] | --- + ## Jira The [Jira user documentation `params`](https://www.elastic.co/guide/en/kibana/master/jira-action-type.html) lists configuration properties for the `pushToService` subaction. In addition, several other subaction types are available. + ### `params` | Property | Description | Type | @@ -219,15 +221,16 @@ The [Jira user documentation `params`](https://www.elastic.co/guide/en/kibana/ma The following table describes the properties of the `incident` object. -| Property | Description | Type | -| ----------- | ------------------------------------------------------------------------------------------------------- | --------------------- | -| summary | The title of the issue. | string | -| description | The description of the issue. | string _(optional)_ | -| externalId | The ID of the issue in Jira. If present, the incident is updated. Otherwise, a new incident is created. | string _(optional)_ | -| issueType | The ID of the issue type in Jira. | string _(optional)_ | -| priority | The name of the priority in Jira. Example: `Medium`. | string _(optional)_ | -| labels | An array of labels. Labels cannot contain spaces. | string[] _(optional)_ | -| parent | The ID or key of the parent issue. Only for `Sub-task` issue types. | string _(optional)_ | +| Property | Description | Type | +| ----------- | ------------------------------------------------------------------------------------------------------- | -------------------------------- | +| summary | The title of the issue. | string | +| description | The description of the issue. | string _(optional)_ | +| externalId | The ID of the issue in Jira. If present, the incident is updated. Otherwise, a new incident is created. | string _(optional)_ | +| issueType | The ID of the issue type in Jira. | string _(optional)_ | +| priority | The name of the priority in Jira. Example: `Medium`. | string _(optional)_ | +| labels | An array of labels. Labels cannot contain spaces. | string[] _(optional)_ | +| parent | The ID or key of the parent issue. Only for `Sub-task` issue types. | string _(optional)_ | +| otherFields | An object containing key-value pairs of any other fields in Jira without explicit properties. | Record _(optional)_ | #### `subActionParams (getIncident)` @@ -304,6 +307,7 @@ No parameters for the `incidentTypes` subaction. Provide an empty object `{}`. No parameters for the `severity` subaction. Provide an empty object `{}`. --- + ## Swimlane Refer to the [Run connector API documentation](https://www.elastic.co/guide/en/kibana/master/execute-connector-api.html#execute-connector-api-request-body) @@ -316,7 +320,6 @@ for the full list of properties. | subAction | The subaction to perform. It can be `pushToService`. | string | | subActionParams | The parameters of the subaction. | object | - `subActionParams (pushToService)` | Property | Description | Type | @@ -324,7 +327,6 @@ for the full list of properties. | incident | The Swimlane incident. | object | | comments | The comments of the case. A comment is of the form `{ commentId: string, version: string, comment: string }`. | object[] _(optional)_ | - The following table describes the properties of the `incident` object. | Property | Description | Type | @@ -335,6 +337,7 @@ The following table describes the properties of the `incident` object. | description | The description of the incident. | string _(optional)_ | | ruleName | The rule name. | string _(optional)_ | | severity | The severity of the incident. | string _(optional)_ | + --- ## Ospgenie @@ -363,7 +366,7 @@ No parameters are required. For the definition of the optional parameters see th --- -## PagerDuty +## PagerDuty The [PagerDuty user documentation `params`](https://www.elastic.co/guide/en/kibana/master/pagerduty-action-type.html) lists configuration properties for the `params`. For more details on these properties, see [PagerDuty v2 event parameters](https://developer.pagerduty.com/docs/ZG9jOjExMDI5NTgx-send-an-alert-event) . diff --git a/x-pack/plugins/stack_connectors/public/connector_types/jira/jira_params.test.tsx b/x-pack/plugins/stack_connectors/public/connector_types/jira/jira_params.test.tsx index 6deb820876b96..26adf2bb27b7a 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/jira/jira_params.test.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/jira/jira_params.test.tsx @@ -37,6 +37,7 @@ const actionParams = { priority: 'High', externalId: null, parent: null, + otherFields: null, }, comments: [], }, diff --git a/x-pack/plugins/stack_connectors/server/connector_types/jira/api.test.ts b/x-pack/plugins/stack_connectors/server/connector_types/jira/api.test.ts index 43b969f9c9681..6e2b76505ea78 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/jira/api.test.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/jira/api.test.ts @@ -73,6 +73,7 @@ describe('api', () => { parent: null, description: 'Incident description', summary: 'Incident title', + otherFields: null, }, }); expect(externalService.updateIncident).not.toHaveBeenCalled(); @@ -90,6 +91,7 @@ describe('api', () => { labels: ['kibana', 'elastic'], priority: 'High', parent: null, + otherFields: null, }, }); expect(externalService.updateIncident).not.toHaveBeenCalled(); @@ -136,6 +138,34 @@ describe('api', () => { }, }); }); + + describe('otherFields', () => { + test('it calls createIncident with otherFields correctly', async () => { + const otherFields = { + foo: 'bar', + foobar1: true, + foobar2: 2, + }; + const params = { + ...apiParams, + incident: { ...apiParams.incident, externalId: null, otherFields }, + }; + await api.pushToService({ externalService, params, logger: mockedLogger }); + + expect(externalService.createIncident).toHaveBeenCalledWith({ + incident: { + labels: ['kibana', 'elastic'], + priority: 'High', + issueType: '10006', + parent: null, + description: 'Incident description', + summary: 'Incident title', + otherFields, + }, + }); + expect(externalService.updateIncident).not.toHaveBeenCalled(); + }); + }); }); describe('update incident', () => { @@ -193,6 +223,7 @@ describe('api', () => { parent: null, description: 'Incident description', summary: 'Incident title', + otherFields: null, }, }); expect(externalService.createIncident).not.toHaveBeenCalled(); @@ -211,6 +242,7 @@ describe('api', () => { labels: ['kibana', 'elastic'], priority: 'High', parent: null, + otherFields: null, }, }); expect(externalService.createIncident).not.toHaveBeenCalled(); @@ -257,6 +289,35 @@ describe('api', () => { }, }); }); + + describe('otherFields', () => { + test('it calls updateIncident with otherFields correctly', async () => { + const otherFields = { + foo: 'bar', + foobar1: true, + foobar2: 2, + }; + const params = { + ...apiParams, + incident: { ...apiParams.incident, otherFields }, + }; + await api.pushToService({ externalService, params, logger: mockedLogger }); + + expect(externalService.updateIncident).toHaveBeenCalledWith({ + incidentId: 'incident-3', + incident: { + labels: ['kibana', 'elastic'], + priority: 'High', + issueType: '10006', + parent: null, + description: 'Incident description', + summary: 'Incident title', + otherFields, + }, + }); + expect(externalService.createIncident).not.toHaveBeenCalled(); + }); + }); }); describe('issueTypes', () => { diff --git a/x-pack/plugins/stack_connectors/server/connector_types/jira/constants.ts b/x-pack/plugins/stack_connectors/server/connector_types/jira/constants.ts new file mode 100644 index 0000000000000..cfa671ca7db32 --- /dev/null +++ b/x-pack/plugins/stack_connectors/server/connector_types/jira/constants.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 const MAX_OTHER_FIELDS_LENGTH = 20; diff --git a/x-pack/plugins/stack_connectors/server/connector_types/jira/mocks.ts b/x-pack/plugins/stack_connectors/server/connector_types/jira/mocks.ts index f006fdabdc912..82de9d78b24e7 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/jira/mocks.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/jira/mocks.ts @@ -120,6 +120,7 @@ const executorParams: ExecutorSubActionPushParams = { priority: 'High', issueType: '10006', parent: null, + otherFields: null, }, comments: [ { diff --git a/x-pack/plugins/stack_connectors/server/connector_types/jira/schema.test.ts b/x-pack/plugins/stack_connectors/server/connector_types/jira/schema.test.ts new file mode 100644 index 0000000000000..2c936c3abd89b --- /dev/null +++ b/x-pack/plugins/stack_connectors/server/connector_types/jira/schema.test.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { MAX_OTHER_FIELDS_LENGTH } from './constants'; +import { ExecutorSubActionPushParamsSchema, incidentSchemaObjectProperties } from './schema'; + +describe('Jira schema', () => { + const incident = { + summary: 'title', + description: 'desc', + labels: [], + issueType: '10006', + priority: 'High', + parent: 'RJ-107', + otherFields: null, + }; + + describe('ExecutorSubActionPushParamsSchema', () => { + it('validates the test object ExecutorSubActionPushParamsSchema correctly', () => { + expect(() => ExecutorSubActionPushParamsSchema.validate({ incident })).not.toThrow(); + }); + + describe('otherFields', () => { + it('validates the otherFields correctly', () => { + expect(() => + ExecutorSubActionPushParamsSchema.validate({ + incident: { + ...incident, + otherFields: { + foo: 'bar', + foo1: true, + foo2: 2, + }, + }, + }) + ).not.toThrow(); + }); + + it('throws if the otherFields object has too many properties', () => { + const otherFields = new Array(MAX_OTHER_FIELDS_LENGTH + 1) + .fill('foobar') + .reduce((acc, curr, idx) => { + acc[idx] = curr; + return acc; + }, {}); + + expect(() => + ExecutorSubActionPushParamsSchema.validate({ + incident: { + ...incident, + otherFields, + }, + }) + ).toThrow('A maximum of 20 otherFields can be defined at a time.'); + }); + + it.each(incidentSchemaObjectProperties)( + 'throws if the otherFields object has the %p property', + (property) => { + const otherFields = { + [property]: 'foobar', + }; + expect(() => + ExecutorSubActionPushParamsSchema.validate({ + incident: { + ...incident, + otherFields, + }, + }) + ).toThrow(`The following properties cannot be defined inside otherFields: ${property}.`); + } + ); + }); + }); +}); diff --git a/x-pack/plugins/stack_connectors/server/connector_types/jira/schema.ts b/x-pack/plugins/stack_connectors/server/connector_types/jira/schema.ts index eb2f540deaa9a..519a10ef8576e 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/jira/schema.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/jira/schema.ts @@ -6,6 +6,7 @@ */ import { schema } from '@kbn/config-schema'; +import { validateOtherFieldsKeys, validateOtherFieldsLength } from './validators'; export const ExternalIncidentServiceConfiguration = { apiUrl: schema.string(), @@ -25,24 +26,39 @@ export const ExternalIncidentServiceSecretConfigurationSchema = schema.object( ExternalIncidentServiceSecretConfiguration ); +const incidentSchemaObject = { + summary: schema.string(), + description: schema.nullable(schema.string()), + externalId: schema.nullable(schema.string()), + issueType: schema.nullable(schema.string()), + priority: schema.nullable(schema.string()), + labels: schema.nullable( + schema.arrayOf( + schema.string({ + validate: (label) => + // Matches any space, tab or newline character. + label.match(/\s/g) ? `The label ${label} cannot contain spaces` : undefined, + }) + ) + ), + parent: schema.nullable(schema.string()), + otherFields: schema.nullable( + schema.recordOf( + schema.string({ + validate: (value) => validateOtherFieldsKeys(value), + }), + schema.any(), + { + validate: (value) => validateOtherFieldsLength(value), + } + ) + ), +}; + +export const incidentSchemaObjectProperties = Object.keys(incidentSchemaObject); + export const ExecutorSubActionPushParamsSchema = schema.object({ - incident: schema.object({ - summary: schema.string(), - description: schema.nullable(schema.string()), - externalId: schema.nullable(schema.string()), - issueType: schema.nullable(schema.string()), - priority: schema.nullable(schema.string()), - labels: schema.nullable( - schema.arrayOf( - schema.string({ - validate: (label) => - // Matches any space, tab or newline character. - label.match(/\s/g) ? `The label ${label} cannot contain spaces` : undefined, - }) - ) - ), - parent: schema.nullable(schema.string()), - }), + incident: schema.object(incidentSchemaObject), comments: schema.nullable( schema.arrayOf( schema.object({ diff --git a/x-pack/plugins/stack_connectors/server/connector_types/jira/service.test.ts b/x-pack/plugins/stack_connectors/server/connector_types/jira/service.test.ts index 80958da3f560c..f6b4dcf909abe 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/jira/service.test.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/jira/service.test.ts @@ -284,6 +284,7 @@ describe('Jira service', () => { issueType: '10006', priority: 'High', parent: 'RJ-107', + otherFields: null, }, }; @@ -357,6 +358,7 @@ describe('Jira service', () => { priority: 'High', issueType: null, parent: null, + otherFields: null, }, }); @@ -421,6 +423,7 @@ describe('Jira service', () => { priority: 'High', issueType: null, parent: null, + otherFields: null, }, }); @@ -505,6 +508,46 @@ describe('Jira service', () => { '[Action][Jira]: Unable to create incident. Error: Response is missing at least one of the expected fields: id. Reason: unknown: errorResponse was null' ); }); + + describe('otherFields', () => { + test('it should call request with correct arguments', async () => { + const otherFields = { foo0: 'bar', foo1: true, foo2: 2 }; + + requestMock.mockImplementation(() => + createAxiosResponse({ + data: { + id: '1', + key: 'CK-1', + fields: { created: '2020-04-27T10:59:46.202Z' }, + }, + }) + ); + + await service.createIncident({ + incident: { ...incident.incident, otherFields }, + }); + + expect(requestMock).toHaveBeenCalledWith({ + axios, + url: 'https://coolsite.net/rest/api/2/issue', + logger, + method: 'post', + configurationUtilities, + data: { + fields: { + summary: 'title', + description: 'desc', + project: { key: 'CK' }, + issuetype: { id: '10006' }, + labels: [], + priority: { name: 'High' }, + parent: { key: 'RJ-107' }, + ...otherFields, + }, + }, + }); + }); + }); }); describe('updateIncident', () => { @@ -517,6 +560,7 @@ describe('Jira service', () => { issueType: '10006', priority: 'High', parent: 'RJ-107', + otherFields: null, }, }; @@ -595,6 +639,47 @@ describe('Jira service', () => { '[Action][Jira]: Unable to update incident with id 1. Error: Unsupported content type: text/html in GET https://example.com. Supported content types: application/json. Reason: unknown: errorResponse was null' ); }); + + describe('otherFields', () => { + const otherFields = { foo0: 'bar', foo1: true, foo2: 2 }; + + test('it should call request with correct arguments', async () => { + requestMock.mockImplementation(() => + createAxiosResponse({ + data: { + id: '1', + key: 'CK-1', + fields: { updated: '2020-04-27T10:59:46.202Z' }, + }, + }) + ); + + await service.updateIncident({ + ...incident, + incident: { ...incident.incident, otherFields }, + }); + + expect(requestMock).toHaveBeenCalledWith({ + axios, + logger, + method: 'put', + configurationUtilities, + url: 'https://coolsite.net/rest/api/2/issue/1', + data: { + fields: { + summary: 'title', + description: 'desc', + labels: [], + priority: { name: 'High' }, + issuetype: { id: '10006' }, + project: { key: 'CK' }, + parent: { key: 'RJ-107' }, + ...otherFields, + }, + }, + }); + }); + }); }); describe('createComment', () => { diff --git a/x-pack/plugins/stack_connectors/server/connector_types/jira/service.ts b/x-pack/plugins/stack_connectors/server/connector_types/jira/service.ts index 771c5f25e92d6..f0ad0e3062ccc 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/jira/service.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/jira/service.ts @@ -106,6 +106,10 @@ export const createExternalService = ( fields = { ...fields, parent: { key: incident.parent } }; } + if (incident.otherFields) { + fields = { ...fields, ...incident.otherFields }; + } + return fields; }; @@ -215,7 +219,6 @@ export const createExternalService = ( 2. Create the issue. 3. Get the created issue with all the necessary fields. */ - let issueType = incident.issueType; if (!incident.issueType) { diff --git a/x-pack/plugins/stack_connectors/server/connector_types/jira/translations.ts b/x-pack/plugins/stack_connectors/server/connector_types/jira/translations.ts index 1ca5ec985d1f0..749b48c3466a0 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/jira/translations.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/jira/translations.ts @@ -18,3 +18,15 @@ export const ALLOWED_HOSTS_ERROR = (message: string) => message, }, }); + +export const OTHER_FIELDS_LENGTH_ERROR = (length: number) => + i18n.translate('xpack.stackConnectors.jira.schema.otherFieldsLengthError', { + values: { length }, + defaultMessage: 'A maximum of {length} otherFields can be defined at a time.', + }); + +export const OTHER_FIELDS_PROPERTY_ERROR = (properties: string) => + i18n.translate('xpack.stackConnectors.jira.schema.otherFieldsPropertyError', { + values: { properties }, + defaultMessage: 'The following properties cannot be defined inside otherFields: {properties}.', + }); diff --git a/x-pack/plugins/stack_connectors/server/connector_types/jira/validators.ts b/x-pack/plugins/stack_connectors/server/connector_types/jira/validators.ts index 894f457947b71..79e973c642fb1 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/jira/validators.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/jira/validators.ts @@ -13,6 +13,8 @@ import { } from './types'; import * as i18n from './translations'; +import { MAX_OTHER_FIELDS_LENGTH } from './constants'; +import { incidentSchemaObjectProperties } from './schema'; export const validateCommonConfig = ( configObject: JiraPublicConfigurationType, @@ -35,3 +37,19 @@ export const validate: ExternalServiceValidation = { config: validateCommonConfig, secrets: validateCommonSecrets, }; + +export const validateOtherFieldsLength = ( + otherFields: Record +): string | undefined => { + if (Object.keys(otherFields).length > MAX_OTHER_FIELDS_LENGTH) { + return i18n.OTHER_FIELDS_LENGTH_ERROR(MAX_OTHER_FIELDS_LENGTH); + } +}; + +export const validateOtherFieldsKeys = (key: string): string | undefined => { + const propertiesSet = new Set(incidentSchemaObjectProperties); + + if (propertiesSet.has(key)) { + return i18n.OTHER_FIELDS_PROPERTY_ERROR(key); + } +}; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/jira.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/jira.ts index ed9fb9cbbaf89..450f1946f113f 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/jira.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/jira.ts @@ -14,6 +14,7 @@ import { ExternalServiceSimulator, } from '@kbn/actions-simulators-plugin/server/plugin'; import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; +import { MAX_OTHER_FIELDS_LENGTH } from '@kbn/stack-connectors-plugin/server/connector_types/jira/constants'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; // eslint-disable-next-line import/no-default-export @@ -394,6 +395,73 @@ export default function jiraTest({ getService }: FtrProviderContext) { }); }); }); + + it('throws when trying to create an incident with too many "otherFields"', async () => { + const otherFields = new Array(MAX_OTHER_FIELDS_LENGTH + 1) + .fill('foobar') + .reduce((acc, curr, idx) => { + acc[idx] = curr; + return acc; + }, {}); + + await supertest + .post(`/api/actions/connector/${simulatedActionId}/_execute`) + .set('kbn-xsrf', 'foo') + .send({ + params: { + ...mockJira.params, + subActionParams: { + ...mockJira.params.subActionParams, + incident: { + ...mockJira.params.subActionParams.incident, + otherFields, + }, + comments: [], + }, + }, + }) + .then((resp: any) => { + expect(resp.body).to.eql({ + connector_id: simulatedActionId, + status: 'error', + retry: false, + message: + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.otherFields]: types that failed validation:\n - [subActionParams.incident.otherFields.0]: A maximum of 20 otherFields can be defined at a time.\n - [subActionParams.incident.otherFields.1]: expected value to equal [null]\n- [4.subAction]: expected value to equal [issueTypes]\n- [5.subAction]: expected value to equal [fieldsByIssueType]\n- [6.subAction]: expected value to equal [issues]\n- [7.subAction]: expected value to equal [issue]', + errorSource: TaskErrorSource.FRAMEWORK, + }); + }); + }); + + it('throws when trying to create an incident with "otherFields" keys that are not allowed', async () => { + await supertest + .post(`/api/actions/connector/${simulatedActionId}/_execute`) + .set('kbn-xsrf', 'foo') + .send({ + params: { + ...mockJira.params, + subActionParams: { + ...mockJira.params.subActionParams, + incident: { + ...mockJira.params.subActionParams.incident, + otherFields: { + summary: 'foo', + }, + }, + comments: [], + }, + }, + }) + .then((resp: any) => { + expect(resp.body).to.eql({ + connector_id: simulatedActionId, + status: 'error', + retry: false, + message: + 'error validating action params: types that failed validation:\n- [0.subAction]: expected value to equal [getFields]\n- [1.subAction]: expected value to equal [getIncident]\n- [2.subAction]: expected value to equal [handshake]\n- [3.subActionParams.incident.otherFields]: types that failed validation:\n - [subActionParams.incident.otherFields.0.key("summary")]: The following properties cannot be defined inside otherFields: summary.\n - [subActionParams.incident.otherFields.1]: expected value to equal [null]\n- [4.subAction]: expected value to equal [issueTypes]\n- [5.subAction]: expected value to equal [fieldsByIssueType]\n- [6.subAction]: expected value to equal [issues]\n- [7.subAction]: expected value to equal [issue]', + errorSource: TaskErrorSource.FRAMEWORK, + }); + }); + }); }); describe('Execution', () => { @@ -427,6 +495,40 @@ export default function jiraTest({ getService }: FtrProviderContext) { }, }); }); + + it('should handle creating an incident with other fields', async () => { + const { body } = await supertest + .post(`/api/actions/connector/${simulatedActionId}/_execute`) + .set('kbn-xsrf', 'foo') + .send({ + params: { + ...mockJira.params, + subActionParams: { + ...mockJira.params.subActionParams, + incident: { + ...mockJira.params.subActionParams.incident, + otherFields: { + foo: 'bar', + }, + }, + comments: [], + }, + }, + }) + .expect(200); + + expect(proxyHaveBeenCalled).to.equal(true); + expect(body).to.eql({ + status: 'ok', + connector_id: simulatedActionId, + data: { + id: '123', + title: 'CK-1', + pushedDate: '2020-04-27T14:17:45.490Z', + url: `${jiraSimulatorURL}/browse/CK-1`, + }, + }); + }); }); after(() => { From 1eae619beafd7b443bc9722ae44cc882fca7f755 Mon Sep 17 00:00:00 2001 From: Drew Tate Date: Thu, 21 Mar 2024 23:01:48 +0100 Subject: [PATCH 36/90] [ES|QL] grammar sync job (#178347) ## Summary Introduces a CI job to check for changes to the Elasticsearch grammar. Part of https://github.com/elastic/kibana/issues/178262 The first time this job runs, it will result in a PR to update the grammar because of formatting differences. That should be merged. Then, it will only create a PR when something has changed on the Elasticsearch side. --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .buildkite/pipelines/esql_grammar_sync.yml | 6 + .buildkite/scripts/steps/esql_grammar_sync.sh | 128 ++++++++++++++++++ .github/CODEOWNERS | 2 + .../kbn-monaco/src/esql/antlr/esql_parser.g4 | 2 +- 4 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 .buildkite/pipelines/esql_grammar_sync.yml create mode 100644 .buildkite/scripts/steps/esql_grammar_sync.sh diff --git a/.buildkite/pipelines/esql_grammar_sync.yml b/.buildkite/pipelines/esql_grammar_sync.yml new file mode 100644 index 0000000000000..f516d61ad6b4a --- /dev/null +++ b/.buildkite/pipelines/esql_grammar_sync.yml @@ -0,0 +1,6 @@ +steps: + - command: .buildkite/scripts/steps/esql_grammar_sync.sh + label: ES|QL Grammar Sync + timeout_in_minutes: 10 + agents: + queue: n2-2-spot diff --git a/.buildkite/scripts/steps/esql_grammar_sync.sh b/.buildkite/scripts/steps/esql_grammar_sync.sh new file mode 100644 index 0000000000000..f0f3ad80e05e3 --- /dev/null +++ b/.buildkite/scripts/steps/esql_grammar_sync.sh @@ -0,0 +1,128 @@ +#!/usr/bin/env bash +set -euo pipefail + +synchronize_lexer_grammar () { + license_header="$1" + source_file="$PARENT_DIR/elasticsearch/x-pack/plugin/esql/src/main/antlr/EsqlBaseLexer.g4" + destination_file="./packages/kbn-monaco/src/esql/antlr/esql_lexer.g4" + + # Copy the file + cp "$source_file" "$destination_file" + + # Insert the license header + temp_file=$(mktemp) + printf "%s\n\n// DO NOT MODIFY THIS FILE BY HAND. IT IS MANAGED BY A CI JOB.\n\n%s" "$license_header" "$(cat $destination_file)" > "$temp_file" + mv "$temp_file" "$destination_file" + + # Replace the line containing "lexer grammar" with "lexer grammar esql_lexer;" + sed -i -e 's/lexer grammar.*$/lexer grammar esql_lexer;/' "$destination_file" + + # Insert "options { caseInsensitive = true; }" one line below + sed -i -e '/lexer grammar esql_lexer;/a\ + options { caseInsensitive = true; }' "$destination_file" + + echo "File copied and modified successfully." +} + +synchronize_parser_grammar () { + license_header="$1" + source_file="$PARENT_DIR/elasticsearch/x-pack/plugin/esql/src/main/antlr/EsqlBaseParser.g4" + destination_file="./packages/kbn-monaco/src/esql/antlr/esql_parser.g4" + + # Copy the file + cp "$source_file" "$destination_file" + + # Insert the license header + temp_file=$(mktemp) + printf "%s\n\n// DO NOT MODIFY THIS FILE BY HAND. IT IS MANAGED BY A CI JOB.\n\n%s" "$license_header" "$(cat ${destination_file})" > "$temp_file" + mv "$temp_file" "$destination_file" + + # Replace the line containing "parser grammar" with "parser grammar esql_parser;" + sed -i -e 's/parser grammar.*$/parser grammar esql_parser;/' "$destination_file" + + # Replace options {tokenVocab=EsqlBaseLexer;} with options {tokenVocab=esql_lexer;} + sed -i -e 's/options {tokenVocab=EsqlBaseLexer;}/options {tokenVocab=esql_lexer;}/' "$destination_file" + + echo "File copied and modified successfully." +} + +report_main_step () { + echo "--- $1" +} + +main () { + cd "$PARENT_DIR" + + report_main_step "Cloning repositories" + + rm -rf elasticsearch + git clone https://github.com/elastic/elasticsearch --depth 1 + + rm -rf open-source + git clone https://github.com/elastic/open-source --depth 1 + + cd "$KIBANA_DIR" + + license_header=$(cat "$PARENT_DIR/open-source/legal/elastic-license-2.0-header.txt") + + report_main_step "Synchronizing lexer grammar..." + synchronize_lexer_grammar "$license_header" + + report_main_step "Synchronizing parser grammar..." + synchronize_parser_grammar "$license_header" + + # Check for differences + set +e + git diff --exit-code --quiet "$destination_file" + if [ $? -eq 0 ]; then + echo "No differences found. Our work is done here." + exit + fi + set -e + + report_main_step "Differences found. Checking for an existing pull request." + + KIBANA_MACHINE_USERNAME="kibanamachine" + git config --global user.name "$KIBANA_MACHINE_USERNAME" + git config --global user.email '42973632+kibanamachine@users.noreply.github.com' + + PR_TITLE='[ES|QL] Update grammars' + PR_BODY='This PR updates the ES|QL grammars (lexer and parser) to match the latest version in Elasticsearch.' + + # Check if a PR already exists + pr_search_result=$(gh pr list --search "$PR_TITLE" --state open --author "$KIBANA_MACHINE_USERNAME" --limit 1 --json title -q ".[].title") + + if [ "$pr_search_result" == "$PR_TITLE" ]; then + echo "PR already exists. Exiting." + exit + fi + + echo "No existing PR found. Proceeding." + + report_main_step "Building ANTLR artifacts." + + # Bootstrap Kibana + .buildkite/scripts/bootstrap.sh + + # Build ANTLR stuff + cd ./packages/kbn-monaco/src + yarn build:antlr4:esql + + # Make a commit + BRANCH_NAME="esql_grammar_sync_$(date +%s)" + + git checkout -b "$BRANCH_NAME" + + git add -A + git commit -m "Update ES|QL grammars" + + report_main_step "Changes committed. Creating pull request." + + git remote add kibanamachine https://github.com/kibanamachine/kibana.git + git push kibanamachine "$BRANCH_NAME" + + # Create a PR + gh pr create --draft --title "$PR_TITLE" --body "$PR_BODY" --base main --head "kibanamachine:${BRANCH_NAME}" --label 'release_note:skip' --label 'Team:Visualizations' +} + +main diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ef24822f6ce5a..8f50910f78f03 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1175,6 +1175,8 @@ x-pack/plugins/observability_solution/infra/server/lib/alerting @elastic/obs-ux- /.bazelversion @elastic/kibana-operations /WORKSPACE.bazel @elastic/kibana-operations /.buildkite/ @elastic/kibana-operations +/.buildkite/scripts/steps/esql_grammar_sync.sh @elastic/kibana-visualizations +/.buildkite/pipelines/esql_grammar_sync.yml @elastic/kibana-visualizations /kbn_pm/ @elastic/kibana-operations /x-pack/dev-tools @elastic/kibana-operations /catalog-info.yaml @elastic/kibana-operations @elastic/kibana-tech-leads diff --git a/packages/kbn-monaco/src/esql/antlr/esql_parser.g4 b/packages/kbn-monaco/src/esql/antlr/esql_parser.g4 index ede884d6311d7..0c7cf96f5a2e1 100644 --- a/packages/kbn-monaco/src/esql/antlr/esql_parser.g4 +++ b/packages/kbn-monaco/src/esql/antlr/esql_parser.g4 @@ -259,4 +259,4 @@ enrichCommand enrichWithClause : (newName=qualifiedNamePattern ASSIGN)? enrichField=qualifiedNamePattern - ; + ; \ No newline at end of file From 3f1dcff2c7edc3576959ea0c65247cb09571e3ae Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Thu, 21 Mar 2024 17:04:49 -0600 Subject: [PATCH 37/90] [Embeddable Rebuild] Refactor enhanced embeddables (#178896) Closes https://github.com/elastic/kibana/issues/178742 ## Summary In the old embeddable system, when an embeddable is created through its factory, it is "enhanced" via `enhanceEmbeddableWithDynamicActions` in `EmbeddableEnhancedPlugin` - this enhancement is responsible for adding the pieces necessary (for example, the `DynamicActionManager`) to the embeddable to manage drilldowns. In the new system, we are no longer using these class-based factories - so there is no longer a way to enhance embeddables on creation. Therefore, this PR does three main things: 1. It adds a new method `initializeDynamicActions` to the `EnhancedEmbeddablePlugin` and returns it through its start contract (in order to bypass limitations around importing stuff from `xpack`) - this method can be used to enhance all **React-based** embeddables with the stuff necessary for drilldowns to work. As part of this, I had to add a few extra pieces to the `HasDynamicActions` API: - `dynamicActionsState$`: This is a publishing subject that will keep track of the events currently attached to the given embeddable (`DynamicActionsState`) - `setDynamicActions`: A setter for the above publishing subject 2. It modifies all actions tied to dashboard drilldowns - `PanelNotificationsAction`, `EmbeddableToDashboardDrilldown`, `FlyoutEditDrilldownAction`, and `FlyoutCreateDrilldownAction`. 3. It modifies the old `enhanceEmbeddableWithDynamicActions` to add the publishing subject + setter from (1) above to all **legacy** embeddables when they are enhanced - that way, they will still pass the `apiHasDynamicActions` type check + all modified actions continue to work for legacy embeddables. **How to Test** To test with a React embeddable, you can checkout the [draft PR](https://github.com/elastic/kibana/pull/178544) containing the new image embeddable. ### 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 ### 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: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../flyout_create_drilldown.test.tsx | 8 + .../flyout_edit_drilldown.test.tsx | 30 +- .../flyout_edit_drilldown.tsx | 5 +- .../flyout_edit_drilldown/menu_item.test.tsx | 24 +- .../flyout_edit_drilldown/menu_item.tsx | 21 +- .../panel_notifications_action.test.ts | 106 ++++-- .../actions/panel_notifications_action.ts | 77 +++-- ...test.ts => dynamic_action_storage.test.ts} | 321 ++++++++---------- ...n_storage.ts => dynamic_action_storage.ts} | 93 +++-- .../public/embeddables/index.ts | 3 +- .../interfaces/has_dynamic_actions.ts | 15 +- .../embeddables/is_enhanced_embeddable.ts | 15 - .../embeddable_enhanced/public/index.ts | 3 +- .../embeddable_enhanced/public/mocks.ts | 8 +- .../embeddable_enhanced/public/plugin.ts | 168 +++++++-- .../embeddable_enhanced/public/types.ts | 11 +- .../plugins/embeddable_enhanced/tsconfig.json | 2 +- 17 files changed, 526 insertions(+), 384 deletions(-) rename x-pack/plugins/embeddable_enhanced/public/embeddables/{embeddable_action_storage.test.ts => dynamic_action_storage.test.ts} (62%) rename x-pack/plugins/embeddable_enhanced/public/embeddables/{embeddable_action_storage.ts => dynamic_action_storage.ts} (55%) delete mode 100644 x-pack/plugins/embeddable_enhanced/public/embeddables/is_enhanced_embeddable.ts diff --git a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_create_drilldown/flyout_create_drilldown.test.tsx b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_create_drilldown/flyout_create_drilldown.test.tsx index 50fe2e570b9a6..441e7525ce3a4 100644 --- a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_create_drilldown/flyout_create_drilldown.test.tsx +++ b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_create_drilldown/flyout_create_drilldown.test.tsx @@ -18,6 +18,7 @@ import { import { coreMock } from '@kbn/core/public/mocks'; import { uiActionsEnhancedPluginMock } from '@kbn/ui-actions-enhanced-plugin/public/mocks'; import { UiActionsEnhancedActionFactory } from '@kbn/ui-actions-enhanced-plugin/public'; +import { DynamicActionsSerializedState } from '@kbn/embeddable-enhanced-plugin/public/plugin'; function createAction( allPossibleTriggers = ['VALUE_CLICK_TRIGGER'], @@ -50,6 +51,9 @@ function createAction( ]); return new FlyoutCreateDrilldownAction(params); } +const dynamicActionsState$ = new BehaviorSubject({ + dynamicActions: { events: [] }, +}); const compatibleEmbeddableApi = { enhancements: { @@ -59,6 +63,10 @@ const compatibleEmbeddableApi = { uiActions: uiActionsEnhancedPluginMock.createStartContract(), }), }, + setDynamicActions: (newDynamicActions: DynamicActionsSerializedState['enhancements']) => { + dynamicActionsState$.next(newDynamicActions); + }, + dynamicActionsState$, parentApi: { type: 'dashboard', }, diff --git a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.test.tsx b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.test.tsx index 1aa64bd6e5a9e..bd9ac25429768 100644 --- a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.test.tsx +++ b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.test.tsx @@ -5,15 +5,17 @@ * 2.0. */ -import { BehaviorSubject, Subject } from 'rxjs'; -import { FlyoutEditDrilldownAction, FlyoutEditDrilldownParams } from './flyout_edit_drilldown'; import { coreMock } from '@kbn/core/public/mocks'; +import { DynamicActionsSerializedState } from '@kbn/embeddable-enhanced-plugin/public/plugin'; import type { ViewMode } from '@kbn/presentation-publishing'; +import { SerializedEvent } from '@kbn/ui-actions-enhanced-plugin/common'; import { - UiActionsEnhancedMemoryActionStorage as MemoryActionStorage, UiActionsEnhancedDynamicActionManager as DynamicActionManager, + UiActionsEnhancedMemoryActionStorage as MemoryActionStorage, } from '@kbn/ui-actions-enhanced-plugin/public'; import { uiActionsEnhancedPluginMock } from '@kbn/ui-actions-enhanced-plugin/public/mocks'; +import { BehaviorSubject, Subject } from 'rxjs'; +import { FlyoutEditDrilldownAction, FlyoutEditDrilldownParams } from './flyout_edit_drilldown'; function createAction(overlays = coreMock.createStart().overlays) { const uiActionsPlugin = uiActionsEnhancedPluginMock.createPlugin(); @@ -37,6 +39,9 @@ function createAction(overlays = coreMock.createStart().overlays) { }; return new FlyoutEditDrilldownAction(params); } +const dynamicActionsState$ = new BehaviorSubject({ + dynamicActions: { events: [{} as SerializedEvent] }, +}); const compatibleEmbeddableApi = { enhancements: { @@ -46,6 +51,10 @@ const compatibleEmbeddableApi = { uiActions: uiActionsEnhancedPluginMock.createStartContract(), }), }, + setDynamicActions: (newDynamicActions: DynamicActionsSerializedState['enhancements']) => { + dynamicActionsState$.next(newDynamicActions); + }, + dynamicActionsState$, supportedTriggers: () => { return ['VALUE_CLICK_TRIGGER']; }, @@ -82,14 +91,17 @@ describe('isCompatible', () => { }); test('not compatible if no drilldowns', async () => { + const newDynamicActionsState$ = new BehaviorSubject< + DynamicActionsSerializedState['enhancements'] + >({ + dynamicActions: { events: [] }, + }); + const embeddableApi = { ...compatibleEmbeddableApi, - enhancements: { - dynamicActions: new DynamicActionManager({ - storage: new MemoryActionStorage(), - isCompatible: async () => true, - uiActions: uiActionsEnhancedPluginMock.createStartContract(), - }), + dynamicActionsState$: newDynamicActionsState$, + setDynamicActions: (newDynamicActions: DynamicActionsSerializedState['enhancements']) => { + newDynamicActionsState$.next(newDynamicActions); }, }; const action = createAction(); diff --git a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.tsx b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.tsx index ebd4a6a3441e9..bf5588e762574 100644 --- a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.tsx +++ b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.tsx @@ -69,9 +69,8 @@ export class FlyoutEditDrilldownAction implements Action { public readonly MenuItem = MenuItem as any; public async isCompatible({ embeddable }: EmbeddableApiContext) { - if (!isApiCompatible(embeddable)) return false; - if (getInheritedViewMode(embeddable) !== 'edit') return false; - return embeddable.enhancements.dynamicActions.state.get().events.length > 0; + if (!isApiCompatible(embeddable) || getInheritedViewMode(embeddable) !== 'edit') return false; + return (embeddable.dynamicActionsState$.getValue()?.dynamicActions.events ?? []).length > 0; } public async execute({ embeddable }: EmbeddableApiContext) { diff --git a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/menu_item.test.tsx b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/menu_item.test.tsx index 5503a2cb882fa..ddd13b0322340 100644 --- a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/menu_item.test.tsx +++ b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/menu_item.test.tsx @@ -5,21 +5,29 @@ * 2.0. */ -import React from 'react'; -import { render, act } from '@testing-library/react'; -import { MenuItem } from './menu_item'; +import { DynamicActionsSerializedState } from '@kbn/embeddable-enhanced-plugin/public/plugin'; import { createStateContainer } from '@kbn/kibana-utils-plugin/public'; +import { SerializedEvent } from '@kbn/ui-actions-enhanced-plugin/common'; import { UiActionsEnhancedDynamicActionManager as DynamicActionManager } from '@kbn/ui-actions-enhanced-plugin/public'; -import { EnhancedEmbeddable } from '@kbn/embeddable-enhanced-plugin/public'; +import { act, render } from '@testing-library/react'; +import React from 'react'; +import { BehaviorSubject } from 'rxjs'; +import { FlyoutEditDrilldownActionApi } from './flyout_edit_drilldown'; +import { MenuItem } from './menu_item'; test('', () => { - const state = createStateContainer<{ events: object[] }>({ events: [] }); + const dynamicActionsState$ = new BehaviorSubject({ + dynamicActions: { events: [] }, + }); + + const state = createStateContainer<{ events: SerializedEvent[] }>({ events: [] }); const context = { embeddable: { enhancements: { dynamicActions: { state } as unknown as DynamicActionManager, }, - } as unknown as EnhancedEmbeddable, + dynamicActionsState$, + } as unknown as FlyoutEditDrilldownActionApi, trigger: {}, }; const { getByText, queryByText } = render(); @@ -28,7 +36,9 @@ test('', () => { expect(queryByText('0')).not.toBeInTheDocument(); act(() => { - state.set({ events: [{}] }); + dynamicActionsState$.next({ + dynamicActions: { events: [{} as SerializedEvent] }, + }); }); expect(queryByText('1')).toBeInTheDocument(); diff --git a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/menu_item.tsx b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/menu_item.tsx index 939c19bbd1315..13698c5becde9 100644 --- a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/menu_item.tsx +++ b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/menu_item.tsx @@ -5,15 +5,22 @@ * 2.0. */ -import React from 'react'; -import { EuiNotificationBadge, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { useContainerState } from '@kbn/kibana-utils-plugin/public'; -import { EnhancedEmbeddableContext } from '@kbn/embeddable-enhanced-plugin/public'; +import { EuiFlexGroup, EuiFlexItem, EuiNotificationBadge } from '@elastic/eui'; +import { useStateFromPublishingSubject } from '@kbn/presentation-publishing'; +import React, { useMemo } from 'react'; +import { FlyoutEditDrilldownActionApi } from './flyout_edit_drilldown'; import { txtDisplayName } from './i18n'; -export const MenuItem = ({ context }: { context: EnhancedEmbeddableContext }) => { - const { events } = useContainerState(context.embeddable.enhancements.dynamicActions.state); - const count = events.length; +export const MenuItem = ({ + context: { embeddable }, +}: { + context: { embeddable: FlyoutEditDrilldownActionApi }; +}) => { + const dynamicActionsState = useStateFromPublishingSubject(embeddable.dynamicActionsState$); + + const count = useMemo(() => { + return (dynamicActionsState?.dynamicActions?.events ?? []).length; + }, [dynamicActionsState]); return ( diff --git a/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.test.ts b/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.test.ts index 87f0d4e8cf04c..b79cc3719abaa 100644 --- a/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.test.ts +++ b/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.test.ts @@ -5,29 +5,40 @@ * 2.0. */ -import { PanelNotificationsAction } from './panel_notifications_action'; -import { EnhancedEmbeddableContext } from '../types'; import { ViewMode } from '@kbn/embeddable-plugin/public'; +import { EmbeddableApiContext, PublishesWritableViewMode } from '@kbn/presentation-publishing'; +import { + DynamicActionManager, + SerializedEvent, +} from '@kbn/ui-actions-enhanced-plugin/public/dynamic_actions'; +import { BehaviorSubject } from 'rxjs'; +import { HasDynamicActions } from '../embeddables/interfaces/has_dynamic_actions'; +import { DynamicActionsSerializedState } from '../plugin'; +import { + PanelNotificationsAction, + PanelNotificationsActionApi, +} from './panel_notifications_action'; + +const createContext = (events: SerializedEvent[] = []): EmbeddableApiContext => { + const dynamicActionsState$ = new BehaviorSubject({ + dynamicActions: { events }, + }); + const viewMode$ = new BehaviorSubject(ViewMode.VIEW); -const createContext = (events: unknown[] = [], isEditMode = false): EnhancedEmbeddableContext => - ({ + return { embeddable: { - getInput: () => - ({ - viewMode: isEditMode ? ViewMode.EDIT : ViewMode.VIEW, - } as unknown), enhancements: { - dynamicActions: { - state: { - get: () => - ({ - events, - } as unknown), - }, - }, + dynamicActions: {} as unknown as DynamicActionManager, + }, + setDynamicActions: (value: DynamicActionsSerializedState['enhancements']) => { + dynamicActionsState$.next(value); }, - }, - } as EnhancedEmbeddableContext); + dynamicActionsState$, + viewMode: viewMode$, + setViewMode: (value: ViewMode) => viewMode$.next(value), + } as PanelNotificationsActionApi & PublishesWritableViewMode, + } as EmbeddableApiContext; +}; describe('PanelNotificationsAction', () => { describe('getDisplayName', () => { @@ -35,17 +46,29 @@ describe('PanelNotificationsAction', () => { const context = createContext(); const action = new PanelNotificationsAction(); - const name = await action.getDisplayName(context); + const name = action.getDisplayName(context); expect(name).toBe('0'); }); test('returns "2" if embeddable has two events', async () => { - const context = createContext([{}, {}]); + const context = createContext([{}, {}] as SerializedEvent[]); const action = new PanelNotificationsAction(); - const name = await action.getDisplayName(context); + const name = action.getDisplayName(context); expect(name).toBe('2'); }); + + test('updates display name when dynamic actions is updated', async () => { + const context = createContext([{}, {}] as SerializedEvent[]); + const action = new PanelNotificationsAction(); + + (context.embeddable as HasDynamicActions).setDynamicActions({ + dynamicActions: { events: [{}, {}, {}] as SerializedEvent[] }, + }); + + const name = action.getDisplayName(context); + expect(name).toBe('3'); + }); }); describe('getDisplayNameTooltip', () => { @@ -53,54 +76,69 @@ describe('PanelNotificationsAction', () => { const context = createContext(); const action = new PanelNotificationsAction(); - const name = await action.getDisplayNameTooltip(context); + const name = action.getDisplayNameTooltip(context); expect(name).toBe(''); }); test('returns "1 drilldown" if embeddable has one event', async () => { - const context = createContext([{}]); + const context = createContext([{} as SerializedEvent]); const action = new PanelNotificationsAction(); - const name = await action.getDisplayNameTooltip(context); + const name = action.getDisplayNameTooltip(context); expect(name).toBe('Panel has 1 drilldown'); }); test('returns "2 drilldowns" if embeddable has two events', async () => { - const context = createContext([{}, {}]); + const context = createContext([{}, {}] as SerializedEvent[]); const action = new PanelNotificationsAction(); - const name = await action.getDisplayNameTooltip(context); + const name = action.getDisplayNameTooltip(context); expect(name).toBe('Panel has 2 drilldowns'); }); test('returns "3 drilldowns" if embeddable has three events', async () => { - const context = createContext([{}, {}, {}]); + const context = createContext([{}, {}, {}] as SerializedEvent[]); const action = new PanelNotificationsAction(); - const name = await action.getDisplayNameTooltip(context); + const name = action.getDisplayNameTooltip(context); expect(name).toBe('Panel has 3 drilldowns'); }); + + test('updates tooltip when dynamic actions is updated', async () => { + const context = createContext([{}, {}, {}] as SerializedEvent[]); + const action = new PanelNotificationsAction(); + + (context.embeddable as HasDynamicActions).setDynamicActions({ + dynamicActions: { events: [{}, {}] as SerializedEvent[] }, + }); + + const name = action.getDisplayNameTooltip(context); + expect(name).toBe('Panel has 2 drilldowns'); + }); }); describe('isCompatible', () => { test('returns false if not in "edit" mode', async () => { - const context = createContext([{}]); + const context = createContext([{} as SerializedEvent]); const action = new PanelNotificationsAction(); const result = await action.isCompatible(context); expect(result).toBe(false); }); - test('returns true when in "edit" mode', async () => { - const context = createContext([{}], true); - const action = new PanelNotificationsAction(); + test('returns true when switching to "edit" mode', async () => { + const context = createContext([{} as SerializedEvent]); + const action = new PanelNotificationsAction(); + (context.embeddable as PublishesWritableViewMode).setViewMode(ViewMode.EDIT); const result = await action.isCompatible(context); expect(result).toBe(true); }); - test('returns false when no embeddable has no events', async () => { - const context = createContext([], true); + test('returns false when in edit mode but embeddable has no events', async () => { + const context = createContext([]); + (context.embeddable as PublishesWritableViewMode).setViewMode(ViewMode.EDIT); + const action = new PanelNotificationsAction(); const result = await action.isCompatible(context); diff --git a/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.ts b/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.ts index 8c1de7cf56b34..413b6ec45b63f 100644 --- a/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.ts +++ b/x-pack/plugins/embeddable_enhanced/public/actions/panel_notifications_action.ts @@ -5,10 +5,22 @@ * 2.0. */ +import { ViewMode } from '@kbn/embeddable-plugin/public'; import { i18n } from '@kbn/i18n'; +import { + apiCanAccessViewMode, + CanAccessViewMode, + EmbeddableApiContext, + getInheritedViewMode, + getViewModeSubject, +} from '@kbn/presentation-publishing'; import { UiActionsActionDefinition as ActionDefinition } from '@kbn/ui-actions-plugin/public'; -import { ViewMode } from '@kbn/embeddable-plugin/public'; -import { EnhancedEmbeddableContext, EnhancedEmbeddable } from '../types'; + +import { BehaviorSubject, merge } from 'rxjs'; +import { + apiHasDynamicActions, + HasDynamicActions, +} from '../embeddables/interfaces/has_dynamic_actions'; export const txtOneDrilldown = i18n.translate( 'xpack.embeddableEnhanced.actions.panelNotifications.oneDrilldown', @@ -27,53 +39,64 @@ export const txtManyDrilldowns = (count: number) => export const ACTION_PANEL_NOTIFICATIONS = 'ACTION_PANEL_NOTIFICATIONS'; +export type PanelNotificationsActionApi = CanAccessViewMode & HasDynamicActions; + +const isApiCompatible = (api: unknown | null): api is PanelNotificationsActionApi => + apiHasDynamicActions(api) && apiCanAccessViewMode(api); + /** * This action renders in "edit" mode number of events (dynamic action) a panel * has attached to it. */ -export class PanelNotificationsAction implements ActionDefinition { +export class PanelNotificationsAction implements ActionDefinition { public readonly id = ACTION_PANEL_NOTIFICATIONS; public type = ACTION_PANEL_NOTIFICATIONS; - private getEventCount(embeddable: EnhancedEmbeddable): number { - return embeddable.enhancements.dynamicActions.state.get().events.length; + private getEventCount({ embeddable }: EmbeddableApiContext): number { + return isApiCompatible(embeddable) + ? (embeddable.dynamicActionsState$.getValue()?.dynamicActions.events ?? []).length + : 0; } - public getIconType = ({ embeddable }: EnhancedEmbeddableContext) => ''; + public getIconType = () => ''; - public readonly getDisplayName = ({ embeddable }: EnhancedEmbeddableContext) => { - return String(this.getEventCount(embeddable)); + public readonly getDisplayName = ({ embeddable }: EmbeddableApiContext) => { + return String(this.getEventCount({ embeddable })); }; - public couldBecomeCompatible({ embeddable }: EnhancedEmbeddableContext) { - return Boolean(!!embeddable.getInput && embeddable.getRoot); + public couldBecomeCompatible({ embeddable }: EmbeddableApiContext) { + return isApiCompatible(embeddable); } public subscribeToCompatibilityChanges = ( - { embeddable }: EnhancedEmbeddableContext, + { embeddable }: EmbeddableApiContext, onChange: (isCompatible: boolean, action: PanelNotificationsAction) => void ) => { - // There is no notification for when a dynamic action is added or removed, so we subscribe to the embeddable root instead as a proxy. - return embeddable - .getRoot() - .getInput$() - .subscribe(() => { - onChange( - embeddable.getInput().viewMode === ViewMode.EDIT && this.getEventCount(embeddable) > 0, - this - ); - }); + if (!isApiCompatible(embeddable)) return; + + return merge( + getViewModeSubject(embeddable) ?? new BehaviorSubject(ViewMode.VIEW), + embeddable.dynamicActionsState$ + ).subscribe(() => { + onChange( + getInheritedViewMode(embeddable) === ViewMode.EDIT && + this.getEventCount({ embeddable }) > 0, + this + ); + }); }; - public readonly getDisplayNameTooltip = ({ embeddable }: EnhancedEmbeddableContext) => { - const count = this.getEventCount(embeddable); + public readonly getDisplayNameTooltip = ({ embeddable }: EmbeddableApiContext) => { + const count = this.getEventCount({ embeddable }); return !count ? '' : count === 1 ? txtOneDrilldown : txtManyDrilldowns(count); }; - public readonly isCompatible = async ({ embeddable }: EnhancedEmbeddableContext) => { - if (!embeddable?.getInput) return false; - if (embeddable.getInput().viewMode !== ViewMode.EDIT) return false; - return this.getEventCount(embeddable) > 0; + public readonly isCompatible = async ({ embeddable }: EmbeddableApiContext) => { + return ( + isApiCompatible(embeddable) && + getInheritedViewMode(embeddable) === ViewMode.EDIT && + this.getEventCount({ embeddable }) > 0 + ); }; public readonly execute = async () => {}; diff --git a/x-pack/plugins/embeddable_enhanced/public/embeddables/embeddable_action_storage.test.ts b/x-pack/plugins/embeddable_enhanced/public/embeddables/dynamic_action_storage.test.ts similarity index 62% rename from x-pack/plugins/embeddable_enhanced/public/embeddables/embeddable_action_storage.test.ts rename to x-pack/plugins/embeddable_enhanced/public/embeddables/dynamic_action_storage.test.ts index f86f03f3564b9..ff78a9f0003c6 100644 --- a/x-pack/plugins/embeddable_enhanced/public/embeddables/embeddable_action_storage.test.ts +++ b/x-pack/plugins/embeddable_enhanced/public/embeddables/dynamic_action_storage.test.ts @@ -5,114 +5,107 @@ * 2.0. */ -import { - Embeddable, - ViewMode, - VALUE_CLICK_TRIGGER, - SELECT_RANGE_TRIGGER, -} from '@kbn/embeddable-plugin/public'; -import { - EmbeddableActionStorage, - EmbeddableWithDynamicActionsInput, -} from './embeddable_action_storage'; -import { UiActionsEnhancedSerializedEvent } from '@kbn/ui-actions-enhanced-plugin/public'; +import { SELECT_RANGE_TRIGGER, VALUE_CLICK_TRIGGER } from '@kbn/embeddable-plugin/public'; import { of } from '@kbn/kibana-utils-plugin/public'; +import { UiActionsEnhancedSerializedEvent } from '@kbn/ui-actions-enhanced-plugin/public'; +import { BehaviorSubject } from 'rxjs'; +import { DynamicActionStorage, DynamicActionStorageApi } from './dynamic_action_storage'; // use real const to make test fail in case someone accidentally changes it import { APPLY_FILTER_TRIGGER } from '@kbn/data-plugin/public'; +import { DynamicActionsSerializedState } from '../plugin'; +import { SerializedAction } from '@kbn/ui-actions-enhanced-plugin/common/types'; -class TestEmbeddable extends Embeddable { - public readonly type = 'test'; - constructor() { - super({ id: 'test', viewMode: ViewMode.VIEW }, {}); - } - reload() {} -} +const getApi = (): DynamicActionStorageApi => { + const dynamicActionsState$ = new BehaviorSubject({ + dynamicActions: { events: [] }, + }); + return { + setDynamicActions: (newDynamicActions) => { + dynamicActionsState$.next(newDynamicActions); + }, + dynamicActionsState$, + }; +}; describe('EmbeddableActionStorage', () => { describe('.create()', () => { test('method exists', () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); expect(typeof storage.create).toBe('function'); }); test('can add event to embeddable', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const api = getApi(); + const storage = new DynamicActionStorage('testId', () => 'testTitle', api); const event: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; - const events1 = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events1 = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events1).toEqual([]); + const spy = jest.spyOn(api, 'setDynamicActions'); await storage.create(event); + expect(spy).toBeCalledWith({ + dynamicActions: { + events: [ + { + eventId: 'EVENT_ID', + triggers: ['TRIGGER-ID'], + action: {} as SerializedAction, + }, + ], + }, + }); - const events2 = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events2 = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events2).toEqual([event]); }); - test('does not merge .getInput() into .updateInput()', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); - const event: UiActionsEnhancedSerializedEvent = { - eventId: 'EVENT_ID', - triggers: ['TRIGGER-ID'], - action: {} as any, - }; - - const spy = jest.spyOn(embeddable, 'updateInput'); - - await storage.create(event); - - expect(spy.mock.calls[0][0].id).toBe(undefined); - expect(spy.mock.calls[0][0].viewMode).toBe(undefined); - }); - test('can create multiple events', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const api = getApi(); + const storage = new DynamicActionStorage('testId', () => 'testTitle', api); const event1: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID1', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; const event2: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID2', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; const event3: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID3', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; - const events1 = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events1 = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events1).toEqual([]); await storage.create(event1); - const events2 = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events2 = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events2).toEqual([event1]); await storage.create(event2); await storage.create(event3); - const events3 = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events3 = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events3).toEqual([event1, event2, event3]); }); test('throws when creating an event with the same ID', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); + const event: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; await storage.create(event); @@ -120,126 +113,124 @@ describe('EmbeddableActionStorage', () => { expect(error).toBeInstanceOf(Error); expect(error.message).toMatchInlineSnapshot( - `"[EEXIST]: Event with [eventId = EVENT_ID] already exists on [embeddable.id = test, embeddable.title = undefined]."` + `"[EEXIST]: Event with [eventId = EVENT_ID] already exists on [embeddable.id = testId, embeddable.title = testTitle]."` ); }); }); describe('.update()', () => { test('method exists', () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); expect(typeof storage.update).toBe('function'); }); test('can update an existing event', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const api = getApi(); + const storage = new DynamicActionStorage('testId', () => 'testTitle', api); const event1: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID', triggers: ['TRIGGER-ID'], action: { name: 'foo', - } as any, + } as SerializedAction, }; const event2: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID', triggers: ['TRIGGER-ID'], action: { name: 'bar', - } as any, + } as SerializedAction, }; await storage.create(event1); await storage.update(event2); - const events = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events).toEqual([event2]); }); test('updates event in place of the old event', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const api = getApi(); + const storage = new DynamicActionStorage('testId', () => 'testTitle', api); const event1: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID1', triggers: ['TRIGGER-ID'], action: { name: 'foo', - } as any, + } as SerializedAction, }; const event2: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID2', triggers: ['TRIGGER-ID'], action: { name: 'bar', - } as any, + } as SerializedAction, }; const event22: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID2', triggers: ['TRIGGER-ID'], action: { name: 'baz', - } as any, + } as SerializedAction, }; const event3: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID3', triggers: ['TRIGGER-ID'], action: { name: 'qux', - } as any, + } as SerializedAction, }; await storage.create(event1); await storage.create(event2); await storage.create(event3); - const events1 = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events1 = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events1).toEqual([event1, event2, event3]); await storage.update(event22); - const events2 = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events2 = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events2).toEqual([event1, event22, event3]); await storage.update(event2); - const events3 = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events3 = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events3).toEqual([event1, event2, event3]); }); test('throws when updating event, but storage is empty', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); const event: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; const [, error] = await of(storage.update(event)); expect(error).toBeInstanceOf(Error); expect(error.message).toMatchInlineSnapshot( - `"[ENOENT]: Event with [eventId = EVENT_ID] could not be updated as it does not exist in [embeddable.id = test, embeddable.title = undefined]."` + `"[ENOENT]: Event with [eventId = EVENT_ID] could not be updated as it does not exist in [embeddable.id = testId, embeddable.title = testTitle]."` ); }); test('throws when updating event with ID that is not stored', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const api = getApi(); + const storage = new DynamicActionStorage('testId', () => 'testTitle', api); const event1: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID1', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; const event2: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID2', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; await storage.create(event1); @@ -247,104 +238,101 @@ describe('EmbeddableActionStorage', () => { expect(error).toBeInstanceOf(Error); expect(error.message).toMatchInlineSnapshot( - `"[ENOENT]: Event with [eventId = EVENT_ID2] could not be updated as it does not exist in [embeddable.id = test, embeddable.title = undefined]."` + `"[ENOENT]: Event with [eventId = EVENT_ID2] could not be updated as it does not exist in [embeddable.id = testId, embeddable.title = testTitle]."` ); }); }); describe('.remove()', () => { test('method exists', () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); expect(typeof storage.remove).toBe('function'); }); test('can remove existing event', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const api = getApi(); + const storage = new DynamicActionStorage('testId', () => 'testTitle', api); const event: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; await storage.create(event); await storage.remove(event.eventId); - const events = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events).toEqual([]); }); test('removes correct events in a list of events', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const api = getApi(); + const storage = new DynamicActionStorage('testId', () => 'testTitle', api); const event1: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID1', triggers: ['TRIGGER-ID'], action: { name: 'foo', - } as any, + } as SerializedAction, }; const event2: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID2', triggers: ['TRIGGER-ID'], action: { name: 'bar', - } as any, + } as SerializedAction, }; const event3: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID3', triggers: ['TRIGGER-ID'], action: { name: 'qux', - } as any, + } as SerializedAction, }; await storage.create(event1); await storage.create(event2); await storage.create(event3); - const events1 = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events1 = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events1).toEqual([event1, event2, event3]); await storage.remove(event2.eventId); - const events2 = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events2 = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events2).toEqual([event1, event3]); await storage.remove(event3.eventId); - const events3 = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events3 = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events3).toEqual([event1]); await storage.remove(event1.eventId); - const events4 = embeddable.getInput().enhancements?.dynamicActions?.events || []; + const events4 = api.dynamicActionsState$.getValue()?.dynamicActions.events ?? []; expect(events4).toEqual([]); }); test('throws when removing an event from an empty storage', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); const [, error] = await of(storage.remove('EVENT_ID')); expect(error).toBeInstanceOf(Error); expect(error.message).toMatchInlineSnapshot( - `"[ENOENT]: Event with [eventId = EVENT_ID] could not be removed as it does not exist in [embeddable.id = test, embeddable.title = undefined]."` + `"[ENOENT]: Event with [eventId = EVENT_ID] could not be removed as it does not exist in [embeddable.id = testId, embeddable.title = testTitle]."` ); }); test('throws when removing with ID that does not exist in storage', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); const event: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; await storage.create(event); @@ -353,26 +341,24 @@ describe('EmbeddableActionStorage', () => { expect(error).toBeInstanceOf(Error); expect(error.message).toMatchInlineSnapshot( - `"[ENOENT]: Event with [eventId = WRONG_ID] could not be removed as it does not exist in [embeddable.id = test, embeddable.title = undefined]."` + `"[ENOENT]: Event with [eventId = WRONG_ID] could not be removed as it does not exist in [embeddable.id = testId, embeddable.title = testTitle]."` ); }); }); describe('.read()', () => { test('method exists', () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); expect(typeof storage.read).toBe('function'); }); test('can read an existing event out of storage', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); const event: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; await storage.create(event); @@ -382,25 +368,23 @@ describe('EmbeddableActionStorage', () => { }); test('throws when reading from empty storage', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); const [, error] = await of(storage.read('EVENT_ID')); expect(error).toBeInstanceOf(Error); expect(error.message).toMatchInlineSnapshot( - `"[ENOENT]: Event with [eventId = EVENT_ID] could not be found in [embeddable.id = test, embeddable.title = undefined]."` + `"[ENOENT]: Event with [eventId = EVENT_ID] could not be found in [embeddable.id = testId, embeddable.title = testTitle]."` ); }); test('throws when reading event with ID not existing in storage', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); const event: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; await storage.create(event); @@ -408,28 +392,27 @@ describe('EmbeddableActionStorage', () => { expect(error).toBeInstanceOf(Error); expect(error.message).toMatchInlineSnapshot( - `"[ENOENT]: Event with [eventId = WRONG_ID] could not be found in [embeddable.id = test, embeddable.title = undefined]."` + `"[ENOENT]: Event with [eventId = WRONG_ID] could not be found in [embeddable.id = testId, embeddable.title = testTitle]."` ); }); test('returns correct event when multiple events are stored', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); const event1: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID1', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; const event2: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID2', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; const event3: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID3', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; await storage.create(event1); @@ -450,144 +433,124 @@ describe('EmbeddableActionStorage', () => { describe('.count()', () => { test('method exists', () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); expect(typeof storage.count).toBe('function'); }); test('returns 0 when storage is empty', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); - + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); const count = await storage.count(); - expect(count).toBe(0); }); test('returns correct number of events in storage', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); - + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); expect(await storage.count()).toBe(0); await storage.create({ eventId: 'EVENT_ID1', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }); - expect(await storage.count()).toBe(1); await storage.create({ eventId: 'EVENT_ID2', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }); - expect(await storage.count()).toBe(2); await storage.remove('EVENT_ID1'); - expect(await storage.count()).toBe(1); await storage.remove('EVENT_ID2'); - expect(await storage.count()).toBe(0); }); }); describe('.list()', () => { test('method exists', () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); expect(typeof storage.list).toBe('function'); }); test('returns empty array when storage is empty', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); - + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); const list = await storage.list(); - expect(list).toEqual([]); }); test('returns correct list of events in storage', async () => { - const embeddable = new TestEmbeddable(); - const storage = new EmbeddableActionStorage(embeddable); + const storage = new DynamicActionStorage('testId', () => 'testTitle', getApi()); const event1: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID1', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; const event2: UiActionsEnhancedSerializedEvent = { eventId: 'EVENT_ID2', triggers: ['TRIGGER-ID'], - action: {} as any, + action: {} as SerializedAction, }; expect(await storage.list()).toEqual([]); await storage.create(event1); - expect(await storage.list()).toEqual([event1]); await storage.create(event2); - expect(await storage.list()).toEqual([event1, event2]); await storage.remove('EVENT_ID1'); - expect(await storage.list()).toEqual([event2]); await storage.remove('EVENT_ID2'); - expect(await storage.list()).toEqual([]); }); }); describe('migrate', () => { test('DASHBOARD_TO_DASHBOARD_DRILLDOWN triggers migration', async () => { - const embeddable = new TestEmbeddable(); + const api = getApi(); + const storage = new DynamicActionStorage('testId', () => 'testTitle', api); + const OTHER_TRIGGER = 'OTHER_TRIGGER'; - embeddable.updateInput({ - enhancements: { - dynamicActions: { - events: [ - { - eventId: '1', - triggers: [OTHER_TRIGGER, VALUE_CLICK_TRIGGER], - action: { - factoryId: 'DASHBOARD_TO_DASHBOARD_DRILLDOWN', - name: '', - config: {}, - }, + api.setDynamicActions({ + dynamicActions: { + events: [ + { + eventId: '1', + triggers: [OTHER_TRIGGER, VALUE_CLICK_TRIGGER], + action: { + factoryId: 'DASHBOARD_TO_DASHBOARD_DRILLDOWN', + name: '', + config: {}, }, - { - eventId: '3', - triggers: [OTHER_TRIGGER, SELECT_RANGE_TRIGGER], - action: { - factoryId: 'DASHBOARD_TO_DASHBOARD_DRILLDOWN', - name: '', - config: {}, - }, + }, + { + eventId: '3', + triggers: [OTHER_TRIGGER, SELECT_RANGE_TRIGGER], + action: { + factoryId: 'DASHBOARD_TO_DASHBOARD_DRILLDOWN', + name: '', + config: {}, }, - { - eventId: '3', - triggers: [OTHER_TRIGGER], - action: { - factoryId: 'SOME_OTHER', - name: '', - config: {}, - }, + }, + { + eventId: '3', + triggers: [OTHER_TRIGGER], + action: { + factoryId: 'SOME_OTHER', + name: '', + config: {}, }, - ], - }, + }, + ], }, }); - const storage = new EmbeddableActionStorage(embeddable); const [event1, event2, event3] = await storage.list(); expect(event1.triggers).toEqual([OTHER_TRIGGER, APPLY_FILTER_TRIGGER]); diff --git a/x-pack/plugins/embeddable_enhanced/public/embeddables/embeddable_action_storage.ts b/x-pack/plugins/embeddable_enhanced/public/embeddables/dynamic_action_storage.ts similarity index 55% rename from x-pack/plugins/embeddable_enhanced/public/embeddables/embeddable_action_storage.ts rename to x-pack/plugins/embeddable_enhanced/public/embeddables/dynamic_action_storage.ts index 2eebc52ba55cf..ae3e56e84519b 100644 --- a/x-pack/plugins/embeddable_enhanced/public/embeddables/embeddable_action_storage.ts +++ b/x-pack/plugins/embeddable_enhanced/public/embeddables/dynamic_action_storage.ts @@ -5,105 +5,94 @@ * 2.0. */ -import type { SerializableRecord } from '@kbn/utility-types'; +import { SELECT_RANGE_TRIGGER, VALUE_CLICK_TRIGGER } from '@kbn/embeddable-plugin/public'; import { DynamicActionsState, UiActionsEnhancedAbstractActionStorage as AbstractActionStorage, UiActionsEnhancedSerializedEvent as SerializedEvent, } from '@kbn/ui-actions-enhanced-plugin/public'; -import { - EmbeddableInput, - EmbeddableOutput, - IEmbeddable, - VALUE_CLICK_TRIGGER, - SELECT_RANGE_TRIGGER, -} from '@kbn/embeddable-plugin/public'; - -export interface EmbeddableWithDynamicActionsInput extends EmbeddableInput { - enhancements?: { - dynamicActions: DynamicActionsState; - [key: string]: SerializableRecord; - }; -} - -export type EmbeddableWithDynamicActions< - I extends EmbeddableWithDynamicActionsInput = EmbeddableWithDynamicActionsInput, - O extends EmbeddableOutput = EmbeddableOutput -> = IEmbeddable; - -export class EmbeddableActionStorage extends AbstractActionStorage { - constructor(private readonly embbeddable: EmbeddableWithDynamicActions) { +import { HasDynamicActions } from './interfaces/has_dynamic_actions'; + +export type DynamicActionStorageApi = Pick< + HasDynamicActions, + 'setDynamicActions' | 'dynamicActionsState$' +>; +export class DynamicActionStorage extends AbstractActionStorage { + constructor( + private id: string, + private getPanelTitle: () => string | undefined, + private readonly api: DynamicActionStorageApi + ) { super(); } - private put(input: EmbeddableWithDynamicActionsInput, events: SerializedEvent[]) { - this.embbeddable.updateInput({ - enhancements: { - ...(input.enhancements || {}), - dynamicActions: { - ...(input.enhancements?.dynamicActions || {}), - events, - }, - }, - }); + private put(dynamicActionsState: DynamicActionsState) { + this.api.setDynamicActions({ dynamicActions: dynamicActionsState }); } public async create(event: SerializedEvent) { - const input = this.embbeddable.getInput(); - const events = this.getEventsFromEmbeddable(); + const events = this.getEvents(); const exists = !!events.find(({ eventId }) => eventId === event.eventId); if (exists) { throw new Error( `[EEXIST]: Event with [eventId = ${event.eventId}] already exists on ` + - `[embeddable.id = ${input.id}, embeddable.title = ${input.title}].` + `[embeddable.id = ${this.id}, embeddable.title = ${this.getPanelTitle()}].` ); } - this.put(input, [...events, event]); + this.put({ + events: [...events, event], + }); } public async update(event: SerializedEvent) { - const input = this.embbeddable.getInput(); - const events = this.getEventsFromEmbeddable(); + const dynamicActionsState = this.api.dynamicActionsState$.getValue(); + const events = this.getEvents(); const index = events.findIndex(({ eventId }) => eventId === event.eventId); if (index === -1) { throw new Error( `[ENOENT]: Event with [eventId = ${event.eventId}] could not be ` + `updated as it does not exist in ` + - `[embeddable.id = ${input.id}, embeddable.title = ${input.title}].` + `[embeddable.id = ${this.id}, embeddable.title = ${this.getPanelTitle()}].` ); } - this.put(input, [...events.slice(0, index), event, ...events.slice(index + 1)]); + this.put({ + ...dynamicActionsState, + events: [...events.slice(0, index), event, ...events.slice(index + 1)], + }); } public async remove(eventId: string) { - const input = this.embbeddable.getInput(); - const events = this.getEventsFromEmbeddable(); + const dynamicActionsState = this.api.dynamicActionsState$.getValue(); + + const events = this.getEvents(); const index = events.findIndex((event) => eventId === event.eventId); if (index === -1) { throw new Error( `[ENOENT]: Event with [eventId = ${eventId}] could not be ` + `removed as it does not exist in ` + - `[embeddable.id = ${input.id}, embeddable.title = ${input.title}].` + `[embeddable.id = ${this.id}, embeddable.title = ${this.getPanelTitle()}].` ); } - this.put(input, [...events.slice(0, index), ...events.slice(index + 1)]); + this.put({ + ...dynamicActionsState, + events: [...events.slice(0, index), ...events.slice(index + 1)], + }); } public async read(eventId: string): Promise { - const input = this.embbeddable.getInput(); - const events = this.getEventsFromEmbeddable(); + const events = this.getEvents(); const event = events.find((ev) => eventId === ev.eventId); if (!event) { throw new Error( `[ENOENT]: Event with [eventId = ${eventId}] could not be found in ` + - `[embeddable.id = ${input.id}, embeddable.title = ${input.title}].` + `[embeddable.id = ${this.id}, embeddable.title = ${this.getPanelTitle()}].` ); } @@ -111,12 +100,12 @@ export class EmbeddableActionStorage extends AbstractActionStorage { } public async list(): Promise { - return this.getEventsFromEmbeddable(); + return this.getEvents(); } - private getEventsFromEmbeddable() { - const input = this.embbeddable.getInput(); - const events = input.enhancements?.dynamicActions?.events || []; + private getEvents() { + const dynamicActionsState = this.api.dynamicActionsState$.getValue(); + const events = dynamicActionsState?.dynamicActions?.events ?? []; return this.migrate(events); } diff --git a/x-pack/plugins/embeddable_enhanced/public/embeddables/index.ts b/x-pack/plugins/embeddable_enhanced/public/embeddables/index.ts index 437136949fe83..dbf85c53a2006 100644 --- a/x-pack/plugins/embeddable_enhanced/public/embeddables/index.ts +++ b/x-pack/plugins/embeddable_enhanced/public/embeddables/index.ts @@ -5,5 +5,4 @@ * 2.0. */ -export * from './is_enhanced_embeddable'; -export * from './embeddable_action_storage'; +export * from './dynamic_action_storage'; diff --git a/x-pack/plugins/embeddable_enhanced/public/embeddables/interfaces/has_dynamic_actions.ts b/x-pack/plugins/embeddable_enhanced/public/embeddables/interfaces/has_dynamic_actions.ts index d92fd2138b56b..324b573d56ad6 100644 --- a/x-pack/plugins/embeddable_enhanced/public/embeddables/interfaces/has_dynamic_actions.ts +++ b/x-pack/plugins/embeddable_enhanced/public/embeddables/interfaces/has_dynamic_actions.ts @@ -5,16 +5,23 @@ * 2.0. */ +import { PublishingSubject } from '@kbn/presentation-publishing'; import { UiActionsEnhancedDynamicActionManager as DynamicActionManager } from '@kbn/ui-actions-enhanced-plugin/public'; +import { DynamicActionsSerializedState } from '../../plugin'; export interface HasDynamicActions { - enhancements: { - dynamicActions: DynamicActionManager; - }; + enhancements: { dynamicActions: DynamicActionManager }; + setDynamicActions: (newState: DynamicActionsSerializedState['enhancements']) => void; + dynamicActionsState$: PublishingSubject; } export const apiHasDynamicActions = (api: unknown): api is HasDynamicActions => { + const apiMaybeHasDynamicActions = api as HasDynamicActions; return Boolean( - api && typeof (api as HasDynamicActions).enhancements?.dynamicActions === 'object' + apiMaybeHasDynamicActions && + apiMaybeHasDynamicActions.enhancements && + typeof apiMaybeHasDynamicActions.enhancements.dynamicActions === 'object' && + typeof apiMaybeHasDynamicActions.setDynamicActions === 'function' && + apiMaybeHasDynamicActions.dynamicActionsState$ ); }; diff --git a/x-pack/plugins/embeddable_enhanced/public/embeddables/is_enhanced_embeddable.ts b/x-pack/plugins/embeddable_enhanced/public/embeddables/is_enhanced_embeddable.ts deleted file mode 100644 index 7a2dc821180b2..0000000000000 --- a/x-pack/plugins/embeddable_enhanced/public/embeddables/is_enhanced_embeddable.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { IEmbeddable } from '@kbn/embeddable-plugin/public'; -import { EnhancedEmbeddable } from '../types'; - -export const isEnhancedEmbeddable = ( - maybeEnhancedEmbeddable: E -): maybeEnhancedEmbeddable is EnhancedEmbeddable => - typeof (maybeEnhancedEmbeddable as EnhancedEmbeddable) - ?.enhancements?.dynamicActions === 'object'; diff --git a/x-pack/plugins/embeddable_enhanced/public/index.ts b/x-pack/plugins/embeddable_enhanced/public/index.ts index 53fec5c83522a..e14c8629ced9b 100644 --- a/x-pack/plugins/embeddable_enhanced/public/index.ts +++ b/x-pack/plugins/embeddable_enhanced/public/index.ts @@ -11,7 +11,7 @@ import { EmbeddableEnhancedPlugin } from './plugin'; export type { SetupContract as EmbeddableEnhancedSetupContract, SetupDependencies as EmbeddableEnhancedSetupDependencies, - StartContract as EmbeddableEnhancedStartContract, + StartContract as EmbeddableEnhancedPluginStart, StartDependencies as EmbeddableEnhancedStartDependencies, } from './plugin'; @@ -20,7 +20,6 @@ export function plugin(context: PluginInitializerContext) { } export type { EnhancedEmbeddable, EnhancedEmbeddableContext } from './types'; -export { isEnhancedEmbeddable } from './embeddables'; export { type HasDynamicActions, apiHasDynamicActions, diff --git a/x-pack/plugins/embeddable_enhanced/public/mocks.ts b/x-pack/plugins/embeddable_enhanced/public/mocks.ts index 77b5b496a7f17..37845a9ff0a1e 100644 --- a/x-pack/plugins/embeddable_enhanced/public/mocks.ts +++ b/x-pack/plugins/embeddable_enhanced/public/mocks.ts @@ -5,10 +5,10 @@ * 2.0. */ -import { EmbeddableEnhancedSetupContract, EmbeddableEnhancedStartContract } from '.'; +import { EmbeddableEnhancedSetupContract, EmbeddableEnhancedPluginStart } from '.'; export type Setup = jest.Mocked; -export type Start = jest.Mocked; +export type Start = jest.Mocked; const createSetupContract = (): Setup => { const setupContract: Setup = {}; @@ -17,7 +17,9 @@ const createSetupContract = (): Setup => { }; const createStartContract = (): Start => { - const startContract: Start = {}; + const startContract: Start = { + initializeReactEmbeddableDynamicActions: jest.fn(), + }; return startContract; }; diff --git a/x-pack/plugins/embeddable_enhanced/public/plugin.ts b/x-pack/plugins/embeddable_enhanced/public/plugin.ts index b46390d529c23..ac52d1f78974d 100644 --- a/x-pack/plugins/embeddable_enhanced/public/plugin.ts +++ b/x-pack/plugins/embeddable_enhanced/public/plugin.ts @@ -5,8 +5,10 @@ * 2.0. */ -import { CoreStart, CoreSetup, Plugin, PluginInitializerContext } from '@kbn/core/public'; +import { CoreSetup, CoreStart, Plugin, PluginInitializerContext } from '@kbn/core/public'; import { + defaultEmbeddableFactoryProvider, + EmbeddableContext, EmbeddableFactory, EmbeddableFactoryDefinition, EmbeddableInput, @@ -14,22 +16,26 @@ import { EmbeddableSetup, EmbeddableStart, IEmbeddable, - defaultEmbeddableFactoryProvider, - EmbeddableContext, PANEL_NOTIFICATION_TRIGGER, } from '@kbn/embeddable-plugin/public'; +import { EmbeddableStateComparators } from '@kbn/embeddable-plugin/public/react_embeddable_system/types'; +import { apiHasUniqueId } from '@kbn/presentation-publishing'; +import type { FinderAttributes } from '@kbn/saved-objects-finder-plugin/common'; import { - UiActionsEnhancedDynamicActionManager as DynamicActionManager, AdvancedUiActionsSetup, AdvancedUiActionsStart, + DynamicActionsState, + UiActionsEnhancedDynamicActionManager as DynamicActionManager, } from '@kbn/ui-actions-enhanced-plugin/public'; -import type { FinderAttributes } from '@kbn/saved-objects-finder-plugin/common'; -import { EnhancedEmbeddable } from './types'; -import { - EmbeddableActionStorage, - EmbeddableWithDynamicActions, -} from './embeddables/embeddable_action_storage'; +import deepEqual from 'react-fast-compare'; +import { BehaviorSubject, distinctUntilChanged } from 'rxjs'; import { PanelNotificationsAction } from './actions'; +import { + DynamicActionStorage, + type DynamicActionStorageApi, +} from './embeddables/dynamic_action_storage'; +import { HasDynamicActions } from './embeddables/interfaces/has_dynamic_actions'; +import { EnhancedEmbeddable } from './types'; export interface SetupDependencies { embeddable: EmbeddableSetup; @@ -44,8 +50,21 @@ export interface StartDependencies { // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface SetupContract {} -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface StartContract {} +export interface StartContract { + initializeReactEmbeddableDynamicActions: ( + uuid: string, + getTitle: () => string | undefined, + state: DynamicActionsSerializedState + ) => { + dynamicActionsApi: HasDynamicActions; + dynamicActionsComparator: EmbeddableStateComparators; + serializeDynamicActions: () => DynamicActionsSerializedState; + }; +} + +export interface DynamicActionsSerializedState { + enhancements?: { dynamicActions: DynamicActionsState }; +} export class EmbeddableEnhancedPlugin implements Plugin @@ -66,7 +85,9 @@ export class EmbeddableEnhancedPlugin public start(core: CoreStart, plugins: StartDependencies): StartContract { this.uiActions = plugins.uiActionsEnhanced; - return {}; + return { + initializeReactEmbeddableDynamicActions: this.initializeDynamicActions.bind(this), + }; } public stop() {} @@ -110,12 +131,92 @@ export class EmbeddableEnhancedPlugin return true; }; + private initializeDynamicActions( + uuid: string, + getTitle: () => string | undefined, + state: DynamicActionsSerializedState + ): { + dynamicActionsApi: HasDynamicActions; + dynamicActionsComparator: EmbeddableStateComparators; + serializeDynamicActions: () => DynamicActionsSerializedState; + } { + const dynamicActionsState$ = new BehaviorSubject( + { dynamicActions: { events: [] }, ...(state.enhancements ?? {}) } + ); + const api: DynamicActionStorageApi = { + dynamicActionsState$, + setDynamicActions: (newState) => dynamicActionsState$.next(newState), + }; + const storage = new DynamicActionStorage(uuid, getTitle, api); + const dynamicActions = new DynamicActionManager({ + isCompatible: async (context: unknown) => { + return apiHasUniqueId(context) && context.uuid === uuid; + }, + storage, + uiActions: this.uiActions!, + }); + this.startDynamicActions(dynamicActions); + + return { + dynamicActionsApi: { ...api, enhancements: { dynamicActions } }, + dynamicActionsComparator: { + enhancements: [ + dynamicActionsState$, + api.setDynamicActions, + (a, b) => { + return deepEqual(a, b); + }, + ], + }, + serializeDynamicActions: () => { + return { enhancements: dynamicActionsState$.getValue() }; + }, + }; + } + + /** + * TODO: Remove this entire enhanceEmbeddableWithDynamicActions method once the embeddable refactor work is complete + */ private enhanceEmbeddableWithDynamicActions( embeddable: E ): EnhancedEmbeddable { const enhancedEmbeddable = embeddable as EnhancedEmbeddable; - const storage = new EmbeddableActionStorage(embeddable as EmbeddableWithDynamicActions); + const dynamicActionsState$ = new BehaviorSubject( + { + dynamicActions: { events: [] }, + ...(embeddable.getInput().enhancements ?? {}), + } + ); + const api = { + dynamicActionsState$, + setDynamicActions: (newState: DynamicActionsSerializedState['enhancements']) => { + embeddable.updateInput({ enhancements: newState }); + }, + }; + + /** + * Keep the dynamicActionsState$ publishing subject in sync with changes to the embeddable's input. + */ + embeddable + .getInput$() + .pipe( + distinctUntilChanged(({ enhancements: old }, { enhancements: updated }) => + deepEqual(old, updated) + ) + ) + .subscribe((input) => { + dynamicActionsState$.next({ + dynamicActions: { events: [] }, + ...(input.enhancements ?? {}), + } as DynamicActionsSerializedState['enhancements']); + }); + + const storage = new DynamicActionStorage( + String(embeddable.runtimeId), + embeddable.getTitle, + api + ); const dynamicActions = new DynamicActionManager({ isCompatible: async (context: unknown) => { if (!this.isEmbeddableContext(context)) return false; @@ -125,10 +226,30 @@ export class EmbeddableEnhancedPlugin uiActions: this.uiActions!, }); + const stop = this.startDynamicActions(dynamicActions); + embeddable.getInput$().subscribe({ + next: () => { + storage.reload$.next(); + }, + error: stop, + complete: stop, + }); + + enhancedEmbeddable.enhancements = { + ...enhancedEmbeddable.enhancements, + dynamicActions, + }; + enhancedEmbeddable.dynamicActionsState$ = api.dynamicActionsState$; + enhancedEmbeddable.setDynamicActions = api.setDynamicActions; + + return enhancedEmbeddable; + } + + private startDynamicActions(dynamicActions: DynamicActionManager) { dynamicActions.start().catch((error) => { /* eslint-disable no-console */ - console.log('Failed to start embeddable dynamic actions', embeddable); + console.log('Failed to start embeddable dynamic actions', dynamicActions); console.error(error); /* eslint-enable */ }); @@ -137,25 +258,12 @@ export class EmbeddableEnhancedPlugin dynamicActions.stop().catch((error) => { /* eslint-disable no-console */ - console.log('Failed to stop embeddable dynamic actions', embeddable); + console.log('Failed to stop embeddable dynamic actions', dynamicActions); console.error(error); /* eslint-enable */ }); }; - embeddable.getInput$().subscribe({ - next: () => { - storage.reload$.next(); - }, - error: stop, - complete: stop, - }); - - enhancedEmbeddable.enhancements = { - ...enhancedEmbeddable.enhancements, - dynamicActions, - }; - - return enhancedEmbeddable; + return stop; } } diff --git a/x-pack/plugins/embeddable_enhanced/public/types.ts b/x-pack/plugins/embeddable_enhanced/public/types.ts index fd5a0f689f74b..c065e3b89060e 100644 --- a/x-pack/plugins/embeddable_enhanced/public/types.ts +++ b/x-pack/plugins/embeddable_enhanced/public/types.ts @@ -6,16 +6,9 @@ */ import { IEmbeddable } from '@kbn/embeddable-plugin/public'; -import { UiActionsEnhancedDynamicActionManager as DynamicActionManager } from '@kbn/ui-actions-enhanced-plugin/public'; +import { HasDynamicActions } from './embeddables/interfaces/has_dynamic_actions'; -export type EnhancedEmbeddable = E & { - enhancements: { - /** - * Default implementation of dynamic action manager for embeddables. - */ - dynamicActions: DynamicActionManager; - }; -}; +export type EnhancedEmbeddable = E & HasDynamicActions; /** * @deprecated use `EmbeddableApiContext` from `@kbn/presentation-publishing` diff --git a/x-pack/plugins/embeddable_enhanced/tsconfig.json b/x-pack/plugins/embeddable_enhanced/tsconfig.json index 2c7f1c5d23270..7aa9a6a2f42a6 100644 --- a/x-pack/plugins/embeddable_enhanced/tsconfig.json +++ b/x-pack/plugins/embeddable_enhanced/tsconfig.json @@ -14,8 +14,8 @@ "@kbn/i18n", "@kbn/kibana-utils-plugin", "@kbn/data-plugin", - "@kbn/utility-types", "@kbn/saved-objects-finder-plugin", + "@kbn/presentation-publishing", ], "exclude": [ "target/**/*", From 5aaf92f0e6de50cec6840cea33c85312f776a3aa Mon Sep 17 00:00:00 2001 From: Devon Thomson Date: Thu, 21 Mar 2024 19:20:01 -0400 Subject: [PATCH 38/90] [Embeddables Rebuild] Allow Save and Return for React Embeddables (#178673) Allows new embeddables to be added to a Dashboard as Incoming Embeddables. --- .../interfaces/serialized_state.ts | 2 +- .../embeddable/create/create_dashboard.ts | 22 +++++++------------ 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/packages/presentation/presentation_containers/interfaces/serialized_state.ts b/packages/presentation/presentation_containers/interfaces/serialized_state.ts index 56fa2066e80fa..b776ccf9ae59d 100644 --- a/packages/presentation/presentation_containers/interfaces/serialized_state.ts +++ b/packages/presentation/presentation_containers/interfaces/serialized_state.ts @@ -14,7 +14,7 @@ import { Reference } from '@kbn/content-management-utils'; */ export interface SerializedPanelState { references?: Reference[]; - rawState: RawStateType; + rawState: RawStateType | undefined; version?: string; } diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts index c52f50f755620..d82f92deddeab 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts @@ -17,12 +17,7 @@ import { type ControlGroupContainer, } from '@kbn/controls-plugin/public'; import { GlobalQueryStateFromUrl, syncGlobalQueryStateWithUrl } from '@kbn/data-plugin/public'; -import { - EmbeddableFactory, - isErrorEmbeddable, - reactEmbeddableRegistryHasKey, - ViewMode, -} from '@kbn/embeddable-plugin/public'; +import { EmbeddableFactory, isErrorEmbeddable, ViewMode } from '@kbn/embeddable-plugin/public'; import { compareFilters, Filter, TimeRange } from '@kbn/es-query'; import { lazyLoadReduxToolsPackage } from '@kbn/presentation-util-plugin/public'; import { cloneDeep, identity, omit, pickBy } from 'lodash'; @@ -340,10 +335,10 @@ export const initializeDashboard = async ({ const createdEmbeddable = await (async () => { // if there is no width or height we can add the panel using the default behaviour. if (!incomingEmbeddable.size) { - return await container.addNewEmbeddable( - incomingEmbeddable.type, - incomingEmbeddable.input - ); + return await container.addNewPanel<{ uuid: string }>({ + panelType: incomingEmbeddable.type, + initialState: incomingEmbeddable.input, + }); } // if the incoming embeddable has an explicit width or height we add the panel to the grid directly. @@ -370,13 +365,12 @@ export const initializeDashboard = async ({ [newPanelState.explicitInput.id]: newPanelState, }, }); - if (reactEmbeddableRegistryHasKey(incomingEmbeddable.type)) { - return { id: embeddableId }; - } return await container.untilEmbeddableLoaded(embeddableId); })(); - scrolltoIncomingEmbeddable(container, createdEmbeddable.id); + if (createdEmbeddable) { + scrolltoIncomingEmbeddable(container, createdEmbeddable.uuid); + } }); } } From 85d243a059ff26e4397962ee719941f5e3a4a6bc Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Thu, 21 Mar 2024 19:54:55 -0600 Subject: [PATCH 39/90] [embeddable refactor] search react embeddable example (#178681) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes [178630](https://github.com/elastic/kibana/issues/178630) To run examples, start kibana with `yarn start --run-examples` PR adds "Unified search example" to Dashboard "Add panel" menu Screenshot 2024-03-13 at 9 33 22 PM Embeddable displays count with unified search context from dashboard. Changing unified search and global time picker will cause search to update Screenshot 2024-03-13 at 9 34 09 PM Embeddable also allows for setting custom time range on the panel Screenshot 2024-03-13 at 9 34 52 PM --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- examples/embeddable_examples/public/plugin.ts | 8 + .../search/build_search_embeddable.tsx | 145 ++++++++++++++++++ .../react_embeddables/search/get_count.ts | 48 ++++++ .../register_add_search_panel_action.tsx | 35 +++++ .../register_search_embeddable_factory.ts | 28 ++++ .../public/react_embeddables/search/types.ts | 34 ++++ .../presentation_publishing/index.ts | 2 + .../interfaces/publishes_unified_search.ts | 19 ++- .../custom_time_range_badge.tsx | 10 +- .../customize_panel_editor.tsx | 7 +- 10 files changed, 325 insertions(+), 11 deletions(-) create mode 100644 examples/embeddable_examples/public/react_embeddables/search/build_search_embeddable.tsx create mode 100644 examples/embeddable_examples/public/react_embeddables/search/get_count.ts create mode 100644 examples/embeddable_examples/public/react_embeddables/search/register_add_search_panel_action.tsx create mode 100644 examples/embeddable_examples/public/react_embeddables/search/register_search_embeddable_factory.ts create mode 100644 examples/embeddable_examples/public/react_embeddables/search/types.ts diff --git a/examples/embeddable_examples/public/plugin.ts b/examples/embeddable_examples/public/plugin.ts index 83c5b911dc8e4..7f2a5b6a26152 100644 --- a/examples/embeddable_examples/public/plugin.ts +++ b/examples/embeddable_examples/public/plugin.ts @@ -39,6 +39,8 @@ import { registerMarkdownEditorEmbeddable } from './react_embeddables/eui_markdo import { registerCreateEuiMarkdownAction } from './react_embeddables/eui_markdown/create_eui_markdown_action'; import { registerFieldListFactory } from './react_embeddables/field_list/field_list_react_embeddable'; import { registerCreateFieldListAction } from './react_embeddables/field_list/create_field_list_action'; +import { registerSearchEmbeddableFactory } from './react_embeddables/search/register_search_embeddable_factory'; +import { registerAddSearchPanelAction } from './react_embeddables/search/register_add_search_panel_action'; export interface EmbeddableExamplesSetupDependencies { embeddable: EmbeddableSetup; @@ -118,6 +120,12 @@ export class EmbeddableExamplesPlugin registerMarkdownEditorEmbeddable(); registerCreateEuiMarkdownAction(deps.uiActions); + registerSearchEmbeddableFactory({ + data: deps.data, + dataViews: deps.dataViews, + }); + registerAddSearchPanelAction(deps.uiActions); + return { createSampleData: async () => {}, factories: this.exampleEmbeddableFactories as ExampleEmbeddableFactories, diff --git a/examples/embeddable_examples/public/react_embeddables/search/build_search_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/search/build_search_embeddable.tsx new file mode 100644 index 0000000000000..b84af8ba3b687 --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/search/build_search_embeddable.tsx @@ -0,0 +1,145 @@ +/* + * Copyright 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, { useEffect, useState } from 'react'; +import fastIsEqual from 'fast-deep-equal'; +import { EuiCallOut } from '@elastic/eui'; +import { BehaviorSubject } from 'rxjs'; +import { TimeRange } from '@kbn/es-query'; +import type { DataView } from '@kbn/data-plugin/common'; +import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; +import { + EmbeddableStateComparators, + ReactEmbeddableApiRegistration, +} from '@kbn/embeddable-plugin/public/react_embeddable_system/types'; +import { Api, State, Services } from './types'; +import { getCount } from './get_count'; + +export const buildSearchEmbeddable = async ( + state: State, + buildApi: ( + apiRegistration: ReactEmbeddableApiRegistration, + comparators: EmbeddableStateComparators + ) => Api, + services: Services +) => { + const defaultDataView = await services.dataViews.getDefaultDataView(); + const timeRange$ = new BehaviorSubject(state.timeRange); + const dataViews$ = new BehaviorSubject( + defaultDataView ? [defaultDataView] : undefined + ); + const dataLoading$ = new BehaviorSubject(false); + function setTimeRange(nextTimeRange: TimeRange | undefined) { + timeRange$.next(nextTimeRange); + } + + const api = buildApi( + { + dataViews: dataViews$, + timeRange$, + setTimeRange, + dataLoading: dataLoading$, + serializeState: () => { + return { + rawState: { + timeRange: timeRange$.value, + }, + references: [], + }; + }, + }, + { + timeRange: [timeRange$, setTimeRange, fastIsEqual], + } + ); + + const appliedTimeRange$ = new BehaviorSubject( + timeRange$.value ?? api.parentApi?.timeRange$?.value + ); + const subscriptions = api.timeRange$.subscribe((timeRange) => { + appliedTimeRange$.next(timeRange ?? api.parentApi?.timeRange$?.value); + }); + if (api.parentApi?.timeRange$) { + subscriptions.add( + api.parentApi?.timeRange$.subscribe((parentTimeRange) => { + if (timeRange$?.value) { + return; + } + appliedTimeRange$.next(parentTimeRange); + }) + ); + } + + return { + api, + Component: () => { + const [count, setCount] = useState(0); + const [error, setError] = useState(); + const [filters, query, appliedTimeRange] = useBatchedPublishingSubjects( + api.parentApi?.filters$, + api.parentApi?.query$, + appliedTimeRange$ + ); + + useEffect(() => { + return () => { + subscriptions.unsubscribe(); + }; + }, []); + + useEffect(() => { + let ignore = false; + setError(undefined); + if (!defaultDataView) { + return; + } + dataLoading$.next(true); + getCount(defaultDataView, services.data, filters ?? [], query, appliedTimeRange) + .then((nextCount: number) => { + if (ignore) { + return; + } + dataLoading$.next(false); + setCount(nextCount); + }) + .catch((err) => { + if (ignore) { + return; + } + dataLoading$.next(false); + setError(err); + }); + return () => { + ignore = true; + }; + }, [filters, query, appliedTimeRange]); + + if (!defaultDataView) { + return ( + +

Please install a sample data set to run example.

+
+ ); + } + + if (error) { + return ( + +

{error.message}

+
+ ); + } + + return ( +

+ Found {count} from {defaultDataView.name} +

+ ); + }, + }; +}; diff --git a/examples/embeddable_examples/public/react_embeddables/search/get_count.ts b/examples/embeddable_examples/public/react_embeddables/search/get_count.ts new file mode 100644 index 0000000000000..d4cdb2e70cb33 --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/search/get_count.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 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 { lastValueFrom } from 'rxjs'; +import { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import { AggregateQuery, Filter, Query, TimeRange } from '@kbn/es-query'; +import type { DataView } from '@kbn/data-plugin/common'; + +export async function getCount( + dataView: DataView, + dataService: DataPublicPluginStart, + filters: Filter[], + query: Query | AggregateQuery | undefined, + timeRange: TimeRange | undefined +) { + const searchSource = await dataService.search.searchSource.create(); + searchSource.setField('index', dataView); + searchSource.setField('size', 0); + searchSource.setField('trackTotalHits', true); + const timeRangeFilter = timeRange + ? dataService.query.timefilter.timefilter.createFilter(dataView, timeRange) + : undefined; + const allFilters = [...filters]; + if (timeRangeFilter) { + allFilters.push(timeRangeFilter); + } + searchSource.setField('filter', allFilters); + if (query) { + searchSource.setField('query', query); + } + // eslint-disable-next-line no-console + console.log('ES request', searchSource.getSearchRequestBody()); + + const { rawResponse: resp } = await lastValueFrom( + searchSource.fetch$({ + legacyHitsTotal: false, + }) + ); + // eslint-disable-next-line no-console + console.log('ES response', resp); + const total = resp.hits.total as { value: number }; + return total?.value ?? 0; +} diff --git a/examples/embeddable_examples/public/react_embeddables/search/register_add_search_panel_action.tsx b/examples/embeddable_examples/public/react_embeddables/search/register_add_search_panel_action.tsx new file mode 100644 index 0000000000000..d136a57fd7590 --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/search/register_add_search_panel_action.tsx @@ -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 { apiIsPresentationContainer } from '@kbn/presentation-containers'; +import { EmbeddableApiContext } from '@kbn/presentation-publishing'; +import { IncompatibleActionError, UiActionsStart } from '@kbn/ui-actions-plugin/public'; + +export const registerAddSearchPanelAction = (uiActions: UiActionsStart) => { + uiActions.registerAction({ + id: 'CREATE_SEARCH_REACT_EMBEDDABLE', + getDisplayName: () => 'Unified search example', + getDisplayNameTooltip: () => + 'Demonstrates how to use global filters, global time range, panel time range, and global query state in an embeddable', + getIconType: () => 'search', + isCompatible: async ({ embeddable }) => { + return apiIsPresentationContainer(embeddable); + }, + execute: async ({ embeddable }) => { + if (!apiIsPresentationContainer(embeddable)) throw new IncompatibleActionError(); + embeddable.addNewPanel( + { + panelType: 'SEARCH_REACT_EMBEDDABLE', + initialState: {}, + }, + true + ); + }, + }); + uiActions.attachAction('ADD_PANEL_TRIGGER', 'CREATE_SEARCH_REACT_EMBEDDABLE'); +}; diff --git a/examples/embeddable_examples/public/react_embeddables/search/register_search_embeddable_factory.ts b/examples/embeddable_examples/public/react_embeddables/search/register_search_embeddable_factory.ts new file mode 100644 index 0000000000000..a2b4bf7ac6282 --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/search/register_search_embeddable_factory.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { + ReactEmbeddableFactory, + registerReactEmbeddableFactory, +} from '@kbn/embeddable-plugin/public'; +import { Api, Services, State } from './types'; + +export const registerSearchEmbeddableFactory = (services: Services) => { + const factory: ReactEmbeddableFactory = { + type: 'SEARCH_REACT_EMBEDDABLE', + deserializeState: (state) => { + return state.rawState as State; + }, + buildEmbeddable: async (state, buildApi) => { + const { buildSearchEmbeddable } = await import('./build_search_embeddable'); + return buildSearchEmbeddable(state, buildApi, services); + }, + }; + + registerReactEmbeddableFactory(factory); +}; diff --git a/examples/embeddable_examples/public/react_embeddables/search/types.ts b/examples/embeddable_examples/public/react_embeddables/search/types.ts new file mode 100644 index 0000000000000..5ba940b2d40b0 --- /dev/null +++ b/examples/embeddable_examples/public/react_embeddables/search/types.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; +import type { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; +import { TimeRange } from '@kbn/es-query'; +import { + HasParentApi, + PublishesDataLoading, + PublishesDataViews, + PublishesUnifiedSearch, + PublishesWritableUnifiedSearch, +} from '@kbn/presentation-publishing'; + +export interface State { + timeRange: TimeRange | undefined; +} + +export type Api = DefaultEmbeddableApi & + PublishesDataViews & + PublishesDataLoading & + Pick & + Partial>; + +export interface Services { + data: DataPublicPluginStart; + dataViews: DataViewsPublicPluginStart; +} diff --git a/packages/presentation/presentation_publishing/index.ts b/packages/presentation/presentation_publishing/index.ts index 31bf58c113ba9..d979669f510a8 100644 --- a/packages/presentation/presentation_publishing/index.ts +++ b/packages/presentation/presentation_publishing/index.ts @@ -56,9 +56,11 @@ export { type PublishesDisabledActionIds, } from './interfaces/publishes_disabled_action_ids'; export { + apiPublishesTimeRange, apiPublishesUnifiedSearch, apiPublishesPartialUnifiedSearch, apiPublishesWritableUnifiedSearch, + type PublishesTimeRange, type PublishesUnifiedSearch, type PublishesWritableUnifiedSearch, } from './interfaces/publishes_unified_search'; diff --git a/packages/presentation/presentation_publishing/interfaces/publishes_unified_search.ts b/packages/presentation/presentation_publishing/interfaces/publishes_unified_search.ts index ff6fee8cf8b67..c5a047d7696fe 100644 --- a/packages/presentation/presentation_publishing/interfaces/publishes_unified_search.ts +++ b/packages/presentation/presentation_publishing/interfaces/publishes_unified_search.ts @@ -9,12 +9,15 @@ import { TimeRange, Filter, Query, AggregateQuery } from '@kbn/es-query'; import { PublishingSubject } from '../publishing_subject'; -export interface PublishesUnifiedSearch { - isCompatibleWithUnifiedSearch?: () => boolean; +export interface PublishesTimeRange { timeRange$: PublishingSubject; +} + +export type PublishesUnifiedSearch = PublishesTimeRange & { + isCompatibleWithUnifiedSearch?: () => boolean; filters$: PublishingSubject; query$: PublishingSubject; -} +}; export type PublishesWritableUnifiedSearch = PublishesUnifiedSearch & { setTimeRange: (timeRange: TimeRange | undefined) => void; @@ -22,12 +25,18 @@ export type PublishesWritableUnifiedSearch = PublishesUnifiedSearch & { setQuery: (query: Query | undefined) => void; }; +export const apiPublishesTimeRange = ( + unknownApi: null | unknown +): unknownApi is PublishesTimeRange => { + return Boolean(unknownApi && (unknownApi as PublishesTimeRange)?.timeRange$ !== undefined); +}; + export const apiPublishesUnifiedSearch = ( unknownApi: null | unknown ): unknownApi is PublishesUnifiedSearch => { return Boolean( unknownApi && - (unknownApi as PublishesUnifiedSearch)?.timeRange$ !== undefined && + apiPublishesTimeRange(unknownApi) && (unknownApi as PublishesUnifiedSearch)?.filters$ !== undefined && (unknownApi as PublishesUnifiedSearch)?.query$ !== undefined ); @@ -37,7 +46,7 @@ export const apiPublishesPartialUnifiedSearch = ( unknownApi: null | unknown ): unknownApi is Partial => { return Boolean( - (unknownApi && (unknownApi as PublishesUnifiedSearch)?.timeRange$ !== undefined) || + apiPublishesTimeRange(unknownApi) || (unknownApi as PublishesUnifiedSearch)?.filters$ !== undefined || (unknownApi as PublishesUnifiedSearch)?.query$ !== undefined ); diff --git a/src/plugins/presentation_panel/public/panel_actions/customize_panel_action/custom_time_range_badge.tsx b/src/plugins/presentation_panel/public/panel_actions/customize_panel_action/custom_time_range_badge.tsx index ef43514bbfde6..5708a760d1ba2 100644 --- a/src/plugins/presentation_panel/public/panel_actions/customize_panel_action/custom_time_range_badge.tsx +++ b/src/plugins/presentation_panel/public/panel_actions/customize_panel_action/custom_time_range_badge.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { renderToString } from 'react-dom/server'; import { UI_SETTINGS } from '@kbn/data-plugin/common'; -import { apiPublishesUnifiedSearch, EmbeddableApiContext } from '@kbn/presentation-publishing'; +import { apiPublishesTimeRange, EmbeddableApiContext } from '@kbn/presentation-publishing'; import { core } from '../../kibana_services'; import { customizePanelAction } from '../panel_actions'; @@ -30,7 +30,7 @@ export class CustomTimeRangeBadge public order = 7; public getDisplayName({ embeddable }: EmbeddableApiContext) { - if (!apiPublishesUnifiedSearch(embeddable)) throw new IncompatibleActionError(); + if (!apiPublishesTimeRange(embeddable)) throw new IncompatibleActionError(); const timeRange = embeddable.timeRange$.value; if (!timeRange) return ''; return renderToString( @@ -43,14 +43,14 @@ export class CustomTimeRangeBadge } public couldBecomeCompatible({ embeddable }: EmbeddableApiContext) { - return apiPublishesUnifiedSearch(embeddable); + return apiPublishesTimeRange(embeddable); } public subscribeToCompatibilityChanges( { embeddable }: EmbeddableApiContext, onChange: (isCompatible: boolean, action: CustomTimeRangeBadge) => void ) { - if (!apiPublishesUnifiedSearch(embeddable)) return; + if (!apiPublishesTimeRange(embeddable)) return; return embeddable.timeRange$.subscribe((timeRange) => { onChange(Boolean(timeRange), this); }); @@ -65,7 +65,7 @@ export class CustomTimeRangeBadge } public async isCompatible({ embeddable }: EmbeddableApiContext) { - if (apiPublishesUnifiedSearch(embeddable)) { + if (apiPublishesTimeRange(embeddable)) { const timeRange = embeddable.timeRange$.value; return Boolean(timeRange); } diff --git a/src/plugins/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_editor.tsx b/src/plugins/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_editor.tsx index 964b4e76ff4ff..88f20d4830945 100644 --- a/src/plugins/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_editor.tsx +++ b/src/plugins/presentation_panel/public/panel_actions/customize_panel_action/customize_panel_editor.tsx @@ -30,9 +30,11 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { UI_SETTINGS } from '@kbn/data-plugin/public'; import { + apiPublishesTimeRange, apiPublishesUnifiedSearch, getInheritedViewMode, getPanelTitle, + PublishesUnifiedSearch, } from '@kbn/presentation-publishing'; import { core } from '../../kibana_services'; @@ -225,7 +227,10 @@ export const CustomizePanelEditor = ({ }; const renderCustomTimeRangeComponent = () => { - if (!apiPublishesUnifiedSearch(api) || !(api.isCompatibleWithUnifiedSearch?.() ?? true)) + if ( + !apiPublishesTimeRange(api) || + !((api as PublishesUnifiedSearch).isCompatibleWithUnifiedSearch?.() ?? true) + ) return null; return ( From ee9c021bf1c8f6fcbcd29dbd9c50c02167b84b58 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 22 Mar 2024 04:57:52 +0000 Subject: [PATCH 40/90] skip flaky suite (#175655) --- .../public/components/case_view/components/edit_tags.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/cases/public/components/case_view/components/edit_tags.test.tsx b/x-pack/plugins/cases/public/components/case_view/components/edit_tags.test.tsx index b1ac130d015c6..7ced679368434 100644 --- a/x-pack/plugins/cases/public/components/case_view/components/edit_tags.test.tsx +++ b/x-pack/plugins/cases/public/components/case_view/components/edit_tags.test.tsx @@ -25,7 +25,8 @@ const defaultProps: EditTagsProps = { tags: [], }; -describe('EditTags ', () => { +// FLAKY: https://github.com/elastic/kibana/issues/175655 +describe.skip('EditTags ', () => { let appMockRender: AppMockRenderer; const sampleTags = ['coke', 'pepsi']; From 112f03f0bac679d98d0153bb82457ec44b01c578 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Fri, 22 Mar 2024 01:57:15 -0400 Subject: [PATCH 41/90] [api-docs] 2024-03-22 Daily api_docs build (#179213) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/650 --- api_docs/actions.devdocs.json | 82 +- api_docs/actions.mdx | 4 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_observability.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/asset_manager.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.devdocs.json | 138 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.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 | 6 +- api_docs/deprecations_by_plugin.mdx | 11 +- api_docs/deprecations_by_team.mdx | 10 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.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.devdocs.json | 595 +++++++-- api_docs/embeddable_enhanced.mdx | 4 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.devdocs.json | 12 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.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/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- 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/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.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_utils.mdx | 2 +- .../kbn_alerting_api_integration_helpers.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_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.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 +- ...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 +- 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 +- .../kbn_core_application_browser.devdocs.json | 4 + 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 | 12 + 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_settings_server.mdx | 2 +- ...kbn_core_user_settings_server_internal.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.devdocs.json | 107 +- api_docs/kbn_dom_drag_drop.mdx | 4 +- 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_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_utils.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_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_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.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_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.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_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 +- .../kbn_presentation_containers.devdocs.json | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_library.mdx | 2 +- .../kbn_presentation_publishing.devdocs.json | 1168 +++-------------- 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_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_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_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 +- api_docs/kbn_rison.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_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 +- 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_grouping.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 +- 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_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_solution_nav_es.mdx | 2 +- api_docs/kbn_solution_nav_oblt.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_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_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_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 +- ...n_visualization_ui_components.devdocs.json | 19 +- api_docs/kbn_visualization_ui_components.mdx | 4 +- 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_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.devdocs.json | 62 +- api_docs/lens.mdx | 4 +- 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_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.devdocs.json | 46 +- 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.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.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 | 17 +- 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_playground.devdocs.json | 250 ++++ api_docs/search_playground.mdx | 46 + 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/text_based_languages.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 +- 681 files changed, 2089 insertions(+), 1834 deletions(-) create mode 100644 api_docs/search_playground.devdocs.json create mode 100644 api_docs/search_playground.mdx diff --git a/api_docs/actions.devdocs.json b/api_docs/actions.devdocs.json index 4c6db4cc6fc8a..7cdb870059304 100644 --- a/api_docs/actions.devdocs.json +++ b/api_docs/actions.devdocs.json @@ -2077,7 +2077,7 @@ "id": "def-server.UnsecuredActionsClient.Unnamed.$1", "type": "Object", "tags": [], - "label": "params", + "label": "opts", "description": [], "signature": [ "UnsecuredActionsClientOpts" @@ -2181,6 +2181,46 @@ } ], "returnComment": [] + }, + { + "parentPluginId": "actions", + "id": "def-server.UnsecuredActionsClient.getAll", + "type": "Function", + "tags": [], + "label": "getAll", + "description": [], + "signature": [ + "(spaceId: string) => Promise<", + { + "pluginId": "actions", + "scope": "server", + "docId": "kibActionsPluginApi", + "section": "def-server.ConnectorWithExtraFindData", + "text": "ConnectorWithExtraFindData" + }, + "[]>" + ], + "path": "x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "actions", + "id": "def-server.UnsecuredActionsClient.getAll.$1", + "type": "string", + "tags": [], + "label": "spaceId", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] } ], "initialIsOpen": false @@ -3073,6 +3113,46 @@ "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "actions", + "id": "def-server.IUnsecuredActionsClient.getAll", + "type": "Function", + "tags": [], + "label": "getAll", + "description": [], + "signature": [ + "(spaceId: string) => Promise<", + { + "pluginId": "actions", + "scope": "server", + "docId": "kibActionsPluginApi", + "section": "def-server.ConnectorWithExtraFindData", + "text": "ConnectorWithExtraFindData" + }, + "[]>" + ], + "path": "x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "actions", + "id": "def-server.IUnsecuredActionsClient.getAll.$1", + "type": "string", + "tags": [], + "label": "spaceId", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/actions/server/unsecured_actions_client/unsecured_actions_client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "actions", "id": "def-server.IUnsecuredActionsClient.execute", diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 5613f01877e24..8f724dc910a5a 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 285 | 0 | 279 | 32 | +| 289 | 0 | 283 | 32 | ## Client diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index cf4b3dd448e12..d5084820c31a5 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_observability.mdx b/api_docs/ai_assistant_management_observability.mdx index 8cd12c8c9210b..3676430e48b48 100644 --- a/api_docs/ai_assistant_management_observability.mdx +++ b/api_docs/ai_assistant_management_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementObservability title: "aiAssistantManagementObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementObservability plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementObservability'] --- import aiAssistantManagementObservabilityObj from './ai_assistant_management_observability.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index f54470228a676..1eb7ddf331986 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-03-21 +date: 2024-03-22 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 d19fefbe9750e..12a77f4e5eb4f 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-03-21 +date: 2024-03-22 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 4532f186f2fa1..38521785fa025 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-03-21 +date: 2024-03-22 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 4d00ead01cba2..841419805e004 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-03-21 +date: 2024-03-22 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 e762523d03185..d7f0bb0949c98 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 56399b3edee66..de5203e44b0ee 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index c03be24953f58..70c7bcf1f348b 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-03-21 +date: 2024-03-22 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 e781c75b76f0c..0b1d631a099e6 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-03-21 +date: 2024-03-22 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 0acaf496f7b08..9e3c6c4aac368 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-03-21 +date: 2024-03-22 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 0c62bdfe26c50..cdfa1909381d0 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-03-21 +date: 2024-03-22 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 2fc9fd7ace656..9fc661b14ebe8 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-03-21 +date: 2024-03-22 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 f829acc10b68d..30dc0fe243d2e 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-03-21 +date: 2024-03-22 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 d485b7d596c0c..7a1d351aad927 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-03-21 +date: 2024-03-22 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 85a6305c39fca..f7e207ddc158a 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-03-21 +date: 2024-03-22 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 d89af297be754..13079575f4e29 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-03-21 +date: 2024-03-22 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 6ab36f4f1f1cc..2f35160cd1efa 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-03-21 +date: 2024-03-22 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 818195ccccc91..dd10fd6b2aa61 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-03-21 +date: 2024-03-22 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 fa6771255c0df..42726ca29d507 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-03-21 +date: 2024-03-22 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 af179fd49a380..076317fe4b95e 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-03-21 +date: 2024-03-22 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 d9f6ae245881c..77c5c05ac7151 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.devdocs.json b/api_docs/dashboard.devdocs.json index bb7b6e100c934..a77f98f8ac102 100644 --- a/api_docs/dashboard.devdocs.json +++ b/api_docs/dashboard.devdocs.json @@ -209,10 +209,50 @@ "pluginId": "@kbn/presentation-publishing", "scope": "common", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.PublishesUnifiedSearch", - "text": "PublishesUnifiedSearch" + "section": "def-common.PublishesTimeRange", + "text": "PublishesTimeRange" }, - " & ", + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; filters$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[] | undefined>; query$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.AggregateQuery", + "text": "AggregateQuery" + }, + " | undefined>; } & ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", @@ -263,10 +303,50 @@ "pluginId": "@kbn/presentation-publishing", "scope": "common", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.PublishesUnifiedSearch", - "text": "PublishesUnifiedSearch" + "section": "def-common.PublishesTimeRange", + "text": "PublishesTimeRange" }, - " & ", + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; filters$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[] | undefined>; query$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.AggregateQuery", + "text": "AggregateQuery" + }, + " | undefined>; } & ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", @@ -689,10 +769,50 @@ "pluginId": "@kbn/presentation-publishing", "scope": "common", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.PublishesUnifiedSearch", - "text": "PublishesUnifiedSearch" + "section": "def-common.PublishesTimeRange", + "text": "PublishesTimeRange" }, - " & ", + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; filters$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[] | undefined>; query$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.AggregateQuery", + "text": "AggregateQuery" + }, + " | undefined>; } & ", { "pluginId": "@kbn/presentation-publishing", "scope": "common", diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 09eb4462539bf..8a715c9eb117a 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-03-21 +date: 2024-03-22 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 ccf77081dcbac..e9bf110069f83 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-03-21 +date: 2024-03-22 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 38fac657a43a9..48b67f531428d 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index f4961d36ccaff..005f3f301ddf7 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-03-21 +date: 2024-03-22 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 93a63b1cafdaf..7305ee78352d9 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-03-21 +date: 2024-03-22 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 ef837cefd2c85..85e549ad816b4 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-03-21 +date: 2024-03-22 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 80af8f65aebe1..0ed38823c8f6e 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-03-21 +date: 2024-03-22 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 add6b3d52f011..55f6e02da9e7b 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-03-21 +date: 2024-03-22 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 980d90c3b5237..2b9ea171a01da 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-03-21 +date: 2024-03-22 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 db96ffaad4b71..c4cbff2e97061 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-03-21 +date: 2024-03-22 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 7e97e502af4ad..bca239a086b15 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-03-21 +date: 2024-03-22 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 14b09dd413f95..373734fdccb03 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -113,7 +113,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | dataViewManagement | - | | | unifiedSearch | - | | | unifiedSearch | - | -| | dashboardEnhanced | - | | | embeddableEnhanced | - | | | visTypeGauge | - | | | visTypePie | - | @@ -147,7 +146,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | fleet, apm, security, securitySolution | 8.8.0 | | | spaces, security, alerting | 8.8.0 | | | embeddable, presentationUtil, dashboard, lens, discover, graph, links | 8.8.0 | -| | @kbn/core-application-browser-internal, @kbn/core-application-browser-mocks, management, fleet, security, kibanaOverview, @kbn/core | 8.8.0 | +| | @kbn/core-application-browser-internal, @kbn/core-application-browser-mocks, management, fleet, searchPlayground, security, kibanaOverview, @kbn/core | 8.8.0 | | | security | 8.8.0 | | | apm | 8.8.0 | | | mapsEms | 8.8.0 | @@ -178,6 +177,7 @@ Safe to remove. | | data | | | data | | | data | +| | embeddableEnhanced | | | expressions | | | expressions | | | expressions | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 7b7df57a996be..97d15bdac4ca8 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -571,7 +571,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [menu_item.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/menu_item.tsx#:~:text=EnhancedEmbeddableContext), [menu_item.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/menu_item.tsx#:~:text=EnhancedEmbeddableContext) | - | | | [flyout_create_drilldown.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_create_drilldown/flyout_create_drilldown.tsx#:~:text=toMountPoint), [flyout_create_drilldown.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_create_drilldown/flyout_create_drilldown.tsx#:~:text=toMountPoint), [flyout_edit_drilldown.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.tsx#:~:text=toMountPoint), [flyout_edit_drilldown.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/flyout_edit_drilldown.tsx#:~:text=toMountPoint) | - | | | [collect_config_container.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/abstract_dashboard_drilldown/components/collect_config_container.tsx#:~:text=savedObjects), [collect_config_container.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/abstract_dashboard_drilldown/components/collect_config_container.tsx#:~:text=savedObjects) | - | | | [collect_config_container.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/abstract_dashboard_drilldown/components/collect_config_container.tsx#:~:text=find) | - | @@ -1375,6 +1374,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## searchPlayground + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/search_playground/public/application.tsx#:~:text=appBasePath) | 8.8.0 | + + + ## searchprofiler | Deprecated API | Reference location(s) | Remove By | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 3552c0fa935d7..4e038ec519831 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,6 +21,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## @elastic/enterprise-search-frontend + +| Plugin | Deprecated API | Reference location(s) | Remove By | +| --------|-------|-----------|-----------| +| searchPlayground | | [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/search_playground/public/application.tsx#:~:text=appBasePath) | 8.8.0 | + + + ## @elastic/fleet | Plugin | Deprecated API | Reference location(s) | Remove By | diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 371eb80dd3537..d74eb48753db1 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-03-21 +date: 2024-03-22 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 63118b1732163..c177ba51ae0c9 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-03-21 +date: 2024-03-22 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 f1bca618e9fca..6e7c3146b6262 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 15fd51923fc6e..08d0a3d03f58d 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-03-21 +date: 2024-03-22 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 ff0c3bff5cbb0..4faf18bdc2219 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-03-21 +date: 2024-03-22 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 a46d3403e262d..098846a574fcc 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.devdocs.json b/api_docs/embeddable_enhanced.devdocs.json index 78396cc65de94..b8496a9061fdf 100644 --- a/api_docs/embeddable_enhanced.devdocs.json +++ b/api_docs/embeddable_enhanced.devdocs.json @@ -42,71 +42,6 @@ ], "returnComment": [], "initialIsOpen": false - }, - { - "parentPluginId": "embeddableEnhanced", - "id": "def-public.isEnhancedEmbeddable", - "type": "Function", - "tags": [], - "label": "isEnhancedEmbeddable", - "description": [], - "signature": [ - "(maybeEnhancedEmbeddable: E) => maybeEnhancedEmbeddable is ", - { - "pluginId": "embeddableEnhanced", - "scope": "public", - "docId": "kibEmbeddableEnhancedPluginApi", - "section": "def-public.EnhancedEmbeddable", - "text": "EnhancedEmbeddable" - }, - " ? E : never>" - ], - "path": "x-pack/plugins/embeddable_enhanced/public/embeddables/is_enhanced_embeddable.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "embeddableEnhanced", - "id": "def-public.isEnhancedEmbeddable.$1", - "type": "Uncategorized", - "tags": [], - "label": "maybeEnhancedEmbeddable", - "description": [], - "signature": [ - "E" - ], - "path": "x-pack/plugins/embeddable_enhanced/public/embeddables/is_enhanced_embeddable.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false } ], "interfaces": [ @@ -122,16 +57,7 @@ "path": "x-pack/plugins/embeddable_enhanced/public/types.ts", "deprecated": true, "trackAdoption": false, - "references": [ - { - "plugin": "dashboardEnhanced", - "path": "x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/menu_item.tsx" - }, - { - "plugin": "dashboardEnhanced", - "path": "x-pack/plugins/dashboard_enhanced/public/services/drilldowns/actions/flyout_edit_drilldown/menu_item.tsx" - } - ], + "references": [], "children": [ { "parentPluginId": "embeddableEnhanced", @@ -164,15 +90,14 @@ "section": "def-public.EmbeddableOutput", "text": "EmbeddableOutput" }, - ", any> & { enhancements: { dynamicActions: ", + ", any> & ", { - "pluginId": "uiActionsEnhanced", + "pluginId": "embeddableEnhanced", "scope": "public", - "docId": "kibUiActionsEnhancedPluginApi", - "section": "def-public.DynamicActionManager", - "text": "DynamicActionManager" - }, - "; }; }" + "docId": "kibEmbeddableEnhancedPluginApi", + "section": "def-public.HasDynamicActions", + "text": "HasDynamicActions" + } ], "path": "x-pack/plugins/embeddable_enhanced/public/types.ts", "deprecated": false, @@ -213,6 +138,418 @@ "path": "x-pack/plugins/embeddable_enhanced/public/embeddables/interfaces/has_dynamic_actions.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "embeddableEnhanced", + "id": "def-public.HasDynamicActions.setDynamicActions", + "type": "Function", + "tags": [], + "label": "setDynamicActions", + "description": [], + "signature": [ + "(newState: { dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined) => void" + ], + "path": "x-pack/plugins/embeddable_enhanced/public/embeddables/interfaces/has_dynamic_actions.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "embeddableEnhanced", + "id": "def-public.HasDynamicActions.setDynamicActions.$1", + "type": "Object", + "tags": [], + "label": "newState", + "description": [], + "signature": [ + "{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined" + ], + "path": "x-pack/plugins/embeddable_enhanced/public/embeddables/interfaces/has_dynamic_actions.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + }, + { + "parentPluginId": "embeddableEnhanced", + "id": "def-public.HasDynamicActions.dynamicActionsState$", + "type": "Object", + "tags": [], + "label": "dynamicActionsState$", + "description": [], + "signature": [ + "{ source: ", + "Observable", + " | undefined; readonly value: { dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined; error: (err: any) => void; forEach: { (next: (value: { dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined) => void): Promise; (next: (value: { dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => { dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined; pipe: { (): ", + "Observable", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined>;
(op1: ", + "OperatorFunction", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined, A>): ", + "Observable", + "; (op1: ", + "OperatorFunction", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined, A>, op2: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined, A>, op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined, A>, op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined, A>, op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined, A>, op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined, A>, op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + ", op7: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined, A>, op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + ", op7: ", + "OperatorFunction", + ", op8: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined, A>, op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + ", op7: ", + "OperatorFunction", + ", op8: ", + "OperatorFunction", + ", op9: ", + "OperatorFunction", + "): ", + "Observable", + "; (op1: ", + "OperatorFunction", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined, A>, op2: ", + "OperatorFunction", + ", op3: ", + "OperatorFunction", + ", op4: ", + "OperatorFunction", + ", op5: ", + "OperatorFunction", + ", op6: ", + "OperatorFunction", + ", op7: ", + "OperatorFunction", + ", op8: ", + "OperatorFunction", + ", op9: ", + "OperatorFunction", + ", ...operations: ", + "OperatorFunction", + "[]): ", + "Observable", + "; }; complete: () => void; closed: boolean; observers: ", + "Observer", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined>[]; isStopped: boolean; hasError: boolean; thrownError: any; lift: (operator: ", + "Operator", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined, R>) => ", + "Observable", + "; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", + "Observable", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined>; operator: ", + "Operator", + " | undefined; subscribe: { (observerOrNext?: Partial<", + "Observer", + "<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined>> | ((value: { dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined) => void) | undefined): ", + "Subscription", + "; (next?: ((value: { dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", + "Subscription", + "; }; toPromise: { (): Promise<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined>; (PromiseCtor: PromiseConstructor): Promise<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined>; (PromiseCtor: PromiseConstructorLike): Promise<{ dynamicActions: ", + { + "pluginId": "uiActionsEnhanced", + "scope": "common", + "docId": "kibUiActionsEnhancedPluginApi", + "section": "def-common.DynamicActionsState", + "text": "DynamicActionsState" + }, + "; } | undefined>; }; }" + ], + "path": "x-pack/plugins/embeddable_enhanced/public/embeddables/interfaces/has_dynamic_actions.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -358,15 +695,14 @@ "label": "EnhancedEmbeddable", "description": [], "signature": [ - "E & { enhancements: { dynamicActions: ", + "E & ", { - "pluginId": "uiActionsEnhanced", + "pluginId": "embeddableEnhanced", "scope": "public", - "docId": "kibUiActionsEnhancedPluginApi", - "section": "def-public.DynamicActionManager", - "text": "DynamicActionManager" - }, - "; }; }" + "docId": "kibEmbeddableEnhancedPluginApi", + "section": "def-public.HasDynamicActions", + "text": "HasDynamicActions" + } ], "path": "x-pack/plugins/embeddable_enhanced/public/types.ts", "deprecated": false, @@ -399,7 +735,86 @@ "path": "x-pack/plugins/embeddable_enhanced/public/plugin.ts", "deprecated": false, "trackAdoption": false, - "children": [], + "children": [ + { + "parentPluginId": "embeddableEnhanced", + "id": "def-public.StartContract.initializeReactEmbeddableDynamicActions", + "type": "Function", + "tags": [], + "label": "initializeReactEmbeddableDynamicActions", + "description": [], + "signature": [ + "(uuid: string, getTitle: () => string | undefined, state: ", + "DynamicActionsSerializedState", + ") => { dynamicActionsApi: ", + { + "pluginId": "embeddableEnhanced", + "scope": "public", + "docId": "kibEmbeddableEnhancedPluginApi", + "section": "def-public.HasDynamicActions", + "text": "HasDynamicActions" + }, + "; dynamicActionsComparator: ", + "EmbeddableStateComparators", + "<", + "DynamicActionsSerializedState", + ">; serializeDynamicActions: () => ", + "DynamicActionsSerializedState", + "; }" + ], + "path": "x-pack/plugins/embeddable_enhanced/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "embeddableEnhanced", + "id": "def-public.StartContract.initializeReactEmbeddableDynamicActions.$1", + "type": "string", + "tags": [], + "label": "uuid", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/embeddable_enhanced/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "embeddableEnhanced", + "id": "def-public.StartContract.initializeReactEmbeddableDynamicActions.$2", + "type": "Function", + "tags": [], + "label": "getTitle", + "description": [], + "signature": [ + "() => string | undefined" + ], + "path": "x-pack/plugins/embeddable_enhanced/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "embeddableEnhanced", + "id": "def-public.StartContract.initializeReactEmbeddableDynamicActions.$3", + "type": "Object", + "tags": [], + "label": "state", + "description": [], + "signature": [ + "DynamicActionsSerializedState" + ], + "path": "x-pack/plugins/embeddable_enhanced/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], "lifecycle": "start", "initialIsOpen": true } diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index d2e2bb9b328d8..9754c62874ed8 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.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 | |-------------------|-----------|------------------------|-----------------| -| 18 | 0 | 18 | 0 | +| 23 | 0 | 23 | 1 | ## Client diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index a1242c86e9706..9bcc2204b17c5 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.devdocs.json b/api_docs/enterprise_search.devdocs.json index de410fffcb09a..4318cb4035bcf 100644 --- a/api_docs/enterprise_search.devdocs.json +++ b/api_docs/enterprise_search.devdocs.json @@ -54,7 +54,7 @@ "label": "ConfigType", "description": [], "signature": [ - "{ readonly host?: string | undefined; readonly customHeaders?: Readonly<{} & {}> | undefined; readonly ssl: Readonly<{ certificateAuthorities?: string | string[] | undefined; } & { verificationMode: \"none\" | \"full\" | \"certificate\"; }>; readonly enabled: boolean; readonly ui: Readonly<{} & { enabled: boolean; }>; readonly accessCheckTimeout: number; readonly accessCheckTimeoutWarning: number; readonly canDeployEntSearch: boolean; readonly hasConnectors: boolean; readonly hasDefaultIngestPipeline: boolean; readonly hasDocumentLevelSecurityEnabled: boolean; readonly hasIncrementalSyncEnabled: boolean; readonly hasNativeConnectors: boolean; readonly hasWebCrawler: boolean; readonly isCloud: boolean; readonly showAIPlayground: boolean; }" + "{ readonly host?: string | undefined; readonly customHeaders?: Readonly<{} & {}> | undefined; readonly ssl: Readonly<{ certificateAuthorities?: string | string[] | undefined; } & { verificationMode: \"none\" | \"full\" | \"certificate\"; }>; readonly enabled: boolean; readonly ui: Readonly<{} & { enabled: boolean; }>; readonly accessCheckTimeout: number; readonly accessCheckTimeoutWarning: number; readonly canDeployEntSearch: boolean; readonly hasConnectors: boolean; readonly hasDefaultIngestPipeline: boolean; readonly hasDocumentLevelSecurityEnabled: boolean; readonly hasIncrementalSyncEnabled: boolean; readonly hasNativeConnectors: boolean; readonly hasWebCrawler: boolean; readonly isCloud: boolean; }" ], "path": "x-pack/plugins/enterprise_search/server/index.ts", "deprecated": false, @@ -237,15 +237,7 @@ "section": "def-common.Type", "text": "Type" }, - "; }>; showAIPlayground: ", - { - "pluginId": "@kbn/config-schema", - "scope": "common", - "docId": "kibKbnConfigSchemaPluginApi", - "section": "def-common.Type", - "text": "Type" - }, - "; }>" + "; }>; }>" ], "path": "x-pack/plugins/enterprise_search/server/index.ts", "deprecated": false, diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index c3ce90f8d00c0..730dabf23cc42 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index b5339035a1c62..284c50a391b43 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 8f127ca848409..a9897cac82643 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-03-21 +date: 2024-03-22 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 55c1a7535c4fa..d9b87fa0f8bfa 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-03-21 +date: 2024-03-22 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 9a6352658fe19..d1cd1bc48c8ee 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-03-21 +date: 2024-03-22 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 056a95a18e399..63804d2dcc4eb 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-03-21 +date: 2024-03-22 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 38d706f804e41..c9a43b3b3fc1d 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-03-21 +date: 2024-03-22 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 0c649f3e69a2e..273acb70ee10a 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-03-21 +date: 2024-03-22 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 88178ccba5bae..08f3be55f85d9 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-03-21 +date: 2024-03-22 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 dbb90df75b091..fa4115dc8dfb9 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-03-21 +date: 2024-03-22 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 586a4f5d1aee5..e71c08e79fd30 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-03-21 +date: 2024-03-22 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 6c96b11acdfec..6dc339e5691cd 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-03-21 +date: 2024-03-22 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 49461e3a9f165..ff1c88de0bfc5 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-03-21 +date: 2024-03-22 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 3d84c2c1a4c4f..3ad4ff2593f25 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-03-21 +date: 2024-03-22 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 4c5cb6045bcd1..7f25dfb8ec856 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-03-21 +date: 2024-03-22 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 b7c830d7d6316..7a68e8b09bc60 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-03-21 +date: 2024-03-22 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 6bfdfd93d7de5..0fec0d34f72d8 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-03-21 +date: 2024-03-22 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 64748dd9ee412..b82b448ac23ab 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-03-21 +date: 2024-03-22 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 93a30e09b0ccb..e259b781e0c54 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-03-21 +date: 2024-03-22 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 ffd36718b80c6..68bc068d0dcfe 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-03-21 +date: 2024-03-22 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 1890b87cb7db0..54dc1ceaeb57a 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-03-21 +date: 2024-03-22 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 df914eef7f376..bc2634b9006bc 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 7fb6a78ddbcbf..d52df92fd7489 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-03-21 +date: 2024-03-22 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 ec730f23ed205..957a6df5df364 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-03-21 +date: 2024-03-22 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 2d0dd7c4709ab..55945a0756dc5 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index f46d2acb3de02..b2b7b4ac873d1 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index f79c4ce2af764..657e5343e398a 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-03-21 +date: 2024-03-22 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 2cb37cebd47f7..1b5785a53da4d 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-03-21 +date: 2024-03-22 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 d5e5bf55d12ff..2b2cc8fa355f3 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-03-21 +date: 2024-03-22 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 1a811925244f7..0428dd4d62bf0 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-03-21 +date: 2024-03-22 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 df09fcf252aa2..0293426ba4556 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-03-21 +date: 2024-03-22 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 2270921182530..576939d7b9ec3 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 309bc8c059c14..64ccfc85983e8 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-03-21 +date: 2024-03-22 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 c36707dfe841f..a7b44bc727e9a 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-03-21 +date: 2024-03-22 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 8df00971356c3..0b9ea8b25bd13 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index fa683b602536f..bdfbac39b6362 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index bdc3543513cb8..2f6ffe883a8f9 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-03-21 +date: 2024-03-22 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 40f60041c50f1..7720380e84b7c 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-03-21 +date: 2024-03-22 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 35a5dd8b713cd..5a7cb7a88076c 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 76fcf90984506..16483cddff9a9 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index af4268c62804f..8179f5829a80c 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 6cc884dd7af5a..b5ad4d9247ebb 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-03-21 +date: 2024-03-22 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 5ab42e2e4293c..fd9a9891bf350 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-03-21 +date: 2024-03-22 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 5c7aee0cba41b..ca6b18f8c29f5 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index f801dc1a71c57..b63515f507e10 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-03-21 +date: 2024-03-22 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 37ee361a1f12b..5deb14557e95d 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 5d759ba799a9a..4036b9eaf29ce 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index a462ca87943cf..4bb0e4824a85f 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index c5356ff196a04..063f7815b711c 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 44cb74e69c71f..a62a8ef63459f 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 1fc6e5cf1019a..47f965a1d84e6 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index 09d2248db8ab4..5232de61c4f6f 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index f34f049a56cee..d20d6acd03c57 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 5516e3305b224..252ef569b282d 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-03-21 +date: 2024-03-22 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 ea4f5714557e9..6dc05b8cfb90f 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 3d38d42f63a37..34ce8360e49aa 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 2c90e6b8c0676..095728142d918 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-03-21 +date: 2024-03-22 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 fd5081920d75f..c6bcb3516023c 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-03-21 +date: 2024-03-22 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 72d7938f002b7..652d2d4d316b5 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-03-21 +date: 2024-03-22 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 6b1f64cc3975e..42e78f4e6ee7d 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-03-21 +date: 2024-03-22 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 ee9dab1d7c53d..106bcbd89428b 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-03-21 +date: 2024-03-22 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 ae6a555a8bc9d..b3a373e3e6a5c 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-03-21 +date: 2024-03-22 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 e039b66dd7106..6068f8ab36d51 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-03-21 +date: 2024-03-22 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 b3cb335296634..951a2e1be47bc 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-03-21 +date: 2024-03-22 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 fa3c3d13425c2..fe2c181ce6620 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-03-21 +date: 2024-03-22 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 ed345f879a452..6aa5fd8937ffb 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-03-21 +date: 2024-03-22 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 ff70b1e371565..d52eb06e9b862 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-03-21 +date: 2024-03-22 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 a868ca81594dd..5859b4025a7a5 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-03-21 +date: 2024-03-22 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 bddb3bd60a76e..3ce7fd62a745f 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-03-21 +date: 2024-03-22 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 19457b737ee36..28be887239e60 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-03-21 +date: 2024-03-22 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 b10c87f318f59..b9d828c6e93aa 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-03-21 +date: 2024-03-22 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 0abe9951fcf88..5407582c734d7 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-03-21 +date: 2024-03-22 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 af89cfc58b92a..a1fa1fc8c7399 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-03-21 +date: 2024-03-22 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 019abb2e97d18..a4ab64dfe8d3a 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 f188697c660f6..37be458181b57 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-03-21 +date: 2024-03-22 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 7263a8aa84673..fe41cef2ac1c9 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 6138988cbda41..98490a0e315a5 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-03-21 +date: 2024-03-22 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 4127781c2c11d..37c2f0c0a55f6 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-03-21 +date: 2024-03-22 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 b1375b5d9a71b..2fe5bcf7d8e44 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-03-21 +date: 2024-03-22 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 f75810ede6111..4504e6777182f 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 8d48bc9757faa..e0ca68e0b17de 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 a7424e82c3172..590d2abcbc0e5 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 16ff127b9b9fb..e6be0d3510aa6 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 159ca079af4c1..00d1649d6c59f 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 347b83a3f2a56..c7f59edb5fc86 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-03-21 +date: 2024-03-22 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 1fd3f975635c0..6f8b2ec0ff9e4 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 93cd601cfe8a6..f147f350f226b 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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.devdocs.json b/api_docs/kbn_core_application_browser.devdocs.json index a9eaf1ceaba35..9f4981d74adfd 100644 --- a/api_docs/kbn_core_application_browser.devdocs.json +++ b/api_docs/kbn_core_application_browser.devdocs.json @@ -1182,6 +1182,10 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/public/applications/integrations/index.tsx" }, + { + "plugin": "searchPlayground", + "path": "x-pack/plugins/search_playground/public/application.tsx" + }, { "plugin": "security", "path": "x-pack/plugins/security/public/authentication/logout/logout_app.test.ts" diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index f22d18ecdb5f3..4ea65d012705f 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 d9e5d217c5ef2..bd64fdb0b87ea 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 2e7743da43c78..283177c1a24c2 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 29a31788619e8..a61984e9aa691 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-03-21 +date: 2024-03-22 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 3ac56e84a20b6..95f5c5957866c 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 fa442db7afc30..120cd0ee38028 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 867b65df5e59b..7134726d1e52a 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 fce9b495de994..8e1a873868b5b 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 0795333827af3..6412988ceb266 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-03-21 +date: 2024-03-22 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 3a6346656ef04..5255ae267cd95 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 c61f0e448d3e7..39d70bd1dbc28 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 05994f8f097ba..772e7a6895eba 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 7bb1b43591647..ceb6e498dd6f7 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-03-21 +date: 2024-03-22 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 1fb3d01007c22..bf707089a5b9a 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-03-21 +date: 2024-03-22 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 b4d3eb5911ac8..47de068f1f645 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 3a36211a64f7d..91b79927b20ef 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 4c4441e6f8422..f536085d2fbc3 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 eeafd2e7bb900..ba990d4df2da9 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 ea9074605439a..88464bcf8b1e0 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 986c63f2ecfc3..efe6e7ea67b9e 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 52733088cccd8..3c8684d490c9c 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 25868310f372d..284da170f95be 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-03-21 +date: 2024-03-22 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 56015d6173fb8..fef27a2173677 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-03-21 +date: 2024-03-22 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 45cab90ecfc08..d392024977b95 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 e355ff96f8ae6..4b22818118c27 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 d00176b5ba9f9..36b0e99bbaa1f 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 934c73b91de7b..645c87f0ea41a 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 074d755fc3122..c38b828680b42 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 32e358b8ee08c..6fbab26401608 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-03-21 +date: 2024-03-22 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 30610ce49c776..c22e62d463291 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-03-21 +date: 2024-03-22 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 b500d06a5e921..bc10610938d8e 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 5e33b30043b60..9cd97aeba0f16 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 8b780924cf87f..b34212ce43205 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 1ab279624cf9b..33870f7a163e4 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 f3c58ea9f037c..4e8a5e7d8575a 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-03-21 +date: 2024-03-22 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 f1a615f3cd986..8e6deb713a187 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 c044776acb2bf..5dbfac68487d0 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 0173812b63209..52870e3e54258 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 6c30528db76be..c656e0756edd7 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-03-21 +date: 2024-03-22 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 b337cae11a337..309e2d8574ad0 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 305294cf705eb..3c635780a4809 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 c6b1d1c1533a5..19f427c899d6e 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 f05897bb9205a..e52804dae33f4 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 4b66a9db55f13..ed94bbfb8a262 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 441489eee985e..1d5a1a959a880 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 559eebde86470..aecc75f1dbd14 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 699d8413478a0..8613defa8896d 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-03-21 +date: 2024-03-22 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 1cef247fbca56..46ac6bcad2adc 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-03-21 +date: 2024-03-22 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 d42d448176f4a..677f51c348da9 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 05fcd7d5c6af7..1b2de29f04d66 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 0ac0cac3cc09a..710547e4dce40 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 4b6770b1ab90a..8b842e46a78e3 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 c7966a8e1876d..0dcd8d2a29ca4 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 a537d9127dac4..75a86f0f65f7d 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 f2377105fb248..1e22e35051ab1 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 39150ca345137..52cb6f94251f9 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-03-21 +date: 2024-03-22 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 116be9e43958c..fb60cf4dda315 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 e0355cee4ca9c..bd7559e9e8b35 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-03-21 +date: 2024-03-22 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 058471cc4d5e5..24af2dc4a1588 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-03-21 +date: 2024-03-22 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 ae70d010c6ec9..141ad405a3061 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 584f598d6e413..61a5a13905622 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 b400b58a89b3b..0f047191c405a 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 19f27f0ee1ce1..2ed5aee3bfd45 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 6880c7705fe27..89bb69db2598a 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -6830,6 +6830,18 @@ "plugin": "rollup", "path": "x-pack/plugins/rollup/server/routes/api/search/register_search_route.ts" }, + { + "plugin": "searchPlayground", + "path": "x-pack/plugins/search_playground/server/routes.ts" + }, + { + "plugin": "searchPlayground", + "path": "x-pack/plugins/search_playground/server/routes.ts" + }, + { + "plugin": "searchPlayground", + "path": "x-pack/plugins/search_playground/server/routes.ts" + }, { "plugin": "searchprofiler", "path": "x-pack/plugins/searchprofiler/server/routes/profile.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 563459a079088..5c5125ae6626a 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-03-21 +date: 2024-03-22 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 f06a931c91a85..a21f8e5c424db 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 d1dd15797d346..64628c06de65d 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 2ee59f9b4ae1d..52a1ce30f203f 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 58a14b29668dc..9341999660cbb 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 b774e38908402..a7ac6f42ba6ec 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-03-21 +date: 2024-03-22 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 f726ed64162b3..6271f1093faf5 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 a3b40cb70f2d3..8f76690eed37b 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 1c780958d0cf0..dc26e93e7c9af 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 90e511416ba82..be56dca6ca546 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 b63145618d3b1..60c3531d9966c 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 71b7d890a8362..b5ce71b77f76a 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 a7c9b5974678e..c155ab3d96d9e 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 5af5798ed1c31..358ec02a40fc4 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-03-21 +date: 2024-03-22 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 be687c57b4221..e2da284a8f132 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 e6c7643e953d1..c05beb8bf2d46 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 5dc76b5be5ded..746a2924469c9 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 fa16ad234b542..ab241fd0cdff7 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-03-21 +date: 2024-03-22 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 9b6f0bb25f3d8..d44d2a1016c22 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 f46c21b65e55e..68726ef99aaff 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 cfcb76870a345..1eeb81db54d6f 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 4a8bb1c8cfdfa..3391a736f7279 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 e334a833dcf32..94393c2fc77f6 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-03-21 +date: 2024-03-22 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 0adbb401456d5..915376cfebb88 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 ee5311c4a7d90..631de2443f93c 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 bc72aee292a39..8f6cd6f7f1031 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 258627345b506..12f2aff28281a 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-03-21 +date: 2024-03-22 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 0883ae9674e27..0cf18432f5292 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 3a4589f819a18..a8fac0bbee2ea 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 02a663e50d947..63de6bd550f33 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 de1a8b008a7e5..ba2614e19a3c0 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 5ccf8ea9da1a5..76f6975dc7939 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 64362c204ed50..22c8f0e373486 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 47368f57d47c9..b7155b1236406 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 b424eed1c640b..59e3bb74562d5 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 6deb6ca7bb404..0dc904d62b1f7 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 1bcf4943f0cad..99784dbff826c 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 3a9d8647b4268..e359f03a76100 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 949c2e4e6d938..f495c9d6ceecb 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-03-21 +date: 2024-03-22 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 24b9512a95570..54a9357c1a5ff 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-03-21 +date: 2024-03-22 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 eb54ae022cab0..ef69c43d349b4 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 e24dedc44d27d..d9ff26539b0fd 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-03-21 +date: 2024-03-22 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 da583cf88afc2..f149a5c83d736 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 bd486a34a6350..742709edd4165 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 00ad0cc46bba4..fc690f3fed682 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 385a822c73ced..68803a46c5d78 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 b9e7da303c5d5..9912b077c27d8 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 b812534b5675b..b3b5f247dc586 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 69c9a5b2355d2..4bdbf29626308 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-03-21 +date: 2024-03-22 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 c759f076a04b7..0a4d9dc97b5c5 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 c69f5acd6216c..5ef9a8d2437aa 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 23fb086755dd0..26052cb33fedf 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 392489b51aac5..4d89d85a60cac 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 69028a0183f19..33df38b314103 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 dcc0237bc437c..f157811e7ef79 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 11c65b1b78d87..29386b7c3f43c 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-03-21 +date: 2024-03-22 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 5e4b17bc23b01..880f883119844 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 ff5d0099a7402..e20a8aa6412f7 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 033c614fdda25..720458b248269 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 a97f9761075e4..97e4dc4637d96 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 9d3cd1c8aeb13..81a01c4273e9a 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-03-21 +date: 2024-03-22 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 8aedb215bdb83..bff6bd17553ff 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 27687859d061b..d7d410c1e920a 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 f394aa095ffba..c92b6edb8cf79 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-03-21 +date: 2024-03-22 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 c5112dc916530..c3448c91041d5 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-03-21 +date: 2024-03-22 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 7aacd965a9a73..76b22ca7c9381 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-03-21 +date: 2024-03-22 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 11e579c43a394..b2e1d4c74f87b 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-03-21 +date: 2024-03-22 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 694fe1188402d..ef090aa391e66 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-03-21 +date: 2024-03-22 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 790e94450050d..973be67cb6fef 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-03-21 +date: 2024-03-22 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 c5af125b803df..d1507c6ac17ed 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-03-21 +date: 2024-03-22 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 f906b18d90a0c..bdd0adc10d43a 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-03-21 +date: 2024-03-22 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 f6ca07abe5321..ba8968beafc1e 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-03-21 +date: 2024-03-22 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 8a19249fc8d54..9a271788c99d5 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 587f2d89f1acc..8678c8f106ca1 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-03-21 +date: 2024-03-22 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 d26c6763b7a83..4c9bfcc4ff139 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 8c9c32d3fb345..eedc65354cce5 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 24c92016c710c..50ed00598fce1 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-03-21 +date: 2024-03-22 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 7c4c7009fb9ed..5469e47e16500 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 2e2cd0323b43a..1aeba0d53a44d 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-03-21 +date: 2024-03-22 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 de2f204adfdf5..72c14cbfc7db8 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-03-21 +date: 2024-03-22 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 082b94527ca87..2c9c9bb0be0ff 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-03-21 +date: 2024-03-22 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 15447901d259c..261cc59b6e178 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 50e2918c710bd..f26338f5a7050 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 1f4627387b00d..a80271e4d3f37 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 7ab8a5b094e7f..b363cb36348be 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 4e937ee24065c..a3cb862bf10f7 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 4d7f3fafe86e8..62589086b5782 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 b653d92f9f74e..f4453300665bf 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-03-21 +date: 2024-03-22 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 451c9fd46680f..8bbba3c2f33e1 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-03-21 +date: 2024-03-22 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 5a95ab09f06c6..b26138e4a4292 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 9c2f6ba1eacdf..097e8de19dc40 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 8a07f73e7edae..5defb2d8629d4 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-03-21 +date: 2024-03-22 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 23b67d0ba2925..ea1e6db6a1035 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 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 fba31e0aa8beb..e0018a7a86821 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 856133204fe46..0efcad7cf5200 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index 416cabaa109bc..09b589ba0583a 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal'] --- import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 0475e6f05a30f..8572e8d3cc377 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 8441532eea194..803c8c28c5e71 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-03-21 +date: 2024-03-22 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 ba3f9675f3792..3e63710ffe6c1 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 ff134a793a22a..07ccd0f212c11 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-03-21 +date: 2024-03-22 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 80ee751c78d44..10172cd6674ed 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-03-21 +date: 2024-03-22 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 df244523c2ba4..465667abe8318 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-03-21 +date: 2024-03-22 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 5b2bd0da44945..a94ac94708ae0 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-03-21 +date: 2024-03-22 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 c4820bd84a152..b3fdb501e4080 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-03-21 +date: 2024-03-22 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 300cfdd236fdb..5913d93063b52 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-03-21 +date: 2024-03-22 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 f1370f67f8718..322acafe816fa 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 1e0c4526f9fb4..308e7b358035f 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-03-21 +date: 2024-03-22 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 9a63b3014cc6e..db6076ef41432 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-03-21 +date: 2024-03-22 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 c05dfbf212135..c2a1e92c76fdd 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-03-21 +date: 2024-03-22 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 9d9743af809d5..47b38cab6c099 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-03-21 +date: 2024-03-22 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 6492934ea5a78..4b303be410eb8 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-03-21 +date: 2024-03-22 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 94c605f0080b9..3fab119f75399 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-03-21 +date: 2024-03-22 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 69e7cf64f9d16..1339ae7177be2 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-03-21 +date: 2024-03-22 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 5c7f5c580d155..4dc93cc4a63b3 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-03-21 +date: 2024-03-22 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 b14806bb6c5b0..a154233ab1592 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-03-21 +date: 2024-03-22 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 7ee0628187079..a79914cb128f0 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-03-21 +date: 2024-03-22 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 204ebb03becc1..495bfcc7b9922 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-03-21 +date: 2024-03-22 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 a3eec0f2b562c..1ee1015215018 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-03-21 +date: 2024-03-22 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 328f0f5a69047..5ccd75a2c1929 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-03-21 +date: 2024-03-22 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 2f89fcf316280..a3b8697c9c085 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-03-21 +date: 2024-03-22 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 48ec8634336a6..4fbae5036c4d1 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-03-21 +date: 2024-03-22 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 aa77e04f0947a..f868f6bdcdd00 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-03-21 +date: 2024-03-22 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 7e3a8f08f7c1c..2ae40be5a01be 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-03-21 +date: 2024-03-22 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 a5c4a75e2a487..177ae7b511d58 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 e01d4042204a8..3777f9eec9e1f 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 c3c9801dcc388..cb6f501b601ad 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-03-21 +date: 2024-03-22 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 b74cdb36f57ff..02e7f1e086bc9 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-03-21 +date: 2024-03-22 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.devdocs.json b/api_docs/kbn_dom_drag_drop.devdocs.json index cb21105a32b80..ec02b01549178 100644 --- a/api_docs/kbn_dom_drag_drop.devdocs.json +++ b/api_docs/kbn_dom_drag_drop.devdocs.json @@ -58,33 +58,33 @@ }, { "parentPluginId": "@kbn/dom-drag-drop", - "id": "def-common.DragDrop", + "id": "def-common.Draggable", "type": "Function", "tags": [ "constructor" ], - "label": "DragDrop", + "label": "Draggable", "description": [ - "\nDragDrop component" + "\nDraggable component" ], "signature": [ - "(props: BaseProps) => JSX.Element" + "({ reorderableGroup, ...props }: DraggableProps) => JSX.Element" ], - "path": "packages/kbn-dom-drag-drop/src/drag_drop.tsx", + "path": "packages/kbn-dom-drag-drop/src/draggable.tsx", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/dom-drag-drop", - "id": "def-common.DragDrop.$1", + "id": "def-common.Draggable.$1", "type": "Object", "tags": [], - "label": "props", + "label": "{ reorderableGroup, ...props }", "description": [], "signature": [ - "BaseProps" + "DraggableProps" ], - "path": "packages/kbn-dom-drag-drop/src/drag_drop.tsx", + "path": "packages/kbn-dom-drag-drop/src/draggable.tsx", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -146,6 +146,45 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/dom-drag-drop", + "id": "def-common.Droppable", + "type": "Function", + "tags": [ + "constructor" + ], + "label": "Droppable", + "description": [ + "\nDroppable component" + ], + "signature": [ + "(props: ", + "DroppableProps", + ") => JSX.Element" + ], + "path": "packages/kbn-dom-drag-drop/src/droppable.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/dom-drag-drop", + "id": "def-common.Droppable.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "DroppableProps" + ], + "path": "packages/kbn-dom-drag-drop/src/droppable.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/dom-drag-drop", "id": "def-common.ReorderProvider", @@ -227,9 +266,17 @@ "label": "RootDragDropProvider", "description": [], "signature": [ - "({\n children,\n dataTestSubj = DEFAULT_DATA_TEST_SUBJ,\n customMiddleware,\n}: { children: React.ReactNode; dataTestSubj?: string | undefined; customMiddleware?: ", + "({\n children,\n customMiddleware,\n initialState = {},\n}: { children: React.ReactNode; customMiddleware?: ", "CustomMiddleware", - " | undefined; }) => JSX.Element" + " | undefined; initialState?: Partial<", + { + "pluginId": "@kbn/dom-drag-drop", + "scope": "common", + "docId": "kibKbnDomDragDropPluginApi", + "section": "def-common.DragContextState", + "text": "DragContextState" + }, + "> | undefined; }) => JSX.Element" ], "path": "packages/kbn-dom-drag-drop/src/providers/providers.tsx", "deprecated": false, @@ -240,7 +287,7 @@ "id": "def-common.RootDragDropProvider.$1", "type": "Object", "tags": [], - "label": "{\n children,\n dataTestSubj = DEFAULT_DATA_TEST_SUBJ,\n customMiddleware,\n}", + "label": "{\n children,\n customMiddleware,\n initialState = {},\n}", "description": [], "path": "packages/kbn-dom-drag-drop/src/providers/providers.tsx", "deprecated": false, @@ -262,13 +309,14 @@ }, { "parentPluginId": "@kbn/dom-drag-drop", - "id": "def-common.RootDragDropProvider.$1.dataTestSubj", - "type": "string", + "id": "def-common.RootDragDropProvider.$1.customMiddleware", + "type": "Function", "tags": [], - "label": "dataTestSubj", + "label": "customMiddleware", "description": [], "signature": [ - "string | undefined" + "CustomMiddleware", + " | undefined" ], "path": "packages/kbn-dom-drag-drop/src/providers/providers.tsx", "deprecated": false, @@ -276,14 +324,21 @@ }, { "parentPluginId": "@kbn/dom-drag-drop", - "id": "def-common.RootDragDropProvider.$1.customMiddleware", - "type": "Function", + "id": "def-common.RootDragDropProvider.$1.initialState", + "type": "Object", "tags": [], - "label": "customMiddleware", + "label": "initialState", "description": [], "signature": [ - "CustomMiddleware", - " | undefined" + "Partial<", + { + "pluginId": "@kbn/dom-drag-drop", + "scope": "common", + "docId": "kibKbnDomDragDropPluginApi", + "section": "def-common.DragContextState", + "text": "DragContextState" + }, + "> | undefined" ], "path": "packages/kbn-dom-drag-drop/src/providers/providers.tsx", "deprecated": false, @@ -370,10 +425,10 @@ }, { "parentPluginId": "@kbn/dom-drag-drop", - "id": "def-common.DragContextState.activeDropTarget", + "id": "def-common.DragContextState.hoveredDropTarget", "type": "CompoundType", "tags": [], - "label": "activeDropTarget", + "label": "hoveredDropTarget", "description": [ "\ncurrently selected drop target" ], @@ -397,7 +452,7 @@ "signature": [ "Record | undefined" + "> | undefined" ], "path": "packages/kbn-dom-drag-drop/src/providers/types.tsx", "deprecated": false, @@ -644,7 +699,7 @@ "label": "getAdditionalClassesOnDroppable", "description": [], "signature": [ - "(dropType?: string | undefined) => \"domDragDrop-notCompatible\" | undefined" + "(dropType?: string | undefined) => \"domDroppable--incompatible\" | undefined" ], "path": "packages/kbn-dom-drag-drop/src/drop_targets/index.ts", "deprecated": false, @@ -675,7 +730,7 @@ "label": "getAdditionalClassesOnEnter", "description": [], "signature": [ - "(dropType?: string | undefined) => \"domDragDrop-isReplacing\" | undefined" + "(dropType?: string | undefined) => \"domDroppable--replacing\" | undefined" ], "path": "packages/kbn-dom-drag-drop/src/drop_targets/index.ts", "deprecated": false, diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index 57d88a26325ec..72af77227dedb 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 39 | 0 | 26 | 5 | +| 41 | 0 | 27 | 6 | ## Common diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index a1f0737407cbb..4cee386356134 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-03-21 +date: 2024-03-22 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 ad8358c0ab682..185a5ae137b79 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-03-21 +date: 2024-03-22 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 9c1d517321f49..870c66b13b90a 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 dee2345abf622..132e4478cd3c1 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-03-21 +date: 2024-03-22 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 0233ea1897c75..c7d071e5eb898 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 94d8f2f526a43..1004f1ee3e1f0 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-03-21 +date: 2024-03-22 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 ef63eaf17375d..e79cc13f8a31d 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-03-21 +date: 2024-03-22 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 ebdd9de98c5b7..08bc09d931351 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-03-21 +date: 2024-03-22 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 ceabbd443e10a..252a8f89d196b 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-03-21 +date: 2024-03-22 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 b72caccaa49b9..3df49311d475b 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-03-21 +date: 2024-03-22 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 4d46356e8a19f..3aafd55307b81 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 47210f2644e2b..1f2c7fdcef73a 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 06ecf03d9c96b..54c735b52efa8 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-03-21 +date: 2024-03-22 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 a8d61853c599d..43bc6e6878120 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-03-21 +date: 2024-03-22 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 a661459a7ac63..2d3e512d5482c 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-03-21 +date: 2024-03-22 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 c8521a5811c52..dc83390d6cf3f 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-03-21 +date: 2024-03-22 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 5995fdd0adb59..db1dcac8369a7 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 fe69d01de8e63..027a864ef815b 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-03-21 +date: 2024-03-22 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 3cc4c1a158377..15bb59ce61a16 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-03-21 +date: 2024-03-22 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 28cbf5bd4dcb0..dd549a4085e15 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-03-21 +date: 2024-03-22 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 a3959260946c3..2e8e1fff69541 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-03-21 +date: 2024-03-22 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 7522fe9758bc0..83124f5b82c2b 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-03-21 +date: 2024-03-22 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 73fc94350ef43..4bae372dbffad 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-03-21 +date: 2024-03-22 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 52e974eb49c55..5b1664842accb 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index e8d9cce147e07..a7f3a473b773a 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-03-21 +date: 2024-03-22 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 0307d0d576a30..c68f5fe6ea80b 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-03-21 +date: 2024-03-22 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 05bea76548f3d..297ab06153ffc 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 0bc26b41e9dec..2adc4a414cbb2 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-03-21 +date: 2024-03-22 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 9ca9bd0e3786f..e440b10c1d236 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-03-21 +date: 2024-03-22 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 f213ff9af4d25..de4b62a09cdc6 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-03-21 +date: 2024-03-22 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 753ee7bce98ba..2e0fea52f0be6 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-03-21 +date: 2024-03-22 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 f3af02ed7d02b..601f53f2c677a 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-03-21 +date: 2024-03-22 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 29c72ad206280..bc3fc735395b1 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 8e7da71c394b5..3fe4e4389a937 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-03-21 +date: 2024-03-22 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 67ede5243c545..7857083099aa8 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-03-21 +date: 2024-03-22 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 e9e6600a3add8..c0f056a7767ff 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index c62477e8d0433..8bcb8a7e29606 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-03-21 +date: 2024-03-22 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 7d68b04cf81ab..314415ec3b446 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-03-21 +date: 2024-03-22 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 c0542d2cf6afb..1fdbc2c9473a9 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 967fa62995926..b1881d2630c7c 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-03-21 +date: 2024-03-22 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 4df8c74de386e..30ad18ac28ccc 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-03-21 +date: 2024-03-22 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 ac6631dbec224..ddad29963904d 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 6d5eb46363ead..c2a865f430852 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-03-21 +date: 2024-03-22 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 589765924e25d..20dbabc10835b 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-03-21 +date: 2024-03-22 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 e494c27ce3be2..78a2bc0c7857a 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 9459c678174d3..78f19b87d2bb2 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-03-21 +date: 2024-03-22 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 1384f801414c6..7f0f1a1d2fa86 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-03-21 +date: 2024-03-22 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 5c27a146e96bb..7c43a46880445 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-03-21 +date: 2024-03-22 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 3e4b302f00b3a..fe72ce4e8d5e2 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-03-21 +date: 2024-03-22 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 aa15fdc05a68d..0113ecfbf84e6 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-03-21 +date: 2024-03-22 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 dff6146a39f2d..85e15b79b414c 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-03-21 +date: 2024-03-22 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 b6e1c7b457fcd..9ecf347e6ef8b 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-03-21 +date: 2024-03-22 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 472f5ece49564..4f5964ff2e2e4 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-03-21 +date: 2024-03-22 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 d1e22d17a7645..f363d4b3eaece 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-03-21 +date: 2024-03-22 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 8dee558b7beb3..5de549262e487 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-03-21 +date: 2024-03-22 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 875f26f655efc..950e94768c16b 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-03-21 +date: 2024-03-22 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 5dede87f0b54d..d39a718bd35cc 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-03-21 +date: 2024-03-22 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 867cd5ea8dad7..7f29551049d81 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-03-21 +date: 2024-03-22 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 8aa2b253f58bd..dc22a74308a34 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-03-21 +date: 2024-03-22 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 a0b4527ce58ae..b1d29378021ff 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-03-21 +date: 2024-03-22 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 a17fd8e987947..b913d62a7683e 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 371cc91ef631b..62e618bcc88b7 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 2a8eae37a5a72..e53fd08c54a73 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 7b0d3edcb0174..9f87df5510555 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-03-21 +date: 2024-03-22 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 08f7617d86b44..6584399d144ef 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-03-21 +date: 2024-03-22 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 a1d62c7b83eaf..d5503eb6b2a89 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-03-21 +date: 2024-03-22 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 906586184894d..3c87549e2cb9e 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 08df82f562ab1..9898c93b5f347 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-03-21 +date: 2024-03-22 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 6253a2ab8c5ae..9944dfa95099d 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-03-21 +date: 2024-03-22 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 4ec72aaef9cfb..e126cdb7061cf 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 c5ed7593bacb6..3350b84f7e557 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 aae279b38081e..d3105eeaaf739 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-03-21 +date: 2024-03-22 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 c49ff2616a8a4..09ab6495c4cf3 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-03-21 +date: 2024-03-22 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 314636fb2f574..f601d6068ffeb 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-03-21 +date: 2024-03-22 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 5fda1a9d5a659..8d6b5a2c409d9 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-03-21 +date: 2024-03-22 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 eed9f69940761..c2f02f7195e4b 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-03-21 +date: 2024-03-22 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 0adc4d7f4c06c..13d089567cdb2 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-03-21 +date: 2024-03-22 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 623e48a7bda55..fdc70e1a7b60d 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 739bd30a97c65..db5b8f7910734 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 5caa64907a1f4..626b94eb3b3cc 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 03fa5bbf5e32a..6e71dae0f2338 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 983936d10898a..4e06edf905533 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 3ddf7e14f4b6b..7c898e7269592 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-03-21 +date: 2024-03-22 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 bc00b6c5d487a..d78f6c533b2ed 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-03-21 +date: 2024-03-22 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 1e5c936a00be0..4d7e558feb430 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 4fd93a006f70e..bdeeb747b98af 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-03-21 +date: 2024-03-22 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 9302ec9170353..ff6423a9d2345 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-03-21 +date: 2024-03-22 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 f480030bb04f7..b2b47dc45259e 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 6ffd6ffc8acd5..5da8736c00466 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-03-21 +date: 2024-03-22 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 fea852c41683b..2badfa03f6bb3 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-03-21 +date: 2024-03-22 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 03ce1826d9d9a..fc643e6bcc02e 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index a71914515bb44..0fe4045a60dc8 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-03-21 +date: 2024-03-22 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 c70f9341f8620..b329b5b646527 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-03-21 +date: 2024-03-22 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 0af7cee77fe92..580d21d5b7cac 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-03-21 +date: 2024-03-22 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 ba0cab75b0a29..67a89417b47ad 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-03-21 +date: 2024-03-22 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 57343ccb9d28b..05cefecb2347e 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-03-21 +date: 2024-03-22 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 052db77bc7e97..cdc067837b21d 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-03-21 +date: 2024-03-22 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 2bb0f57abbb3c..c64a59b81924e 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-03-21 +date: 2024-03-22 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 b2f50168e814a..a30954fcdaa98 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-03-21 +date: 2024-03-22 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 2a30b563ce8c8..7e6f63ad89c79 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-03-21 +date: 2024-03-22 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 38235cea06c7d..c971f1d2ed553 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-03-21 +date: 2024-03-22 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 b93d8639c6626..75105c9f340c4 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-03-21 +date: 2024-03-22 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 44bedc0c89750..a9edb00382098 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.devdocs.json b/api_docs/kbn_presentation_containers.devdocs.json index 69cc4dee11bb0..edccee7f208c4 100644 --- a/api_docs/kbn_presentation_containers.devdocs.json +++ b/api_docs/kbn_presentation_containers.devdocs.json @@ -905,7 +905,7 @@ "label": "rawState", "description": [], "signature": [ - "RawStateType" + "RawStateType | undefined" ], "path": "packages/presentation/presentation_containers/interfaces/serialized_state.ts", "deprecated": false, diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index a187f73e6b149..a5fcf7b0d5bb6 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_library.mdx b/api_docs/kbn_presentation_library.mdx index 25adc4d2a1cc7..d1e772fabf2d9 100644 --- a/api_docs/kbn_presentation_library.mdx +++ b/api_docs/kbn_presentation_library.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-library title: "@kbn/presentation-library" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-library plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-library'] --- import kbnPresentationLibraryObj from './kbn_presentation_library.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.devdocs.json b/api_docs/kbn_presentation_publishing.devdocs.json index 3e13cd90bf9b8..55cfe85994d87 100644 --- a/api_docs/kbn_presentation_publishing.devdocs.json +++ b/api_docs/kbn_presentation_publishing.devdocs.json @@ -686,6 +686,46 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-common.apiPublishesTimeRange", + "type": "Function", + "tags": [], + "label": "apiPublishesTimeRange", + "description": [], + "signature": [ + "(unknownApi: unknown) => unknownApi is ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishesTimeRange", + "text": "PublishesTimeRange" + } + ], + "path": "packages/presentation/presentation_publishing/interfaces/publishes_unified_search.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-common.apiPublishesTimeRange.$1", + "type": "Unknown", + "tags": [], + "label": "unknownApi", + "description": [], + "signature": [ + "unknown" + ], + "path": "packages/presentation/presentation_publishing/interfaces/publishes_unified_search.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/presentation-publishing", "id": "def-common.apiPublishesUnifiedSearch", @@ -4441,10 +4481,10 @@ }, { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.PublishesUnifiedSearch", + "id": "def-common.PublishesTimeRange", "type": "Interface", "tags": [], - "label": "PublishesUnifiedSearch", + "label": "PublishesTimeRange", "description": [], "path": "packages/presentation/presentation_publishing/interfaces/publishes_unified_search.ts", "deprecated": false, @@ -4452,23 +4492,7 @@ "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.PublishesUnifiedSearch.isCompatibleWithUnifiedSearch", - "type": "Function", - "tags": [], - "label": "isCompatibleWithUnifiedSearch", - "description": [], - "signature": [ - "(() => boolean) | undefined" - ], - "path": "packages/presentation/presentation_publishing/interfaces/publishes_unified_search.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.PublishesUnifiedSearch.timeRange$", + "id": "def-common.PublishesTimeRange.timeRange$", "type": "Object", "tags": [], "label": "timeRange$", @@ -4829,96 +4853,46 @@ "path": "packages/presentation/presentation_publishing/interfaces/publishes_unified_search.ts", "deprecated": false, "trackAdoption": false - }, + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-common.PublishesUnsavedChanges", + "type": "Interface", + "tags": [], + "label": "PublishesUnsavedChanges", + "description": [], + "path": "packages/presentation/presentation_publishing/interfaces/publishes_unsaved_changes.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.PublishesUnifiedSearch.filters$", + "id": "def-common.PublishesUnsavedChanges.unsavedChanges", "type": "Object", "tags": [], - "label": "filters$", + "label": "unsavedChanges", "description": [], "signature": [ "{ source: ", "Observable", - " | undefined; readonly value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined; error: (err: any) => void; forEach: { (next: (value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined) => void): Promise; (next: (value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined; pipe: { (): ", + " | undefined; readonly value: object | undefined; error: (err: any) => void; forEach: { (next: (value: object | undefined) => void): Promise; (next: (value: object | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => object | undefined; pipe: { (): ", "Observable", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined>; (op1: ", + "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined, A>): ", + "): ", "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", "): ", "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -4926,15 +4900,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -4944,15 +4910,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -4964,15 +4922,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -4986,15 +4936,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5010,15 +4952,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5036,15 +4970,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5064,15 +4990,7 @@ "Observable", "; (op1: ", "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined, A>, op2: ", + ", op2: ", "OperatorFunction", ", op3: ", "OperatorFunction", @@ -5094,841 +5012,19 @@ "Observable", "; }; complete: () => void; closed: boolean; observers: ", "Observer", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined>[]; isStopped: boolean; hasError: boolean; thrownError: any; lift: (operator: ", + "[]; isStopped: boolean; hasError: boolean; thrownError: any; lift: (operator: ", "Operator", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined, R>) => ", + ") => ", "Observable", "; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", "Observable", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined>; operator: ", + "; operator: ", "Operator", - " | undefined; subscribe: { (observerOrNext?: Partial<", + " | undefined; subscribe: { (observerOrNext?: Partial<", "Observer", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined>> | ((value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined) => void) | undefined): ", + "> | ((value: object | undefined) => void) | undefined): ", "Subscription", - "; (next?: ((value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", - "Subscription", - "; }; toPromise: { (): Promise<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined>; (PromiseCtor: PromiseConstructor): Promise<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined>; (PromiseCtor: PromiseConstructorLike): Promise<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined>; }; }" - ], - "path": "packages/presentation/presentation_publishing/interfaces/publishes_unified_search.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.PublishesUnifiedSearch.query$", - "type": "Object", - "tags": [], - "label": "query$", - "description": [], - "signature": [ - "{ source: ", - "Observable", - " | undefined; readonly value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined; error: (err: any) => void; forEach: { (next: (value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined) => void): Promise; (next: (value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined; pipe: { (): ", - "Observable", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined>; (op1: ", - "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined, A>): ", - "Observable", - "; (op1: ", - "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined, A>, op2: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined, A>, op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined, A>, op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined, A>, op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined, A>, op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined, A>, op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - ", op7: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined, A>, op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - ", op7: ", - "OperatorFunction", - ", op8: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined, A>, op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - ", op7: ", - "OperatorFunction", - ", op8: ", - "OperatorFunction", - ", op9: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined, A>, op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - ", op7: ", - "OperatorFunction", - ", op8: ", - "OperatorFunction", - ", op9: ", - "OperatorFunction", - ", ...operations: ", - "OperatorFunction", - "[]): ", - "Observable", - "; }; complete: () => void; closed: boolean; observers: ", - "Observer", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined>[]; isStopped: boolean; hasError: boolean; thrownError: any; lift: (operator: ", - "Operator", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined, R>) => ", - "Observable", - "; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", - "Observable", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined>; operator: ", - "Operator", - " | undefined; subscribe: { (observerOrNext?: Partial<", - "Observer", - "<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined>> | ((value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined) => void) | undefined): ", - "Subscription", - "; (next?: ((value: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", - "Subscription", - "; }; toPromise: { (): Promise<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined>; (PromiseCtor: PromiseConstructor): Promise<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined>; (PromiseCtor: PromiseConstructorLike): Promise<", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Query", - "text": "Query" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.AggregateQuery", - "text": "AggregateQuery" - }, - " | undefined>; }; }" - ], - "path": "packages/presentation/presentation_publishing/interfaces/publishes_unified_search.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.PublishesUnsavedChanges", - "type": "Interface", - "tags": [], - "label": "PublishesUnsavedChanges", - "description": [], - "path": "packages/presentation/presentation_publishing/interfaces/publishes_unsaved_changes.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/presentation-publishing", - "id": "def-common.PublishesUnsavedChanges.unsavedChanges", - "type": "Object", - "tags": [], - "label": "unsavedChanges", - "description": [], - "signature": [ - "{ source: ", - "Observable", - " | undefined; readonly value: object | undefined; error: (err: any) => void; forEach: { (next: (value: object | undefined) => void): Promise; (next: (value: object | undefined) => void, promiseCtor: PromiseConstructorLike): Promise; }; getValue: () => object | undefined; pipe: { (): ", - "Observable", - "; (op1: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - ", op7: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - ", op7: ", - "OperatorFunction", - ", op8: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - ", op7: ", - "OperatorFunction", - ", op8: ", - "OperatorFunction", - ", op9: ", - "OperatorFunction", - "): ", - "Observable", - "; (op1: ", - "OperatorFunction", - ", op2: ", - "OperatorFunction", - ", op3: ", - "OperatorFunction", - ", op4: ", - "OperatorFunction", - ", op5: ", - "OperatorFunction", - ", op6: ", - "OperatorFunction", - ", op7: ", - "OperatorFunction", - ", op8: ", - "OperatorFunction", - ", op9: ", - "OperatorFunction", - ", ...operations: ", - "OperatorFunction", - "[]): ", - "Observable", - "; }; complete: () => void; closed: boolean; observers: ", - "Observer", - "[]; isStopped: boolean; hasError: boolean; thrownError: any; lift: (operator: ", - "Operator", - ") => ", - "Observable", - "; unsubscribe: () => void; readonly observed: boolean; asObservable: () => ", - "Observable", - "; operator: ", - "Operator", - " | undefined; subscribe: { (observerOrNext?: Partial<", - "Observer", - "> | ((value: object | undefined) => void) | undefined): ", - "Subscription", - "; (next?: ((value: object | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", + "; (next?: ((value: object | undefined) => void) | null | undefined, error?: ((error: any) => void) | null | undefined, complete?: (() => void) | null | undefined): ", "Subscription", "; }; toPromise: { (): Promise; (PromiseCtor: PromiseConstructor): Promise; (PromiseCtor: PromiseConstructorLike): Promise; }; }" ], @@ -6396,6 +5492,68 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/presentation-publishing", + "id": "def-common.PublishesUnifiedSearch", + "type": "Type", + "tags": [], + "label": "PublishesUnifiedSearch", + "description": [], + "signature": [ + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishesTimeRange", + "text": "PublishesTimeRange" + }, + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; filters$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[] | undefined>; query$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.AggregateQuery", + "text": "AggregateQuery" + }, + " | undefined>; }" + ], + "path": "packages/presentation/presentation_publishing/interfaces/publishes_unified_search.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/presentation-publishing", "id": "def-common.PublishesWritablePanelDescription", @@ -6452,10 +5610,50 @@ "pluginId": "@kbn/presentation-publishing", "scope": "common", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.PublishesUnifiedSearch", - "text": "PublishesUnifiedSearch" + "section": "def-common.PublishesTimeRange", + "text": "PublishesTimeRange" + }, + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; filters$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[] | undefined>; query$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.AggregateQuery", + "text": "AggregateQuery" }, - " & { setTimeRange: (timeRange: ", + " | undefined>; } & { setTimeRange: (timeRange: ", { "pluginId": "@kbn/es-query", "scope": "common", diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 37e4a466c1e4a..a8de3eb944d52 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-03-21 +date: 2024-03-22 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 1d27061f45c56..c528e550e2114 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 176c8ecec4cfb..0661b087ba49e 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-03-21 +date: 2024-03-22 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 deb93a93bf6e9..1670a19eb88e8 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 9777d0d46449f..00be32a51c2a8 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-03-21 +date: 2024-03-22 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 ff21f6c0a1e08..eb04d41231205 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-03-21 +date: 2024-03-22 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 5192db4141126..68c9b42ad139b 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-03-21 +date: 2024-03-22 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 547e42c6ecced..a033aefe86192 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-03-21 +date: 2024-03-22 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 a7c163c7f44c9..78f79b0b15530 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-03-21 +date: 2024-03-22 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 091ca134f4e0c..a162c0dcfc734 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 72b0ce9912f1a..ccf15afb7ceb3 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-03-21 +date: 2024-03-22 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 597358b16a664..8709f0c364246 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-03-21 +date: 2024-03-22 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 0487d2ea309f0..7d85fe8a188b1 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-03-21 +date: 2024-03-22 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 1849012edc6d1..ee2308a013063 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-03-21 +date: 2024-03-22 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 cbf14afea7b3b..2215a7b4fe640 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 83332eed922c6..f175be33ed563 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-03-21 +date: 2024-03-22 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 9fe401fe10988..83dedb15c344f 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-03-21 +date: 2024-03-22 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 a0a8ae33801bd..5db3df4b53731 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-03-21 +date: 2024-03-22 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 7ffc9a86e4ee8..7fd76c513c629 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-03-21 +date: 2024-03-22 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 59da00a83bd5f..21dec6218a9c0 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-03-21 +date: 2024-03-22 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 40027dc7300bb..fdd8742ddb9eb 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-03-21 +date: 2024-03-22 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 7d60bc2e6ee1e..de47b576bf170 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-03-21 +date: 2024-03-22 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 741241caf92ef..f383d3124bdcf 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-03-21 +date: 2024-03-22 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 dda820fe63a96..daae45551a678 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-03-21 +date: 2024-03-22 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 af6ee3e9d45ec..e3b34f047a647 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 70c66660a077b..983b331ff31a4 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index ff68e3eed9b14..b069e44465d98 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 65e49f1969940..fa22232ba852f 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-03-21 +date: 2024-03-22 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 06a2a07d39820..9b5620360f9dd 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 0919b60af3b99..13b406d7d039f 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-03-21 +date: 2024-03-22 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 5faab4925c684..0c11e62636a87 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-03-21 +date: 2024-03-22 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 2a25c0d9954fc..224e40e1621a1 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-03-21 +date: 2024-03-22 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 9a0533397a458..331e04f701060 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-03-21 +date: 2024-03-22 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 009ee3e4428d0..ecc2dbc535eab 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-03-21 +date: 2024-03-22 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 c49e2c3ca2c06..ffb45000857a1 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 5c626504dcc3c..b855b7ed87cba 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-03-21 +date: 2024-03-22 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 2f9628c7ad91b..c05f4d298fe01 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-03-21 +date: 2024-03-22 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 4725702c01ada..c5203c018d7e3 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-03-21 +date: 2024-03-22 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 abe0288e1045d..e431bf111e368 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 88b916113ae78..bc75c4ed46161 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-03-21 +date: 2024-03-22 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 61cc24a14766a..061fb7ccaa252 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-03-21 +date: 2024-03-22 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 732aa84198522..727f79c54576d 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-03-21 +date: 2024-03-22 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 622ee0c95e214..1808c63d3597c 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-03-21 +date: 2024-03-22 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 57aa0619ec350..c51cafc21a03a 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-03-21 +date: 2024-03-22 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 0cf0fdc461966..f8257e86cd2b4 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-03-21 +date: 2024-03-22 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 cdd7f2e78c01b..3f179a6c806b6 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-03-21 +date: 2024-03-22 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 04a880dd9c4df..3bb82746a3c08 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 f535722c8267f..7c25a5af9f331 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index e7672f2e7a5bc..907ddb2bc8258 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index c29e6e90544ed..6048f02bbb797 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 dd5c9b9f55406..5efb3afa502b0 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-03-21 +date: 2024-03-22 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 1491a38a0412b..7025e1e142b71 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-03-21 +date: 2024-03-22 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 921fcfec1c188..8d9903a9027b8 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-03-21 +date: 2024-03-22 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 4bae6189d6242..6b6ec099a17f6 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 cab6a1a9d892c..4c04381f0598f 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-03-21 +date: 2024-03-22 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 1962eeb24183a..2dda34a0e896a 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-03-21 +date: 2024-03-22 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 2cb432d72f0ac..e0576873ea586 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-03-21 +date: 2024-03-22 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 2e781bae275d3..7f54155dc28ac 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 00be32a1389df..5d0225d83773f 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-03-21 +date: 2024-03-22 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 97e3045aba428..da70554194567 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-03-21 +date: 2024-03-22 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 5e218e0cce49b..00c996fd5d47a 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 b5087414454a1..f8b0793f1d88f 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-03-21 +date: 2024-03-22 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 f3ff778694e93..f2c266924a81a 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 3b6404cdb725b..7d6fc330b5e7f 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-03-21 +date: 2024-03-22 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 786b2855264b9..a9a923e4111a0 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-03-21 +date: 2024-03-22 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 832cd01d65c04..6faf38bce5ea3 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-03-21 +date: 2024-03-22 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 0c61619bb97c7..a7a0fbfa14bb6 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-03-21 +date: 2024-03-22 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 3e26133c014ee..e809c923052e2 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-03-21 +date: 2024-03-22 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 96a042d2b9c28..73e9f4b22fee5 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-03-21 +date: 2024-03-22 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 2c5bfbe6eff95..86709d3f96dca 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-03-21 +date: 2024-03-22 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 d15c6c30f4f3c..ed37fae6d5ce7 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-03-21 +date: 2024-03-22 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 262b0df9a40ac..a6fe1320523f1 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-03-21 +date: 2024-03-22 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 6123ccbae8868..8a6d5c59f2888 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-03-21 +date: 2024-03-22 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 d95698f537ccb..20efb8651a4a6 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-03-21 +date: 2024-03-22 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 7d5e8f7bfbd04..07b82c6e58241 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 f30cb1d97510e..cad9951a200ad 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-03-21 +date: 2024-03-22 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 1034cb3ac7343..4bbecbb52984e 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-03-21 +date: 2024-03-22 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 fa125b43b64ab..1c401870adfe3 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-03-21 +date: 2024-03-22 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 744c4fa270ad1..6b9df4efda958 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-03-21 +date: 2024-03-22 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 b55296eecaa71..23277f71e0949 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 087d15cd7b05c..b0e73ad649521 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 76fa8657c81a0..bf452a07a3a22 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-03-21 +date: 2024-03-22 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 da534d19b330c..ad2e31cf24d0e 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-03-21 +date: 2024-03-22 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 96b51f599d7e9..b7a741dbc8353 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-03-21 +date: 2024-03-22 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 46ab3c3e4ff99..5ed4fb245a35a 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-03-21 +date: 2024-03-22 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 e371e6f423376..54164fe937f84 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-03-21 +date: 2024-03-22 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 5de5470ed4bdf..4eedd5e0b962a 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 6855bf6efb768..9aa17be4c69f5 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-03-21 +date: 2024-03-22 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 98f5095bf0dc9..9b7473e67ee4d 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 d9c602d368131..f1d28849bca3b 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-03-21 +date: 2024-03-22 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 7f78840ec6276..ec7b780f98758 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 f88687f71c88d..b48da9ab1904c 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-03-21 +date: 2024-03-22 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 3a92475b40187..5536aee12a92e 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 f0a42b3a3687c..62ca9b37078ac 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-03-21 +date: 2024-03-22 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 37d7d49512ee0..65b6af501cf9f 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 98d9e775c7b42..07dbc02b5f898 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-03-21 +date: 2024-03-22 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 4b0dc5bfdc367..b631c2c8893b4 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-03-21 +date: 2024-03-22 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 ec849f99f126f..8b0be1be8f431 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 3a94959801406..27881c0e80330 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 f47d8b0d62222..3d9739028d731 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-03-21 +date: 2024-03-22 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 6190ba92aa7d0..10b6e70b9428e 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-03-21 +date: 2024-03-22 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 269b97ec52956..a8f901b736438 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 4150abe0a353b..85307174d4eca 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-03-21 +date: 2024-03-22 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 ed44b19d0c78f..29d86e9a361f5 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-03-21 +date: 2024-03-22 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 036e420ede84f..10d9a1bce6833 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-03-21 +date: 2024-03-22 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 749d645cabb9b..242ed8ecdfec7 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-03-21 +date: 2024-03-22 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 4f153d72e48f2..16ab66842dd3f 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 1a1441764aeff..069f80f1f3dc6 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-03-21 +date: 2024-03-22 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 aea19377b19b6..c02df3b1421c0 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_es.mdx b/api_docs/kbn_solution_nav_es.mdx index 3d35059832188..661cb46094d91 100644 --- a/api_docs/kbn_solution_nav_es.mdx +++ b/api_docs/kbn_solution_nav_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-es title: "@kbn/solution-nav-es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-es plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-es'] --- import kbnSolutionNavEsObj from './kbn_solution_nav_es.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_oblt.mdx b/api_docs/kbn_solution_nav_oblt.mdx index 3316071dbe617..9300340166646 100644 --- a/api_docs/kbn_solution_nav_oblt.mdx +++ b/api_docs/kbn_solution_nav_oblt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-oblt title: "@kbn/solution-nav-oblt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-oblt plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-oblt'] --- import kbnSolutionNavObltObj from './kbn_solution_nav_oblt.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 5108e34b3c2dd..4be4c1e5b9945 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-03-21 +date: 2024-03-22 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 f6127679575fb..61b812869d9ac 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-03-21 +date: 2024-03-22 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 b19a0a1e1bb94..cd4089035a5e5 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-03-21 +date: 2024-03-22 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 9a8703597c3ec..a4af7e8671865 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-03-21 +date: 2024-03-22 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 89a6250b530ae..aac56fccbb232 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index db0d1ac317e67..c5a61f83d6b04 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-03-21 +date: 2024-03-22 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 3b2d4da338b87..60c78faf98ce3 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-03-21 +date: 2024-03-22 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 4acf9ab21cbd8..99279c6c485b2 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-03-21 +date: 2024-03-22 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 47e73146a41c6..27c5d20d9df48 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-03-21 +date: 2024-03-22 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 9bf4102bb236b..61f73f45c3b1d 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-03-21 +date: 2024-03-22 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 b657b95fcde4a..6a505d77d79dc 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-03-21 +date: 2024-03-22 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 513cc7aee2801..98e9c4aaa8ca8 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-03-21 +date: 2024-03-22 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 928b4fb804dac..7718665ea4601 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-03-21 +date: 2024-03-22 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 10f7b49ab1922..1fc0f7aa19f2b 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 9cd70f640a9ab..209f2dd5442f9 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-03-21 +date: 2024-03-22 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 cdd202129e13d..e1dfcef99bd76 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-03-21 +date: 2024-03-22 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 f81f50b2875c9..074da4151e7de 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-03-21 +date: 2024-03-22 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 187d98e8f8568..51ac9599bc161 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-03-21 +date: 2024-03-22 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 7172b924065c6..9f07ab11d78b3 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-03-21 +date: 2024-03-22 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 09407495bd1bd..886320f4e7acb 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-03-21 +date: 2024-03-22 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 ee21eb2570ae7..4f72a2cfdb87a 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-03-21 +date: 2024-03-22 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 dd92a09285d94..3f6b0d5c36e36 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-03-21 +date: 2024-03-22 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 b560373131c9b..a4f4ae5553b51 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 8968508a8f4e0..d67e77a05c4de 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-03-21 +date: 2024-03-22 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 7d85672f92695..167fc95098509 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-03-21 +date: 2024-03-22 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 6a62ccdb8b8db..21cfdf06888ed 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-03-21 +date: 2024-03-22 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 e7aa42af23a1a..e516116da4d82 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-03-21 +date: 2024-03-22 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 6f8f244705afd..3a5fb5e406d0c 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.devdocs.json b/api_docs/kbn_visualization_ui_components.devdocs.json index d55182154c780..a8177415871ca 100644 --- a/api_docs/kbn_visualization_ui_components.devdocs.json +++ b/api_docs/kbn_visualization_ui_components.devdocs.json @@ -255,31 +255,32 @@ "label": "DimensionButton", "description": [], "signature": [ - "({\n groupLabel,\n children,\n onClick,\n onRemoveClick,\n accessorConfig,\n label,\n message,\n ...otherProps // from Drag&Drop integration\n}: ", + "React.NamedExoticComponent<", "DimensionButtonProps", - ") => JSX.Element" + "> & { readonly type: ({ groupLabel, children, onClick, onRemoveClick, accessorConfig, label, message, ...otherProps }: ", + "DimensionButtonProps", + ") => JSX.Element; }" ], "path": "packages/kbn-visualization-ui-components/components/dimension_buttons/dimension_button.tsx", "deprecated": false, "trackAdoption": false, + "returnComment": [], "children": [ { "parentPluginId": "@kbn/visualization-ui-components", "id": "def-public.DimensionButton.$1", - "type": "Object", + "type": "Uncategorized", "tags": [], - "label": "{\n groupLabel,\n children,\n onClick,\n onRemoveClick,\n accessorConfig,\n label,\n message,\n ...otherProps // from Drag&Drop integration\n}", + "label": "props", "description": [], "signature": [ - "DimensionButtonProps" + "P" ], - "path": "packages/kbn-visualization-ui-components/components/dimension_buttons/dimension_button.tsx", + "path": "node_modules/@types/react/index.d.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true + "trackAdoption": false } ], - "returnComment": [], "initialIsOpen": false }, { diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index 977301648b31a..8a73875e400a4 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 154 | 0 | 151 | 3 | +| 154 | 0 | 150 | 3 | ## Client diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index 9e453cb218a3a..d6e4484a346cb 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 ef14725a38e2d..61fb1f2464f31 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-03-21 +date: 2024-03-22 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 56b3364aa37fe..748a95eb44b18 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 1cdbff0581dde..562b95d4e8d60 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-03-21 +date: 2024-03-22 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 b356a15118617..54e90f3c6e4c5 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-03-21 +date: 2024-03-22 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 a7c038734636d..e5f6ccd872b94 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-03-21 +date: 2024-03-22 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 77157ae7f70b4..37ec8b2accc72 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-03-21 +date: 2024-03-22 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 5a97b20b7c94e..2f6792f58c51c 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.devdocs.json b/api_docs/lens.devdocs.json index 80f04024c19ae..43ace307a3256 100644 --- a/api_docs/lens.devdocs.json +++ b/api_docs/lens.devdocs.json @@ -7751,7 +7751,7 @@ "\nRenders dimension trigger. Used only for noDatasource layers" ], "signature": [ - "((props: { columnId: string; label: string; hideTooltip?: boolean | undefined; }) => React.ReactElement<{ columnId: string; label: string; hideTooltip?: boolean | undefined; }, string | React.JSXElementConstructor> | null) | undefined" + "((props: { columnId: string; label: string; }) => React.ReactElement<{ columnId: string; label: string; }, string | React.JSXElementConstructor> | null) | undefined" ], "path": "x-pack/plugins/lens/public/types.ts", "deprecated": false, @@ -7789,20 +7789,6 @@ "path": "x-pack/plugins/lens/public/types.ts", "deprecated": false, "trackAdoption": false - }, - { - "parentPluginId": "lens", - "id": "def-public.Visualization.DimensionTriggerComponent.$1.hideTooltip", - "type": "CompoundType", - "tags": [], - "label": "hideTooltip", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "x-pack/plugins/lens/public/types.ts", - "deprecated": false, - "trackAdoption": false } ] } @@ -10954,10 +10940,50 @@ "pluginId": "@kbn/presentation-publishing", "scope": "common", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.PublishesUnifiedSearch", - "text": "PublishesUnifiedSearch" + "section": "def-common.PublishesTimeRange", + "text": "PublishesTimeRange" + }, + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; filters$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[] | undefined>; query$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.AggregateQuery", + "text": "AggregateQuery" }, - " & Partial<", + " | undefined>; } & Partial<", { "pluginId": "@kbn/presentation-publishing", "scope": "common", diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 84913aaf3d106..f79ed5dda95ab 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 665 | 0 | 564 | 61 | +| 664 | 0 | 563 | 61 | ## Client diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 2fd192f675b3f..294041a690746 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-03-21 +date: 2024-03-22 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 43fd5d87a5fcb..4bb3001b012c5 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-03-21 +date: 2024-03-22 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 afbf30f3c8e28..68d2e7f520493 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-03-21 +date: 2024-03-22 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 f5f9126d870b8..22747bbe4fa31 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-03-21 +date: 2024-03-22 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 f9e77069956df..04eca768941e0 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 672b3cf3c91e1..ac0c2593ca482 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-03-21 +date: 2024-03-22 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 fff8c68a6c627..c04360db213a7 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-03-21 +date: 2024-03-22 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 8b4c3a1c6916d..d13ba0f5a8a67 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.devdocs.json b/api_docs/maps.devdocs.json index 46fa7bfaaab12..fffd29e17487d 100644 --- a/api_docs/maps.devdocs.json +++ b/api_docs/maps.devdocs.json @@ -4006,10 +4006,50 @@ "pluginId": "@kbn/presentation-publishing", "scope": "common", "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.PublishesUnifiedSearch", - "text": "PublishesUnifiedSearch" + "section": "def-common.PublishesTimeRange", + "text": "PublishesTimeRange" }, - " & Partial<", + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; filters$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[] | undefined>; query$: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.AggregateQuery", + "text": "AggregateQuery" + }, + " | undefined>; } & Partial<", { "pluginId": "@kbn/presentation-publishing", "scope": "common", diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index b475c9901b81e..73c891c810a8a 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-03-21 +date: 2024-03-22 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 01c479955220e..c3ebf37a67cf8 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-03-21 +date: 2024-03-22 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 d4592d1b5622f..95495de831dc1 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-03-21 +date: 2024-03-22 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 6c82efc986f29..40357045c8260 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-03-21 +date: 2024-03-22 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 5fe50eb5d51e4..0a052a3eaf40f 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-03-21 +date: 2024-03-22 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 5c342549b7bfa..bb6fe4b9038e8 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-03-21 +date: 2024-03-22 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 a97593a5cb5e8..9e5a388c7753e 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-03-21 +date: 2024-03-22 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 1410a0acd31da..9ed87e5f55c63 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-03-21 +date: 2024-03-22 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 25e8ea292915c..f31b900cc9ef2 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-03-21 +date: 2024-03-22 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 768fd0942fd4f..ef994c28fd237 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-03-21 +date: 2024-03-22 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 5889fd0cb51ba..90c39e8ea315a 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-03-21 +date: 2024-03-22 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 6e0cad4a4f387..bbefcda32fc8f 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-03-21 +date: 2024-03-22 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 7120489fed7de..f90e7b41c13a6 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-03-21 +date: 2024-03-22 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 d272d71a8d649..793cb092179f8 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-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index c3e520af2c6d1..95cbef0f0a333 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-03-21 +date: 2024-03-22 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 004ac3110d90f..f78634384955d 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-03-21 +date: 2024-03-22 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 531575854ec6d..fc4dd56c76655 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-03-21 +date: 2024-03-22 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 e694c478876be..310b81d9b1f60 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-03-21 +date: 2024-03-22 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 84f9cb013317c..1a28a0e733d2c 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-03-21 +date: 2024-03-22 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 31040a92ca727..364dbbd0f7f3f 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-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,19 +15,19 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 769 | 660 | 40 | +| 770 | 661 | 40 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 46074 | 233 | 34880 | 1783 | +| 46099 | 233 | 34897 | 1785 | ## Plugin Directory | Plugin name           | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports | |--------------|----------------|-----------|--------------|----------|---------------|--------| -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 285 | 0 | 279 | 32 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 289 | 0 | 283 | 32 | | | [@elastic/appex-sharedux @elastic/kibana-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | @@ -70,7 +70,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 45 | 0 | 31 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 562 | 1 | 460 | 11 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 18 | 0 | 18 | 0 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 23 | 0 | 23 | 1 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 53 | 0 | 46 | 1 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | Adds dashboards for discovering and managing Enterprise Search products. | 5 | 0 | 5 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 99 | 3 | 97 | 3 | @@ -119,7 +119,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | kibanaUsageCollection | [@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) | - | 609 | 3 | 416 | 9 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 5 | 0 | 5 | 1 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 665 | 0 | 564 | 61 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 664 | 0 | 563 | 61 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 8 | 0 | 8 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 117 | 0 | 42 | 10 | @@ -165,6 +165,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the definition and helper methods around saved searches, used by discover and visualizations. | 79 | 0 | 78 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 32 | 0 | 13 | 0 | | | [@elastic/kibana-reporting-services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Kibana Screenshotting Plugin | 32 | 0 | 8 | 4 | +| | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 15 | 0 | 9 | 0 | | searchprofiler | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 404 | 0 | 198 | 2 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 194 | 0 | 123 | 37 | @@ -464,7 +465,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 59 | 0 | 37 | 4 | | | [@elastic/docs](https://github.com/orgs/elastic/teams/docs) | - | 75 | 0 | 75 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 5 | 0 | 5 | 1 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 39 | 0 | 26 | 5 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 41 | 0 | 27 | 6 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 19 | 0 | 11 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 13 | 0 | 5 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 35 | 0 | 34 | 0 | @@ -709,7 +710,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 37 | 0 | 16 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 26 | 0 | 15 | 0 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 154 | 0 | 151 | 3 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 154 | 0 | 150 | 3 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 10 | 0 | 9 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 13 | 0 | 13 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 6 | 0 | 2 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 7826820a4ac04..4a49753a71486 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-03-21 +date: 2024-03-22 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 c88d3e01830a4..1d0f0fa0ed32e 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-03-21 +date: 2024-03-22 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 a846fe823db58..8e4c03a3167cb 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-03-21 +date: 2024-03-22 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 f24da89daab6a..948623610f460 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-03-21 +date: 2024-03-22 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 b5f67f91e8477..ef40b7df62f5c 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-03-21 +date: 2024-03-22 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 3636d572352e0..ccf7462d0a8ec 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-03-21 +date: 2024-03-22 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 a2bcabc1000c6..65811ead2c0a6 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-03-21 +date: 2024-03-22 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 4fd3f5c1dd23e..8960d0440393c 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-03-21 +date: 2024-03-22 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 c9d99e5a0147f..caae0a775ee9b 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-03-21 +date: 2024-03-22 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 66bd811439312..a10be56bdbb6e 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-03-21 +date: 2024-03-22 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 71cf35b358ffb..2e37dfca0b275 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-03-21 +date: 2024-03-22 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 003d6f44ea745..ded5ddc90dd75 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-03-21 +date: 2024-03-22 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 235ca26f8ad48..136c7097712fa 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-03-21 +date: 2024-03-22 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 522860dd6d3b3..1a721aabdfd9b 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-03-21 +date: 2024-03-22 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 81ea45ec325d5..f7638819a481d 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-03-21 +date: 2024-03-22 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 4f011aee0b7bc..c2ee64d4591bb 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-03-21 +date: 2024-03-22 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 9c88a6e0ad5b6..4bcc8e55456bd 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-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_playground.devdocs.json b/api_docs/search_playground.devdocs.json new file mode 100644 index 0000000000000..ccbf3c593b016 --- /dev/null +++ b/api_docs/search_playground.devdocs.json @@ -0,0 +1,250 @@ +{ + "id": "searchPlayground", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [], + "setup": { + "parentPluginId": "searchPlayground", + "id": "def-public.SearchPlaygroundPluginSetup", + "type": "Interface", + "tags": [], + "label": "SearchPlaygroundPluginSetup", + "description": [], + "path": "x-pack/plugins/search_playground/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "searchPlayground", + "id": "def-public.SearchPlaygroundPluginStart", + "type": "Interface", + "tags": [], + "label": "SearchPlaygroundPluginStart", + "description": [], + "path": "x-pack/plugins/search_playground/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "searchPlayground", + "id": "def-public.SearchPlaygroundPluginStart.PlaygroundProvider", + "type": "Function", + "tags": [], + "label": "PlaygroundProvider", + "description": [], + "signature": [ + "React.FunctionComponent<{ children?: React.ReactNode; }>" + ], + "path": "x-pack/plugins/search_playground/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "searchPlayground", + "id": "def-public.SearchPlaygroundPluginStart.PlaygroundProvider.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P & { children?: React.ReactNode; }" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "searchPlayground", + "id": "def-public.SearchPlaygroundPluginStart.PlaygroundProvider.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "searchPlayground", + "id": "def-public.SearchPlaygroundPluginStart.PlaygroundToolbar", + "type": "Function", + "tags": [], + "label": "PlaygroundToolbar", + "description": [], + "signature": [ + "React.FunctionComponent<{ children?: React.ReactNode; }>" + ], + "path": "x-pack/plugins/search_playground/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "searchPlayground", + "id": "def-public.SearchPlaygroundPluginStart.PlaygroundToolbar.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P & { children?: React.ReactNode; }" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "searchPlayground", + "id": "def-public.SearchPlaygroundPluginStart.PlaygroundToolbar.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "searchPlayground", + "id": "def-public.SearchPlaygroundPluginStart.Playground", + "type": "Function", + "tags": [], + "label": "Playground", + "description": [], + "signature": [ + "React.FunctionComponent<{ children?: React.ReactNode; }>" + ], + "path": "x-pack/plugins/search_playground/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "searchPlayground", + "id": "def-public.SearchPlaygroundPluginStart.Playground.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P & { children?: React.ReactNode; }" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "searchPlayground", + "id": "def-public.SearchPlaygroundPluginStart.Playground.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [], + "setup": { + "parentPluginId": "searchPlayground", + "id": "def-server.SearchPlaygroundPluginSetup", + "type": "Interface", + "tags": [], + "label": "SearchPlaygroundPluginSetup", + "description": [], + "path": "x-pack/plugins/search_playground/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "searchPlayground", + "id": "def-server.SearchPlaygroundPluginStart", + "type": "Interface", + "tags": [], + "label": "SearchPlaygroundPluginStart", + "description": [], + "path": "x-pack/plugins/search_playground/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "searchPlayground", + "id": "def-common.PLUGIN_ID", + "type": "string", + "tags": [], + "label": "PLUGIN_ID", + "description": [], + "signature": [ + "\"searchPlayground\"" + ], + "path": "x-pack/plugins/search_playground/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "searchPlayground", + "id": "def-common.PLUGIN_NAME", + "type": "string", + "tags": [], + "label": "PLUGIN_NAME", + "description": [], + "signature": [ + "\"Playground\"" + ], + "path": "x-pack/plugins/search_playground/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx new file mode 100644 index 0000000000000..8ab2582dd700a --- /dev/null +++ b/api_docs/search_playground.mdx @@ -0,0 +1,46 @@ +--- +#### +#### 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: kibSearchPlaygroundPluginApi +slug: /kibana-dev-docs/api/searchPlayground +title: "searchPlayground" +image: https://source.unsplash.com/400x175/?github +description: API docs for the searchPlayground plugin +date: 2024-03-22 +tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] +--- +import searchPlaygroundObj from './search_playground.devdocs.json'; + + + +Contact [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 15 | 0 | 9 | 0 | + +## Client + +### Setup + + +### Start + + +## Server + +### Setup + + +### Start + + +## Common + +### Consts, variables and types + + diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 3d2e3d0a86415..f5555f553a909 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-03-21 +date: 2024-03-22 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 fff0cedc355af..6049a16f75dbd 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-03-21 +date: 2024-03-22 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 a1f2c73792ec8..98cfa923c8419 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-03-21 +date: 2024-03-22 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 0ba4d9aa14854..c71a836b9be83 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-03-21 +date: 2024-03-22 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 869d34b47d681..a540b7782274a 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-03-21 +date: 2024-03-22 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 206c983ed7180..796b2411c673e 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-03-21 +date: 2024-03-22 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 6b59b15442c7c..267ab8f86a7e8 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-03-21 +date: 2024-03-22 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 b02270033922a..2d1d56e908f3a 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-03-21 +date: 2024-03-22 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 985625f2bdd88..6d8a1838c69af 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-03-21 +date: 2024-03-22 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 2c4483f6a7488..48ccdcd955ade 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-03-21 +date: 2024-03-22 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 b756f82471d9e..1881fa1cc3487 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-03-21 +date: 2024-03-22 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 7ff112e50c2a6..463bb5b7784bf 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-03-21 +date: 2024-03-22 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 71cb375481d43..d4793a7a777c4 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-03-21 +date: 2024-03-22 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 8cb02f0759731..285722b822286 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-03-21 +date: 2024-03-22 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 bb6757666dee0..0fd31a79287d6 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-03-21 +date: 2024-03-22 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 499b304cd6bf4..32dd95a0e6194 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-03-21 +date: 2024-03-22 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 e27abecae0944..9601ac0d11ad7 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-03-21 +date: 2024-03-22 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 73142f03e3a64..1dfae7d0be99d 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-03-21 +date: 2024-03-22 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 519b1e6f9d98c..fadcebe487874 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-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index 096c2c36b5250..ede303732b9f2 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2024-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index ee29b53c2a36d..b6a419906574e 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-03-21 +date: 2024-03-22 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 ae9c305509ac1..815e4dac0a5cf 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-03-21 +date: 2024-03-22 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 4084d6e9d97dd..b9ac593568c23 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-03-21 +date: 2024-03-22 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 0d2f86fc6ea09..63c4adb39601c 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-03-21 +date: 2024-03-22 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 d0e8f4a6d2331..5601c95ccb8be 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-03-21 +date: 2024-03-22 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 617c197c42546..7c23578d95096 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-03-21 +date: 2024-03-22 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 98e50458ea8d7..5b5eb0f9c6d32 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-03-21 +date: 2024-03-22 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 713840792f65c..7f0eb3849b21d 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-03-21 +date: 2024-03-22 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 be78c81029218..b97bea3e9cd36 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-03-21 +date: 2024-03-22 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 e4aaa0b7bcd82..6e10ef674da7b 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-03-21 +date: 2024-03-22 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 859b3a9bf33e4..0e8cf1bd88374 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-03-21 +date: 2024-03-22 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 45dad5a75a0e7..08d8b92b479ba 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-03-21 +date: 2024-03-22 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 8f48338d9c3be..e7b00d2c8fc85 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-03-21 +date: 2024-03-22 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 c52f4e9dec81b..e281d8ad27588 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-03-21 +date: 2024-03-22 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 842351ac25341..35ea83a5e9a8f 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-03-21 +date: 2024-03-22 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 f2c9224399e3d..fda3a0e639c68 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-03-21 +date: 2024-03-22 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 a7543bc654c53..95a576e185ec8 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-03-21 +date: 2024-03-22 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 d8f03b8e67f2b..9425845b5e4fc 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-03-21 +date: 2024-03-22 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 3cf667a9002d1..646ab4948182f 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-03-21 +date: 2024-03-22 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 60868c9feb969..888d7c72f6cda 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-03-21 +date: 2024-03-22 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 becca3a64a32f..d1fdf3dcb36e5 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-03-21 +date: 2024-03-22 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 c679fbff1e36f..c42261c461f97 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-03-21 +date: 2024-03-22 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 612f808a31a43..604639c6abe74 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-03-21 +date: 2024-03-22 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 3439df45e1560..d7b8531bf0d5e 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-03-21 +date: 2024-03-22 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 86702122dfa4b..95e6dd9092820 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-03-21 +date: 2024-03-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 5f236a969b7312b08da6090b0e8a48fb4a7a9019 Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Fri, 22 Mar 2024 07:56:44 +0100 Subject: [PATCH 42/90] [Discover] Hide "Save"/"Save as" actions from "Unsaved changes" badge for read-only users (#179132) ## Summary This PR hides "Save"/"Save as" actions from "Unsaved changes" badge for read-only users. "Revert changes" action stays. Before (the read-only user would see an error toast when clicked): Screenshot 2024-03-21 at 10 33 28 After: Screenshot 2024-03-21 at 10 59 33 ### 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 --- .../top_nav/get_top_nav_badges.test.ts | 35 ++++++++++++++++++- .../components/top_nav/get_top_nav_badges.tsx | 13 ++++--- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_badges.test.ts b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_badges.test.ts index 18cd2791ab293..17cfc07c3d58b 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_badges.test.ts +++ b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_badges.test.ts @@ -7,13 +7,15 @@ */ import { getTopNavBadges } from './get_top_nav_badges'; -import { discoverServiceMock } from '../../../../__mocks__/services'; +import { createDiscoverServicesMock } from '../../../../__mocks__/services'; import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock'; import { savedSearchMock } from '../../../../__mocks__/saved_search'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; const stateContainer = getDiscoverStateMock({ isTimeBased: true }); +const discoverServiceMock = createDiscoverServicesMock(); +discoverServiceMock.capabilities.discover.save = true; describe('getTopNavBadges()', function () { test('should not return the unsaved changes badge if no changes', () => { @@ -41,6 +43,37 @@ describe('getTopNavBadges()', function () { }, ] `); + + expect(topNavBadges).toHaveLength(1); + const unsavedChangesBadge = topNavBadges[0]; + expect(unsavedChangesBadge.badgeText).toEqual('Unsaved changes'); + + render(unsavedChangesBadge.renderCustomBadge!({ badgeText: 'Unsaved changes' })); + userEvent.click(screen.getByRole('button')); // open menu + expect(screen.queryByText('Save')).not.toBeNull(); + expect(screen.queryByText('Save as')).not.toBeNull(); + expect(screen.queryByText('Revert changes')).not.toBeNull(); + }); + + test('should not show save in unsaved changed badge for read-only user', () => { + const discoverServiceMockReadOnly = createDiscoverServicesMock(); + discoverServiceMockReadOnly.capabilities.discover.save = false; + const topNavBadges = getTopNavBadges({ + hasUnsavedChanges: true, + services: discoverServiceMockReadOnly, + stateContainer, + topNavCustomization: undefined, + }); + + expect(topNavBadges).toHaveLength(1); + const unsavedChangesBadge = topNavBadges[0]; + expect(unsavedChangesBadge.badgeText).toEqual('Unsaved changes'); + + render(unsavedChangesBadge.renderCustomBadge!({ badgeText: 'Unsaved changes' })); + userEvent.click(screen.getByRole('button')); // open menu + expect(screen.queryByText('Save')).toBeNull(); + expect(screen.queryByText('Save as')).toBeNull(); + expect(screen.queryByText('Revert changes')).not.toBeNull(); }); describe('managed saved search', () => { diff --git a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_badges.tsx b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_badges.tsx index 0510df0bc3a1a..37daf11478bfc 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_badges.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_badges.tsx @@ -46,14 +46,17 @@ export const getTopNavBadges = ({ entries.push({ data: getTopNavUnsavedChangesBadge({ onRevert: stateContainer.actions.undoSavedSearchChanges, - onSave: !isManaged + onSave: + services.capabilities.discover.save && !isManaged + ? async () => { + await saveSearch(); + } + : undefined, + onSaveAs: services.capabilities.discover.save ? async () => { - await saveSearch(); + await saveSearch(true); } : undefined, - onSaveAs: async () => { - await saveSearch(true); - }, }), order: defaultBadges?.unsavedChangesBadge?.order ?? 100, }); From 34e03d163b283e98e7c115e42b7e29f0c4d2a94c Mon Sep 17 00:00:00 2001 From: Maryam Saeidi Date: Fri, 22 Mar 2024 10:03:41 +0100 Subject: [PATCH 43/90] Copy group and action variable tests to serverless and skip a test (#179136) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #167897 Closes #167518 Closes #175499 ## Summary I also added a refresh index after generating data-forge data to decrease the time of running tests and making sure data is available when the rule is executed, which in one instance, the time of the tests decreased from `30.0s` to `15.7s` 🎉 |Before|After| |---|---| |![image](https://github.com/elastic/kibana/assets/12370520/173ab47c-3d23-4e88-bb80-c60d59a3b4bd)|![image](https://github.com/elastic/kibana/assets/12370520/e6bedd5c-c920-4bc5-ab76-91f3e420aa1e)| |![image](https://github.com/elastic/kibana/assets/12370520/31adbaa4-ada0-4d80-be29-05be8f72818a)|![image](https://github.com/elastic/kibana/assets/12370520/75b398d1-53d9-44b0-bbdf-b8826d25de69)| [200] Flaky test runner: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5539 ✅ Commands to run test locally: ``` // Server node scripts/functional_tests_server.js --config x-pack/test_serverless/api_integration/test_suites/observability/config.feature_flags.ts // One test (Remove --include to run all tests) node scripts/functional_test_runner --config=x-pack/test_serverless/api_integration/test_suites/observability/config.feature_flags.ts --include=x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/p99_pct_fired.ts ``` --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/packages/kbn-data-forge/src/run.ts | 1 + .../documents_count_fired.ts | 2 +- .../custom_threshold_rule/group_by_fired.ts | 2 +- .../custom_threshold_rule/p99_pct_fired.ts | 14 +- .../custom_threshold_rule/avg_pct_fired.ts | 49 ++++++- .../custom_threshold_rule/avg_pct_no_data.ts | 51 +++++++- .../custom_threshold_rule/constants.ts | 8 ++ .../custom_eq_avg_bytes_fired.ts | 22 ++++ .../documents_count_fired.ts | 67 ++++++++-- .../custom_threshold_rule/group_by_fired.ts | 36 ++++-- .../custom_threshold_rule/index.ts | 1 + .../{p99_bytes_fired.ts => p99_pct_fired.ts} | 120 +++++++++++++----- .../custom_threshold_rule/typings.ts | 25 ++++ x-pack/test_serverless/tsconfig.json | 3 + 14 files changed, 333 insertions(+), 68 deletions(-) create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/constants.ts rename x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/{p99_bytes_fired.ts => p99_pct_fired.ts} (60%) create mode 100644 x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/typings.ts diff --git a/x-pack/packages/kbn-data-forge/src/run.ts b/x-pack/packages/kbn-data-forge/src/run.ts index 7cd88870fc0a6..af569e80bea2d 100644 --- a/x-pack/packages/kbn-data-forge/src/run.ts +++ b/x-pack/packages/kbn-data-forge/src/run.ts @@ -23,5 +23,6 @@ export async function run(config: Config, client: Client, logger: ToolingLog) { await indexSchedule(config, client, logger); const indicesCreated = [...indices]; indices.clear(); + await client.indices.refresh({ index: indicesCreated }); return indicesCreated; } diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts index 34238d5149388..1c20df4f014f5 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts @@ -34,7 +34,7 @@ export default function ({ getService }: FtrProviderContext) { const logger = getService('log'); const retryService = getService('retry'); - describe('Custom Threshold rule - DOCUMENTS_COUNT - FIRED', () => { + describe('Custom Threshold rule - DOCUMENTS_COUNT - FIRED', () => { const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; const DATA_VIEW = 'kbn-data-forge-fake_hosts.fake_hosts-*'; diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts index dc7db5117c662..b5aa7c4d03904 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts @@ -31,7 +31,7 @@ export default function ({ getService }: FtrProviderContext) { const logger = getService('log'); const retryService = getService('retry'); - describe('Custom Threshold rule - GROUP_BY - FIRED', () => { + describe('Custom Threshold rule - GROUP_BY - FIRED', () => { const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; const DATA_VIEW = 'kbn-data-forge-fake_hosts.fake_hosts-*'; diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/p99_pct_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/p99_pct_fired.ts index e04242f4ae1b9..46a6874d34588 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/p99_pct_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/p99_pct_fired.ts @@ -36,18 +36,18 @@ export default function ({ getService }: FtrProviderContext) { describe('Custom Threshold rule - P99 - PCT - FIRED', () => { const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; - const DATE_VIEW_TITLE = 'kbn-data-forge-fake_hosts.fake_hosts-*'; - const DATE_VIEW_NAME = 'ad-hoc-data-view-name'; + const DATA_VIEW_TITLE = 'kbn-data-forge-fake_hosts.fake_hosts-*'; + const DATA_VIEW_NAME = 'ad-hoc-data-view-name'; const DATA_VIEW_ID = 'data-view-id'; const MOCKED_AD_HOC_DATA_VIEW = { id: DATA_VIEW_ID, - title: DATE_VIEW_TITLE, + title: DATA_VIEW_TITLE, timeFieldName: '@timestamp', sourceFilters: [], fieldFormats: {}, runtimeFieldMap: {}, allowNoIndex: false, - name: DATE_VIEW_NAME, + name: DATA_VIEW_NAME, allowHidden: false, }; let dataForgeConfig: PartialConfig; @@ -77,7 +77,7 @@ export default function ({ getService }: FtrProviderContext) { logger.info(JSON.stringify(dataForgeIndices.join(','))); await waitForDocumentInIndex({ esClient, - indexName: DATE_VIEW_TITLE, + indexName: DATA_VIEW_TITLE, docCountTarget: 270, retryService, logger, @@ -246,7 +246,7 @@ export default function ({ getService }: FtrProviderContext) { `https://localhost:5601/app/observability/alerts/${alertId}` ); expect(resp.hits.hits[0]._source?.reason).eql( - `99th percentile of system.cpu.user.pct is 250%, above the threshold of 50%. (duration: 5 mins, data view: ${DATE_VIEW_NAME})` + `99th percentile of system.cpu.user.pct is 250%, above the threshold of 50%. (duration: 5 mins, data view: ${DATA_VIEW_NAME})` ); expect(resp.hits.hits[0]._source?.value).eql('250%'); @@ -256,7 +256,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source?.viewInAppUrl).contain('LOGS_EXPLORER_LOCATOR'); expect(omit(parsedViewInAppUrl.params, 'timeRange.from')).eql({ - dataset: DATE_VIEW_TITLE, + dataset: DATA_VIEW_TITLE, timeRange: { to: 'now' }, query: { query: '', language: 'kuery' }, filters: [], diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts index 8141ebd43bbc4..3f3e9b8223a8d 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts @@ -13,7 +13,11 @@ import { import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/constants'; import expect from '@kbn/expect'; import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; +import { parseSearchParams } from '@kbn/share-plugin/common/url_service'; +import { omit } from 'lodash'; import { FtrProviderContext } from '../../../ftr_provider_context'; +import { ISO_DATE_REGEX } from './constants'; +import { ActionDocument, LogsExplorerLocatorParsedParams } from './typings'; export default function ({ getService }: FtrProviderContext) { const esClient = getService('es'); @@ -25,13 +29,15 @@ export default function ({ getService }: FtrProviderContext) { describe('Custom Threshold rule - AVG - PCT - FIRED', () => { const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; - const DATA_VIEW = 'kbn-data-forge-fake_hosts.fake_hosts-*'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; + const DATA_VIEW_TITLE = 'kbn-data-forge-fake_hosts.fake_hosts-*'; + const DATA_VIEW_NAME = 'data-view-name'; const DATA_VIEW_ID = 'data-view-id'; let dataForgeConfig: PartialConfig; let dataForgeIndices: string[]; let actionId: string; let ruleId: string; + let alertId: string; before(async () => { dataForgeConfig = { @@ -54,11 +60,11 @@ export default function ({ getService }: FtrProviderContext) { }, }; dataForgeIndices = await generate({ client: esClient, config: dataForgeConfig, logger }); - await alertingApi.waitForDocumentInIndex({ indexName: DATA_VIEW, docCountTarget: 360 }); + await alertingApi.waitForDocumentInIndex({ indexName: DATA_VIEW_TITLE, docCountTarget: 360 }); await dataViewApi.create({ - name: DATA_VIEW, + name: DATA_VIEW_NAME, id: DATA_VIEW_ID, - title: DATA_VIEW, + title: DATA_VIEW_TITLE, }); }); @@ -130,6 +136,11 @@ export default function ({ getService }: FtrProviderContext) { documents: [ { ruleType: '{{rule.type}}', + alertDetailsUrl: '{{context.alertDetailsUrl}}', + reason: '{{context.reason}}', + value: '{{context.value}}', + host: '{{context.host}}', + viewInAppUrl: '{{context.viewInAppUrl}}', }, ], }, @@ -164,6 +175,7 @@ export default function ({ getService }: FtrProviderContext) { indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); + alertId = (resp.hits.hits[0]._source as any)['kibana.alert.uuid']; expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', @@ -209,6 +221,35 @@ export default function ({ getService }: FtrProviderContext) { searchConfiguration: { index: 'data-view-id', query: { query: '', language: 'kuery' } }, }); }); + + it('should set correct action variables', async () => { + const resp = await alertingApi.waitForDocumentInIndex({ + indexName: ALERT_ACTION_INDEX, + docCountTarget: 1, + }); + + expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.custom_threshold'); + expect(resp.hits.hits[0]._source?.alertDetailsUrl).eql( + `http://localhost:5620/app/observability/alerts/${alertId}` + ); + expect(resp.hits.hits[0]._source?.reason).eql( + `Average system.cpu.user.pct is 250%, above the threshold of 50%. (duration: 5 mins, data view: ${DATA_VIEW_NAME})` + ); + expect(resp.hits.hits[0]._source?.value).eql('250%'); + + const parsedViewInAppUrl = parseSearchParams( + new URL(resp.hits.hits[0]._source?.viewInAppUrl || '').search + ); + + expect(resp.hits.hits[0]._source?.viewInAppUrl).contain('LOGS_EXPLORER_LOCATOR'); + expect(omit(parsedViewInAppUrl.params, 'timeRange.from')).eql({ + dataset: DATA_VIEW_ID, + timeRange: { to: 'now' }, + query: { query: '', language: 'kuery' }, + filters: [], + }); + expect(parsedViewInAppUrl.params.timeRange.from).match(ISO_DATE_REGEX); + }); }); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts index e8cff15170cc9..6f7bfec08e919 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts @@ -9,29 +9,37 @@ import { Aggregators, Comparator, } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; -import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/constants'; +import { NO_DATA_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/constants'; import expect from '@kbn/expect'; import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; +import { parseSearchParams } from '@kbn/share-plugin/common/url_service'; +import { omit } from 'lodash'; import { FtrProviderContext } from '../../../ftr_provider_context'; +import { ISO_DATE_REGEX } from './constants'; +import { ActionDocument, LogsExplorerLocatorParsedParams } from './typings'; export default function ({ getService }: FtrProviderContext) { const esClient = getService('es'); const supertest = getService('supertest'); const alertingApi = getService('alertingApi'); const dataViewApi = getService('dataViewApi'); + const esDeleteAllIndices = getService('esDeleteAllIndices'); describe('Custom Threshold rule - AVG - PCT - NoData', () => { const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; + const DATA_VIEW_NAME = 'no-data-pattern-name'; const DATA_VIEW_ID = 'data-view-id-no-data'; + const DATA_VIEW_TITLE = 'no-data-pattern-title'; let actionId: string; let ruleId: string; + let alertId: string; before(async () => { await dataViewApi.create({ - name: 'no-data-pattern', + name: DATA_VIEW_NAME, id: DATA_VIEW_ID, - title: 'no-data-pattern', + title: DATA_VIEW_TITLE, }); }); @@ -57,6 +65,7 @@ export default function ({ getService }: FtrProviderContext) { await dataViewApi.delete({ id: DATA_VIEW_ID, }); + await esDeleteAllIndices([ALERT_ACTION_INDEX]); }); describe('Rule creation', () => { @@ -95,12 +104,16 @@ export default function ({ getService }: FtrProviderContext) { }, actions: [ { - group: FIRED_ACTIONS_ID, + group: NO_DATA_ACTIONS_ID, id: actionId, params: { documents: [ { ruleType: '{{rule.type}}', + alertDetailsUrl: '{{context.alertDetailsUrl}}', + reason: '{{context.reason}}', + value: '{{context.value}}', + viewInAppUrl: '{{context.viewInAppUrl}}', }, ], }, @@ -135,6 +148,7 @@ export default function ({ getService }: FtrProviderContext) { indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); + alertId = (resp.hits.hits[0]._source as any)['kibana.alert.uuid']; expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', @@ -183,6 +197,35 @@ export default function ({ getService }: FtrProviderContext) { }, }); }); + + it('should set correct action variables', async () => { + const resp = await alertingApi.waitForDocumentInIndex({ + indexName: ALERT_ACTION_INDEX, + docCountTarget: 1, + }); + + expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.custom_threshold'); + expect(resp.hits.hits[0]._source?.alertDetailsUrl).eql( + `http://localhost:5620/app/observability/alerts/${alertId}` + ); + expect(resp.hits.hits[0]._source?.reason).eql( + 'Average system.cpu.user.pct reported no data in the last 5m' + ); + expect(resp.hits.hits[0]._source?.value).eql('[NO DATA]'); + + const parsedViewInAppUrl = parseSearchParams( + new URL(resp.hits.hits[0]._source?.viewInAppUrl || '').search + ); + + expect(resp.hits.hits[0]._source?.viewInAppUrl).contain('LOGS_EXPLORER_LOCATOR'); + expect(omit(parsedViewInAppUrl.params, 'timeRange.from')).eql({ + dataset: DATA_VIEW_ID, + timeRange: { to: 'now' }, + query: { query: '', language: 'kuery' }, + filters: [], + }); + expect(parsedViewInAppUrl.params.timeRange.from).match(ISO_DATE_REGEX); + }); }); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/constants.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/constants.ts new file mode 100644 index 0000000000000..5cf1e0b4d6614 --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/constants.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 const ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/; diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts index c236b4cc93261..5ba84e3f51401 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts @@ -20,6 +20,7 @@ import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/cus import expect from '@kbn/expect'; import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../../../ftr_provider_context'; +import { ActionDocument } from './typings'; export default function ({ getService }: FtrProviderContext) { const esClient = getService('es'); @@ -38,6 +39,7 @@ export default function ({ getService }: FtrProviderContext) { let dataForgeIndices: string[]; let actionId: string; let ruleId: string; + let alertId: string; before(async () => { dataForgeConfig = { @@ -139,6 +141,9 @@ export default function ({ getService }: FtrProviderContext) { documents: [ { ruleType: '{{rule.type}}', + alertDetailsUrl: '{{context.alertDetailsUrl}}', + reason: '{{context.reason}}', + value: '{{context.value}}', }, ], }, @@ -173,6 +178,7 @@ export default function ({ getService }: FtrProviderContext) { indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); + alertId = (resp.hits.hits[0]._source as any)['kibana.alert.uuid']; expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', @@ -222,6 +228,22 @@ export default function ({ getService }: FtrProviderContext) { searchConfiguration: { index: 'data-view-id', query: { query: '', language: 'kuery' } }, }); }); + + it('should set correct action variables', async () => { + const resp = await alertingApi.waitForDocumentInIndex({ + indexName: ALERT_ACTION_INDEX, + docCountTarget: 1, + }); + + expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.custom_threshold'); + expect(resp.hits.hits[0]._source?.alertDetailsUrl).eql( + `http://localhost:5620/app/observability/alerts/${alertId}` + ); + expect(resp.hits.hits[0]._source?.reason).eql( + `Custom equation is 1 B, above the threshold of 0.9 B. (duration: 1 min, data view: ${DATA_VIEW})` + ); + expect(resp.hits.hits[0]._source?.value).eql('1 B'); + }); }); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts index 3aeb225196232..4f26d2caf5c52 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts @@ -13,7 +13,11 @@ import { import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/constants'; import expect from '@kbn/expect'; import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; +import { parseSearchParams } from '@kbn/share-plugin/common/url_service'; +import { omit } from 'lodash'; import { FtrProviderContext } from '../../../ftr_provider_context'; +import { ISO_DATE_REGEX } from './constants'; +import { ActionDocument, LogsExplorerLocatorParsedParams } from './typings'; export default function ({ getService }: FtrProviderContext) { const esClient = getService('es'); @@ -25,20 +29,22 @@ export default function ({ getService }: FtrProviderContext) { describe('Custom Threshold rule - DOCUMENTS_COUNT - FIRED', () => { const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; - const DATA_VIEW = 'kbn-data-forge-fake_hosts.fake_hosts-*'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; + const DATA_VIEW = 'kbn-data-forge-fake_hosts.fake_hosts-*'; const DATA_VIEW_ID = 'data-view-id'; + const DATA_VIEW_NAME = 'data-view-name'; let dataForgeConfig: PartialConfig; let dataForgeIndices: string[]; let actionId: string; let ruleId: string; + let alertId: string; before(async () => { dataForgeConfig = { schedule: [ { template: 'good', - start: 'now-15m', + start: 'now-10m', end: 'now+5m', metrics: [ { name: 'system.cpu.user.pct', method: 'linear', start: 2.5, end: 2.5 }, @@ -55,9 +61,12 @@ export default function ({ getService }: FtrProviderContext) { }, }; dataForgeIndices = await generate({ client: esClient, config: dataForgeConfig, logger }); - await alertingApi.waitForDocumentInIndex({ indexName: DATA_VIEW, docCountTarget: 60 }); + await alertingApi.waitForDocumentInIndex({ + indexName: dataForgeIndices.join(','), + docCountTarget: 45, + }); await dataViewApi.create({ - name: DATA_VIEW, + name: DATA_VIEW_NAME, id: DATA_VIEW_ID, title: DATA_VIEW, }); @@ -89,8 +98,7 @@ export default function ({ getService }: FtrProviderContext) { await cleanup({ client: esClient, config: dataForgeConfig, logger }); }); - // FLAKY: https://github.com/elastic/kibana/issues/175499 - describe.skip('Rule creation', () => { + describe('Rule creation', () => { it('creates rule successfully', async () => { actionId = await alertingApi.createIndexConnector({ name: 'Index Connector: Threshold API test', @@ -109,14 +117,14 @@ export default function ({ getService }: FtrProviderContext) { threshold: [1, 2], timeSize: 1, timeUnit: 'm', - metrics: [{ name: 'A', filter: '', aggType: Aggregators.COUNT }], + metrics: [{ name: 'A', filter: 'container.id:*', aggType: Aggregators.COUNT }], }, ], alertOnNoData: true, alertOnGroupDisappear: true, searchConfiguration: { query: { - query: '', + query: 'host.name:*', language: 'kuery', }, index: DATA_VIEW_ID, @@ -130,6 +138,10 @@ export default function ({ getService }: FtrProviderContext) { documents: [ { ruleType: '{{rule.type}}', + alertDetailsUrl: '{{context.alertDetailsUrl}}', + reason: '{{context.reason}}', + value: '{{context.value}}', + viewInAppUrl: '{{context.viewInAppUrl}}', }, ], }, @@ -164,6 +176,7 @@ export default function ({ getService }: FtrProviderContext) { indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); + alertId = (resp.hits.hits[0]._source as any)['kibana.alert.uuid']; expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', @@ -191,6 +204,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); expect(resp.hits.hits[0]._source).property('event.kind', 'signal'); expect(resp.hits.hits[0]._source).property('event.action', 'open'); + expect(resp.hits.hits[0]._source).not.have.property('kibana.alert.group'); expect(resp.hits.hits[0]._source).not.have.property('kibana.alert.evaluation.threshold'); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.parameters') @@ -201,14 +215,47 @@ export default function ({ getService }: FtrProviderContext) { threshold: [1, 2], timeSize: 1, timeUnit: 'm', - metrics: [{ name: 'A', filter: '', aggType: 'count' }], + metrics: [{ name: 'A', filter: 'container.id:*', aggType: 'count' }], }, ], alertOnNoData: true, alertOnGroupDisappear: true, - searchConfiguration: { index: 'data-view-id', query: { query: '', language: 'kuery' } }, + searchConfiguration: { + index: 'data-view-id', + query: { query: 'host.name:*', language: 'kuery' }, + }, }); }); + + it('should set correct action variables', async () => { + const resp = await alertingApi.waitForDocumentInIndex({ + indexName: ALERT_ACTION_INDEX, + docCountTarget: 1, + }); + + expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.custom_threshold'); + expect(resp.hits.hits[0]._source?.alertDetailsUrl).eql( + `http://localhost:5620/app/observability/alerts/${alertId}` + ); + + expect(resp.hits.hits[0]._source?.reason).eql( + `Document count is 3, not between the threshold of 1 and 2. (duration: 1 min, data view: ${DATA_VIEW_NAME})` + ); + expect(resp.hits.hits[0]._source?.value).eql('3'); + + const parsedViewInAppUrl = parseSearchParams( + new URL(resp.hits.hits[0]._source?.viewInAppUrl || '').search + ); + + expect(resp.hits.hits[0]._source?.viewInAppUrl).contain('LOGS_EXPLORER_LOCATOR'); + expect(omit(parsedViewInAppUrl.params, 'timeRange.from')).eql({ + dataset: DATA_VIEW_ID, + timeRange: { to: 'now' }, + query: { query: 'host.name:* and container.id:*', language: 'kuery' }, + filters: [], + }); + expect(parsedViewInAppUrl.params.timeRange.from).match(ISO_DATE_REGEX); + }); }); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts index 3aeb106095c2a..3dbb64f471b5d 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts @@ -21,6 +21,7 @@ import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/cus import expect from '@kbn/expect'; import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../../../ftr_provider_context'; +import { ActionDocument } from './typings'; export default function ({ getService }: FtrProviderContext) { const esClient = getService('es'); @@ -130,7 +131,7 @@ export default function ({ getService }: FtrProviderContext) { }, index: DATA_VIEW_ID, }, - groupBy: ['host.name'], + groupBy: ['host.name', 'container.id'], }, actions: [ { @@ -144,6 +145,7 @@ export default function ({ getService }: FtrProviderContext) { reason: '{{context.reason}}', value: '{{context.value}}', host: '{{context.host}}', + group: '{{context.group}}', }, ], }, @@ -202,7 +204,10 @@ export default function ({ getService }: FtrProviderContext) { 'custom_threshold.fired' ); expect(resp.hits.hits[0]._source).property('tags').contain('observability'); - expect(resp.hits.hits[0]._source).property('kibana.alert.instance.id', 'host-0'); + expect(resp.hits.hits[0]._source).property( + 'kibana.alert.instance.id', + 'host-0,container-0' + ); expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); expect(resp.hits.hits[0]._source).property('event.kind', 'signal'); expect(resp.hits.hits[0]._source).property('event.action', 'open'); @@ -214,6 +219,18 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('container.id', 'container-0'); expect(resp.hits.hits[0]._source).property('container.name', 'container-name'); expect(resp.hits.hits[0]._source).not.property('container.cpu'); + expect(resp.hits.hits[0]._source) + .property('kibana.alert.group') + .eql([ + { + field: 'host.name', + value: 'host-0', + }, + { + field: 'container.id', + value: 'container-0', + }, + ]); expect(resp.hits.hits[0]._source).property('kibana.alert.evaluation.threshold').eql([0.2]); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.parameters') @@ -230,18 +247,12 @@ export default function ({ getService }: FtrProviderContext) { alertOnNoData: true, alertOnGroupDisappear: true, searchConfiguration: { index: 'data-view-id', query: { query: '', language: 'kuery' } }, - groupBy: ['host.name'], + groupBy: ['host.name', 'container.id'], }); }); it('should set correct action variables', async () => { - const resp = await alertingApi.waitForDocumentInIndex<{ - ruleType: string; - alertDetailsUrl: string; - reason: string; - value: string; - host: string; - }>({ + const resp = await alertingApi.waitForDocumentInIndex({ indexName: ALERT_ACTION_INDEX, }); const { protocol, hostname, port } = kbnTestConfig.getUrlParts(); @@ -251,12 +262,15 @@ export default function ({ getService }: FtrProviderContext) { `${protocol}://${hostname}:${port}/app/observability/alerts/${alertId}` ); expect(resp.hits.hits[0]._source?.reason).eql( - `Average system.cpu.total.norm.pct is 80%, above or equal the threshold of 20%. (duration: 1 min, data view: ${DATA_VIEW}, group: host-0)` + `Average system.cpu.total.norm.pct is 80%, above or equal the threshold of 20%. (duration: 1 min, data view: ${DATA_VIEW}, group: host-0,container-0)` ); expect(resp.hits.hits[0]._source?.value).eql('80%'); expect(resp.hits.hits[0]._source?.host).eql( '{"name":"host-0","mac":["00-00-5E-00-53-23","00-00-5E-00-53-24"]}' ); + expect(resp.hits.hits[0]._source?.group).eql( + '{"field":"host.name","value":"host-0"},{"field":"container.id","value":"container-0"}' + ); }); }); }); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/index.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/index.ts index 944068af6a21b..e8246cbe79809 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/index.ts @@ -14,5 +14,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./documents_count_fired')); loadTestFile(require.resolve('./custom_eq_avg_bytes_fired')); loadTestFile(require.resolve('./group_by_fired')); + loadTestFile(require.resolve('./p99_pct_fired')); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/p99_bytes_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/p99_pct_fired.ts similarity index 60% rename from x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/p99_bytes_fired.ts rename to x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/p99_pct_fired.ts index c00139c36380d..884259f107109 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/p99_bytes_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/p99_pct_fired.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { cleanup, generate } from '@kbn/infra-forge'; +import { cleanup, generate, Dataset, PartialConfig } from '@kbn/data-forge'; import { Aggregators, Comparator, @@ -13,37 +13,64 @@ import { import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/constants'; import expect from '@kbn/expect'; import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; +import { parseSearchParams } from '@kbn/share-plugin/common/url_service'; +import { omit } from 'lodash'; import { FtrProviderContext } from '../../../ftr_provider_context'; +import { ISO_DATE_REGEX } from './constants'; +import { ActionDocument, LogsExplorerLocatorParsedParams } from './typings'; export default function ({ getService }: FtrProviderContext) { const esClient = getService('es'); const supertest = getService('supertest'); const esDeleteAllIndices = getService('esDeleteAllIndices'); const alertingApi = getService('alertingApi'); - const dataViewApi = getService('dataViewApi'); const logger = getService('log'); - describe('Custom Threshold rule - P99 - BYTES - FIRED', () => { + describe('Custom Threshold rule - P99 - PCT - FIRED', () => { const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; - // DATE_VIEW should match the index template: - // x-pack/packages/kbn-infra-forge/src/data_sources/composable/template.json - const DATE_VIEW = 'kbn-data-forge-fake_hosts'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; + const DATA_VIEW_TITLE = 'kbn-data-forge-fake_hosts.fake_hosts-*'; + const DATA_VIEW_NAME = 'ad-hoc-data-view-name'; const DATA_VIEW_ID = 'data-view-id'; - let infraDataIndex: string; + const MOCKED_AD_HOC_DATA_VIEW = { + id: DATA_VIEW_ID, + title: DATA_VIEW_TITLE, + timeFieldName: '@timestamp', + sourceFilters: [], + fieldFormats: {}, + runtimeFieldMap: {}, + allowNoIndex: false, + name: DATA_VIEW_NAME, + allowHidden: false, + }; + let dataForgeConfig: PartialConfig; + let dataForgeIndices: string[]; let actionId: string; let ruleId: string; + let alertId: string; before(async () => { - infraDataIndex = await generate({ - esClient, - lookback: 'now-15m', - logger, - }); - await dataViewApi.create({ - name: DATE_VIEW, - id: DATA_VIEW_ID, - title: DATE_VIEW, + dataForgeConfig = { + schedule: [ + { + template: 'good', + start: 'now-10m', + end: 'now+5m', + metrics: [{ name: 'system.cpu.user.pct', method: 'linear', start: 2.5, end: 2.5 }], + }, + ], + indexing: { + dataset: 'fake_hosts' as Dataset, + eventsPerCycle: 1, + interval: 10000, + alignEventsToInterval: true, + }, + }; + dataForgeIndices = await generate({ client: esClient, config: dataForgeConfig, logger }); + logger.info(JSON.stringify(dataForgeIndices.join(','))); + await alertingApi.waitForDocumentInIndex({ + indexName: DATA_VIEW_TITLE, + docCountTarget: 270, }); }); @@ -63,14 +90,11 @@ export default function ({ getService }: FtrProviderContext) { }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', - query: { term: { 'rule.id': ruleId } }, + query: { term: { 'kibana.alert.rule.consumer': 'logs' } }, conflicts: 'proceed', }); - await dataViewApi.delete({ - id: DATA_VIEW_ID, - }); - await esDeleteAllIndices([ALERT_ACTION_INDEX, infraDataIndex]); - await cleanup({ esClient, logger }); + await esDeleteAllIndices([ALERT_ACTION_INDEX, ...dataForgeIndices]); + await cleanup({ client: esClient, config: dataForgeConfig, logger }); }); describe('Rule creation', () => { @@ -89,12 +113,10 @@ export default function ({ getService }: FtrProviderContext) { criteria: [ { comparator: Comparator.GT, - threshold: [1], + threshold: [0.5], timeSize: 5, timeUnit: 'm', - metrics: [ - { name: 'A', field: 'system.network.in.bytes', aggType: Aggregators.P99 }, - ], + metrics: [{ name: 'A', field: 'system.cpu.user.pct', aggType: Aggregators.P99 }], }, ], alertOnNoData: true, @@ -104,7 +126,7 @@ export default function ({ getService }: FtrProviderContext) { query: '', language: 'kuery', }, - index: DATA_VIEW_ID, + index: MOCKED_AD_HOC_DATA_VIEW, }, }, actions: [ @@ -115,6 +137,11 @@ export default function ({ getService }: FtrProviderContext) { documents: [ { ruleType: '{{rule.type}}', + alertDetailsUrl: '{{context.alertDetailsUrl}}', + reason: '{{context.reason}}', + value: '{{context.value}}', + host: '{{context.host}}', + viewInAppUrl: '{{context.viewInAppUrl}}', }, ], }, @@ -149,6 +176,7 @@ export default function ({ getService }: FtrProviderContext) { indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); + alertId = (resp.hits.hits[0]._source as any)['kibana.alert.uuid']; expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', @@ -183,17 +211,49 @@ export default function ({ getService }: FtrProviderContext) { criteria: [ { comparator: '>', - threshold: [1], + threshold: [0.5], timeSize: 5, timeUnit: 'm', - metrics: [{ name: 'A', field: 'system.network.in.bytes', aggType: 'p99' }], + metrics: [{ name: 'A', field: 'system.cpu.user.pct', aggType: 'p99' }], }, ], alertOnNoData: true, alertOnGroupDisappear: true, - searchConfiguration: { index: 'data-view-id', query: { query: '', language: 'kuery' } }, + searchConfiguration: { + index: MOCKED_AD_HOC_DATA_VIEW, + query: { query: '', language: 'kuery' }, + }, }); }); + + it('should set correct action variables', async () => { + const resp = await alertingApi.waitForDocumentInIndex({ + indexName: ALERT_ACTION_INDEX, + docCountTarget: 1, + }); + + expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.custom_threshold'); + expect(resp.hits.hits[0]._source?.alertDetailsUrl).eql( + `http://localhost:5620/app/observability/alerts/${alertId}` + ); + expect(resp.hits.hits[0]._source?.reason).eql( + `99th percentile of system.cpu.user.pct is 250%, above the threshold of 50%. (duration: 5 mins, data view: ${DATA_VIEW_NAME})` + ); + expect(resp.hits.hits[0]._source?.value).eql('250%'); + + const parsedViewInAppUrl = parseSearchParams( + new URL(resp.hits.hits[0]._source?.viewInAppUrl || '').search + ); + + expect(resp.hits.hits[0]._source?.viewInAppUrl).contain('LOGS_EXPLORER_LOCATOR'); + expect(omit(parsedViewInAppUrl.params, 'timeRange.from')).eql({ + dataset: DATA_VIEW_TITLE, + timeRange: { to: 'now' }, + query: { query: '', language: 'kuery' }, + filters: [], + }); + expect(parsedViewInAppUrl.params.timeRange.from).match(ISO_DATE_REGEX); + }); }); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/typings.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/typings.ts new file mode 100644 index 0000000000000..9002e9991292f --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/typings.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 { Query, TimeRange } from '@kbn/es-query'; +import { SerializableRecord } from '@kbn/utility-types'; + +export interface ActionDocument { + ruleType: string; + alertDetailsUrl: string; + reason: string; + value: string; + viewInAppUrl: string; + host?: string; + group?: string; +} + +export interface LogsExplorerLocatorParsedParams extends SerializableRecord { + dataset: string; + timeRange: TimeRange; + query: Query; +} diff --git a/x-pack/test_serverless/tsconfig.json b/x-pack/test_serverless/tsconfig.json index 3cbecb37dcebd..46d32ae1d3c2b 100644 --- a/x-pack/test_serverless/tsconfig.json +++ b/x-pack/test_serverless/tsconfig.json @@ -93,5 +93,8 @@ "@kbn/infra-forge", "@kbn/reporting-common", "@kbn/slo-plugin", + "@kbn/share-plugin", + "@kbn/es-query", + "@kbn/utility-types", ] } From 6321f694c2937699372671058c863bd2d452b3fc Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Fri, 22 Mar 2024 10:34:28 +0100 Subject: [PATCH 44/90] Add cache for `pluginService.shouldEnablePlugin` (#179194) ## Summary We're spending ~250ms (on developer m2) inside `shouldEnablePlugin` because we recursively go through each plugin's whole dependency chain without any kind of cache. Screenshot 2024-03-21 at 16 44 36 This PR adds a cache to `shouldEnablePlugin` so that each plugin's enablement status is only computed once, reducing the time spent in the function to less than 1ms. --- .../src/plugins_service.ts | 70 +++++++++++++------ 1 file changed, 49 insertions(+), 21 deletions(-) diff --git a/packages/core/plugins/core-plugins-server-internal/src/plugins_service.ts b/packages/core/plugins/core-plugins-server-internal/src/plugins_service.ts index bb5ce353c3492..c3828dc75cd50 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/plugins_service.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/plugins_service.ts @@ -328,11 +328,16 @@ export class PluginsService const disabledPlugins = []; const disabledDependants = []; const disabledDependantsCauses = new Set(); + const pluginEnablementCache = new Map(); for (const [pluginName, { plugin, isEnabled }] of pluginEnableStatuses) { this.validatePluginDependencies(plugin, pluginEnableStatuses); - const pluginEnablement = this.shouldEnablePlugin(pluginName, pluginEnableStatuses); + const pluginEnablement = shouldEnablePlugin({ + pluginName, + pluginEnableStatuses, + cache: pluginEnablementCache, + }); if (pluginEnablement.enabled) { if (plugin.manifest.type === PluginType.preboot) { @@ -404,40 +409,63 @@ export class PluginsService } } } +} - private shouldEnablePlugin( - pluginName: PluginName, - pluginEnableStatuses: Map, - parents: PluginName[] = [] - ): { enabled: true } | { enabled: false; missingOrIncompatibleDependencies: string[] } { - const pluginInfo = pluginEnableStatuses.get(pluginName); +type PluginEnablementResult = + | { enabled: true } + | { enabled: false; missingOrIncompatibleDependencies: string[] }; + +function shouldEnablePlugin({ + pluginName, + pluginEnableStatuses, + cache, + parents = [], +}: { + pluginName: PluginName; + pluginEnableStatuses: Map; + cache: Map; + parents?: PluginName[]; +}): PluginEnablementResult { + const cachedValue = cache.get(pluginName); + if (cachedValue) { + return cachedValue; + } - if (pluginInfo === undefined || !pluginInfo.isEnabled) { - return { - enabled: false, - missingOrIncompatibleDependencies: [], - }; - } + const pluginInfo = pluginEnableStatuses.get(pluginName); + let result: PluginEnablementResult; + if (pluginInfo === undefined || !pluginInfo.isEnabled) { + result = { + enabled: false, + missingOrIncompatibleDependencies: [], + }; + } else { const missingOrIncompatibleDependencies = pluginInfo.plugin.requiredPlugins .filter((dep) => !parents.includes(dep)) .filter( (dependencyName) => pluginEnableStatuses.get(dependencyName)?.plugin.manifest.type !== pluginInfo.plugin.manifest.type || - !this.shouldEnablePlugin(dependencyName, pluginEnableStatuses, [...parents, pluginName]) - .enabled + !shouldEnablePlugin({ + pluginName: dependencyName, + pluginEnableStatuses, + parents: [...parents, pluginName], + cache, + }).enabled ); if (missingOrIncompatibleDependencies.length === 0) { - return { + result = { enabled: true, }; + } else { + result = { + enabled: false, + missingOrIncompatibleDependencies, + }; } - - return { - enabled: false, - missingOrIncompatibleDependencies, - }; } + + cache.set(pluginName, result); + return result; } From 6dcfbd763eb98211f7c1c47d8455a4ba8b81b9c3 Mon Sep 17 00:00:00 2001 From: Tre Date: Fri, 22 Mar 2024 10:09:48 +0000 Subject: [PATCH 45/90] [Serverless][FTR] Fix flaky viewer_role_login test for MKI (#178522) Resolves: https://github.com/elastic/kibana/issues/178403 Drop wrapper div and place data test subj within the eui component, per [docs](https://eui.elastic.co/#/navigation/context-menu). Also: - add calls to wait until loading has finished - add 10_000 timeouts to test subects calls --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../nav_control/nav_control_component.tsx | 25 +++++++++---------- .../page_objects/svl_common_page.ts | 15 ++++++++--- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/x-pack/plugins/security/public/nav_control/nav_control_component.tsx b/x-pack/plugins/security/public/nav_control/nav_control_component.tsx index c043f837845db..01df61407c096 100644 --- a/x-pack/plugins/security/public/nav_control/nav_control_component.tsx +++ b/x-pack/plugins/security/public/nav_control/nav_control_component.tsx @@ -179,19 +179,18 @@ export const SecurityNavControl: FunctionComponent = ({ panelPaddingSize="none" buffer={0} > -
- , - }, - ]} - /> -
+ , + }, + ]} + data-test-subj="userMenu" + /> ); }; diff --git a/x-pack/test_serverless/functional/page_objects/svl_common_page.ts b/x-pack/test_serverless/functional/page_objects/svl_common_page.ts index 0b3acf99d70c7..bfbaf754d5eed 100644 --- a/x-pack/test_serverless/functional/page_objects/svl_common_page.ts +++ b/x-pack/test_serverless/functional/page_objects/svl_common_page.ts @@ -11,7 +11,7 @@ export function SvlCommonPageProvider({ getService, getPageObjects }: FtrProvide const testSubjects = getService('testSubjects'); const find = getService('find'); const config = getService('config'); - const pageObjects = getPageObjects(['security', 'common']); + const pageObjects = getPageObjects(['security', 'common', 'header']); const retry = getService('retry'); const deployment = getService('deployment'); const log = getService('log'); @@ -229,15 +229,22 @@ export function SvlCommonPageProvider({ getService, getPageObjects }: FtrProvide }, async clickUserAvatar() { - await testSubjects.click('userMenuAvatar'); + await pageObjects.header.waitUntilLoadingHasFinished(); + await testSubjects.click('userMenuAvatar', 10_000); }, async assertUserAvatarExists() { - await testSubjects.existOrFail('userMenuAvatar'); + await pageObjects.header.waitUntilLoadingHasFinished(); + await testSubjects.existOrFail('userMenuAvatar', { + timeout: 10_000, + }); }, async assertUserMenuExists() { - await testSubjects.existOrFail('userMenu'); + await pageObjects.header.waitUntilLoadingHasFinished(); + await testSubjects.existOrFail('userMenu', { + timeout: 10_000, + }); }, }; } From 917f8546f8a9b936a15f8614611a65ac382fde11 Mon Sep 17 00:00:00 2001 From: Dima Arnautov Date: Fri, 22 Mar 2024 11:37:47 +0100 Subject: [PATCH 46/90] [ML] Decouple edit-anomaly-swimlane UI action (#179073) ## Summary - Decouples edit-anomaly-swimlane and apply-time-range-selection UI actions from embeddable framework Part of #178375 Part of #174967 --- .../anomaly_charts_embeddable.tsx | 8 ++ .../embeddables/anomaly_charts/types.ts | 22 +++++ .../anomaly_swimlane_embeddable.tsx | 33 +++++++- .../anomaly_swimlane_embeddable_factory.ts | 7 +- .../anomaly_swimlane_initializer.tsx | 8 +- .../anomaly_swimlane_setup_flyout.tsx | 7 +- .../embeddables/anomaly_swimlane/types.ts | 48 +++++++++++ .../common/anomaly_detection_embeddable.ts | 10 +-- x-pack/plugins/ml/public/embeddables/types.ts | 26 +++++- .../apply_influencer_filters_action.tsx | 23 +++--- .../ui_actions/apply_time_range_action.tsx | 32 +++++--- .../ui_actions/edit_swimlane_panel_action.tsx | 44 ++++++---- x-pack/plugins/ml/public/ui_actions/index.ts | 32 ++++---- .../open_in_anomaly_explorer_action.tsx | 82 +++++-------------- .../plugins/ml/public/ui_actions/triggers.ts | 18 ++++ 15 files changed, 259 insertions(+), 141 deletions(-) create mode 100644 x-pack/plugins/ml/public/embeddables/anomaly_charts/types.ts create mode 100644 x-pack/plugins/ml/public/embeddables/anomaly_swimlane/types.ts diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable.tsx index 1b8e77514e108..ded0f536ae96a 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable.tsx @@ -12,6 +12,7 @@ import { i18n } from '@kbn/i18n'; import { Subject, Subscription, type BehaviorSubject } from 'rxjs'; import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; import type { IContainer } from '@kbn/embeddable-plugin/public'; +import { embeddableInputToSubject } from '@kbn/embeddable-plugin/public'; import { embeddableOutputToSubject } from '@kbn/embeddable-plugin/public'; import type { MlEntityField } from '@kbn/ml-anomaly-utils'; import { EmbeddableAnomalyChartsContainer } from './embeddable_anomaly_charts_container_lazy'; @@ -43,6 +44,7 @@ export class AnomalyChartsEmbeddable extends AnomalyDetectionEmbeddable< public readonly type: string = ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE; // API + public readonly jobIds: BehaviorSubject; public entityFields: BehaviorSubject; private apiSubscriptions = new Subscription(); @@ -54,6 +56,12 @@ export class AnomalyChartsEmbeddable extends AnomalyDetectionEmbeddable< ) { super(initialInput, services[2].anomalyDetectorService, services[1].data.dataViews, parent); + this.jobIds = embeddableInputToSubject( + this.apiSubscriptions, + this, + 'jobIds' + ); + this.entityFields = embeddableOutputToSubject( this.apiSubscriptions, this, diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/types.ts b/x-pack/plugins/ml/public/embeddables/anomaly_charts/types.ts new file mode 100644 index 0000000000000..198602b836c1a --- /dev/null +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/types.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { MlEntityField } from '@kbn/ml-anomaly-utils'; +import type { HasType, PublishingSubject } from '@kbn/presentation-publishing'; +import type { JobId } from '../../shared'; +import type { AnomalyExplorerChartsEmbeddableType } from '../constants'; +import type { MlEmbeddableBaseApi } from '../types'; + +export interface AnomalyChartsFieldSelectionApi { + jobIds: PublishingSubject; + entityFields: PublishingSubject; +} + +export interface AnomalyChartsEmbeddableApi + extends HasType, + MlEmbeddableBaseApi, + AnomalyChartsFieldSelectionApi {} diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable.tsx index 968d505dc46ee..6e5a8a02ac35e 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable.tsx @@ -16,11 +16,13 @@ import { Subject, Subscription, type BehaviorSubject } from 'rxjs'; import type { AnomalySwimlaneEmbeddableInput, AnomalySwimlaneEmbeddableOutput, + AnomalySwimlaneEmbeddableUserInput, AnomalySwimlaneServices, } from '..'; import { ANOMALY_SWIMLANE_EMBEDDABLE_TYPE } from '..'; import type { JobId } from '../../../common/types/anomaly_detection_jobs'; import type { MlDependencies } from '../../application/app'; +import type { SwimlaneType } from '../../application/explorer/explorer_constants'; import { SWIM_LANE_SELECTION_TRIGGER } from '../../ui_actions'; import { AnomalyDetectionEmbeddable } from '../common/anomaly_detection_embeddable'; import { EmbeddableLoading } from '../common/components/embeddable_loading_fallback'; @@ -43,9 +45,12 @@ export class AnomalySwimlaneEmbeddable extends AnomalyDetectionEmbeddable< public readonly type: string = ANOMALY_SWIMLANE_EMBEDDABLE_TYPE; // API - public viewBy: BehaviorSubject; - public perPage: BehaviorSubject; - public fromPage: BehaviorSubject; + public readonly jobIds: BehaviorSubject; + public readonly viewBy: BehaviorSubject; + public readonly swimlaneType: BehaviorSubject; + public readonly perPage: BehaviorSubject; + public readonly fromPage: BehaviorSubject; + public readonly interval: BehaviorSubject; private apiSubscriptions = new Subscription(); @@ -56,12 +61,24 @@ export class AnomalySwimlaneEmbeddable extends AnomalyDetectionEmbeddable< ) { super(initialInput, services[2].anomalyDetectorService, services[1].data.dataViews, parent); + this.jobIds = embeddableInputToSubject( + this.apiSubscriptions, + this, + 'jobIds' + ); + this.viewBy = embeddableInputToSubject( this.apiSubscriptions, this, 'viewBy' ); + this.swimlaneType = embeddableInputToSubject( + this.apiSubscriptions, + this, + 'swimlaneType' + ); + this.perPage = embeddableOutputToSubject( this.apiSubscriptions, this, @@ -73,6 +90,16 @@ export class AnomalySwimlaneEmbeddable extends AnomalyDetectionEmbeddable< this, 'fromPage' ); + + this.interval = embeddableOutputToSubject( + this.apiSubscriptions, + this, + 'interval' + ); + } + + public updateUserInput(update: AnomalySwimlaneEmbeddableUserInput) { + this.updateInput(update); } public reportsEmbeddableLoad() { diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.ts b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.ts index a9ab9c9f3424a..ebab6f5356994 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.ts +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.ts @@ -56,7 +56,12 @@ export class AnomalySwimlaneEmbeddableFactory try { const { resolveAnomalySwimlaneUserInput } = await import('./anomaly_swimlane_setup_flyout'); - return await resolveAnomalySwimlaneUserInput(coreStart, deps.data.dataViews); + const userInput = await resolveAnomalySwimlaneUserInput(coreStart, deps.data.dataViews); + + return { + ...userInput, + title: userInput.panelTitle, + }; } catch (e) { return Promise.reject(); } diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_initializer.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_initializer.tsx index d6875a9ce7a0d..92943f4286c12 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_initializer.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_initializer.tsx @@ -25,13 +25,9 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import type { SwimlaneType } from '../../application/explorer/explorer_constants'; import { SWIMLANE_TYPE } from '../../application/explorer/explorer_constants'; -import type { AnomalySwimlaneEmbeddableInput } from '..'; +import type { AnomalySwimlaneEmbeddableInput, AnomalySwimlaneEmbeddableUserInput } from '..'; -interface ExplicitInput { - panelTitle: string; - swimlaneType: SwimlaneType; - viewBy?: string; -} +export type ExplicitInput = Omit; export interface AnomalySwimlaneInitializerProps { defaultTitle: string; diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx index 34ba32cd4a127..fa9185bb026a9 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx @@ -14,15 +14,15 @@ import { VIEW_BY_JOB_LABEL } from '../../application/explorer/explorer_constants import { AnomalySwimlaneInitializer } from './anomaly_swimlane_initializer'; import { getDefaultSwimlanePanelTitle } from './anomaly_swimlane_embeddable'; import { HttpService } from '../../application/services/http_service'; -import type { AnomalySwimlaneEmbeddableInput } from '..'; +import type { AnomalySwimlaneEmbeddableInput, AnomalySwimlaneEmbeddableUserInput } from '..'; import { resolveJobSelection } from '../common/resolve_job_selection'; import { mlApiServicesProvider } from '../../application/services/ml_api_service'; export async function resolveAnomalySwimlaneUserInput( coreStart: CoreStart, dataViews: DataViewsContract, - input?: AnomalySwimlaneEmbeddableInput -): Promise> { + input?: Partial +): Promise { const { http, overlays, theme, i18n } = coreStart; const { getJobs } = mlApiServicesProvider(new HttpService(http)); @@ -44,7 +44,6 @@ export async function resolveAnomalySwimlaneUserInput( modalSession.close(); resolve({ jobIds, - title: explicitInput.panelTitle, ...explicitInput, }); }} diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/types.ts b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/types.ts new file mode 100644 index 0000000000000..bb9548f78f61a --- /dev/null +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/types.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 type { + HasType, + PublishesWritablePanelTitle, + PublishingSubject, +} from '@kbn/presentation-publishing'; +import { apiIsOfType } from '@kbn/presentation-publishing'; +import { isPopulatedObject } from '@kbn/ml-is-populated-object'; +import type { SwimlaneType } from '../../application/explorer/explorer_constants'; +import type { JobId } from '../../shared'; +import type { AnomalySwimLaneEmbeddableType } from '../constants'; +import { ANOMALY_SWIMLANE_EMBEDDABLE_TYPE } from '../constants'; +import type { AnomalySwimlaneEmbeddableUserInput, MlEmbeddableBaseApi } from '../types'; +import type { AppStateSelectedCells } from '../../application/explorer/explorer_utils'; + +export interface AnomalySwimLaneComponentApi { + jobIds: PublishingSubject; + swimlaneType: PublishingSubject; + viewBy: PublishingSubject; + perPage: PublishingSubject; + fromPage: PublishingSubject; + interval: PublishingSubject; + updateUserInput: (input: AnomalySwimlaneEmbeddableUserInput) => void; +} + +export interface AnomalySwimLaneEmbeddableApi + extends HasType, + PublishesWritablePanelTitle, + MlEmbeddableBaseApi, + AnomalySwimLaneComponentApi {} + +export interface AnomalySwimLaneActionContext { + embeddable: AnomalySwimLaneEmbeddableApi; + data?: AppStateSelectedCells; +} + +export function isSwimLaneEmbeddableContext(arg: unknown): arg is AnomalySwimLaneActionContext { + return ( + isPopulatedObject(arg, ['embeddable']) && + apiIsOfType(arg.embeddable, ANOMALY_SWIMLANE_EMBEDDABLE_TYPE) + ); +} diff --git a/x-pack/plugins/ml/public/embeddables/common/anomaly_detection_embeddable.ts b/x-pack/plugins/ml/public/embeddables/common/anomaly_detection_embeddable.ts index 08c00273c44a0..84a03b05e869f 100644 --- a/x-pack/plugins/ml/public/embeddables/common/anomaly_detection_embeddable.ts +++ b/x-pack/plugins/ml/public/embeddables/common/anomaly_detection_embeddable.ts @@ -5,14 +5,15 @@ * 2.0. */ +import { type DataView } from '@kbn/data-views-plugin/common'; +import { type DataViewsContract } from '@kbn/data-views-plugin/public'; import { Embeddable, type EmbeddableInput, type EmbeddableOutput, type IContainer, } from '@kbn/embeddable-plugin/public'; -import { type DataView } from '@kbn/data-views-plugin/common'; -import { type DataViewsContract } from '@kbn/data-views-plugin/public'; +import type { BehaviorSubject } from 'rxjs'; import { firstValueFrom } from 'rxjs'; import { type AnomalyDetectorService } from '../../application/services/anomaly_detector_service'; import type { JobId } from '../../shared'; @@ -28,7 +29,8 @@ export abstract class AnomalyDetectionEmbeddable< // Need to defer embeddable load in order to resolve data views deferEmbeddableLoad = true; - public jobIds: JobId[] = []; + // API + public abstract jobIds: BehaviorSubject; protected constructor( initialInput: Input, @@ -46,8 +48,6 @@ export abstract class AnomalyDetectionEmbeddable< protected async initializeOutput(initialInput: CommonInput) { const { jobIds } = initialInput; - this.jobIds = jobIds; - try { const jobs = await firstValueFrom(this.anomalyDetectorService.getJobs$(jobIds)); diff --git a/x-pack/plugins/ml/public/embeddables/types.ts b/x-pack/plugins/ml/public/embeddables/types.ts index a0bd799352d4f..14ee0e7c6d444 100644 --- a/x-pack/plugins/ml/public/embeddables/types.ts +++ b/x-pack/plugins/ml/public/embeddables/types.ts @@ -11,6 +11,13 @@ import type { DataView } from '@kbn/data-views-plugin/common'; import type { EmbeddableInput, EmbeddableOutput, IEmbeddable } from '@kbn/embeddable-plugin/public'; import type { Filter, Query, TimeRange } from '@kbn/es-query'; import type { MlEntityField } from '@kbn/ml-anomaly-utils'; +import type { + EmbeddableApiContext, + HasParentApi, + HasType, + PublishesUnifiedSearch, + PublishesViewMode, +} from '@kbn/presentation-publishing'; import type { JobId } from '../../common/types/anomaly_detection_jobs'; import type { MlDependencies } from '../application/app'; import type { MlCapabilitiesService } from '../application/capabilities/check_capabilities'; @@ -30,6 +37,18 @@ import type { MlEmbeddableTypes, } from './constants'; +export type MlEmbeddableBaseApi = Partial< + HasParentApi & PublishesViewMode & PublishesUnifiedSearch +>; + +/** Manual input by the user */ +export interface AnomalySwimlaneEmbeddableUserInput { + jobIds: JobId[]; + panelTitle: string; + swimlaneType: SwimlaneType; + viewBy?: string; +} + export interface AnomalySwimlaneEmbeddableCustomInput { jobIds: JobId[]; swimlaneType: SwimlaneType; @@ -66,8 +85,11 @@ export interface AnomalySwimlaneEmbeddableCustomOutput { export type AnomalySwimlaneEmbeddableOutput = EmbeddableOutput & AnomalySwimlaneEmbeddableCustomOutput; -export interface EditSwimlanePanelContext { - embeddable: IEmbeddable; +export type EditSwimLaneActionApi = HasType & + Partial>; + +export interface EditSwimlanePanelContext extends EmbeddableApiContext { + embeddable: EditSwimLaneActionApi; } export interface SwimLaneDrilldownContext extends EditSwimlanePanelContext { diff --git a/x-pack/plugins/ml/public/ui_actions/apply_influencer_filters_action.tsx b/x-pack/plugins/ml/public/ui_actions/apply_influencer_filters_action.tsx index 96508aae89771..b2d785bf6dab3 100644 --- a/x-pack/plugins/ml/public/ui_actions/apply_influencer_filters_action.tsx +++ b/x-pack/plugins/ml/public/ui_actions/apply_influencer_filters_action.tsx @@ -5,16 +5,17 @@ * 2.0. */ +import { DASHBOARD_APP_ID } from '@kbn/dashboard-plugin/public'; import type { Filter } from '@kbn/es-query'; import { FilterStateStore } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; +import type { EmbeddableApiContext } from '@kbn/presentation-publishing'; import type { UiActionsActionDefinition } from '@kbn/ui-actions-plugin/public'; import { firstValueFrom } from 'rxjs'; -import { DASHBOARD_APP_ID } from '@kbn/dashboard-plugin/public'; -import type { MlCoreSetup } from '../plugin'; +import { isAnomalySwimlaneSelectionTriggerContext } from './triggers'; import { SWIMLANE_TYPE, VIEW_BY_JOB_LABEL } from '../application/explorer/explorer_constants'; import type { SwimLaneDrilldownContext } from '../embeddables'; -import { ANOMALY_SWIMLANE_EMBEDDABLE_TYPE } from '../embeddables'; +import type { MlCoreSetup } from '../plugin'; import { CONTROLLED_BY_SWIM_LANE_FILTER } from './constants'; export const APPLY_INFLUENCER_FILTERS_ACTION = 'applyInfluencerFiltersAction'; @@ -27,7 +28,7 @@ export function createApplyInfluencerFiltersAction( return { id: 'apply-to-current-view', type: APPLY_INFLUENCER_FILTERS_ACTION, - getIconType(context: SwimLaneDrilldownContext): string { + getIconType(): string { return 'filter'; }, getDisplayName() { @@ -73,18 +74,18 @@ export function createApplyInfluencerFiltersAction( }) ); }, - async isCompatible({ embeddable, data }) { + async isCompatible(context: EmbeddableApiContext) { const [{ application }] = await getStartServices(); const appId = await firstValueFrom(application.currentAppId$); // Only compatible with view by influencer swim lanes and single selection return ( - embeddable.type === ANOMALY_SWIMLANE_EMBEDDABLE_TYPE && - data !== undefined && - data.type === SWIMLANE_TYPE.VIEW_BY && - data.viewByFieldName !== VIEW_BY_JOB_LABEL && - data.lanes.length === 1 && - supportedApps.includes(appId!) + supportedApps.includes(appId!) && + isAnomalySwimlaneSelectionTriggerContext(context) && + context.data !== undefined && + context.data.type === SWIMLANE_TYPE.VIEW_BY && + context.data.viewByFieldName !== VIEW_BY_JOB_LABEL && + context.data.lanes.length === 1 ); }, }; diff --git a/x-pack/plugins/ml/public/ui_actions/apply_time_range_action.tsx b/x-pack/plugins/ml/public/ui_actions/apply_time_range_action.tsx index 2b6071db2388c..30dc1b0d54c73 100644 --- a/x-pack/plugins/ml/public/ui_actions/apply_time_range_action.tsx +++ b/x-pack/plugins/ml/public/ui_actions/apply_time_range_action.tsx @@ -5,22 +5,32 @@ * 2.0. */ +import { DASHBOARD_APP_ID } from '@kbn/dashboard-plugin/public'; import { i18n } from '@kbn/i18n'; -import moment from 'moment'; +import type { EmbeddableApiContext } from '@kbn/presentation-publishing'; import type { UiActionsActionDefinition } from '@kbn/ui-actions-plugin/public'; -import { DASHBOARD_APP_ID } from '@kbn/dashboard-plugin/public'; +import moment from 'moment'; import { firstValueFrom } from 'rxjs'; +import { isAnomalySwimlaneSelectionTriggerContext } from './triggers'; +import type { AppStateSelectedCells } from '../application/explorer/explorer_utils'; +import type { AnomalySwimLaneEmbeddableApi } from '../embeddables/anomaly_swimlane/types'; import type { MlCoreSetup } from '../plugin'; -import type { SwimLaneDrilldownContext } from '../embeddables'; -import { ANOMALY_SWIMLANE_EMBEDDABLE_TYPE } from '../embeddables'; export const APPLY_TIME_RANGE_SELECTION_ACTION = 'applyTimeRangeSelectionAction'; const supportedApps = [DASHBOARD_APP_ID]; +export interface ApplyTimeRangeSelectionActionContext extends EmbeddableApiContext { + embeddable: AnomalySwimLaneEmbeddableApi; + /** + * Optional data provided by swim lane selection + */ + data?: AppStateSelectedCells; +} + export function createApplyTimeRangeSelectionAction( getStartServices: MlCoreSetup['getStartServices'] -): UiActionsActionDefinition { +): UiActionsActionDefinition { return { id: 'apply-time-range-selection', type: APPLY_TIME_RANGE_SELECTION_ACTION, @@ -37,9 +47,9 @@ export function createApplyTimeRangeSelectionAction( } const [, pluginStart] = await getStartServices(); const timefilter = pluginStart.data.query.timefilter.timefilter; - const { interval } = embeddable.getOutput(); + const { interval } = embeddable; - if (!interval) { + if (!interval.getValue()) { throw new Error('Interval is required to set a time range'); } @@ -53,14 +63,10 @@ export function createApplyTimeRangeSelectionAction( mode: 'absolute', }); }, - async isCompatible({ embeddable, data }) { + async isCompatible(context) { const [{ application }] = await getStartServices(); const appId = await firstValueFrom(application.currentAppId$); - return ( - embeddable.type === ANOMALY_SWIMLANE_EMBEDDABLE_TYPE && - data !== undefined && - supportedApps.includes(appId!) - ); + return isAnomalySwimlaneSelectionTriggerContext(context) && supportedApps.includes(appId!); }, }; } diff --git a/x-pack/plugins/ml/public/ui_actions/edit_swimlane_panel_action.tsx b/x-pack/plugins/ml/public/ui_actions/edit_swimlane_panel_action.tsx index c2933014e9feb..bdeea57f5e298 100644 --- a/x-pack/plugins/ml/public/ui_actions/edit_swimlane_panel_action.tsx +++ b/x-pack/plugins/ml/public/ui_actions/edit_swimlane_panel_action.tsx @@ -6,30 +6,36 @@ */ import { i18n } from '@kbn/i18n'; +import type { EmbeddableApiContext } from '@kbn/presentation-publishing'; import type { UiActionsActionDefinition } from '@kbn/ui-actions-plugin/public'; -import { ViewMode } from '@kbn/embeddable-plugin/public'; +import { IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; +import type { AnomalySwimLaneEmbeddableApi } from '../embeddables/anomaly_swimlane/types'; import type { MlCoreSetup } from '../plugin'; -import type { EditSwimlanePanelContext } from '../embeddables'; -import { ANOMALY_SWIMLANE_EMBEDDABLE_TYPE } from '../embeddables'; +import { isSwimLaneEmbeddableContext } from '../embeddables/anomaly_swimlane/types'; export const EDIT_SWIMLANE_PANEL_ACTION = 'editSwimlanePanelAction'; +export type EditSwimlanePanelActionContext = EmbeddableApiContext & { + embeddable: AnomalySwimLaneEmbeddableApi; +}; + export function createEditSwimlanePanelAction( getStartServices: MlCoreSetup['getStartServices'] -): UiActionsActionDefinition { +): UiActionsActionDefinition { return { id: 'edit-anomaly-swimlane', type: EDIT_SWIMLANE_PANEL_ACTION, - getIconType(context): string { + order: 50, + getIconType(): string { return 'pencil'; }, getDisplayName: () => i18n.translate('xpack.ml.actions.editSwimlaneTitle', { defaultMessage: 'Edit swim lane', }), - async execute({ embeddable }) { - if (!embeddable) { - throw new Error('Not possible to execute an action without the embeddable context'); + async execute(context) { + if (!isSwimLaneEmbeddableContext(context)) { + throw new IncompatibleActionError(); } const [coreStart, deps] = await getStartServices(); @@ -39,20 +45,24 @@ export function createEditSwimlanePanelAction( '../embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout' ); - const result = await resolveAnomalySwimlaneUserInput( - coreStart, - deps.data.dataViews, - embeddable.getInput() - ); - embeddable.updateInput(result); + const { jobIds, viewBy, swimlaneType, panelTitle } = context.embeddable; + + const result = await resolveAnomalySwimlaneUserInput(coreStart, deps.data.dataViews, { + jobIds: jobIds.getValue(), + swimlaneType: swimlaneType.getValue(), + viewBy: viewBy.getValue(), + title: panelTitle?.getValue(), + }); + + context.embeddable.updateUserInput(result); + context.embeddable.setPanelTitle(result.panelTitle); } catch (e) { return Promise.reject(); } }, - async isCompatible({ embeddable }) { + async isCompatible(context: EmbeddableApiContext) { return ( - embeddable.type === ANOMALY_SWIMLANE_EMBEDDABLE_TYPE && - embeddable.getInput().viewMode === ViewMode.EDIT + isSwimLaneEmbeddableContext(context) && context.embeddable.viewMode?.getValue() === 'edit' ); }, }; diff --git a/x-pack/plugins/ml/public/ui_actions/index.ts b/x-pack/plugins/ml/public/ui_actions/index.ts index bdbd5f3f3e858..e55b1fc1c7b00 100644 --- a/x-pack/plugins/ml/public/ui_actions/index.ts +++ b/x-pack/plugins/ml/public/ui_actions/index.ts @@ -6,31 +6,31 @@ */ import type { CoreSetup } from '@kbn/core/public'; -import type { UiActionsSetup } from '@kbn/ui-actions-plugin/public'; import { CONTEXT_MENU_TRIGGER } from '@kbn/embeddable-plugin/public'; import { CREATE_PATTERN_ANALYSIS_TO_ML_AD_JOB_TRIGGER } from '@kbn/ml-ui-actions'; +import type { UiActionsSetup } from '@kbn/ui-actions-plugin/public'; +import type { MlPluginStart, MlStartDependencies } from '../plugin'; +import { createApplyEntityFieldFiltersAction } from './apply_entity_filters_action'; +import { createApplyInfluencerFiltersAction } from './apply_influencer_filters_action'; +import { createApplyTimeRangeSelectionAction } from './apply_time_range_action'; +import { createClearSelectionAction } from './clear_selection_action'; +import { createEditAnomalyChartsPanelAction } from './edit_anomaly_charts_panel_action'; import { createEditSwimlanePanelAction } from './edit_swimlane_panel_action'; -import { createOpenInExplorerAction } from './open_in_anomaly_explorer_action'; -import { createVisToADJobAction } from './open_vis_in_ml_action'; import { createCategorizationADJobAction, createCategorizationADJobTrigger, } from './open_create_categorization_job_action'; -import type { MlPluginStart, MlStartDependencies } from '../plugin'; -import { createApplyInfluencerFiltersAction } from './apply_influencer_filters_action'; +import { createOpenInExplorerAction } from './open_in_anomaly_explorer_action'; +import { createVisToADJobAction } from './open_vis_in_ml_action'; import { entityFieldSelectionTrigger, EXPLORER_ENTITY_FIELD_SELECTION_TRIGGER, - SWIM_LANE_SELECTION_TRIGGER, swimLaneSelectionTrigger, + SWIM_LANE_SELECTION_TRIGGER, } from './triggers'; -import { createApplyTimeRangeSelectionAction } from './apply_time_range_action'; -import { createClearSelectionAction } from './clear_selection_action'; -import { createEditAnomalyChartsPanelAction } from './edit_anomaly_charts_panel_action'; -import { createApplyEntityFieldFiltersAction } from './apply_entity_filters_action'; +export { APPLY_INFLUENCER_FILTERS_ACTION } from './apply_influencer_filters_action'; export { APPLY_TIME_RANGE_SELECTION_ACTION } from './apply_time_range_action'; export { EDIT_SWIMLANE_PANEL_ACTION } from './edit_swimlane_panel_action'; -export { APPLY_INFLUENCER_FILTERS_ACTION } from './apply_influencer_filters_action'; export { OPEN_IN_ANOMALY_EXPLORER_ACTION } from './open_in_anomaly_explorer_action'; export { CREATE_LENS_VIS_TO_ML_AD_JOB_ACTION } from './open_vis_in_ml_action'; export { SWIM_LANE_SELECTION_TRIGGER }; @@ -53,18 +53,14 @@ export function registerMlUiActions( const categorizationADJobAction = createCategorizationADJobAction(core.getStartServices); // Register actions - uiActions.registerAction(editSwimlanePanelAction); - uiActions.registerAction(applyInfluencerFiltersAction); uiActions.registerAction(applyEntityFieldFilterAction); uiActions.registerAction(applyTimeRangeSelectionAction); - uiActions.registerAction(clearSelectionAction); - uiActions.registerAction(editExplorerPanelAction); uiActions.registerAction(categorizationADJobAction); // Assign triggers - uiActions.attachAction(CONTEXT_MENU_TRIGGER, editSwimlanePanelAction.id); - uiActions.attachAction(CONTEXT_MENU_TRIGGER, editExplorerPanelAction.id); - uiActions.attachAction(CONTEXT_MENU_TRIGGER, openInExplorerAction.id); + uiActions.addTriggerAction(CONTEXT_MENU_TRIGGER, editSwimlanePanelAction); + uiActions.addTriggerAction(CONTEXT_MENU_TRIGGER, editExplorerPanelAction); + uiActions.addTriggerAction(CONTEXT_MENU_TRIGGER, openInExplorerAction); uiActions.registerTrigger(swimLaneSelectionTrigger); uiActions.registerTrigger(entityFieldSelectionTrigger); diff --git a/x-pack/plugins/ml/public/ui_actions/open_in_anomaly_explorer_action.tsx b/x-pack/plugins/ml/public/ui_actions/open_in_anomaly_explorer_action.tsx index e955245adec86..d9a0d8dc060ba 100644 --- a/x-pack/plugins/ml/public/ui_actions/open_in_anomaly_explorer_action.tsx +++ b/x-pack/plugins/ml/public/ui_actions/open_in_anomaly_explorer_action.tsx @@ -10,42 +10,22 @@ import { i18n } from '@kbn/i18n'; import type { MlEntityField } from '@kbn/ml-anomaly-utils'; import { ML_ENTITY_FIELD_OPERATIONS } from '@kbn/ml-anomaly-utils'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; -import type { - EmbeddableApiContext, - HasParentApi, - HasType, - PublishesUnifiedSearch, - PublishingSubject, -} from '@kbn/presentation-publishing'; -import { apiHasType, apiIsOfType } from '@kbn/presentation-publishing'; -import { createAction } from '@kbn/ui-actions-plugin/public'; +import type { EmbeddableApiContext } from '@kbn/presentation-publishing'; +import { apiIsOfType } from '@kbn/presentation-publishing'; +import type { UiActionsActionDefinition } from '@kbn/ui-actions-plugin/public'; import type { SerializableRecord } from '@kbn/utility-types'; import { ML_APP_LOCATOR } from '../../common/constants/locator'; import type { ExplorerAppState } from '../../common/types/locator'; import type { AppStateSelectedCells } from '../application/explorer/explorer_utils'; -import type { - AnomalyExplorerChartsEmbeddableType, - AnomalySwimLaneEmbeddableType, -} from '../embeddables'; -import { - ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE, - ANOMALY_SWIMLANE_EMBEDDABLE_TYPE, -} from '../embeddables'; +import type { MlEmbeddableBaseApi } from '../embeddables'; +import { ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE } from '../embeddables'; +import type { AnomalyChartsEmbeddableApi } from '../embeddables/anomaly_charts/types'; +import type { AnomalySwimLaneEmbeddableApi } from '../embeddables/anomaly_swimlane/types'; import type { MlCoreSetup } from '../plugin'; -import type { JobId } from '../shared'; - -export interface AnomalyChartsFieldSelectionApi { - entityFields: PublishingSubject; -} - -export interface SwimLaneDrilldownApi { - viewBy: PublishingSubject; - perPage: PublishingSubject; - fromPage: PublishingSubject; -} +import { isSwimLaneEmbeddableContext } from '../embeddables/anomaly_swimlane/types'; export interface OpenInAnomalyExplorerSwimLaneActionContext extends EmbeddableApiContext { - embeddable: OpenInAnomalyExplorerFromSwimLaneActionApi; + embeddable: AnomalySwimLaneEmbeddableApi; /** * Optional data provided by swim lane selection */ @@ -53,37 +33,15 @@ export interface OpenInAnomalyExplorerSwimLaneActionContext extends EmbeddableAp } export interface OpenInAnomalyExplorerAnomalyChartsActionContext extends EmbeddableApiContext { - embeddable: OpenInAnomalyExplorerFromAnomalyChartActionApi; + embeddable: AnomalyChartsEmbeddableApi; /** * Optional fields selected using anomaly charts */ data?: MlEntityField[]; } -export type OpenInAnomalyExplorerBaseActionApi = Partial< - HasParentApi & PublishesUnifiedSearch & { jobIds: JobId[] } ->; - -export type OpenInAnomalyExplorerFromSwimLaneActionApi = HasType & - OpenInAnomalyExplorerBaseActionApi & - SwimLaneDrilldownApi; - -export type OpenInAnomalyExplorerFromAnomalyChartActionApi = - HasType & - OpenInAnomalyExplorerBaseActionApi & - AnomalyChartsFieldSelectionApi; - export const OPEN_IN_ANOMALY_EXPLORER_ACTION = 'openInAnomalyExplorerAction'; -export function isSwimLaneEmbeddableContext( - arg: unknown -): arg is OpenInAnomalyExplorerSwimLaneActionContext { - return ( - isPopulatedObject(arg, ['embeddable']) && - apiIsOfType(arg.embeddable, ANOMALY_SWIMLANE_EMBEDDABLE_TYPE) - ); -} - export function isAnomalyChartsEmbeddableContext( arg: unknown ): arg is OpenInAnomalyExplorerAnomalyChartsActionContext { @@ -93,17 +51,19 @@ export function isAnomalyChartsEmbeddableContext( ); } -export const isApiCompatible = (api: unknown | null): api is OpenInAnomalyExplorerBaseActionApi => - Boolean(apiHasType(api)); - -const getTimeRange = (embeddable: OpenInAnomalyExplorerBaseActionApi): TimeRange | undefined => { +const getTimeRange = (embeddable: MlEmbeddableBaseApi): TimeRange | undefined => { return embeddable.timeRange$?.getValue() ?? embeddable.parentApi?.timeRange$?.getValue(); }; -export function createOpenInExplorerAction(getStartServices: MlCoreSetup['getStartServices']) { - return createAction({ +export function createOpenInExplorerAction( + getStartServices: MlCoreSetup['getStartServices'] +): UiActionsActionDefinition< + OpenInAnomalyExplorerSwimLaneActionContext | OpenInAnomalyExplorerAnomalyChartsActionContext +> { + return { id: 'open-in-anomaly-explorer', type: OPEN_IN_ANOMALY_EXPLORER_ACTION, + order: 40, getIconType(): string { return 'visTable'; }, @@ -124,7 +84,7 @@ export function createOpenInExplorerAction(getStartServices: MlCoreSetup['getSta return locator.getUrl({ page: 'explorer', pageState: { - jobIds, + jobIds: jobIds.getValue(), timeRange: getTimeRange(embeddable), mlExplorerSwimlane: { viewByFromPage: fromPage.getValue(), @@ -177,7 +137,7 @@ export function createOpenInExplorerAction(getStartServices: MlCoreSetup['getSta return locator.getUrl({ page: 'explorer', pageState: { - jobIds, + jobIds: jobIds.getValue(), timeRange: getTimeRange(embeddable), // @ts-ignore QueryDslQueryContainer is not compatible with SerializableRecord ...(mlExplorerFilter ? ({ mlExplorerFilter } as SerializableRecord) : {}), @@ -199,5 +159,5 @@ export function createOpenInExplorerAction(getStartServices: MlCoreSetup['getSta async isCompatible(context: EmbeddableApiContext) { return isSwimLaneEmbeddableContext(context) || isAnomalyChartsEmbeddableContext(context); }, - }); + }; } diff --git a/x-pack/plugins/ml/public/ui_actions/triggers.ts b/x-pack/plugins/ml/public/ui_actions/triggers.ts index d13af630388e3..049f8544f0e95 100644 --- a/x-pack/plugins/ml/public/ui_actions/triggers.ts +++ b/x-pack/plugins/ml/public/ui_actions/triggers.ts @@ -6,6 +6,10 @@ */ import type { Trigger } from '@kbn/ui-actions-plugin/public'; +import type { EmbeddableApiContext } from '@kbn/presentation-publishing'; +import type { AppStateSelectedCells } from '../application/explorer/explorer_utils'; +import type { AnomalySwimLaneEmbeddableApi } from '../embeddables/anomaly_swimlane/types'; +import { isSwimLaneEmbeddableContext } from '../embeddables/anomaly_swimlane/types'; export const SWIM_LANE_SELECTION_TRIGGER = 'SWIM_LANE_SELECTION_TRIGGER'; @@ -25,3 +29,17 @@ export const entityFieldSelectionTrigger: Trigger = { title: '', description: 'Entity field selection triggered', }; + +export interface AnomalySwimLaneSelectionTriggerContext extends EmbeddableApiContext { + embeddable: AnomalySwimLaneEmbeddableApi; + /** + * Data provided by swim lane selection + */ + data: AppStateSelectedCells; +} + +export const isAnomalySwimlaneSelectionTriggerContext = ( + context: unknown +): context is AnomalySwimLaneSelectionTriggerContext => { + return isSwimLaneEmbeddableContext(context) && context.data !== undefined; +}; From 09a9f71b89f0b5afa8c6608065631145c0504fbf Mon Sep 17 00:00:00 2001 From: Alex Szabo Date: Fri, 22 Mar 2024 11:38:00 +0100 Subject: [PATCH 47/90] [Ops/BK] Migrate serverless-release (#179063) Candidate for the first buildkite pipeline to be migrated from `kibana-buildkite` to the elastic-wide system. The pipeline represented is: https://buildkite.com/elastic/kibana-serverless-release-1 Quirk: - When the pipeline was created, another pipeline was created (that's since now been removed) with the same name, so this was assigned a `-1` at the end. Hopefully not a problem when we're considering the takeover This PR contains: - `kibana-serverless-release.yml` - an automatic rewrite of the pipeline resource from https://github.com/elastic/kibana-buildkite/blob/main/pipelines/kibana-serverless-release.tf - `locations.yml` - since we collect the pipelines in such a file to avoid bloating `catalog-info.yaml`, the location needs to be updated - `create_deployment_tag.yml` - updates the pipeline implementations with agent targeting rules (since we no longer can use (https://github.com/elastic/buildkite-agent-manager) --------- Co-authored-by: Jon --- .../kibana-serverless-release.yml | 42 +++++++++++++++++++ .../locations.yml | 1 + .../create_deployment_tag.yml | 5 ++- 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 .buildkite/pipeline-resource-definitions/kibana-serverless-release.yml diff --git a/.buildkite/pipeline-resource-definitions/kibana-serverless-release.yml b/.buildkite/pipeline-resource-definitions/kibana-serverless-release.yml new file mode 100644 index 0000000000000..2be61c32c94cf --- /dev/null +++ b/.buildkite/pipeline-resource-definitions/kibana-serverless-release.yml @@ -0,0 +1,42 @@ +# yaml-language-server: $schema=https://gist.githubusercontent.com/elasticmachine/988b80dae436cafea07d9a4a460a011d/raw/rre.schema.json +apiVersion: backstage.io/v1alpha1 +kind: Resource +metadata: + name: buildkite-pipeline-serverless-release + description: Initiate kibana serverless releases + links: + - title: Pipeline + url: https://buildkite.com/elastic/kibana-serverless-release-1 +spec: + type: buildkite-pipeline + owner: 'group:kibana-operations' + system: buildkite + implementation: + apiVersion: buildkite.elastic.dev/v1 + kind: Pipeline + metadata: + name: kibana / serverless / release + description: Initiate kibana serverless releases + spec: + env: + SLACK_NOTIFICATIONS_CHANNEL: '#kibana-operations-alerts' + ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'false' + default_branch: main + repository: elastic/kibana + pipeline_file: .buildkite/pipelines/serverless_deployment/create_deployment_tag.yml + provider_settings: + build_branches: false + build_pull_requests: false + publish_commit_status: false + trigger_mode: none + build_tags: false + teams: + kibana-release-operators: + access_level: MANAGE_BUILD_AND_READ + schedules: + Weekly automated promotion to QA: + cronline: 0 6 * * 1 + message: Weekly automated promotion to QA + env: + AUTO_SELECT_COMMIT: 'true' + branch: main diff --git a/.buildkite/pipeline-resource-definitions/locations.yml b/.buildkite/pipeline-resource-definitions/locations.yml index 30c1ffc34e41e..ee90785fd1e88 100644 --- a/.buildkite/pipeline-resource-definitions/locations.yml +++ b/.buildkite/pipeline-resource-definitions/locations.yml @@ -7,3 +7,4 @@ spec: type: url targets: - https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-migration-staging.yml + - https://github.com/elastic/kibana/blob/main/.buildkite/pipeline-resource-definitions/kibana-serverless-release.yml diff --git a/.buildkite/pipelines/serverless_deployment/create_deployment_tag.yml b/.buildkite/pipelines/serverless_deployment/create_deployment_tag.yml index 10ecc5590087f..528498469fca5 100644 --- a/.buildkite/pipelines/serverless_deployment/create_deployment_tag.yml +++ b/.buildkite/pipelines/serverless_deployment/create_deployment_tag.yml @@ -1,7 +1,10 @@ ## Creates deploy@ tag on Kibana agents: - queue: kibana-default + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-qa + provider: gcp + machineType: n2-standard-2 steps: - label: "List potential commits" From 59386baf44804d07553cfcfe332ed9b7b148566b Mon Sep 17 00:00:00 2001 From: Maryam Saeidi Date: Fri, 22 Mar 2024 11:39:55 +0100 Subject: [PATCH 48/90] [Metric threshold] Fix bug in loading the metric threshold alert details page (#179219) Similar https://github.com/elastic/kibana/issues/175922 ## Summary Fix the metric threshold alert details page by removing unnecessary dependencies. **Note** This page is disabled behind this feature flag: `xpack.observability.unsafe.alertDetails.metrics.enabled` |Before|After| |---|---| |![image](https://github.com/elastic/kibana/assets/12370520/8acdc250-1260-4a46-ac46-3f4e359b7d8a)|![image](https://github.com/elastic/kibana/assets/12370520/3760b4c9-f714-4d76-9b5f-a3d3323311b1)| --- .../metric_threshold/components/alert_details_app_section.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/alert_details_app_section.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/alert_details_app_section.tsx index 165edd080e45c..6ededb941a589 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/alert_details_app_section.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/alert_details_app_section.tsx @@ -102,7 +102,7 @@ export function AlertDetailsAppSection({ ), }, ]); - }, [alert, rule, ruleLink, setAlertSummaryFields]); + }, [rule, ruleLink, setAlertSummaryFields]); return !!rule.params.criteria ? ( From a1213a564120a3898837acf5f6ff822f6e74ee4c Mon Sep 17 00:00:00 2001 From: Gloria Hornero Date: Fri, 22 Mar 2024 12:34:49 +0100 Subject: [PATCH 49/90] [Security Solution][Explore] Cypress last adjustments for MKI (#179180) ## Summary After executing the tests at the MKI pipeline I saw that: - One test was failing because in cloud there is a default SMTP connector that cannot be deleted, and we were trying to do so. - Author name when creating a case, is different. In this PR we are fixing the above. --- .../cypress/e2e/explore/cases/creation.cy.ts | 14 +++++++------- .../cypress/tasks/api_calls/common.ts | 12 ++++++++---- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts index 9da58cc8e406e..d6158c21eafa0 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts @@ -52,9 +52,13 @@ import { login } from '../../../tasks/login'; import { visit, visitWithTimeRange } from '../../../tasks/navigation'; import { CASES_URL, OVERVIEW_URL } from '../../../urls/navigation'; -import { ELASTICSEARCH_USERNAME } from '../../../env_var_names_constants'; +import { CLOUD_SERVERLESS, ELASTICSEARCH_USERNAME } from '../../../env_var_names_constants'; import { deleteCases } from '../../../tasks/api_calls/cases'; +// https://github.com/elastic/kibana/issues/179231 +const isCloudServerless = Cypress.env(CLOUD_SERVERLESS); +const username = isCloudServerless ? 'admin' : Cypress.env(ELASTICSEARCH_USERNAME); + // Tracked by https://github.com/elastic/security-team/issues/7696 describe('Cases', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { @@ -109,12 +113,8 @@ describe('Cases', { tags: ['@ess', '@serverless'] }, () => { 'have.text', `${this.mycase.description} ${this.mycase.timeline.title}` ); - cy.get(CASE_DETAILS_USERNAMES) - .eq(REPORTER) - .should('contain', Cypress.env(ELASTICSEARCH_USERNAME)); - cy.get(CASE_DETAILS_USERNAMES) - .eq(PARTICIPANTS) - .should('contain', Cypress.env(ELASTICSEARCH_USERNAME)); + cy.get(CASE_DETAILS_USERNAMES).eq(REPORTER).should('contain', username); + cy.get(CASE_DETAILS_USERNAMES).eq(PARTICIPANTS).should('contain', username); cy.get(CASE_DETAILS_TAGS).should('have.text', expectedTags); EXPECTED_METRICS.forEach((metric) => { diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/common.ts b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/common.ts index 897a0a3a0ec8e..331a7700db618 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/common.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/common.ts @@ -23,6 +23,8 @@ export const API_HEADERS = Object.freeze({ [ELASTIC_HTTP_VERSION_HEADER]: [INITIAL_REST_VERSION], }); +export const INTERNAL_CLOUD_CONNECTORS = ['Elastic-Cloud-SMTP']; + export const rootRequest = ({ headers: optionHeaders, ...restOptions @@ -108,10 +110,12 @@ export const deleteConnectors = () => { return connector.id; }); ids.forEach((id) => { - rootRequest({ - method: 'DELETE', - url: `api/actions/connector/${id}`, - }); + if (!INTERNAL_CLOUD_CONNECTORS.includes(id)) { + rootRequest({ + method: 'DELETE', + url: `api/actions/connector/${id}`, + }); + } }); } }); From c6f921e687c7d2919f86fbdf67f63cd8e6e3a042 Mon Sep 17 00:00:00 2001 From: Xavier Mouligneau Date: Fri, 22 Mar 2024 07:36:48 -0400 Subject: [PATCH 50/90] [RAM] Limit useEffect to calculate view in app URL (#179197) ## Summary Fix -> https://github.com/elastic/kibana/issues/178547 ### 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 --- .../alerts/components/alert_actions.test.tsx | 39 ++++++++++++++++++- .../pages/alerts/components/alert_actions.tsx | 13 ++++++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.test.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.test.tsx index ecc503dca594e..1122f190f93a7 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.test.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.test.tsx @@ -13,7 +13,6 @@ import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assist import { AlertActions, ObservabilityAlertActionsProps } from './alert_actions'; import { inventoryThresholdAlertEs } from '../../../rules/fixtures/example_alerts'; import { RULE_DETAILS_PAGE_ID } from '../../rule_details/constants'; -import { createObservabilityRuleTypeRegistryMock } from '../../../rules/observability_rule_type_registry_mock'; import * as pluginContext from '../../../hooks/use_plugin_context'; import { ConfigSchema, ObservabilityPublicPluginsStart } from '../../../plugin'; import { AppMountParameters, CoreStart } from '@kbn/core/public'; @@ -25,6 +24,7 @@ import { waitFor } from '@testing-library/react'; import { AlertsTableQueryContext } from '@kbn/triggers-actions-ui-plugin/public/application/sections/alerts_table/contexts/alerts_table_context'; import { Router } from '@kbn/shared-ux-router'; import { createMemoryHistory } from 'history'; +import { ObservabilityRuleTypeRegistry } from '../../../rules/create_observability_rule_type_registry'; const refresh = jest.fn(); const caseHooksReturnedValue = { @@ -52,7 +52,8 @@ jest.mock('../../../utils/kibana_react', () => ({ __esModule: true, useKibana: jest.fn(() => mockUseKibanaReturnValue), })); - +const prependMock = jest.fn().mockImplementation((args) => args); +mockUseKibanaReturnValue.services.http.basePath.prepend = prependMock; jest.mock('@kbn/triggers-actions-ui-plugin/public/common/lib/kibana/kibana_react', () => ({ useKibana: jest.fn(() => ({ services: { @@ -71,6 +72,17 @@ const config = { }, } as ConfigSchema; +const getFormatterMock = jest.fn(); +const createRuleTypeRegistryMock = () => ({ + getFormatter: getFormatterMock, + registerFormatter: () => {}, + list: () => ['ruleType1', 'ruleType2'], +}); + +export const createObservabilityRuleTypeRegistryMock = () => + createRuleTypeRegistryMock() as ObservabilityRuleTypeRegistry & + ReturnType; + jest.spyOn(pluginContext, 'usePluginContext').mockImplementation(() => ({ appMountParameters: {} as AppMountParameters, core: {} as CoreStart, @@ -84,6 +96,7 @@ jest.spyOn(pluginContext, 'usePluginContext').mockImplementation(() => ({ describe('ObservabilityActions component', () => { beforeEach(() => { jest.clearAllMocks(); + getFormatterMock.mockReturnValue(jest.fn().mockReturnValue('a reason')); }); const setup = async (pageId: string) => { @@ -214,4 +227,26 @@ describe('ObservabilityActions component', () => { 0 ); }); + + it('should show a valid url when clicking "View in app"', async () => { + getFormatterMock.mockReturnValue( + jest.fn().mockReturnValue({ + reason: 'a reason', + link: 'http://localhost:5620/app/o11y/log-explorer', + hasBasePath: false, + }) + ); + const wrapper = await setup(RULE_DETAILS_PAGE_ID); + + expect( + wrapper.find('[data-test-subj="o11yAlertActionsButton"]').first().getElement().props + ).toEqual(expect.objectContaining({ href: 'http://localhost:5620/app/o11y/log-explorer' })); + + prependMock.mockClear(); + + await waitFor(() => { + wrapper.find('[data-test-subj="o11yAlertActionsButton"]').first().simulate('mouseOver'); + expect(prependMock).toBeCalledTimes(1); + }); + }); }); diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.tsx index 2c840babd21ef..c98cb0d82a44c 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.tsx @@ -90,7 +90,17 @@ export function AlertActions({ } else { setViewInAppUrl(alertLink); } - }, [observabilityAlert.hasBasePath, observabilityAlert.link, prepend]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const handleViewInAppUrl = useCallback(() => { + const alertLink = observabilityAlert.link as unknown as string; + if (!observabilityAlert.hasBasePath) { + setViewInAppUrl(prepend(alertLink ?? '')); + } else { + setViewInAppUrl(alertLink); + } + }, [observabilityAlert.link, observabilityAlert.hasBasePath, prepend]); const [isPopoverOpen, setIsPopoverOpen] = useState(false); @@ -201,6 +211,7 @@ export function AlertActions({ defaultMessage: 'View in app', })} color="text" + onMouseOver={handleViewInAppUrl} href={viewInAppUrl} iconType="eye" size="s" From 3069efd3875b7b8bd8855caf199f848df595265e Mon Sep 17 00:00:00 2001 From: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> Date: Fri, 22 Mar 2024 12:51:06 +0100 Subject: [PATCH 51/90] [Fleet] partial revert using default as output id, only for elasticsearch type (#179218) ## Summary Related to https://github.com/elastic/kibana/pull/178857 and https://github.com/elastic/kibana/issues/177927 It seems that using output id instead of "default" in full agent policy had a higher impact than expected. There are a few places where agent relies on the name "default". ([This](https://github.com/elastic/elastic-agent/pull/4454) and [this](https://github.com/elastic/elastic-agent/pull/4453) pr) Because of this, doing a partial revert, to keep using "default" for elasticsearch output type to avoid breaking change. However, for other types, using the output id. This will fix the original issue of remote output health reporting. I think it is a rarely used feature to use a non-elasticsearch output as default, so it shouldn't have a big impact to not use "default" output name for those. To verify: - create a remote es output and set as default (both data and monitoring) - create an agent policy that uses default output - enroll an agent - expect that the agent sends system and elastic-agent metrics/logs to remote es - verify that the remote es health badge shows up on UI - set elasticsearch output back as default - verify that the agent policy has it as "default" in outputs section image image 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 --- .../full_agent_policy.test.ts.snap | 28 +++++----- .../agent_policies/full_agent_policy.test.ts | 56 ++++++++++++++----- .../agent_policies/full_agent_policy.ts | 11 +++- 3 files changed, 65 insertions(+), 30 deletions(-) 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 21192a1158009..86f8126c1c45a 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 @@ -12,7 +12,7 @@ Object { "logs": false, "metrics": true, "namespace": "default", - "use_output": "test-id", + "use_output": "default", }, "protection": Object { "enabled": false, @@ -35,7 +35,7 @@ Object { ], }, }, - "test-id": Object { + "default": Object { "_elastic_agent_checks": Object { "cluster": Array [ "monitor", @@ -61,7 +61,7 @@ Object { "preset": "balanced", "type": "elasticsearch", }, - "test-id": Object { + "default": Object { "hosts": Array [ "http://127.0.0.1:9201", ], @@ -106,6 +106,13 @@ Object { "id": "agent-policy", "inputs": Array [], "output_permissions": Object { + "default": Object { + "_elastic_agent_checks": Object { + "cluster": Array [ + "monitor", + ], + }, + }, "monitoring-output-id": Object { "_elastic_agent_checks": Object { "cluster": Array [ @@ -123,25 +130,18 @@ Object { ], }, }, - "test-id": Object { - "_elastic_agent_checks": Object { - "cluster": Array [ - "monitor", - ], - }, - }, }, "outputs": Object { - "monitoring-output-id": Object { + "default": Object { "hosts": Array [ - "http://es-monitoring.co:9201", + "http://127.0.0.1:9201", ], "preset": "balanced", "type": "elasticsearch", }, - "test-id": Object { + "monitoring-output-id": Object { "hosts": Array [ - "http://127.0.0.1:9201", + "http://es-monitoring.co:9201", ], "preset": "balanced", "type": "elasticsearch", 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 09bf54773509f..0ecd385c2516c 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 @@ -93,6 +93,15 @@ jest.mock('../output', () => { type: 'elasticsearch', hosts: ['http://127.0.0.1:9201'], }, + 'test-remote-id': { + id: 'test-remote-id', + is_default: true, + is_default_monitoring: true, + name: 'default', + // @ts-ignore + type: 'remote_elasticsearch', + hosts: ['http://127.0.0.1:9201'], + }, }; return { outputService: { @@ -197,7 +206,7 @@ describe('getFullAgentPolicy', () => { expect(agentPolicy).toMatchObject({ id: 'agent-policy', outputs: { - 'test-id': { + default: { type: 'elasticsearch', hosts: ['http://127.0.0.1:9201'], }, @@ -228,7 +237,7 @@ describe('getFullAgentPolicy', () => { expect(agentPolicy).toMatchObject({ id: 'agent-policy', outputs: { - 'test-id': { + default: { type: 'elasticsearch', hosts: ['http://127.0.0.1:9201'], }, @@ -244,7 +253,7 @@ describe('getFullAgentPolicy', () => { }, monitoring: { namespace: 'default', - use_output: 'test-id', + use_output: 'default', enabled: true, logs: true, metrics: false, @@ -264,7 +273,7 @@ describe('getFullAgentPolicy', () => { expect(agentPolicy).toMatchObject({ id: 'agent-policy', outputs: { - 'test-id': { + default: { type: 'elasticsearch', hosts: ['http://127.0.0.1:9201'], }, @@ -280,7 +289,7 @@ describe('getFullAgentPolicy', () => { }, monitoring: { namespace: 'default', - use_output: 'test-id', + use_output: 'default', enabled: true, logs: false, metrics: true, @@ -358,7 +367,7 @@ describe('getFullAgentPolicy', () => { expect(agentPolicy).toMatchSnapshot(); }); - it('should use output id from default policy id', async () => { + it('should use "default" as the default policy id', async () => { mockAgentPolicy({ id: 'policy', status: 'active', @@ -372,7 +381,24 @@ describe('getFullAgentPolicy', () => { const agentPolicy = await getFullAgentPolicy(savedObjectsClientMock.create(), 'agent-policy'); - expect(agentPolicy?.outputs['test-id']).toBeDefined(); + expect(agentPolicy?.outputs.default).toBeDefined(); + }); + + it('should use output id as the default policy id when remote elasticsearch', async () => { + mockAgentPolicy({ + id: 'policy', + status: 'active', + package_policies: [], + is_managed: false, + namespace: 'default', + revision: 1, + data_output_id: 'test-remote-id', + monitoring_output_id: 'test-remote-id', + }); + + const agentPolicy = await getFullAgentPolicy(savedObjectsClientMock.create(), 'agent-policy'); + + expect(agentPolicy?.outputs['test-remote-id']).toBeDefined(); }); it('should return the sourceURI from the agent policy', async () => { @@ -387,7 +413,7 @@ describe('getFullAgentPolicy', () => { expect(agentPolicy).toMatchObject({ id: 'agent-policy', outputs: { - 'test-id': { + default: { type: 'elasticsearch', hosts: ['http://127.0.0.1:9201'], }, @@ -403,7 +429,7 @@ describe('getFullAgentPolicy', () => { }, monitoring: { namespace: 'default', - use_output: 'test-id', + use_output: 'default', enabled: true, logs: false, metrics: true, @@ -427,7 +453,7 @@ describe('getFullAgentPolicy', () => { expect(agentPolicy).toMatchObject({ id: 'agent-policy', outputs: { - 'test-id': { + default: { type: 'elasticsearch', hosts: ['http://127.0.0.1:9201'], }, @@ -440,7 +466,7 @@ describe('getFullAgentPolicy', () => { agent: { monitoring: { namespace: 'default', - use_output: 'test-id', + use_output: 'default', enabled: true, logs: false, metrics: true, @@ -626,7 +652,7 @@ describe('getFullAgentPolicy', () => { }, ], type: 'test-logs', - use_output: 'test-id', + use_output: 'default', }, { data_stream: { @@ -652,11 +678,11 @@ describe('getFullAgentPolicy', () => { }, ], type: 'test-logs', - use_output: 'test-id', + use_output: 'default', }, ], output_permissions: { - 'test-id': { + default: { _elastic_agent_checks: { cluster: ['monitor'], }, @@ -679,7 +705,7 @@ describe('getFullAgentPolicy', () => { }, }, outputs: { - 'test-id': { + default: { hosts: ['http://127.0.0.1:9201'], preset: 'balanced', type: 'elasticsearch', 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 3a35eb9373cb6..ab277a97774d0 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 @@ -31,7 +31,12 @@ import type { PackageInfo, } from '../../../common/types'; import { agentPolicyService } from '../agent_policy'; -import { dataTypes, kafkaCompressionType, outputType } from '../../../common/constants'; +import { + dataTypes, + DEFAULT_OUTPUT, + kafkaCompressionType, + outputType, +} from '../../../common/constants'; import { getPackageInfo } from '../epm/packages'; import { pkgToPkgKey, splitPkgKey } from '../epm/registry'; @@ -490,8 +495,12 @@ export function transformOutputToFullPolicyOutput( /** * Get id used in full agent policy (sent to the agents) + * we use "default" for the default policy to avoid breaking changes */ function getOutputIdForAgentPolicy(output: Output) { + if (output.is_default && output.type === outputType.Elasticsearch) { + return DEFAULT_OUTPUT.name; + } return output.id; } From e2da5af35887529c56c000479b639a0f1fe9582a Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Fri, 22 Mar 2024 13:30:04 +0100 Subject: [PATCH 52/90] [ES|QL][UnifiedFieldList] Support field stats for ES|QL query (#178433) - Closes https://github.com/elastic/kibana/issues/174984 ## Summary This PR adds field stats for ES|QL mode in Discover. It will show "Top values" for `keyword`, `ip`, `boolean`, `number`, `version` fields and "Examples" for `text` and geo fields. Also this PR extends text based column's meta with `esType` to make it easier to differentiate between `keyword` and `text` columns when kibana type for both is `string`. This change also has a UI improvement: `k` token will be shown next to keyword fields in data grid column header and in doc viewer instead of `t` token. And it will be possible to filter by Keyword/Text types in the fields sidebar for ES|QL mode. Screenshot 2024-03-13 at 18 29 47 Screenshot 2024-03-13 at 18 30 01 Screenshot 2024-03-13 at 18 30 19 Screenshot 2024-03-13 at 18 30 13 Screenshot 2024-03-13 at 18 30 06 Screenshot 2024-03-13 at 18 31 50 Screenshot 2024-03-13 at 18 30 50 25x flaky test https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5470 ### 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 - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- api_docs/kbn_unified_data_table.devdocs.json | 2 +- packages/kbn-esql-utils/index.ts | 1 + packages/kbn-esql-utils/src/index.ts | 1 + .../utils/get_esql_with_safe_limit.test.ts | 31 ++ .../src/utils/get_esql_with_safe_limit.ts | 34 ++ packages/kbn-field-utils/index.ts | 1 + .../utils/get_text_based_column_icon_type.ts | 28 ++ packages/kbn-field-utils/tsconfig.json | 1 + packages/kbn-unified-data-table/index.ts | 2 +- .../data_table_columns.test.tsx.snap | 24 +- .../src/components/data_table.test.tsx | 7 +- .../src/components/data_table.tsx | 22 +- .../data_table_column_header.test.tsx | 7 +- .../components/data_table_column_header.tsx | 30 +- .../components/data_table_columns.test.tsx | 34 +- .../src/components/data_table_columns.tsx | 20 +- packages/kbn-unified-data-table/src/types.ts | 9 +- ...types.test.ts => get_columns_meta.test.ts} | 20 +- ...et_column_types.ts => get_columns_meta.ts} | 10 +- .../src/services/types.ts | 9 +- packages/kbn-unified-doc-viewer/tsconfig.json | 1 + .../field_popover/field_popover_header.tsx | 2 +- .../field_stats/field_stats.test.tsx | 3 +- .../components/field_stats/field_stats.tsx | 184 +++++++---- .../field_stats/field_top_values.tsx | 8 +- .../field_stats/field_top_values_bucket.tsx | 1 + .../kbn-unified-field-list/src/constants.ts | 13 + .../field_list_item.tsx | 12 +- .../field_examples_calculator.test.ts | 76 ++++- .../field_examples_calculator.ts | 43 +-- .../field_examples_calculator/index.ts | 9 + .../field_stats/field_stats_utils.test.ts | 1 + .../services/field_stats/field_stats_utils.ts | 53 ++- .../field_stats_utils_text_based.test.ts | 129 ++++++++ .../field_stats_utils_text_based.ts | 151 +++++++++ .../services/field_stats_text_based/index.ts | 9 + .../load_field_stats_text_based.ts | 104 ++++++ packages/kbn-unified-field-list/src/types.ts | 1 + .../src/utils/can_provide_stats.test.ts | 164 ++++++++++ .../src/utils/can_provide_stats.ts | 84 +++++ packages/kbn-unified-field-list/tsconfig.json | 1 + .../data/common/search/expressions/esql.ts | 2 +- .../components/layout/discover_documents.tsx | 14 +- .../components/sidebar/lib/get_field_list.ts | 1 + .../sidebar/lib/sidebar_reducer.test.ts | 7 +- .../discover_grid_flyout.tsx | 9 +- .../embeddable/saved_search_embeddable.tsx | 6 +- .../public/embeddable/saved_search_grid.tsx | 6 +- .../expression_types/specs/datatable.ts | 7 + .../components/doc_viewer_table/table.tsx | 16 +- .../group2/_data_grid_field_tokens.ts | 14 +- .../apps/discover/group3/_sidebar.ts | 11 +- .../discover/group3/_sidebar_field_stats.ts | 305 ++++++++++++++++++ test/functional/apps/discover/group3/index.ts | 1 + test/functional/page_objects/discover_page.ts | 5 +- .../page_objects/unified_field_list.ts | 7 + 56 files changed, 1485 insertions(+), 268 deletions(-) create mode 100644 packages/kbn-esql-utils/src/utils/get_esql_with_safe_limit.test.ts create mode 100644 packages/kbn-esql-utils/src/utils/get_esql_with_safe_limit.ts create mode 100644 packages/kbn-field-utils/src/utils/get_text_based_column_icon_type.ts rename packages/kbn-unified-data-table/src/utils/{get_column_types.test.ts => get_columns_meta.test.ts} (68%) rename packages/kbn-unified-data-table/src/utils/{get_column_types.ts => get_columns_meta.ts} (70%) create mode 100644 packages/kbn-unified-field-list/src/constants.ts rename packages/kbn-unified-field-list/src/services/{field_stats => field_examples_calculator}/field_examples_calculator.test.ts (74%) rename packages/kbn-unified-field-list/src/services/{field_stats => field_examples_calculator}/field_examples_calculator.ts (79%) create mode 100644 packages/kbn-unified-field-list/src/services/field_examples_calculator/index.ts create mode 100644 packages/kbn-unified-field-list/src/services/field_stats_text_based/field_stats_utils_text_based.test.ts create mode 100644 packages/kbn-unified-field-list/src/services/field_stats_text_based/field_stats_utils_text_based.ts create mode 100644 packages/kbn-unified-field-list/src/services/field_stats_text_based/index.ts create mode 100644 packages/kbn-unified-field-list/src/services/field_stats_text_based/load_field_stats_text_based.ts create mode 100644 packages/kbn-unified-field-list/src/utils/can_provide_stats.test.ts create mode 100644 packages/kbn-unified-field-list/src/utils/can_provide_stats.ts create mode 100644 test/functional/apps/discover/group3/_sidebar_field_stats.ts diff --git a/api_docs/kbn_unified_data_table.devdocs.json b/api_docs/kbn_unified_data_table.devdocs.json index c5ceadd632768..b8299aa351488 100644 --- a/api_docs/kbn_unified_data_table.devdocs.json +++ b/api_docs/kbn_unified_data_table.devdocs.json @@ -2581,4 +2581,4 @@ } ] } -} \ No newline at end of file +} diff --git a/packages/kbn-esql-utils/index.ts b/packages/kbn-esql-utils/index.ts index b4fc1f6548c69..1592777d136f3 100644 --- a/packages/kbn-esql-utils/index.ts +++ b/packages/kbn-esql-utils/index.ts @@ -14,5 +14,6 @@ export { removeDropCommandsFromESQLQuery, getIndexForESQLQuery, getInitialESQLQuery, + getESQLWithSafeLimit, TextBasedLanguages, } from './src'; diff --git a/packages/kbn-esql-utils/src/index.ts b/packages/kbn-esql-utils/src/index.ts index f2e537a240f77..58e241c1ebc6e 100644 --- a/packages/kbn-esql-utils/src/index.ts +++ b/packages/kbn-esql-utils/src/index.ts @@ -9,6 +9,7 @@ export { TextBasedLanguages } from './types'; export { getESQLAdHocDataview, getIndexForESQLQuery } from './utils/get_esql_adhoc_dataview'; export { getInitialESQLQuery } from './utils/get_initial_esql_query'; +export { getESQLWithSafeLimit } from './utils/get_esql_with_safe_limit'; export { getIndexPatternFromSQLQuery, getIndexPatternFromESQLQuery, diff --git a/packages/kbn-esql-utils/src/utils/get_esql_with_safe_limit.test.ts b/packages/kbn-esql-utils/src/utils/get_esql_with_safe_limit.test.ts new file mode 100644 index 0000000000000..a78dd9f9c0647 --- /dev/null +++ b/packages/kbn-esql-utils/src/utils/get_esql_with_safe_limit.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 { getESQLWithSafeLimit } from './get_esql_with_safe_limit'; + +const LIMIT = 10000; + +describe('getESQLWithSafeLimit()', () => { + it('should not add the limit', () => { + expect(getESQLWithSafeLimit('show info', LIMIT)).toBe('show info'); + expect(getESQLWithSafeLimit('row t = 5', LIMIT)).toBe('row t = 5'); + }); + + it('should add the limit', () => { + expect(getESQLWithSafeLimit(' from logs', LIMIT)).toBe('from logs | LIMIT 10000'); + expect(getESQLWithSafeLimit('FROM logs* | LIMIT 5', LIMIT)).toBe( + 'FROM logs* | LIMIT 10000| LIMIT 5' + ); + expect(getESQLWithSafeLimit('FROM logs* | SORT @timestamp | LIMIT 5', LIMIT)).toBe( + 'FROM logs* |SORT @timestamp | LIMIT 10000| LIMIT 5' + ); + expect(getESQLWithSafeLimit('from logs* | STATS MIN(a) BY b', LIMIT)).toBe( + 'from logs* | LIMIT 10000| STATS MIN(a) BY b' + ); + }); +}); diff --git a/packages/kbn-esql-utils/src/utils/get_esql_with_safe_limit.ts b/packages/kbn-esql-utils/src/utils/get_esql_with_safe_limit.ts new file mode 100644 index 0000000000000..e8b63b21dd1d4 --- /dev/null +++ b/packages/kbn-esql-utils/src/utils/get_esql_with_safe_limit.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 function getESQLWithSafeLimit(esql: string, limit: number): string { + if (!esql.trim().toLowerCase().startsWith('from')) { + return esql; + } + const parts = esql.split('|'); + + if (!parts.length) { + return esql; + } + + const fromCommandIndex = 0; + const sortCommandIndex = 1; + const index = + parts.length > 1 && parts[1].trim().toLowerCase().startsWith('sort') + ? sortCommandIndex + : fromCommandIndex; + + return parts + .map((part, i) => { + if (i === index) { + return `${part.trim()} | LIMIT ${limit}`; + } + return part; + }) + .join('|'); +} diff --git a/packages/kbn-field-utils/index.ts b/packages/kbn-field-utils/index.ts index 26dd359a359a1..643e22ce6450a 100644 --- a/packages/kbn-field-utils/index.ts +++ b/packages/kbn-field-utils/index.ts @@ -14,6 +14,7 @@ export { KNOWN_FIELD_TYPE_LIST, } from './src/utils/field_types'; +export { getTextBasedColumnIconType } from './src/utils/get_text_based_column_icon_type'; export { getFieldIconType } from './src/utils/get_field_icon_type'; export { getFieldType } from './src/utils/get_field_type'; export { getFieldTypeDescription } from './src/utils/get_field_type_description'; diff --git a/packages/kbn-field-utils/src/utils/get_text_based_column_icon_type.ts b/packages/kbn-field-utils/src/utils/get_text_based_column_icon_type.ts new file mode 100644 index 0000000000000..0ccad94674208 --- /dev/null +++ b/packages/kbn-field-utils/src/utils/get_text_based_column_icon_type.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { DatatableColumnMeta } from '@kbn/expressions-plugin/common'; +import { getFieldIconType } from './get_field_icon_type'; + +export function getTextBasedColumnIconType( + columnMeta: + | { + type: DatatableColumnMeta['type']; + esType?: DatatableColumnMeta['esType']; + } + | undefined + | null +): string | null { + return columnMeta && columnMeta.type + ? getFieldIconType({ + name: '', + type: columnMeta.type, + esTypes: columnMeta.esType ? [columnMeta.esType] : [], + }) + : null; +} diff --git a/packages/kbn-field-utils/tsconfig.json b/packages/kbn-field-utils/tsconfig.json index 9aaae0d119e68..4b75159b5f7fe 100644 --- a/packages/kbn-field-utils/tsconfig.json +++ b/packages/kbn-field-utils/tsconfig.json @@ -9,6 +9,7 @@ "@kbn/data-views-plugin", "@kbn/react-field", "@kbn/field-types", + "@kbn/expressions-plugin", ], "exclude": ["target/**/*"] } diff --git a/packages/kbn-unified-data-table/index.ts b/packages/kbn-unified-data-table/index.ts index 9cb8b67dc4b2e..f59b98cda99d9 100644 --- a/packages/kbn-unified-data-table/index.ts +++ b/packages/kbn-unified-data-table/index.ts @@ -17,7 +17,7 @@ export { type RowHeightSettingsProps, } from './src/components/row_height_settings'; export { getDisplayedColumns } from './src/utils/columns'; -export { getTextBasedColumnTypes } from './src/utils/get_column_types'; +export { getTextBasedColumnsMeta } from './src/utils/get_columns_meta'; export { ROWS_HEIGHT_OPTIONS } from './src/constants'; export { JSONCodeEditorCommonMemoized } from './src/components/json_code_editor/json_code_editor_common'; diff --git a/packages/kbn-unified-data-table/src/components/__snapshots__/data_table_columns.test.tsx.snap b/packages/kbn-unified-data-table/src/components/__snapshots__/data_table_columns.test.tsx.snap index 3c00afb1c1dd8..28d43dc69b6cd 100644 --- a/packages/kbn-unified-data-table/src/components/__snapshots__/data_table_columns.test.tsx.snap +++ b/packages/kbn-unified-data-table/src/components/__snapshots__/data_table_columns.test.tsx.snap @@ -1393,10 +1393,15 @@ Array [ "display": []); jest.mock('@kbn/cell-actions', () => ({ @@ -531,7 +532,7 @@ describe('UnifiedDataTable', () => { }, flattened: { test: jest.fn() }, }; - const columnTypesOverride = { testField: 'number ' }; + const columnsMetaOverride = { testField: { type: 'number' as DatatableColumnType } }; const renderDocumentViewMock = jest.fn((hit: DataTableRecord) => (
{hit.id}
)); @@ -540,7 +541,7 @@ describe('UnifiedDataTable', () => { ...getProps(), expandedDoc, setExpandedDoc: jest.fn(), - columnTypes: columnTypesOverride, + columnsMeta: columnsMetaOverride, renderDocumentView: renderDocumentViewMock, externalControlColumns: [testLeadingControlColumn], }); @@ -551,7 +552,7 @@ describe('UnifiedDataTable', () => { expandedDoc, getProps().rows, ['_source'], - columnTypesOverride + columnsMetaOverride ); }); diff --git a/packages/kbn-unified-data-table/src/components/data_table.tsx b/packages/kbn-unified-data-table/src/components/data_table.tsx index 6b488b16805be..f935f0ff7daac 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table.tsx @@ -49,7 +49,7 @@ import type { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; import { UnifiedDataTableSettings, ValueToStringConverter, - DataTableColumnTypes, + DataTableColumnsMeta, CustomCellRenderer, CustomGridColumnsConfiguration, CustomControlColumnConfiguration, @@ -124,10 +124,10 @@ export interface UnifiedDataTableProps { columns: string[]; /** * If not provided, types will be derived by default from the dataView field types. - * For displaying text-based search results, pass column types (which are available separately in the fetch request) down here. - * Check available utils in `utils/get_column_types.ts` + * For displaying text-based search results, pass columns meta (which are available separately in the fetch request) down here. + * Check available utils in `utils/get_columns_meta.ts` */ - columnTypes?: DataTableColumnTypes; + columnsMeta?: DataTableColumnsMeta; /** * Field tokens could be rendered in column header next to the field name. */ @@ -283,7 +283,7 @@ export interface UnifiedDataTableProps { hit: DataTableRecord, displayedRows: DataTableRecord[], displayedColumns: string[], - columnTypes?: DataTableColumnTypes + columnsMeta?: DataTableColumnsMeta ) => JSX.Element | undefined; /** * Optional value for providing configuration setting for enabling to display the complex fields in the table. Default is true. @@ -376,7 +376,7 @@ const CONTROL_COLUMN_IDS_DEFAULT = ['openDetails', 'select']; export const UnifiedDataTable = ({ ariaLabelledBy, columns, - columnTypes, + columnsMeta, showColumnTokens, configHeaderRowHeight, headerRowHeightState, @@ -637,11 +637,11 @@ export const UnifiedDataTable = ({ canPrependTimeFieldColumn( activeColumns, timeFieldName, - columnTypes, + columnsMeta, showTimeCol, isPlainRecord ), - [timeFieldName, isPlainRecord, showTimeCol, columnTypes] + [timeFieldName, isPlainRecord, showTimeCol, columnsMeta] ); const visibleColumns = useMemo( @@ -724,13 +724,13 @@ export const UnifiedDataTable = ({ onFilter, editField, visibleCellActions, - columnTypes, + columnsMeta, showColumnTokens, headerRowHeightLines, customGridColumnsConfiguration, }), [ - columnTypes, + columnsMeta, columnsCellActions, customGridColumnsConfiguration, dataView, @@ -1044,7 +1044,7 @@ export const UnifiedDataTable = ({ )} {canSetExpandedDoc && expandedDoc && - renderDocumentView!(expandedDoc, displayedRows, displayedColumns, columnTypes)} + renderDocumentView!(expandedDoc, displayedRows, displayedColumns, columnsMeta)} ); diff --git a/packages/kbn-unified-data-table/src/components/data_table_column_header.test.tsx b/packages/kbn-unified-data-table/src/components/data_table_column_header.test.tsx index 2420b1508cbf5..a9035b9fdafbc 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_column_header.test.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_column_header.test.tsx @@ -78,8 +78,11 @@ describe('DataTableColumnHeader', function () { = ({ columnDisplayName, showColumnTokens, columnName, - columnTypes, + columnsMeta, dataView, headerRowHeight, }) => { @@ -39,7 +39,7 @@ export const DataTableColumnHeader: React.FC = ({ {showColumnTokens && ( )} @@ -49,12 +49,12 @@ export const DataTableColumnHeader: React.FC = ({ }; const DataTableColumnToken: React.FC< - Pick + Pick > = (props) => { - const { columnName, columnTypes, dataView } = props; + const { columnName, columnsMeta, dataView } = props; const columnToken = useMemo( - () => getRenderedToken({ columnName, columnTypes, dataView }), - [columnName, columnTypes, dataView] + () => getRenderedToken({ columnName, columnsMeta, dataView }), + [columnName, columnsMeta, dataView] ); return columnToken ? ( @@ -73,16 +73,18 @@ const fieldIconCss: CSSObject = { verticalAlign: 'bottom' }; function getRenderedToken({ dataView, columnName, - columnTypes, -}: Pick) { + columnsMeta, +}: Pick) { if (!columnName || columnName === '_source') { return null; } // for text-based searches - if (columnTypes) { - return columnTypes[columnName] && columnTypes[columnName] !== 'unknown' ? ( // renders an icon or nothing - + if (columnsMeta) { + const columnMeta = columnsMeta[columnName]; + const columnIconType = getTextBasedColumnIconType(columnMeta); + return columnIconType && columnIconType !== 'unknown' ? ( // renders an icon or nothing + ) : null; } diff --git a/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx b/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx index b98f514690aee..e50a0073d31a2 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_columns.test.tsx @@ -6,9 +6,10 @@ * Side Public License, v 1. */ +import React from 'react'; import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import type { DataView } from '@kbn/data-views-plugin/public'; -import React from 'react'; +import type { DatatableColumnType } from '@kbn/expressions-plugin/common'; import { deserializeHeaderRowHeight, getEuiGridColumns, @@ -124,11 +125,14 @@ describe('Data table columns', function () { describe('canPrependTimeFieldColumn', () => { function buildColumnTypes(dataView: DataView) { - const columnTypes: Record = {}; + const columnsMeta: Record< + string, + { type: DatatableColumnType; esType?: string | undefined } + > = {}; for (const field of dataView.fields) { - columnTypes[field.name] = field.type; + columnsMeta[field.name] = { type: field.type as DatatableColumnType }; } - return columnTypes; + return columnsMeta; } describe('dataView with timeField', () => { @@ -190,16 +194,16 @@ describe('Data table columns', function () { it('should return false if _source column is passed but time field is not returned, text-based datasource', () => { // ... | DROP @timestamp test case - const columnTypes = buildColumnTypes(dataViewWithTimefieldMock); + const columnsMeta = buildColumnTypes(dataViewWithTimefieldMock); if (dataViewWithTimefieldMock.timeFieldName) { - delete columnTypes[dataViewWithTimefieldMock.timeFieldName]; + delete columnsMeta[dataViewWithTimefieldMock.timeFieldName]; } for (const showTimeCol of [true, false]) { expect( canPrependTimeFieldColumn( ['_source'], dataViewWithTimefieldMock.timeFieldName, - columnTypes, + columnsMeta, showTimeCol, true ) @@ -294,9 +298,9 @@ describe('Data table columns', function () { it('returns eui grid columns with tokens for custom column types', async () => { const actual = getEuiGridColumns({ showColumnTokens: true, - columnTypes: { - extension: 'number', - message: 'keyword', + columnsMeta: { + extension: { type: 'number' }, + message: { type: 'string', esType: 'keyword' }, }, columns, settings: {}, @@ -343,14 +347,14 @@ describe('Data table columns', function () { hasEditDataViewPermission: () => servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), onFilter: () => {}, - columnTypes: { - var_test: 'number', + columnsMeta: { + var_test: { type: 'number' }, }, }); expect(gridColumns[1].schema).toBe('string'); }); - it('returns eui grid with in memory sorting for text based languages and columns not on the columnTypes', async () => { + it('returns eui grid with in memory sorting for text based languages and columns not on the columnsMeta', async () => { const columnsNotInDataview = getVisibleColumns( ['var_test'], dataViewWithTimefieldMock, @@ -373,8 +377,8 @@ describe('Data table columns', function () { hasEditDataViewPermission: () => servicesMock.dataViewFieldEditor.userPermissions.editIndexPattern(), onFilter: () => {}, - columnTypes: { - var_test: 'number', + columnsMeta: { + var_test: { type: 'number' }, }, }); expect(gridColumns[1].schema).toBe('numeric'); diff --git a/packages/kbn-unified-data-table/src/components/data_table_columns.tsx b/packages/kbn-unified-data-table/src/components/data_table_columns.tsx index 985cf10a4e309..90cba4f6be4f9 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_columns.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_columns.tsx @@ -18,7 +18,7 @@ import { ToastsStart, IUiSettingsClient } from '@kbn/core/public'; import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; import { ExpandButton } from './data_table_expand_button'; import { ControlColumns, CustomGridColumnsConfiguration, UnifiedDataTableSettings } from '../types'; -import type { ValueToStringConverter, DataTableColumnTypes } from '../types'; +import type { ValueToStringConverter, DataTableColumnsMeta } from '../types'; import { buildCellActions } from './default_cell_actions'; import { getSchemaByKbnType } from './data_table_schema'; import { SelectButton } from './data_table_document_selection'; @@ -93,7 +93,7 @@ function buildEuiGridColumn({ editField, columnCellActions, visibleCellActions, - columnTypes, + columnsMeta, showColumnTokens, headerRowHeight, customGridColumnsConfiguration, @@ -113,7 +113,7 @@ function buildEuiGridColumn({ editField?: (fieldName: string) => void; columnCellActions?: EuiDataGridColumnCellAction[]; visibleCellActions?: number; - columnTypes?: DataTableColumnTypes; + columnsMeta?: DataTableColumnsMeta; showColumnTokens?: boolean; headerRowHeight?: number; customGridColumnsConfiguration?: CustomGridColumnsConfiguration; @@ -140,7 +140,7 @@ function buildEuiGridColumn({ : []; } - const columnType = columnTypes?.[columnName] ?? dataViewField?.type; + const columnType = columnsMeta?.[columnName]?.type ?? dataViewField?.type; const column: EuiDataGridColumn = { id: columnName, @@ -152,7 +152,7 @@ function buildEuiGridColumn({ dataView={dataView} columnName={columnName} columnDisplayName={columnDisplayName} - columnTypes={columnTypes} + columnsMeta={columnsMeta} showColumnTokens={showColumnTokens} headerRowHeight={headerRowHeight} /> @@ -241,7 +241,7 @@ export function getEuiGridColumns({ onFilter, editField, visibleCellActions, - columnTypes, + columnsMeta, showColumnTokens, headerRowHeightLines, customGridColumnsConfiguration, @@ -263,7 +263,7 @@ export function getEuiGridColumns({ onFilter: DocViewFilterFn; editField?: (fieldName: string) => void; visibleCellActions?: number; - columnTypes?: DataTableColumnTypes; + columnsMeta?: DataTableColumnsMeta; showColumnTokens?: boolean; headerRowHeightLines: number; customGridColumnsConfiguration?: CustomGridColumnsConfiguration; @@ -289,7 +289,7 @@ export function getEuiGridColumns({ onFilter, editField, visibleCellActions, - columnTypes, + columnsMeta, showColumnTokens, headerRowHeight, customGridColumnsConfiguration, @@ -300,7 +300,7 @@ export function getEuiGridColumns({ export function canPrependTimeFieldColumn( columns: string[], timeFieldName: string | undefined, - columnTypes: DataTableColumnTypes | undefined, + columnsMeta: DataTableColumnsMeta | undefined, showTimeCol: boolean, isPlainRecord: boolean ) { @@ -309,7 +309,7 @@ export function canPrependTimeFieldColumn( } if (isPlainRecord) { - return !!columnTypes && timeFieldName in columnTypes && columns.includes('_source'); + return !!columnsMeta && timeFieldName in columnsMeta && columns.includes('_source'); } return true; diff --git a/packages/kbn-unified-data-table/src/types.ts b/packages/kbn-unified-data-table/src/types.ts index 38d305d0c6177..8b958d5be3bfb 100644 --- a/packages/kbn-unified-data-table/src/types.ts +++ b/packages/kbn-unified-data-table/src/types.ts @@ -12,6 +12,7 @@ import type { DataTableRecord } from '@kbn/discover-utils/src/types'; import type { DataView } from '@kbn/data-views-plugin/common'; import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import { EuiDataGridControlColumn } from '@elastic/eui/src/components/datagrid/data_grid_types'; +import type { DatatableColumnMeta } from '@kbn/expressions-plugin/common'; /** * User configurable state of data grid, persisted in saved search @@ -33,7 +34,13 @@ export type ValueToStringConverter = ( /** * Custom column types per column name */ -export type DataTableColumnTypes = Record; +export type DataTableColumnsMeta = Record< + string, + { + type: DatatableColumnMeta['type']; + esType?: DatatableColumnMeta['esType']; + } +>; export type DataGridCellValueElementProps = EuiDataGridCellValueElementProps & { row: DataTableRecord; diff --git a/packages/kbn-unified-data-table/src/utils/get_column_types.test.ts b/packages/kbn-unified-data-table/src/utils/get_columns_meta.test.ts similarity index 68% rename from packages/kbn-unified-data-table/src/utils/get_column_types.test.ts rename to packages/kbn-unified-data-table/src/utils/get_columns_meta.test.ts index f26086607a966..ba06306422e95 100644 --- a/packages/kbn-unified-data-table/src/utils/get_column_types.test.ts +++ b/packages/kbn-unified-data-table/src/utils/get_columns_meta.test.ts @@ -6,12 +6,12 @@ * Side Public License, v 1. */ -import { getTextBasedColumnTypes } from './get_column_types'; +import { getTextBasedColumnsMeta } from './get_columns_meta'; describe('getColumnTypes', () => { - describe('getTextBasedColumnTypes', () => { + describe('getTextBasedColumnsMeta', () => { test('returns a correct column types map', async () => { - const result = getTextBasedColumnTypes([ + const result = getTextBasedColumnsMeta([ { id: '@timestamp', name: '@timestamp', @@ -24,6 +24,7 @@ describe('getColumnTypes', () => { name: 'agent.keyword', meta: { type: 'string', + esType: 'keyword', }, }, { @@ -36,9 +37,16 @@ describe('getColumnTypes', () => { ]); expect(result).toMatchInlineSnapshot(` Object { - "@timestamp": "date", - "agent.keyword": "string", - "bytes": "number", + "@timestamp": Object { + "type": "date", + }, + "agent.keyword": Object { + "esType": "keyword", + "type": "string", + }, + "bytes": Object { + "type": "number", + }, } `); }); diff --git a/packages/kbn-unified-data-table/src/utils/get_column_types.ts b/packages/kbn-unified-data-table/src/utils/get_columns_meta.ts similarity index 70% rename from packages/kbn-unified-data-table/src/utils/get_column_types.ts rename to packages/kbn-unified-data-table/src/utils/get_columns_meta.ts index edc8c1eb49ce5..0a1ab0bdc29cb 100644 --- a/packages/kbn-unified-data-table/src/utils/get_column_types.ts +++ b/packages/kbn-unified-data-table/src/utils/get_columns_meta.ts @@ -6,19 +6,19 @@ * Side Public License, v 1. */ -import type { DatatableColumn, DatatableColumnType } from '@kbn/expressions-plugin/common'; +import type { DatatableColumn, DatatableColumnMeta } from '@kbn/expressions-plugin/common'; -type TextBasedColumnTypes = Record; +type TextBasedColumnTypes = Record; /** - * Column types for text based searches + * Columns meta for text based searches * @param textBasedColumns */ -export const getTextBasedColumnTypes = ( +export const getTextBasedColumnsMeta = ( textBasedColumns: DatatableColumn[] ): TextBasedColumnTypes => { return textBasedColumns.reduce((map, next) => { - map[next.name] = next.meta.type; + map[next.name] = next.meta; return map; }, {}); }; diff --git a/packages/kbn-unified-doc-viewer/src/services/types.ts b/packages/kbn-unified-doc-viewer/src/services/types.ts index b67c61de6ae88..bcf64c817e887 100644 --- a/packages/kbn-unified-doc-viewer/src/services/types.ts +++ b/packages/kbn-unified-doc-viewer/src/services/types.ts @@ -9,6 +9,7 @@ import type { DataView, DataViewField } from '@kbn/data-views-plugin/public'; import type { AggregateQuery, Query } from '@kbn/es-query'; import type { DataTableRecord, IgnoredReason } from '@kbn/discover-utils/types'; +import type { DatatableColumnMeta } from '@kbn/expressions-plugin/common'; import { DocViewsRegistry } from './doc_views_registry'; export interface FieldMapping { @@ -34,7 +35,13 @@ export interface DocViewRenderProps { * If not provided, types will be derived by default from the dataView field types. * For displaying text-based search results, define column types (which are available separately in the fetch request) here. */ - columnTypes?: Record; + columnsMeta?: Record< + string, + { + type: DatatableColumnMeta['type']; + esType?: DatatableColumnMeta['esType']; + } + >; query?: Query | AggregateQuery; textBasedHits?: DataTableRecord[]; hideActionsColumn?: boolean; diff --git a/packages/kbn-unified-doc-viewer/tsconfig.json b/packages/kbn-unified-doc-viewer/tsconfig.json index e9429af74bd74..05bb4f1539598 100644 --- a/packages/kbn-unified-doc-viewer/tsconfig.json +++ b/packages/kbn-unified-doc-viewer/tsconfig.json @@ -24,5 +24,6 @@ "@kbn/i18n", "@kbn/react-field", "@kbn/field-utils", + "@kbn/expressions-plugin", ] } diff --git a/packages/kbn-unified-field-list/src/components/field_popover/field_popover_header.tsx b/packages/kbn-unified-field-list/src/components/field_popover/field_popover_header.tsx index 9700bb3da1cf1..43bebba6e660b 100644 --- a/packages/kbn-unified-field-list/src/components/field_popover/field_popover_header.tsx +++ b/packages/kbn-unified-field-list/src/components/field_popover/field_popover_header.tsx @@ -80,7 +80,7 @@ export const FieldPopoverHeader: React.FC = ({ <> - +
{field.displayName}
diff --git a/packages/kbn-unified-field-list/src/components/field_stats/field_stats.test.tsx b/packages/kbn-unified-field-list/src/components/field_stats/field_stats.test.tsx index 40a0d52e6cd13..fe60760e4bf44 100644 --- a/packages/kbn-unified-field-list/src/components/field_stats/field_stats.test.tsx +++ b/packages/kbn-unified-field-list/src/components/field_stats/field_stats.test.tsx @@ -33,7 +33,7 @@ const mockedServices = { uiSettings: coreMock.createStart().uiSettings, }; -describe('UnifiedFieldList ', () => { +describe('UnifiedFieldList FieldStats', () => { let defaultProps: FieldStatsWithKbnQuery; let dataView: DataView; @@ -467,6 +467,7 @@ describe('UnifiedFieldList ', () => { sampledDocuments: 1624, sampledValues: 3248, topValues: { + areExamples: true, buckets: [ { count: 1349, diff --git a/packages/kbn-unified-field-list/src/components/field_stats/field_stats.tsx b/packages/kbn-unified-field-list/src/components/field_stats/field_stats.tsx index c2d5fd0f32632..00c9d748515bf 100755 --- a/packages/kbn-unified-field-list/src/components/field_stats/field_stats.tsx +++ b/packages/kbn-unified-field-list/src/components/field_stats/field_stats.tsx @@ -11,6 +11,7 @@ import type { DataView, DataViewField } from '@kbn/data-views-plugin/common'; import { getTimeZone } from '@kbn/visualization-utils'; import { ES_FIELD_TYPES, KBN_FIELD_TYPES } from '@kbn/field-types'; import { getEsQueryConfig } from '@kbn/data-service/src/es_query'; +import { isOfAggregateQueryType } from '@kbn/es-query'; import type { IUiSettingsClient } from '@kbn/core/public'; import type { DataViewsContract } from '@kbn/data-views-plugin/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; @@ -33,14 +34,14 @@ import { } from '@elastic/charts'; import { i18n } from '@kbn/i18n'; import { buildEsQuery, Query, Filter, AggregateQuery } from '@kbn/es-query'; -import { showExamplesForField } from '../../services/field_stats/field_examples_calculator'; import { OverrideFieldTopValueBarCallback } from './field_top_values_bucket'; import type { BucketedAggregation, NumberSummary } from '../../types'; import { canProvideStatsForField, canProvideNumberSummaryForField, -} from '../../services/field_stats/field_stats_utils'; +} from '../../utils/can_provide_stats'; import { loadFieldStats } from '../../services/field_stats'; +import { loadFieldStatsTextBased } from '../../services/field_stats_text_based'; import type { AddFieldFilterHandler } from '../../types'; import { FieldTopValues, @@ -57,8 +58,8 @@ export interface FieldStatsState { totalDocuments?: number; sampledDocuments?: number; sampledValues?: number; - histogram?: BucketedAggregation; - topValues?: BucketedAggregation; + histogram?: BucketedAggregation; + topValues?: BucketedAggregation; numberSummary?: NumberSummary; } @@ -134,6 +135,7 @@ const FieldStatsComponent: React.FC = ({ const [dataView, changeDataView] = useState(null); const abortControllerRef = useRef(null); const isCanceledRef = useRef(false); + const isTextBased = !!query && isOfAggregateQueryType(query); const setState: typeof changeState = useCallback( (nextState) => { @@ -184,17 +186,32 @@ const FieldStatsComponent: React.FC = ({ abortControllerRef.current?.abort(); abortControllerRef.current = new AbortController(); - const results = await loadFieldStats({ - services: { data }, - dataView: loadedDataView, - field, - fromDate, - toDate, - dslQuery: - dslQuery ?? - buildEsQuery(loadedDataView, query ?? [], filters ?? [], getEsQueryConfig(uiSettings)), - abortController: abortControllerRef.current, - }); + const results = isTextBased + ? await loadFieldStatsTextBased({ + services: { data }, + dataView: loadedDataView, + field, + fromDate, + toDate, + baseQuery: query, + abortController: abortControllerRef.current, + }) + : await loadFieldStats({ + services: { data }, + dataView: loadedDataView, + field, + fromDate, + toDate, + dslQuery: + dslQuery ?? + buildEsQuery( + loadedDataView, + query ?? [], + filters ?? [], + getEsQueryConfig(uiSettings) + ), + abortController: abortControllerRef.current, + }); abortControllerRef.current = null; @@ -279,44 +296,7 @@ const FieldStatsComponent: React.FC = ({ let title = <>; function combineWithTitleAndFooter(el: React.ReactElement) { - const dataTestSubjDocsCount = 'unifiedFieldStats-statsFooter-docsCount'; - const countsElement = totalDocuments ? ( - - {sampledDocuments && sampledDocuments < totalDocuments ? ( - - {fieldFormats - .getDefaultInstance(KBN_FIELD_TYPES.NUMBER, [ES_FIELD_TYPES.INTEGER]) - .convert(sampledDocuments)} - - ), - }} - /> - ) : ( - - {fieldFormats - .getDefaultInstance(KBN_FIELD_TYPES.NUMBER, [ES_FIELD_TYPES.INTEGER]) - .convert(totalDocuments)} - - ), - }} - /> - )} - - ) : ( - <> - ); + const countsElement = getCountsElement(state, services, isTextBased, dataTestSubject); return ( <> @@ -338,7 +318,7 @@ const FieldStatsComponent: React.FC = ({ ); } - if (!canProvideStatsForField(field)) { + if (!canProvideStatsForField(field, isTextBased)) { const messageNoAnalysis = ( = ({ : messageNoAnalysis; } - if (canProvideNumberSummaryForField(field) && isNumberSummaryValid(numberSummary)) { + if (canProvideNumberSummaryForField(field, isTextBased) && isNumberSummaryValid(numberSummary)) { title = (
@@ -458,7 +438,7 @@ const FieldStatsComponent: React.FC = ({ title = (
- {showExamplesForField(field) + {topValues.areExamples ? i18n.translate('unifiedFieldList.fieldStats.examplesLabel', { defaultMessage: 'Examples', }) @@ -563,7 +543,7 @@ const FieldStatsComponent: React.FC = ({ if (topValues && topValues.buckets.length) { return combineWithTitleAndFooter( = ({ return null; }; +function getCountsElement( + state: FieldStatsState, + services: FieldStatsServices, + isTextBased: boolean, + dataTestSubject: string +): JSX.Element { + const dataTestSubjDocsCount = 'unifiedFieldStats-statsFooter-docsCount'; + const { fieldFormats } = services; + const { totalDocuments, sampledValues, sampledDocuments, topValues } = state; + + if (!totalDocuments) { + return <>; + } + + let labelElement; + + if (isTextBased) { + labelElement = topValues?.areExamples ? ( + + {fieldFormats + .getDefaultInstance(KBN_FIELD_TYPES.NUMBER, [ES_FIELD_TYPES.INTEGER]) + .convert(sampledDocuments)} + + ), + }} + /> + ) : ( + + {fieldFormats + .getDefaultInstance(KBN_FIELD_TYPES.NUMBER, [ES_FIELD_TYPES.INTEGER]) + .convert(sampledValues)} + + ), + }} + /> + ); + } else { + labelElement = + sampledDocuments && sampledDocuments < totalDocuments ? ( + + {fieldFormats + .getDefaultInstance(KBN_FIELD_TYPES.NUMBER, [ES_FIELD_TYPES.INTEGER]) + .convert(sampledDocuments)} + + ), + }} + /> + ) : ( + + {fieldFormats + .getDefaultInstance(KBN_FIELD_TYPES.NUMBER, [ES_FIELD_TYPES.INTEGER]) + .convert(totalDocuments)} + + ), + }} + /> + ); + } + + return ( + + {labelElement} + + ); +} + /** * Component which fetches and renders stats for a data view field * @param props diff --git a/packages/kbn-unified-field-list/src/components/field_stats/field_top_values.tsx b/packages/kbn-unified-field-list/src/components/field_stats/field_top_values.tsx index c899b624db0b7..d2d506a382901 100755 --- a/packages/kbn-unified-field-list/src/components/field_stats/field_top_values.tsx +++ b/packages/kbn-unified-field-list/src/components/field_stats/field_top_values.tsx @@ -14,8 +14,8 @@ import FieldTopValuesBucket from './field_top_values_bucket'; import type { OverrideFieldTopValueBarCallback } from './field_top_values_bucket'; export interface FieldTopValuesProps { - areExamples: boolean; // real top values or only examples - buckets: BucketedAggregation['buckets']; + areExamples: boolean | undefined; // real top values or only examples distributed in buckets + buckets: BucketedAggregation['buckets']; dataView: DataView; field: DataViewField; sampledValuesCount: number; @@ -58,7 +58,7 @@ export const FieldTopValues: React.FC = ({ const formatted = formatter.convert(fieldValue); return ( - + {index > 0 && } ['buckets'] + buckets?: BucketedAggregation['buckets'] ): number => { return buckets?.reduce((prev, bucket) => bucket.count + prev, 0) || 0; }; diff --git a/packages/kbn-unified-field-list/src/components/field_stats/field_top_values_bucket.tsx b/packages/kbn-unified-field-list/src/components/field_stats/field_top_values_bucket.tsx index 4a221bd08a13c..d158d29ce80af 100755 --- a/packages/kbn-unified-field-list/src/components/field_stats/field_top_values_bucket.tsx +++ b/packages/kbn-unified-field-list/src/components/field_stats/field_top_values_bucket.tsx @@ -112,6 +112,7 @@ const FieldTopValuesBucket: React.FC = ({ )} + - {multiFields && ( + {searchMode === 'documents' && multiFields && ( <> )} - {!!services.uiActions && ( + {searchMode === 'documents' && !!services.uiActions && ( )} - renderContent={searchMode === 'documents' ? renderPopover : undefined} + renderContent={ + (searchMode === 'text-based' && canProvideStatsForFieldTextBased(field)) || + searchMode === 'documents' + ? renderPopover + : undefined + } /> ); } diff --git a/packages/kbn-unified-field-list/src/services/field_stats/field_examples_calculator.test.ts b/packages/kbn-unified-field-list/src/services/field_examples_calculator/field_examples_calculator.test.ts similarity index 74% rename from packages/kbn-unified-field-list/src/services/field_stats/field_examples_calculator.test.ts rename to packages/kbn-unified-field-list/src/services/field_examples_calculator/field_examples_calculator.test.ts index 0e0e3c886066f..f7241b1c6b1c4 100644 --- a/packages/kbn-unified-field-list/src/services/field_stats/field_examples_calculator.test.ts +++ b/packages/kbn-unified-field-list/src/services/field_examples_calculator/field_examples_calculator.test.ts @@ -7,9 +7,14 @@ */ import { keys, clone, uniq, filter, map, flatten } from 'lodash'; -import type { DataView } from '@kbn/data-views-plugin/public'; import { stubLogstashDataView as dataView } from '@kbn/data-views-plugin/common/data_view.stub'; -import { getFieldExampleBuckets, groupValues, getFieldValues } from './field_examples_calculator'; +import { + getFieldExampleBuckets, + groupValues, + getFieldValues, + type FieldValueCountsParams, +} from './field_examples_calculator'; +import type { DataViewField } from '@kbn/data-views-plugin/common'; const hitsAsValues: Array> = [ { @@ -211,13 +216,13 @@ describe('fieldExamplesCalculator', function () { }); describe('getFieldExampleBuckets', function () { - let params: { hits: any; field: any; count: number; dataView: DataView }; + let params: FieldValueCountsParams; beforeEach(function () { params = { - hits, - field: dataView.fields.getByName('extension'), + values: getFieldValues(hits, dataView.fields.getByName('extension')!, dataView), + field: dataView.fields.getByName('extension')!, count: 3, - dataView, + isTextBased: false, }; }); @@ -230,14 +235,16 @@ describe('fieldExamplesCalculator', function () { }); it('analyzes geo types', function () { - params.field = dataView.fields.getByName('point'); + params.field = dataView.fields.getByName('point')!; + params.values = getFieldValues(hits, params.field, dataView); expect(getFieldExampleBuckets(params)).toEqual({ buckets: [{ count: 3, key: { coordinates: [100, 20], type: 'Point' } }], sampledDocuments: 20, sampledValues: 3, }); - params.field = dataView.fields.getByName('area'); + params.field = dataView.fields.getByName('area')!; + params.values = getFieldValues(hits, params.field, dataView); expect(getFieldExampleBuckets(params)).toEqual({ buckets: [], sampledDocuments: 20, @@ -246,30 +253,67 @@ describe('fieldExamplesCalculator', function () { }); it('fails to analyze attachment types', function () { - params.field = dataView.fields.getByName('request_body'); + params.field = dataView.fields.getByName('request_body')!; + params.values = getFieldValues(hits, params.field, dataView); expect(() => getFieldExampleBuckets(params)).toThrowError(); - params.field = dataView.fields.getByName('_score'); + params.field = dataView.fields.getByName('_score')!; + params.values = getFieldValues(hits, params.field, dataView); expect(() => getFieldExampleBuckets(params)).toThrowError(); }); it('fails to analyze fields that are in the mapping, but not the hits', function () { - params.field = dataView.fields.getByName('machine.os'); + params.field = dataView.fields.getByName('machine.os')!; + params.values = getFieldValues(hits, params.field, dataView); expect(getFieldExampleBuckets(params).buckets).toHaveLength(0); expect(getFieldExampleBuckets(params).sampledValues).toBe(0); }); it('counts the total hits', function () { - expect(getFieldExampleBuckets(params).sampledDocuments).toBe(params.hits.length); + expect(getFieldExampleBuckets(params).sampledDocuments).toBe(params.values.length); }); it('counts total number of values', function () { - params.field = dataView.fields.getByName('@tags'); + params.field = dataView.fields.getByName('@tags')!; + params.values = getFieldValues(hits, params.field, dataView); expect(getFieldExampleBuckets(params).sampledValues).toBe(3); - params.field = dataView.fields.getByName('extension'); - expect(getFieldExampleBuckets(params).sampledValues).toBe(params.hits.length); - params.field = dataView.fields.getByName('phpmemory'); + params.field = dataView.fields.getByName('extension')!; + params.values = getFieldValues(hits, params.field, dataView); + expect(getFieldExampleBuckets(params).sampledValues).toBe(params.values.length); + params.field = dataView.fields.getByName('phpmemory')!; + params.values = getFieldValues(hits, params.field, dataView); expect(getFieldExampleBuckets(params).sampledValues).toBe(5); }); + + it('works for text-based', function () { + const result = getFieldExampleBuckets({ + values: [['a'], ['b'], ['a'], ['a']], + field: { name: 'message', type: 'string', esTypes: ['text'] } as DataViewField, + isTextBased: true, + }); + expect(result).toMatchInlineSnapshot(` + Object { + "buckets": Array [ + Object { + "count": 3, + "key": "a", + }, + Object { + "count": 1, + "key": "b", + }, + ], + "sampledDocuments": 4, + "sampledValues": 4, + } + `); + expect(() => + getFieldExampleBuckets({ + values: [['a'], ['b'], ['a'], ['a']], + field: { name: 'message', type: 'string', esTypes: ['keyword'] } as DataViewField, + isTextBased: true, + }) + ).toThrowError(); + }); }); }); diff --git a/packages/kbn-unified-field-list/src/services/field_stats/field_examples_calculator.ts b/packages/kbn-unified-field-list/src/services/field_examples_calculator/field_examples_calculator.ts similarity index 79% rename from packages/kbn-unified-field-list/src/services/field_stats/field_examples_calculator.ts rename to packages/kbn-unified-field-list/src/services/field_examples_calculator/field_examples_calculator.ts index 982321284ab16..ac03aff1387db 100644 --- a/packages/kbn-unified-field-list/src/services/field_stats/field_examples_calculator.ts +++ b/packages/kbn-unified-field-list/src/services/field_examples_calculator/field_examples_calculator.ts @@ -13,52 +13,30 @@ import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { DataView, DataViewField } from '@kbn/data-views-plugin/common'; import { flattenHit } from '@kbn/data-service/src/search/tabify'; import { FieldFormat } from '@kbn/field-formats-plugin/common'; +import { canProvideExamplesForField } from '../../utils/can_provide_stats'; +import { DEFAULT_SIMPLE_EXAMPLES_SIZE } from '../../constants'; type FieldHitValue = any; -interface FieldValueCountsParams { - hits: estypes.SearchHit[]; - dataView: DataView; +export interface FieldValueCountsParams { + values: FieldHitValue[]; field: DataViewField; count?: number; + isTextBased: boolean; } -export const canProvideExamplesForField = (field: DataViewField): boolean => { - if (field.name === '_score') { - return false; - } - return [ - 'string', - 'text', - 'keyword', - 'version', - 'ip', - 'number', - 'geo_point', - 'geo_shape', - ].includes(field.type); -}; - -export const showExamplesForField = (field: DataViewField): boolean => { - return ( - (!field.aggregatable && canProvideExamplesForField(field)) || - field.type === 'geo_point' || - field.type === 'geo_shape' - ); -}; - export function getFieldExampleBuckets(params: FieldValueCountsParams, formatter?: FieldFormat) { params = defaults(params, { - count: 5, + count: DEFAULT_SIMPLE_EXAMPLES_SIZE, }); - if (!canProvideExamplesForField(params.field)) { + if (!canProvideExamplesForField(params.field, params.isTextBased)) { throw new Error( `Analysis is not available this field type: "${params.field.type}". Field name: "${params.field.name}"` ); } - const records = getFieldValues(params.hits, params.field, params.dataView); + const records = params.values; const { groups, sampledValues } = groupValues(records, formatter); const buckets = sortBy(groups, ['count', 'order']) @@ -69,7 +47,7 @@ export function getFieldExampleBuckets(params: FieldValueCountsParams, formatter return { buckets, sampledValues, - sampledDocuments: params.hits.length, + sampledDocuments: params.values.length, }; } @@ -78,6 +56,9 @@ export function getFieldValues( field: DataViewField, dataView: DataView ): FieldHitValue[] { + if (!field?.name) { + return []; + } return map(hits, function (hit) { return flattenHit(hit, dataView, { includeIgnoredValues: true })[field.name]; }); diff --git a/packages/kbn-unified-field-list/src/services/field_examples_calculator/index.ts b/packages/kbn-unified-field-list/src/services/field_examples_calculator/index.ts new file mode 100644 index 0000000000000..61d08bbd28ac0 --- /dev/null +++ b/packages/kbn-unified-field-list/src/services/field_examples_calculator/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 { getFieldExampleBuckets, getFieldValues } from './field_examples_calculator'; diff --git a/packages/kbn-unified-field-list/src/services/field_stats/field_stats_utils.test.ts b/packages/kbn-unified-field-list/src/services/field_stats/field_stats_utils.test.ts index 9f868b4c6b60a..3b6cb8fa8f64b 100644 --- a/packages/kbn-unified-field-list/src/services/field_stats/field_stats_utils.test.ts +++ b/packages/kbn-unified-field-list/src/services/field_stats/field_stats_utils.test.ts @@ -646,6 +646,7 @@ describe('fieldStatsUtils', function () { "sampledDocuments": 2, "sampledValues": 2, "topValues": Object { + "areExamples": true, "buckets": Array [ Object { "count": 1, diff --git a/packages/kbn-unified-field-list/src/services/field_stats/field_stats_utils.ts b/packages/kbn-unified-field-list/src/services/field_stats/field_stats_utils.ts index 7f99287f8e4b7..4207c6fbdb221 100644 --- a/packages/kbn-unified-field-list/src/services/field_stats/field_stats_utils.ts +++ b/packages/kbn-unified-field-list/src/services/field_stats/field_stats_utils.ts @@ -12,11 +12,18 @@ import type { DataView, DataViewField } from '@kbn/data-views-plugin/common'; import type { ESSearchResponse } from '@kbn/es-types'; import { FieldFormat } from '@kbn/field-formats-plugin/common'; import type { FieldStatsResponse } from '../../types'; +import { getFieldExampleBuckets, getFieldValues } from '../field_examples_calculator'; import { - getFieldExampleBuckets, canProvideExamplesForField, - showExamplesForField, -} from './field_examples_calculator'; + canProvideNumberSummaryForField, + canProvideAggregatedStatsForField, +} from '../../utils/can_provide_stats'; +import { + SHARD_SIZE, + DEFAULT_TOP_VALUES_SIZE, + SIMPLE_EXAMPLES_FETCH_SIZE, + DEFAULT_SIMPLE_EXAMPLES_SIZE, +} from '../../constants'; export type SearchHandler = ({ aggs, @@ -28,10 +35,6 @@ export type SearchHandler = ({ size?: number; }) => Promise>; -const SHARD_SIZE = 5000; -const DEFAULT_TOP_VALUES_SIZE = 10; -const SIMPLE_EXAMPLES_SIZE = 100; - export function buildSearchParams({ dataViewPattern, timeFieldName, @@ -110,7 +113,7 @@ export async function fetchAndCalculateFieldStats({ size?: number; }) { if (!field.aggregatable) { - return canProvideExamplesForField(field) + return canProvideExamplesForField(field, false) ? await getSimpleExamples(searchHandler, field, dataView) : {}; } @@ -119,7 +122,7 @@ export async function fetchAndCalculateFieldStats({ return await getGeoExamples(searchHandler, field, dataView); } - if (!canProvideAggregatedStatsForField(field)) { + if (!canProvideAggregatedStatsForField(field, false)) { return {}; } @@ -127,7 +130,7 @@ export async function fetchAndCalculateFieldStats({ return await getNumberHistogram(searchHandler, field, false); } - if (canProvideNumberSummaryForField(field)) { + if (canProvideNumberSummaryForField(field, false)) { return await getNumberSummary(searchHandler, field); } @@ -142,27 +145,6 @@ export async function fetchAndCalculateFieldStats({ return await getStringSamples(searchHandler, field, size); } -function canProvideAggregatedStatsForField(field: DataViewField): boolean { - return !( - field.type === 'document' || - field.type.includes('range') || - field.type === 'geo_point' || - field.type === 'geo_shape' || - field.type === 'murmur3' || - field.type === 'attachment' - ); -} - -export function canProvideStatsForField(field: DataViewField): boolean { - return ( - (field.aggregatable && canProvideAggregatedStatsForField(field)) || showExamplesForField(field) - ); -} - -export function canProvideNumberSummaryForField(field: DataViewField): boolean { - return field.timeSeriesMetric === 'counter'; -} - export async function getNumberSummary( aggSearchWithBody: SearchHandler, field: DataViewField @@ -423,17 +405,17 @@ export async function getSimpleExamples( const fieldRef = getFieldRef(field); const simpleExamplesBody = { - size: SIMPLE_EXAMPLES_SIZE, + size: SIMPLE_EXAMPLES_FETCH_SIZE, fields: [fieldRef], }; const simpleExamplesResult = await search(simpleExamplesBody); const fieldExampleBuckets = getFieldExampleBuckets( { - hits: simpleExamplesResult.hits.hits, + values: getFieldValues(simpleExamplesResult.hits.hits, field, dataView), field, - dataView, - count: DEFAULT_TOP_VALUES_SIZE, + count: DEFAULT_SIMPLE_EXAMPLES_SIZE, + isTextBased: false, }, formatter ); @@ -444,6 +426,7 @@ export async function getSimpleExamples( sampledValues: fieldExampleBuckets.sampledValues, topValues: { buckets: fieldExampleBuckets.buckets, + areExamples: true, }, }; } catch (error) { diff --git a/packages/kbn-unified-field-list/src/services/field_stats_text_based/field_stats_utils_text_based.test.ts b/packages/kbn-unified-field-list/src/services/field_stats_text_based/field_stats_utils_text_based.test.ts new file mode 100644 index 0000000000000..8ebd9640302a2 --- /dev/null +++ b/packages/kbn-unified-field-list/src/services/field_stats_text_based/field_stats_utils_text_based.test.ts @@ -0,0 +1,129 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { DataViewField } from '@kbn/data-views-plugin/common'; +import { buildSearchFilter, fetchAndCalculateFieldStats } from './field_stats_utils_text_based'; + +describe('fieldStatsUtilsTextBased', function () { + describe('buildSearchFilter()', () => { + it('should create a time range filter', () => { + expect( + buildSearchFilter({ + timeFieldName: 'timestamp', + fromDate: '2022-12-05T23:00:00.000Z', + toDate: '2023-01-05T09:33:05.359Z', + }) + ).toMatchInlineSnapshot(` + Object { + "range": Object { + "timestamp": Object { + "format": "strict_date_optional_time", + "gte": "2022-12-05T23:00:00.000Z", + "lte": "2023-01-05T09:33:05.359Z", + }, + }, + } + `); + }); + it('should not create a time range filter', () => { + expect( + buildSearchFilter({ + timeFieldName: undefined, + fromDate: '2022-12-05T23:00:00.000Z', + toDate: '2023-01-05T09:33:05.359Z', + }) + ).toBeNull(); + }); + }); + + describe('fetchAndCalculateFieldStats()', () => { + it('should provide top values', async () => { + const searchHandler = jest.fn().mockResolvedValue({ + values: [ + [3, 'a'], + [1, 'b'], + ], + }); + expect( + await fetchAndCalculateFieldStats({ + searchHandler, + esqlBaseQuery: 'from logs* | limit 1000', + field: { name: 'message', type: 'string', esTypes: ['keyword'] } as DataViewField, + }) + ).toMatchInlineSnapshot(` + Object { + "sampledDocuments": 4, + "sampledValues": 4, + "topValues": Object { + "buckets": Array [ + Object { + "count": 3, + "key": "a", + }, + Object { + "count": 1, + "key": "b", + }, + ], + }, + "totalDocuments": 4, + } + `); + + expect(searchHandler).toHaveBeenCalledWith( + expect.objectContaining({ + query: + 'from logs* | limit 1000| WHERE `message` IS NOT NULL\n | STATS `message_terms` = count(`message`) BY `message`\n | SORT `message_terms` DESC\n | LIMIT 10', + }) + ); + }); + + it('should provide text examples', async () => { + const searchHandler = jest.fn().mockResolvedValue({ + values: [[['programming', 'cool']], ['elastic', 'cool']], + }); + expect( + await fetchAndCalculateFieldStats({ + searchHandler, + esqlBaseQuery: 'from logs* | limit 1000', + field: { name: 'message', type: 'string', esTypes: ['text'] } as DataViewField, + }) + ).toMatchInlineSnapshot(` + Object { + "sampledDocuments": 2, + "sampledValues": 4, + "topValues": Object { + "areExamples": true, + "buckets": Array [ + Object { + "count": 2, + "key": "cool", + }, + Object { + "count": 1, + "key": "elastic", + }, + Object { + "count": 1, + "key": "programming", + }, + ], + }, + "totalDocuments": 2, + } + `); + + expect(searchHandler).toHaveBeenCalledWith( + expect.objectContaining({ + query: + 'from logs* | limit 1000| WHERE `message` IS NOT NULL\n | KEEP `message`\n | LIMIT 100', + }) + ); + }); + }); +}); diff --git a/packages/kbn-unified-field-list/src/services/field_stats_text_based/field_stats_utils_text_based.ts b/packages/kbn-unified-field-list/src/services/field_stats_text_based/field_stats_utils_text_based.ts new file mode 100644 index 0000000000000..a5f41853d6e33 --- /dev/null +++ b/packages/kbn-unified-field-list/src/services/field_stats_text_based/field_stats_utils_text_based.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { ESQLSearchReponse } from '@kbn/es-types'; +import type { DataViewField } from '@kbn/data-views-plugin/common'; +import type { FieldStatsResponse } from '../../types'; +import { + DEFAULT_TOP_VALUES_SIZE, + DEFAULT_SIMPLE_EXAMPLES_SIZE, + SIMPLE_EXAMPLES_FETCH_SIZE, +} from '../../constants'; +import { + canProvideStatsForFieldTextBased, + canProvideTopValuesForFieldTextBased, + canProvideExamplesForField, +} from '../../utils/can_provide_stats'; +import { getFieldExampleBuckets } from '../field_examples_calculator'; + +export type SearchHandlerTextBased = ({ query }: { query: string }) => Promise; + +export function buildSearchFilter({ + timeFieldName, + fromDate, + toDate, +}: { + timeFieldName?: string; + fromDate: string; + toDate: string; +}) { + return timeFieldName + ? { + range: { + [timeFieldName]: { + gte: fromDate, + lte: toDate, + format: 'strict_date_optional_time', + }, + }, + } + : null; +} + +interface FetchAndCalculateFieldStatsParams { + searchHandler: SearchHandlerTextBased; + field: DataViewField; + esqlBaseQuery: string; +} + +export async function fetchAndCalculateFieldStats(params: FetchAndCalculateFieldStatsParams) { + const { field } = params; + if (!canProvideStatsForFieldTextBased(field)) { + return {}; + } + if (field.type === 'boolean') { + return await getStringTopValues(params, 3); + } + if (canProvideTopValuesForFieldTextBased(field)) { + return await getStringTopValues(params); + } + if (canProvideExamplesForField(field, true)) { + return await getSimpleTextExamples(params); + } + + return {}; +} + +export async function getStringTopValues( + params: FetchAndCalculateFieldStatsParams, + size = DEFAULT_TOP_VALUES_SIZE +): Promise> { + const { searchHandler, field, esqlBaseQuery } = params; + const esqlQuery = + esqlBaseQuery + + `| WHERE ${getSafeESQLFieldName(field.name)} IS NOT NULL + | STATS ${getSafeESQLFieldName(`${field.name}_terms`)} = count(${getSafeESQLFieldName( + field.name + )}) BY ${getSafeESQLFieldName(field.name)} + | SORT ${getSafeESQLFieldName(`${field.name}_terms`)} DESC + | LIMIT ${size}`; + + const result = await searchHandler({ query: esqlQuery }); + const values = result?.values as Array<[number, string]>; + + if (!values?.length) { + return {}; + } + + const sampledValues = values?.reduce((acc: number, row) => acc + row[0], 0); + + const topValues = { + buckets: values.map((value) => ({ + count: value[0], + key: value[1], + })), + }; + + return { + totalDocuments: sampledValues, + sampledDocuments: sampledValues, + sampledValues, + topValues, + }; +} + +export async function getSimpleTextExamples( + params: FetchAndCalculateFieldStatsParams +): Promise> { + const { searchHandler, field, esqlBaseQuery } = params; + const esqlQuery = + esqlBaseQuery + + `| WHERE ${getSafeESQLFieldName(field.name)} IS NOT NULL + | KEEP ${getSafeESQLFieldName(field.name)} + | LIMIT ${SIMPLE_EXAMPLES_FETCH_SIZE}`; + + const result = await searchHandler({ query: esqlQuery }); + const values = ((result?.values as Array<[string | string[]]>) || []).map((value) => + Array.isArray(value) && value.length === 1 ? value[0] : value + ); + + if (!values?.length) { + return {}; + } + + const sampledDocuments = values?.length; + + const fieldExampleBuckets = getFieldExampleBuckets({ + values, + field, + count: DEFAULT_SIMPLE_EXAMPLES_SIZE, + isTextBased: true, + }); + + return { + totalDocuments: sampledDocuments, + sampledDocuments: fieldExampleBuckets.sampledDocuments, + sampledValues: fieldExampleBuckets.sampledValues, + topValues: { + buckets: fieldExampleBuckets.buckets, + areExamples: true, + }, + }; +} + +function getSafeESQLFieldName(str: string): string { + return `\`${str}\``; +} diff --git a/packages/kbn-unified-field-list/src/services/field_stats_text_based/index.ts b/packages/kbn-unified-field-list/src/services/field_stats_text_based/index.ts new file mode 100644 index 0000000000000..4fc354e7575de --- /dev/null +++ b/packages/kbn-unified-field-list/src/services/field_stats_text_based/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 { loadFieldStatsTextBased } from './load_field_stats_text_based'; diff --git a/packages/kbn-unified-field-list/src/services/field_stats_text_based/load_field_stats_text_based.ts b/packages/kbn-unified-field-list/src/services/field_stats_text_based/load_field_stats_text_based.ts new file mode 100644 index 0000000000000..347bdba723808 --- /dev/null +++ b/packages/kbn-unified-field-list/src/services/field_stats_text_based/load_field_stats_text_based.ts @@ -0,0 +1,104 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { lastValueFrom } from 'rxjs'; +import type { DataView, DataViewField } from '@kbn/data-views-plugin/common'; +import type { + DataPublicPluginStart, + IKibanaSearchRequest, + IKibanaSearchResponse, +} from '@kbn/data-plugin/public'; +import type { ESQLSearchParams, ESQLSearchReponse } from '@kbn/es-types'; +import type { AggregateQuery } from '@kbn/es-query'; +import { getESQLWithSafeLimit } from '@kbn/esql-utils'; +import type { FieldStatsResponse } from '../../types'; +import { + buildSearchFilter, + SearchHandlerTextBased, + fetchAndCalculateFieldStats, +} from './field_stats_utils_text_based'; +import { ESQL_SAFE_LIMIT } from '../../constants'; + +interface FetchFieldStatsParamsTextBased { + services: { + data: DataPublicPluginStart; + }; + dataView: DataView; + field: DataViewField; + fromDate: string; + toDate: string; + baseQuery: AggregateQuery; + abortController?: AbortController; +} + +export type LoadFieldStatsTextBasedHandler = ( + params: FetchFieldStatsParamsTextBased +) => Promise>; + +/** + * Loads and aggregates stats data for an ES|QL query field + * @param services + * @param dataView + * @param field + * @param fromDate + * @param toDate + * @param baseQuery + * @param abortController + */ +export const loadFieldStatsTextBased: LoadFieldStatsTextBasedHandler = async ({ + services, + dataView, + field, + fromDate, + toDate, + baseQuery, + abortController, +}) => { + const { data } = services; + + try { + if (!dataView?.id || !field?.type) { + return {}; + } + + const searchHandler: SearchHandlerTextBased = async (body) => { + const filter = buildSearchFilter({ timeFieldName: dataView.timeFieldName, fromDate, toDate }); + const result = await lastValueFrom( + data.search.search< + IKibanaSearchRequest, + IKibanaSearchResponse + >( + { + params: { + ...(filter ? { filter } : {}), + ...body, + }, + }, + { + abortSignal: abortController?.signal, + strategy: 'esql', + } + ) + ); + return result.rawResponse; + }; + + if (!('esql' in baseQuery)) { + throw new Error('query must be of type AggregateQuery'); + } + + return await fetchAndCalculateFieldStats({ + searchHandler, + field, + esqlBaseQuery: getESQLWithSafeLimit(baseQuery.esql, ESQL_SAFE_LIMIT), + }); + } catch (error) { + // console.error(error); + throw new Error('Could not provide field stats', { cause: error }); + } +}; diff --git a/packages/kbn-unified-field-list/src/types.ts b/packages/kbn-unified-field-list/src/types.ts index 7d9403eac1cf2..c4e1d4cd3f999 100755 --- a/packages/kbn-unified-field-list/src/types.ts +++ b/packages/kbn-unified-field-list/src/types.ts @@ -15,6 +15,7 @@ export interface BucketedAggregation { key: KeyType; count: number; }>; + areExamples?: boolean; // whether `topValues` holds examples in buckets rather than top values } export interface NumberSummary { diff --git a/packages/kbn-unified-field-list/src/utils/can_provide_stats.test.ts b/packages/kbn-unified-field-list/src/utils/can_provide_stats.test.ts new file mode 100644 index 0000000000000..2ade697c5976a --- /dev/null +++ b/packages/kbn-unified-field-list/src/utils/can_provide_stats.test.ts @@ -0,0 +1,164 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { + canProvideStatsForField, + canProvideExamplesForField, + canProvideStatsForFieldTextBased, +} from './can_provide_stats'; +import type { DataViewField } from '@kbn/data-views-plugin/common'; +import { stubLogstashDataView as dataView } from '@kbn/data-views-plugin/common/data_view.stub'; + +describe('can_provide_stats', function () { + describe('canProvideStatsForField', function () { + it('works for data view fields', function () { + expect(canProvideStatsForField(dataView.fields.getByName('extension.keyword')!, false)).toBe( + true + ); + expect(canProvideStatsForField(dataView.fields.getByName('non-sortable')!, false)).toBe(true); + expect(canProvideStatsForField(dataView.fields.getByName('bytes')!, false)).toBe(true); + expect(canProvideStatsForField(dataView.fields.getByName('ip')!, false)).toBe(true); + expect(canProvideStatsForField(dataView.fields.getByName('ssl')!, false)).toBe(true); + expect(canProvideStatsForField(dataView.fields.getByName('@timestamp')!, false)).toBe(true); + expect(canProvideStatsForField(dataView.fields.getByName('geo.coordinates')!, false)).toBe( + true + ); + expect(canProvideStatsForField(dataView.fields.getByName('request_body')!, false)).toBe( + false + ); + }); + + it('works for text based columns', function () { + expect( + canProvideStatsForField( + { name: 'message', type: 'string', esTypes: ['text'] } as DataViewField, + true + ) + ).toBe(true); + expect( + canProvideStatsForField( + { name: 'message', type: 'string', esTypes: ['keyword'] } as DataViewField, + true + ) + ).toBe(true); + expect( + canProvideStatsForField({ name: 'message', type: 'number' } as DataViewField, true) + ).toBe(true); + expect( + canProvideStatsForField({ name: 'message', type: 'boolean' } as DataViewField, true) + ).toBe(true); + expect(canProvideStatsForField({ name: 'message', type: 'ip' } as DataViewField, true)).toBe( + true + ); + expect( + canProvideStatsForField({ name: 'message', type: 'geo_point' } as DataViewField, true) + ).toBe(true); + expect( + canProvideStatsForField( + { name: '_id', type: 'string', esTypes: ['keyword'] } as DataViewField, + true + ) + ).toBe(true); + + expect( + canProvideStatsForField({ name: 'message', type: 'date' } as DataViewField, true) + ).toBe(false); + }); + }); + + describe('canProvideExamplesForField', function () { + it('works for data view fields', function () { + expect(canProvideExamplesForField(dataView.fields.getByName('non-sortable')!, false)).toBe( + true + ); + expect(canProvideExamplesForField(dataView.fields.getByName('geo.coordinates')!, false)).toBe( + true + ); + }); + + it('works for text based columns', function () { + expect( + canProvideExamplesForField( + { name: 'message', type: 'string', esTypes: ['text'] } as DataViewField, + true + ) + ).toBe(true); + expect( + canProvideExamplesForField( + { name: 'message', type: 'string', esTypes: ['keyword'] } as DataViewField, + true + ) + ).toBe(false); + expect( + canProvideExamplesForField({ name: 'message', type: 'number' } as DataViewField, true) + ).toBe(false); + expect( + canProvideExamplesForField({ name: 'message', type: 'boolean' } as DataViewField, true) + ).toBe(false); + expect( + canProvideExamplesForField({ name: 'message', type: 'ip' } as DataViewField, true) + ).toBe(false); + expect( + canProvideExamplesForField({ name: 'message', type: 'geo_point' } as DataViewField, true) + ).toBe(true); + expect( + canProvideExamplesForField({ name: 'message', type: 'date' } as DataViewField, true) + ).toBe(false); + expect( + canProvideStatsForField( + { name: '_id', type: 'string', esTypes: ['keyword'] } as DataViewField, + true + ) + ).toBe(true); + }); + + describe('canProvideStatsForFieldTextBased', function () { + it('works for text based columns', function () { + expect( + canProvideStatsForFieldTextBased({ + name: 'message', + type: 'string', + esTypes: ['text'], + } as DataViewField) + ).toBe(true); + expect( + canProvideStatsForFieldTextBased({ + name: 'message', + type: 'string', + esTypes: ['keyword'], + } as DataViewField) + ).toBe(true); + expect( + canProvideStatsForFieldTextBased({ name: 'message', type: 'number' } as DataViewField) + ).toBe(true); + expect( + canProvideStatsForFieldTextBased({ name: 'message', type: 'boolean' } as DataViewField) + ).toBe(true); + expect( + canProvideStatsForFieldTextBased({ name: 'message', type: 'ip' } as DataViewField) + ).toBe(true); + expect( + canProvideStatsForFieldTextBased({ name: 'message', type: 'ip_range' } as DataViewField) + ).toBe(false); + expect( + canProvideStatsForFieldTextBased({ name: 'message', type: 'geo_point' } as DataViewField) + ).toBe(true); + expect( + canProvideStatsForFieldTextBased({ name: 'message', type: 'date' } as DataViewField) + ).toBe(false); + expect( + canProvideStatsForFieldTextBased({ + name: '_id', + type: 'string', + esTypes: ['keyword'], + } as DataViewField) + ).toBe(true); + }); + }); + }); +}); diff --git a/packages/kbn-unified-field-list/src/utils/can_provide_stats.ts b/packages/kbn-unified-field-list/src/utils/can_provide_stats.ts new file mode 100644 index 0000000000000..714dfb4dfeb19 --- /dev/null +++ b/packages/kbn-unified-field-list/src/utils/can_provide_stats.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { DataViewField } from '@kbn/data-views-plugin/common'; + +export function canProvideStatsForField(field: DataViewField, isTextBased: boolean): boolean { + if (isTextBased) { + return canProvideStatsForFieldTextBased(field); + } + return ( + (field.aggregatable && canProvideAggregatedStatsForField(field, isTextBased)) || + ((!field.aggregatable || field.type === 'geo_point' || field.type === 'geo_shape') && + canProvideExamplesForField(field, isTextBased)) + ); +} + +export function canProvideAggregatedStatsForField( + field: DataViewField, + isTextBased: boolean +): boolean { + if (isTextBased) { + return false; + } + return !( + field.type === 'document' || + field.type.includes('range') || + field.type === 'geo_point' || + field.type === 'geo_shape' || + field.type === 'murmur3' || + field.type === 'attachment' + ); +} + +export function canProvideNumberSummaryForField( + field: DataViewField, + isTextBased: boolean +): boolean { + if (isTextBased) { + return false; + } + return field.timeSeriesMetric === 'counter'; +} + +export function canProvideExamplesForField(field: DataViewField, isTextBased: boolean): boolean { + if (isTextBased) { + return ( + (field.type === 'string' && !canProvideTopValuesForFieldTextBased(field)) || + ['geo_point', 'geo_shape'].includes(field.type) + ); + } + if (field.name === '_score') { + return false; + } + return [ + 'string', + 'text', + 'keyword', + 'version', + 'ip', + 'number', + 'geo_point', + 'geo_shape', + ].includes(field.type); +} + +export function canProvideTopValuesForFieldTextBased(field: DataViewField): boolean { + if (field.name === '_id') { + return false; + } + const esTypes = field.esTypes?.[0]; + return ( + Boolean(field.type === 'string' && esTypes && ['keyword', 'version'].includes(esTypes)) || + ['keyword', 'version', 'ip', 'number', 'boolean'].includes(field.type) + ); +} + +export function canProvideStatsForFieldTextBased(field: DataViewField): boolean { + return canProvideTopValuesForFieldTextBased(field) || canProvideExamplesForField(field, true); +} diff --git a/packages/kbn-unified-field-list/tsconfig.json b/packages/kbn-unified-field-list/tsconfig.json index dce08dcdebaf5..657498734e3d8 100644 --- a/packages/kbn-unified-field-list/tsconfig.json +++ b/packages/kbn-unified-field-list/tsconfig.json @@ -33,6 +33,7 @@ "@kbn/field-utils", "@kbn/ml-ui-actions", "@kbn/visualization-utils", + "@kbn/esql-utils" ], "exclude": ["target/**/*"] } diff --git a/src/plugins/data/common/search/expressions/esql.ts b/src/plugins/data/common/search/expressions/esql.ts index d01b77087bf04..8b063b7e734c3 100644 --- a/src/plugins/data/common/search/expressions/esql.ts +++ b/src/plugins/data/common/search/expressions/esql.ts @@ -233,7 +233,7 @@ export const getEsqlFn = ({ getStartDependencies }: EsqlFnArguments) => { (body.all_columns ?? body.columns)?.map(({ name, type }) => ({ id: name, name, - meta: { type: esFieldTypeToKibanaFieldType(type) }, + meta: { type: esFieldTypeToKibanaFieldType(type), esType: type }, isNull: hasEmptyColumns ? !lookup.has(name) : false, })) ?? []; diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx index 22f174cd0dea7..4c0f01d04b6eb 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx @@ -24,8 +24,8 @@ import { SearchResponseWarningsCallout } from '@kbn/search-response-warnings'; import { DataLoadingState, useColumns, - type DataTableColumnTypes, - getTextBasedColumnTypes, + type DataTableColumnsMeta, + getTextBasedColumnsMeta, } from '@kbn/unified-data-table'; import { DOC_HIDE_TIME_COLUMN_SETTING, @@ -231,10 +231,10 @@ function DiscoverDocumentsComponent({ [uiSettings] ); - const columnTypes: DataTableColumnTypes | undefined = useMemo( + const columnsMeta: DataTableColumnsMeta | undefined = useMemo( () => documentState.textBasedQueryColumns - ? getTextBasedColumnTypes(documentState.textBasedQueryColumns) + ? getTextBasedColumnsMeta(documentState.textBasedQueryColumns) : undefined, [documentState.textBasedQueryColumns] ); @@ -244,7 +244,7 @@ function DiscoverDocumentsComponent({ hit: DataTableRecord, displayedRows: DataTableRecord[], displayedColumns: string[], - customColumnTypes?: DataTableColumnTypes + customColumnsMeta?: DataTableColumnsMeta ) => ( ; + columnsMeta?: DataTableColumnsMeta; hit: DataTableRecord; hits?: DataTableRecord[]; dataView: DataView; @@ -61,7 +62,7 @@ export function DiscoverGridFlyout({ hits, dataView, columns, - columnTypes, + columnsMeta, savedSearchId, filters, query, @@ -147,7 +148,7 @@ export function DiscoverGridFlyout({ () => ( ( ; * Datatable column meta information */ export interface DatatableColumnMeta { + /** + * The Kibana normalized type of the column + */ type: DatatableColumnType; + /** + * The original type of the column from ES + */ + esType?: string; /** * field this column is based on */ diff --git a/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx b/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx index b8e5b9cd37970..ad957053b7dd8 100644 --- a/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx +++ b/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx @@ -38,7 +38,11 @@ import { isNestedFieldParent, usePager, } from '@kbn/discover-utils'; -import { fieldNameWildcardMatcher, getFieldSearchMatchingHighlight } from '@kbn/field-utils'; +import { + fieldNameWildcardMatcher, + getFieldSearchMatchingHighlight, + getTextBasedColumnIconType, +} from '@kbn/field-utils'; import type { DocViewRenderProps, FieldRecordLegacy } from '@kbn/unified-doc-viewer/types'; import { FieldName } from '@kbn/unified-doc-viewer'; import { getUnifiedDocViewerServices } from '../../plugin'; @@ -106,7 +110,7 @@ const updateSearchText = debounce( export const DocViewerTable = ({ columns, - columnTypes, + columnsMeta, hit, dataView, hideActionsColumn, @@ -167,8 +171,10 @@ export const DocViewerTable = ({ (field: string) => { const fieldMapping = mapping(field); const displayName = fieldMapping?.displayName ?? field; - const fieldType = columnTypes - ? columnTypes[field] // for text-based results types come separately + const columnMeta = columnsMeta?.[field]; + const columnIconType = getTextBasedColumnIconType(columnMeta); + const fieldType = columnIconType + ? columnIconType // for text-based results types come separately : isNestedFieldParent(field, dataView) ? 'nested' : fieldMapping @@ -212,7 +218,7 @@ export const DocViewerTable = ({ onToggleColumn, filter, columns, - columnTypes, + columnsMeta, flattened, pinnedFields, onTogglePinned, diff --git a/test/functional/apps/discover/group2/_data_grid_field_tokens.ts b/test/functional/apps/discover/group2/_data_grid_field_tokens.ts index 27ba295e48898..1d60fe3cd8c79 100644 --- a/test/functional/apps/discover/group2/_data_grid_field_tokens.ts +++ b/test/functional/apps/discover/group2/_data_grid_field_tokens.ts @@ -130,19 +130,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.clickFieldListItemAdd('ip'); await PageObjects.unifiedFieldList.clickFieldListItemAdd('geo.coordinates'); - expect(await findFirstColumnTokens()).to.eql(['Number', 'String', 'IP address', 'Geo point']); + expect(await findFirstColumnTokens()).to.eql(['Number', 'Text', 'IP address', 'Geo point']); expect(await findFirstDocViewerTokens()).to.eql([ - 'String', - 'String', + 'Text', + 'Text', 'Date', - 'String', + 'Text', 'Number', 'IP address', - 'String', + 'Text', 'Geo point', - 'String', - 'String', + 'Keyword', + 'Keyword', ]); }); diff --git a/test/functional/apps/discover/group3/_sidebar.ts b/test/functional/apps/discover/group3/_sidebar.ts index c81722ec78cbf..d536e09920590 100644 --- a/test/functional/apps/discover/group3/_sidebar.ts +++ b/test/functional/apps/discover/group3/_sidebar.ts @@ -96,9 +96,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show filters by type in text-based view', async function () { - await kibanaServer.uiSettings.update({ 'discover:enableESQL': true }); - await browser.refresh(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); await PageObjects.unifiedFieldList.openSidebarFieldFilter(); let options = await find.allByCssSelector('[data-test-subj*="typeFilter"]'); @@ -114,7 +111,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); await PageObjects.unifiedFieldList.openSidebarFieldFilter(); options = await find.allByCssSelector('[data-test-subj*="typeFilter"]'); - expect(options).to.have.length(5); + expect(options).to.have.length(6); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( '82 available fields.' @@ -131,9 +128,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show empty fields in text-based view', async function () { - await kibanaServer.uiSettings.update({ 'discover:enableESQL': true }); - await browser.refresh(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); await PageObjects.discover.selectTextBaseLang(); @@ -433,9 +427,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show selected and available fields in text-based mode', async function () { - await kibanaServer.uiSettings.update({ 'discover:enableESQL': true }); - await browser.refresh(); - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); expect(await PageObjects.unifiedFieldList.getSidebarAriaDescription()).to.be( diff --git a/test/functional/apps/discover/group3/_sidebar_field_stats.ts b/test/functional/apps/discover/group3/_sidebar_field_stats.ts new file mode 100644 index 0000000000000..7923bc311dedc --- /dev/null +++ b/test/functional/apps/discover/group3/_sidebar_field_stats.ts @@ -0,0 +1,305 @@ +/* + * Copyright 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 expect from '@kbn/expect'; +import { FtrProviderContext } from '../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); + const PageObjects = getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'header', + 'unifiedFieldList', + ]); + const testSubjects = getService('testSubjects'); + const find = getService('find'); + const monacoEditor = getService('monacoEditor'); + const retry = getService('retry'); + + describe('discover sidebar field stats popover', function describeIndexTests() { + before(async function () { + await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); + await kibanaServer.uiSettings.replace({ + defaultIndex: 'logstash-*', + }); + }); + + after(async () => { + await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.uiSettings.replace({}); + }); + + describe('data view fields', function () { + before(async () => { + await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await PageObjects.common.navigateToApp('discover'); + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await PageObjects.discover.addRuntimeField( + '_is_large', + 'emit(doc["bytes"].value > 1024)', + 'boolean' + ); + + await retry.waitFor('form to close', async () => { + return !(await testSubjects.exists('fieldEditor')); + }); + + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + }); + + it('should show a top values popover for a boolean runtime field', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('_is_large'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(2); + await testSubjects.missingOrFail('unifiedFieldStats-buttonGroup'); + await testSubjects.missingOrFail('unifiedFieldStats-histogram'); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '14,004 records' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should show a histogram and top values popover for numeric field', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('bytes'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.contain('Top values'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.contain('Distribution'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(11); + await testSubjects.click('dscFieldStats-buttonGroup-distributionButton'); + expect( + await find.existsByCssSelector('[data-test-subj="unifiedFieldStats-histogram"] .echChart') + ).to.eql(true); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '14,004 records' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should show a top values popover for a keyword field', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('extension'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(5); + await testSubjects.missingOrFail('unifiedFieldStats-buttonGroup'); + await testSubjects.missingOrFail('unifiedFieldStats-histogram'); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '14,004 records' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should show a top values popover for an ip field', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('clientip'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(11); + await testSubjects.missingOrFail('unifiedFieldStats-buttonGroup'); + await testSubjects.missingOrFail('unifiedFieldStats-histogram'); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '14,004 records' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should show a date histogram popover for a date field', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('@timestamp'); + await testSubjects.existOrFail('unifiedFieldStats-timeDistribution'); + await testSubjects.missingOrFail('dscFieldStats-buttonGroup-topValuesButton'); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '14,004 records' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should show examples for geo points field', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('geo.coordinates'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Examples'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(11); + await testSubjects.missingOrFail('unifiedFieldStats-buttonGroup'); + await testSubjects.missingOrFail('unifiedFieldStats-histogram'); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '100 sample records' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + }); + + describe('text based columns', function () { + before(async () => { + const TEST_START_TIME = 'Sep 23, 2015 @ 06:31:44.000'; + const TEST_END_TIME = 'Sep 23, 2015 @ 18:31:44.000'; + await PageObjects.timePicker.setAbsoluteRange(TEST_START_TIME, TEST_END_TIME); + await PageObjects.common.navigateToApp('discover'); + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await PageObjects.discover.selectTextBaseLang(); + + const testQuery = `from logstash-* [METADATA _index, _id] | sort @timestamp desc | limit 500`; + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + }); + + it('should show top values popover for numeric field', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('bytes'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(10); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '42 sample values' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should show a top values popover for a keyword field', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('extension.raw'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(5); + await testSubjects.missingOrFail('unifiedFieldStats-buttonGroup'); + await testSubjects.missingOrFail('unifiedFieldStats-histogram'); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '500 sample values' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should show a top values popover for an ip field', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('clientip'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(10); + await testSubjects.missingOrFail('unifiedFieldStats-buttonGroup'); + await testSubjects.missingOrFail('unifiedFieldStats-histogram'); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '32 sample values' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should show a top values popover for _index field', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('_index'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(1); + await testSubjects.missingOrFail('unifiedFieldStats-buttonGroup'); + await testSubjects.missingOrFail('unifiedFieldStats-histogram'); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '500 sample values' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should not have stats for a date field yet', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('@timestamp'); + await testSubjects.missingOrFail('dscFieldStats-statsFooter'); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should show examples for geo points field', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('geo.coordinates'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Examples'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(11); + await testSubjects.missingOrFail('unifiedFieldStats-buttonGroup'); + await testSubjects.missingOrFail('unifiedFieldStats-histogram'); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '100 sample records' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should show examples for text field', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('extension'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Examples'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(5); + await testSubjects.missingOrFail('unifiedFieldStats-buttonGroup'); + await testSubjects.missingOrFail('unifiedFieldStats-histogram'); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '100 sample records' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should show examples for _id field', async () => { + await PageObjects.unifiedFieldList.clickFieldListItem('_id'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Examples'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(11); + await testSubjects.missingOrFail('unifiedFieldStats-buttonGroup'); + await testSubjects.missingOrFail('unifiedFieldStats-histogram'); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '100 sample records' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should show a top values popover for a more complex query', async () => { + const testQuery = `from logstash-* | sort @timestamp desc | limit 50 | stats avg(bytes) by geo.dest | limit 3`; + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + + await PageObjects.unifiedFieldList.clickFieldListItem('avg(bytes)'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(3); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '3 sample values' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + + it('should show a top values popover for a boolean field', async () => { + const testQuery = `row enabled = true`; + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + + await PageObjects.unifiedFieldList.clickFieldListItem('enabled'); + await testSubjects.existOrFail('dscFieldStats-topValues'); + expect(await testSubjects.getVisibleText('dscFieldStats-title')).to.be('Top values'); + const topValuesRows = await testSubjects.findAll('dscFieldStats-topValues-bucket'); + expect(topValuesRows.length).to.eql(1); + expect(await PageObjects.unifiedFieldList.getFieldStatsTopValueBucketsVisibleText()).to.be( + 'true\n100%' + ); + expect(await testSubjects.getVisibleText('dscFieldStats-statsFooter')).to.contain( + '1 sample value' + ); + await PageObjects.unifiedFieldList.closeFieldPopover(); + }); + }); + }); +} diff --git a/test/functional/apps/discover/group3/index.ts b/test/functional/apps/discover/group3/index.ts index 60f835154d5e9..2fe5a4ebb1db1 100644 --- a/test/functional/apps/discover/group3/index.ts +++ b/test/functional/apps/discover/group3/index.ts @@ -24,6 +24,7 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./_time_field_column')); loadTestFile(require.resolve('./_drag_drop')); loadTestFile(require.resolve('./_sidebar')); + loadTestFile(require.resolve('./_sidebar_field_stats')); loadTestFile(require.resolve('./_request_counts')); loadTestFile(require.resolve('./_doc_viewer')); loadTestFile(require.resolve('./_view_mode_toggle')); diff --git a/test/functional/page_objects/discover_page.ts b/test/functional/page_objects/discover_page.ts index 18e15ea69bb1a..5e1c74bc78d4c 100644 --- a/test/functional/page_objects/discover_page.ts +++ b/test/functional/page_objects/discover_page.ts @@ -763,9 +763,12 @@ export class DiscoverPageObject extends FtrService { } } - public async addRuntimeField(name: string, script: string) { + public async addRuntimeField(name: string, script: string, type?: string) { await this.clickAddField(); await this.fieldEditor.setName(name); + if (type) { + await this.fieldEditor.setFieldType(type); + } await this.fieldEditor.enableValue(); await this.fieldEditor.typeScript(script); await this.fieldEditor.save(); diff --git a/test/functional/page_objects/unified_field_list.ts b/test/functional/page_objects/unified_field_list.ts index 378b20cc02e24..152a1b4c1c660 100644 --- a/test/functional/page_objects/unified_field_list.ts +++ b/test/functional/page_objects/unified_field_list.ts @@ -116,6 +116,13 @@ export class UnifiedFieldListPageObject extends FtrService { }); } + public async closeFieldPopover() { + await this.browser.pressKeys(this.browser.keys.ESCAPE); + await this.retry.waitFor('popover is closed', async () => { + return !(await this.testSubjects.exists('fieldPopoverHeader_fieldDisplayName')); + }); + } + public async clickFieldListItem(field: string) { await this.testSubjects.moveMouseTo(`field-${field}`); await this.testSubjects.click(`field-${field}`); From f35b1aee9a2222d8d919d8d928e6be7d5faba93d Mon Sep 17 00:00:00 2001 From: Ersin Erdal <92688503+ersin-erdal@users.noreply.github.com> Date: Fri, 22 Mar 2024 13:58:05 +0100 Subject: [PATCH 53/90] Onboard Inventory Metric Threshold rule type with FAAD (#178506) Towards: #169867 This PR onboards Inventory Metric Threshold rule type with FAAD. ## To verify. I used [data-generator](https://github.com/ersin-erdal/data-generator) to generate metric data. Then created an Inventory Threshold rule with actions (alert and recovered), conitions: `For Hosts, When CPU usage is above 10`. Inventory Threshold uses the following formula to calculate the result: (`system.cpu.user.pct` + `system.cpu.system.pct`) / `system.cpu.cores` Set `system.cpu.user.pct` = 1 `system.cpu.system.pct` = 1 `system.cpu.cores` = 4 in the [cpu-001](https://github.com/ersin-erdal/data-generator/blob/main/src/indexers/metrics/docs/cpu-001.json). This makes the CPU usage 0.5 (50%) for the `host-1` and run the generator with `./generate metrics` Your rule should create an alert and should saved it in `.internal.alerts-observability.metrics.alerts-default-000001` Then set `system.cpu.user.pct`=0 and `system.cpu.system.pct`=0. The alert should be recovered and the AAD in the above index should be updated `kibana.alert.status: recovered`. --- ...nventory_metric_threshold_executor.test.ts | 91 ++-- .../inventory_metric_threshold_executor.ts | 475 +++++++++--------- .../register_metric_threshold_rule_type.ts | 7 +- .../lib/alerting/register_rule_types.ts | 5 +- 4 files changed, 288 insertions(+), 290 deletions(-) diff --git a/x-pack/plugins/observability_solution/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.test.ts b/x-pack/plugins/observability_solution/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.test.ts index bd6350ba59dd0..b0ffe0b354b13 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.test.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.test.ts @@ -9,11 +9,7 @@ import { AlertInstanceContext as AlertContext, AlertInstanceState as AlertState, } from '@kbn/alerting-plugin/server'; -import { - AlertInstanceMock, - RuleExecutorServicesMock, - alertsMock, -} from '@kbn/alerting-plugin/server/mocks'; +import { RuleExecutorServicesMock, alertsMock } from '@kbn/alerting-plugin/server/mocks'; import { LifecycleAlertServices } from '@kbn/rule-registry-plugin/server'; import { ruleRegistryMocks } from '@kbn/rule-registry-plugin/server/mocks'; import { createLifecycleRuleExecutorMock } from '@kbn/rule-registry-plugin/server/utils/create_lifecycle_rule_executor_mock'; @@ -34,13 +30,11 @@ import { logsSharedPluginMock } from '@kbn/logs-shared-plugin/server/mocks'; jest.mock('./evaluate_condition', () => ({ evaluateCondition: jest.fn() })); interface AlertTestInstance { - instance: AlertInstanceMock; - actionQueue: any[]; - state: any; + actionGroup: string; + payload: any[]; + context: any[]; } -const persistAlertInstances = false; - const fakeLogger = (msg: string, meta?: Meta) => {}; const logger = { @@ -138,46 +132,42 @@ const mockLibs = { }, logger, } as unknown as InfraBackendLibs; +const alerts = new Map(); +let services: RuleExecutorServicesMock & LifecycleAlertServices; -const alertsServices = alertsMock.createRuleExecutorServices(); -const services: RuleExecutorServicesMock & - LifecycleAlertServices = { - ...alertsServices, - ...ruleRegistryMocks.createLifecycleAlertServices(alertsServices), -}; - -const alertInstances = new Map(); - -services.alertFactory.create.mockImplementation((instanceID: string) => { - const newAlertInstance: AlertTestInstance = { - instance: alertsMock.createAlertFactory.create(), - actionQueue: [], - state: {}, +const setup = () => { + const alertsServices = alertsMock.createRuleExecutorServices(); + services = { + ...alertsServices, + ...ruleRegistryMocks.createLifecycleAlertServices(alertsServices), }; - const alertInstance: AlertTestInstance = persistAlertInstances - ? alertInstances.get(instanceID) || newAlertInstance - : newAlertInstance; - alertInstances.set(instanceID, alertInstance); + services.alertsClient.report.mockImplementation((params: any) => { + alerts.set(params.id, { actionGroup: params.actionGroup, context: [], payload: [] }); + return { + uuid: `uuid-${params.id}`, + start: new Date().toISOString(), + alertDoc: {}, + }; + }); - (alertInstance.instance.scheduleActions as jest.Mock).mockImplementation( - (id: string, action: any) => { - alertInstance.actionQueue.push({ id, action }); - return alertInstance.instance; + services.alertsClient.setAlertData.mockImplementation((params: any) => { + const alert = alerts.get(params.id); + if (alert) { + alert.payload.push(params.payload); + alert.context.push(params.context); } - ); - - return alertInstance.instance; -}); + }); +}; function mostRecentAction(id: string) { - const instance = alertInstances.get(id); + const instance = alerts.get(id); if (!instance) return undefined; - return instance.actionQueue.pop(); + return instance.context.pop(); } function clearInstances() { - alertInstances.clear(); + alerts.clear(); } const executor = createInventoryMetricThresholdExecutor(mockLibs); @@ -194,6 +184,9 @@ const baseCriterion = { describe('The inventory threshold alert type', () => { describe('querying with Hosts and rule tags', () => { afterAll(() => clearInstances()); + + setup(); + const execute = (comparator: Comparator, threshold: number[], options?: any) => executor({ ...mockOptions, @@ -219,6 +212,18 @@ describe('The inventory threshold alert type', () => { const instanceIdA = 'host-01'; const instanceIdB = 'host-02'; + test('throws error when alertsClient is null', async () => { + try { + services.alertsClient = null; + await execute(Comparator.GT, [0.75]); + } catch (e) { + expect(e).toMatchInlineSnapshot( + '[Error: Expected alertsClient not to be null! There may have been an issue installing alert resources.]' + ); + setup(); + } + }); + test('when tags are present in the source, rule tags and source tags are combined in alert context', async () => { setEvaluationResults({ 'host-01': { @@ -255,13 +260,13 @@ describe('The inventory threshold alert type', () => { }, }); await execute(Comparator.GT, [0.75]); - expect(mostRecentAction(instanceIdA).action.tags).toStrictEqual([ + expect(mostRecentAction(instanceIdA).tags).toStrictEqual([ 'host-01_tag1', 'host-01_tag2', 'ruleTag1', 'ruleTag2', ]); - expect(mostRecentAction(instanceIdB).action.tags).toStrictEqual([ + expect(mostRecentAction(instanceIdB).tags).toStrictEqual([ 'host-02_tag1', 'host-02_tag2', 'ruleTag1', @@ -305,8 +310,8 @@ describe('The inventory threshold alert type', () => { }, }); await execute(Comparator.GT, [0.75]); - expect(mostRecentAction(instanceIdA).action.tags).toStrictEqual(['ruleTag1', 'ruleTag2']); - expect(mostRecentAction(instanceIdB).action.tags).toStrictEqual(['ruleTag1', 'ruleTag2']); + expect(mostRecentAction(instanceIdA).tags).toStrictEqual(['ruleTag1', 'ruleTag2']); + expect(mostRecentAction(instanceIdB).tags).toStrictEqual(['ruleTag1', 'ruleTag2']); }); test('should call evaluation query with delay', async () => { diff --git a/x-pack/plugins/observability_solution/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts b/x-pack/plugins/observability_solution/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts index 7f4159f39c525..7124ce9db597f 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts @@ -8,7 +8,6 @@ import { i18n } from '@kbn/i18n'; import { ALERT_REASON, - ALERT_ACTION_GROUP, ALERT_EVALUATION_VALUES, ALERT_EVALUATION_THRESHOLD, } from '@kbn/rule-data-utils'; @@ -19,9 +18,10 @@ import { AlertInstanceContext as AlertContext, AlertInstanceState as AlertState, } from '@kbn/alerting-plugin/common'; -import { Alert, RuleTypeState } from '@kbn/alerting-plugin/server'; +import { AlertsClientError, RuleExecutorOptions, RuleTypeState } from '@kbn/alerting-plugin/server'; import { getAlertUrl } from '@kbn/observability-plugin/common'; import { SnapshotMetricType } from '@kbn/metrics-data-access-plugin/common'; +import { ObservabilityMetricsAlert } from '@kbn/alerts-as-data-utils'; import { getOriginalActionGroup } from '../../../utils/get_original_action_group'; import { AlertStates, @@ -42,7 +42,6 @@ import { stateToAlertMessage, } from '../common/messages'; import { - AdditionalContext, createScopedLogger, flattenAdditionalContext, getContextForRecoveredAlerts, @@ -59,99 +58,85 @@ type InventoryMetricThresholdAllowedActionGroups = ActionGroupIdsOf< export const FIRED_ACTIONS_ID = 'metrics.inventory_threshold.fired'; export const WARNING_ACTIONS_ID = 'metrics.inventory_threshold.warning'; -type InventoryThrehsoldActionGroup = typeof FIRED_ACTIONS_ID | typeof WARNING_ACTIONS_ID; - export type InventoryMetricThresholdRuleTypeState = RuleTypeState; // no specific state used export type InventoryMetricThresholdAlertState = AlertState; // no specific state used export type InventoryMetricThresholdAlertContext = AlertContext; // no specific instance context used -type InventoryMetricThresholdAlert = Alert< - InventoryMetricThresholdAlertState, - InventoryMetricThresholdAlertContext, - InventoryMetricThresholdAllowedActionGroups ->; -type InventoryMetricThresholdAlertFactory = ( - id: string, - reason: string, - actionGroup: InventoryThrehsoldActionGroup, - additionalContext?: AdditionalContext | null, - evaluationValues?: Array, - thresholds?: Array -) => InventoryMetricThresholdAlert; - -export const createInventoryMetricThresholdExecutor = (libs: InfraBackendLibs) => - libs.metricsRules.createLifecycleRuleExecutor< - InventoryMetricThresholdParams & Record, - InventoryMetricThresholdRuleTypeState, - InventoryMetricThresholdAlertState, - InventoryMetricThresholdAlertContext, - InventoryMetricThresholdAllowedActionGroups - >( - async ({ +export type InventoryMetricThresholdAlert = Omit< + ObservabilityMetricsAlert, + 'kibana.alert.evaluation.values' | 'kibana.alert.evaluation.threshold' +> & { + // Defining a custom type for this because the schema generation script doesn't allow explicit null values + [ALERT_EVALUATION_VALUES]?: Array; + [ALERT_EVALUATION_THRESHOLD]?: Array; +}; + +export const createInventoryMetricThresholdExecutor = + (libs: InfraBackendLibs) => + async ( + options: RuleExecutorOptions< + InventoryMetricThresholdParams & Record, + InventoryMetricThresholdRuleTypeState, + InventoryMetricThresholdAlertState, + InventoryMetricThresholdAlertContext, + InventoryMetricThresholdAllowedActionGroups, + InventoryMetricThresholdAlert + > + ) => { + const { services, params, + startedAt, executionId, spaceId, - startedAt, rule: { id: ruleId, tags: ruleTags }, getTimeRange, - }) => { - const startTime = Date.now(); + } = options; - const { criteria, filterQuery, sourceId = 'default', nodeType, alertOnNoData } = params; + const startTime = Date.now(); - if (criteria.length === 0) throw new Error('Cannot execute an alert with 0 conditions'); + const { criteria, filterQuery, sourceId = 'default', nodeType, alertOnNoData } = params; - const logger = createScopedLogger(libs.logger, 'inventoryRule', { - alertId: ruleId, - executionId, - }); + if (criteria.length === 0) throw new Error('Cannot execute an alert with 0 conditions'); - const esClient = services.scopedClusterClient.asCurrentUser; - - const { - alertWithLifecycle, - savedObjectsClient, - getAlertStartedDate, - getAlertUuid, - getAlertByAlertUuid, - alertFactory: baseAlertFactory, - } = services; - const alertFactory: InventoryMetricThresholdAlertFactory = ( - id, - reason, - actionGroup, - additionalContext, - evaluationValues, - thresholds - ) => - alertWithLifecycle({ - id, - fields: { - [ALERT_REASON]: reason, - [ALERT_ACTION_GROUP]: actionGroup, - [ALERT_EVALUATION_VALUES]: evaluationValues, - [ALERT_EVALUATION_THRESHOLD]: thresholds, - ...flattenAdditionalContext(additionalContext), - }, + const logger = createScopedLogger(libs.logger, 'inventoryRule', { + alertId: ruleId, + executionId, + }); + + const esClient = services.scopedClusterClient.asCurrentUser; + + const { savedObjectsClient, alertsClient } = services; + + if (!alertsClient) { + throw new AlertsClientError(); + } + + if (!params.filterQuery && params.filterQueryText) { + try { + const { fromKueryExpression } = await import('@kbn/es-query'); + fromKueryExpression(params.filterQueryText); + } catch (e) { + logger.error(e.message); + + const actionGroup = FIRED_ACTIONS.id; // Change this to an Error action group when able, + const reason = buildInvalidQueryAlertReason(params.filterQueryText); + + const { uuid, start } = alertsClient.report({ + id: UNGROUPED_FACTORY_KEY, + actionGroup, }); - if (!params.filterQuery && params.filterQueryText) { - try { - const { fromKueryExpression } = await import('@kbn/es-query'); - fromKueryExpression(params.filterQueryText); - } catch (e) { - logger.error(e.message); - const actionGroupId = FIRED_ACTIONS.id; // Change this to an Error action group when able - const reason = buildInvalidQueryAlertReason(params.filterQueryText); - const alert = alertFactory(UNGROUPED_FACTORY_KEY, reason, actionGroupId); - const indexedStartedAt = - getAlertStartedDate(UNGROUPED_FACTORY_KEY) ?? startedAt.toISOString(); - const alertUuid = getAlertUuid(UNGROUPED_FACTORY_KEY); - - alert.scheduleActions(actionGroupId, { + const indexedStartedAt = start ?? startedAt.toISOString(); + + alertsClient.setAlertData({ + id: UNGROUPED_FACTORY_KEY, + payload: { + [ALERT_REASON]: reason, + }, + context: { alertDetailsUrl: await getAlertUrl( - alertUuid, + uuid, spaceId, indexedStartedAt, libs.alertsLocator, @@ -170,181 +155,139 @@ export const createInventoryMetricThresholdExecutor = (libs: InfraBackendLibs) = timestamp: indexedStartedAt, spaceId, }), - }); + }, + }); - return { state: {} }; - } + return { state: {} }; } - const source = await libs.sources.getSourceConfiguration(savedObjectsClient, sourceId); - - const [, { logsShared }] = await libs.getStartServices(); - const logQueryFields: LogQueryFields | undefined = await logsShared.logViews - .getClient(savedObjectsClient, esClient) - .getResolvedLogView({ - type: 'log-view-reference', - logViewId: sourceId, - }) - .then( - ({ indices }) => ({ indexPattern: indices }), - () => undefined - ); - - const compositeSize = libs.configuration.alerting.inventory_threshold.group_by_page_size; - const { dateEnd } = getTimeRange(); - const results = await Promise.all( - criteria.map((condition) => - evaluateCondition({ - compositeSize, - condition, - esClient, - executionTimestamp: new Date(dateEnd), - filterQuery, - logger, - logQueryFields, - nodeType, - source, - }) - ) + } + const source = await libs.sources.getSourceConfiguration(savedObjectsClient, sourceId); + + const [, { logsShared }] = await libs.getStartServices(); + const logQueryFields: LogQueryFields | undefined = await logsShared.logViews + .getClient(savedObjectsClient, esClient) + .getResolvedLogView({ + type: 'log-view-reference', + logViewId: sourceId, + }) + .then( + ({ indices }) => ({ indexPattern: indices }), + () => undefined ); - let scheduledActionsCount = 0; - const alertLimit = baseAlertFactory.alertLimit.getValue(); - let hasReachedLimit = false; - const inventoryItems = Object.keys(first(results)!); - for (const group of inventoryItems) { - if (scheduledActionsCount >= alertLimit) { - // need to set this so that warning is displayed in the UI and in the logs - hasReachedLimit = true; - break; // once limit is reached, we break out of the loop and don't schedule any more alerts - } - // AND logic; all criteria must be across the threshold - const shouldAlertFire = results.every((result) => result[group]?.shouldFire); - const shouldAlertWarn = results.every((result) => result[group]?.shouldWarn); - // AND logic; because we need to evaluate all criteria, if one of them reports no data then the - // whole alert is in a No Data/Error state - const isNoData = results.some((result) => result[group]?.isNoData); - const isError = results.some((result) => result[group]?.isError); - - const nextState = isError - ? AlertStates.ERROR - : isNoData - ? AlertStates.NO_DATA - : shouldAlertFire - ? AlertStates.ALERT - : shouldAlertWarn - ? AlertStates.WARNING - : AlertStates.OK; - let reason; - if (nextState === AlertStates.ALERT || nextState === AlertStates.WARNING) { + const compositeSize = libs.configuration.alerting.inventory_threshold.group_by_page_size; + const { dateEnd } = getTimeRange(); + const results = await Promise.all( + criteria.map((condition) => + evaluateCondition({ + compositeSize, + condition, + esClient, + executionTimestamp: new Date(dateEnd), + filterQuery, + logger, + logQueryFields, + nodeType, + source, + }) + ) + ); + + let scheduledActionsCount = 0; + const alertLimit = alertsClient.getAlertLimitValue(); + let hasReachedLimit = false; + const inventoryItems = Object.keys(first(results)!); + for (const group of inventoryItems) { + if (scheduledActionsCount >= alertLimit) { + // need to set this so that warning is displayed in the UI and in the logs + hasReachedLimit = true; + break; // once limit is reached, we break out of the loop and don't schedule any more alerts + } + // AND logic; all criteria must be across the threshold + const shouldAlertFire = results.every((result) => result[group]?.shouldFire); + const shouldAlertWarn = results.every((result) => result[group]?.shouldWarn); + // AND logic; because we need to evaluate all criteria, if one of them reports no data then the + // whole alert is in a No Data/Error state + const isNoData = results.some((result) => result[group]?.isNoData); + const isError = results.some((result) => result[group]?.isError); + + const nextState = isError + ? AlertStates.ERROR + : isNoData + ? AlertStates.NO_DATA + : shouldAlertFire + ? AlertStates.ALERT + : shouldAlertWarn + ? AlertStates.WARNING + : AlertStates.OK; + let reason; + if (nextState === AlertStates.ALERT || nextState === AlertStates.WARNING) { + reason = results + .map((result) => + buildReasonWithVerboseMetricName( + group, + result[group], + buildFiredAlertReason, + nextState === AlertStates.WARNING + ) + ) + .join('\n'); + } + if (alertOnNoData) { + if (nextState === AlertStates.NO_DATA) { reason = results + .filter((result) => result[group].isNoData) .map((result) => - buildReasonWithVerboseMetricName( - group, - result[group], - buildFiredAlertReason, - nextState === AlertStates.WARNING - ) + buildReasonWithVerboseMetricName(group, result[group], buildNoDataAlertReason) + ) + .join('\n'); + } else if (nextState === AlertStates.ERROR) { + reason = results + .filter((result) => result[group].isError) + .map((result) => + buildReasonWithVerboseMetricName(group, result[group], buildErrorAlertReason) ) .join('\n'); } - if (alertOnNoData) { - if (nextState === AlertStates.NO_DATA) { - reason = results - .filter((result) => result[group].isNoData) - .map((result) => - buildReasonWithVerboseMetricName(group, result[group], buildNoDataAlertReason) - ) - .join('\n'); - } else if (nextState === AlertStates.ERROR) { - reason = results - .filter((result) => result[group].isError) - .map((result) => - buildReasonWithVerboseMetricName(group, result[group], buildErrorAlertReason) - ) - .join('\n'); - } - } - if (reason) { - const actionGroupId = - nextState === AlertStates.WARNING ? WARNING_ACTIONS_ID : FIRED_ACTIONS_ID; - - const additionalContext = results && results.length > 0 ? results[0][group].context : {}; - additionalContext.tags = Array.from( - new Set([...(additionalContext.tags ?? []), ...ruleTags]) - ); - - const evaluationValues = getEvaluationValues(results, group); - const thresholds = getThresholds(criteria); + } + if (reason) { + const actionGroup = + nextState === AlertStates.WARNING ? WARNING_ACTIONS_ID : FIRED_ACTIONS_ID; - const alert = alertFactory( - group, - reason, - actionGroupId, - additionalContext, - evaluationValues, - thresholds - ); - const indexedStartedAt = getAlertStartedDate(group) ?? startedAt.toISOString(); - const alertUuid = getAlertUuid(group); + const additionalContext = results && results.length > 0 ? results[0][group].context : {}; + additionalContext.tags = Array.from( + new Set([...(additionalContext.tags ?? []), ...ruleTags]) + ); - scheduledActionsCount++; + const evaluationValues = getEvaluationValues(results, group); + const thresholds = getThresholds(criteria); - const context = { - alertDetailsUrl: await getAlertUrl( - alertUuid, - spaceId, - indexedStartedAt, - libs.alertsLocator, - libs.basePath.publicBaseUrl - ), - alertState: stateToAlertMessage[nextState], - group, - reason, - metric: mapToConditionsLookup(criteria, (c) => c.metric), - timestamp: startedAt.toISOString(), - threshold: mapToConditionsLookup(criteria, (c) => c.threshold), - value: mapToConditionsLookup(results, (result) => - formatMetric(result[group].metric, result[group].currentValue) - ), - viewInAppUrl: getInventoryViewInAppUrlWithSpaceId({ - basePath: libs.basePath, - criteria, - nodeType, - timestamp: indexedStartedAt, - spaceId, - hostName: additionalContext?.host?.name, - }), - ...additionalContext, - }; - alert.scheduleActions(actionGroupId, context); - } - } + const { uuid, start } = alertsClient.report({ + id: group, + actionGroup, + }); - baseAlertFactory.alertLimit.setLimitReached(hasReachedLimit); - const { getRecoveredAlerts } = services.alertFactory.done(); - const recoveredAlerts = getRecoveredAlerts(); + const indexedStartedAt = start ?? startedAt.toISOString(); - for (const alert of recoveredAlerts) { - const recoveredAlertId = alert.getId(); - const indexedStartedAt = getAlertStartedDate(recoveredAlertId) ?? startedAt.toISOString(); - const alertUuid = getAlertUuid(recoveredAlertId); - const alertHits = alertUuid ? await getAlertByAlertUuid(alertUuid) : undefined; - const additionalContext = getContextForRecoveredAlerts(alertHits); - const originalActionGroup = getOriginalActionGroup(alertHits); + scheduledActionsCount++; - alert.setContext({ + const context = { alertDetailsUrl: await getAlertUrl( - alertUuid, + uuid, spaceId, indexedStartedAt, libs.alertsLocator, libs.basePath.publicBaseUrl ), - alertState: stateToAlertMessage[AlertStates.OK], - group: recoveredAlertId, + alertState: stateToAlertMessage[nextState], + group, + reason, metric: mapToConditionsLookup(criteria, (c) => c.metric), - threshold: mapToConditionsLookup(criteria, (c) => c.threshold), timestamp: startedAt.toISOString(), + threshold: mapToConditionsLookup(criteria, (c) => c.threshold), + value: mapToConditionsLookup(results, (result) => + formatMetric(result[group].metric, result[group].currentValue) + ), viewInAppUrl: getInventoryViewInAppUrlWithSpaceId({ basePath: libs.basePath, criteria, @@ -353,19 +296,73 @@ export const createInventoryMetricThresholdExecutor = (libs: InfraBackendLibs) = spaceId, hostName: additionalContext?.host?.name, }), - originalAlertState: translateActionGroupToAlertState(originalActionGroup), - originalAlertStateWasALERT: originalActionGroup === FIRED_ACTIONS_ID, - originalAlertStateWasWARNING: originalActionGroup === WARNING_ACTIONS_ID, ...additionalContext, + }; + + const payload = { + [ALERT_REASON]: reason, + [ALERT_EVALUATION_VALUES]: evaluationValues, + [ALERT_EVALUATION_THRESHOLD]: thresholds, + ...flattenAdditionalContext(additionalContext), + }; + + alertsClient.setAlertData({ + id: group, + payload, + context, }); } + } - const stopTime = Date.now(); - logger.debug(`Scheduled ${scheduledActionsCount} actions in ${stopTime - startTime}ms`); - - return { state: {} }; + alertsClient.setAlertLimitReached(hasReachedLimit); + const recoveredAlerts = alertsClient.getRecoveredAlerts() ?? []; + + for (const recoveredAlert of recoveredAlerts) { + const recoveredAlertId = recoveredAlert.alert.getId(); + const indexedStartedAt = recoveredAlert.alert.getStart() ?? startedAt.toISOString(); + const alertUuid = recoveredAlert.alert.getUuid(); + const alertHits = recoveredAlert.hit; + const additionalContext = getContextForRecoveredAlerts(alertHits); + const originalActionGroup = getOriginalActionGroup(alertHits); + + const recoveredContext = { + alertDetailsUrl: await getAlertUrl( + alertUuid, + spaceId, + indexedStartedAt, + libs.alertsLocator, + libs.basePath.publicBaseUrl + ), + alertState: stateToAlertMessage[AlertStates.OK], + group: recoveredAlertId, + metric: mapToConditionsLookup(criteria, (c) => c.metric), + threshold: mapToConditionsLookup(criteria, (c) => c.threshold), + timestamp: startedAt.toISOString(), + viewInAppUrl: getInventoryViewInAppUrlWithSpaceId({ + basePath: libs.basePath, + criteria, + nodeType, + timestamp: indexedStartedAt, + spaceId, + hostName: additionalContext?.host?.name, + }), + originalAlertState: translateActionGroupToAlertState(originalActionGroup), + originalAlertStateWasALERT: originalActionGroup === FIRED_ACTIONS_ID, + originalAlertStateWasWARNING: originalActionGroup === WARNING_ACTIONS_ID, + ...additionalContext, + }; + + alertsClient.setAlertData({ + id: recoveredAlertId, + context: recoveredContext, + }); } - ); + + const stopTime = Date.now(); + logger.debug(`Scheduled ${scheduledActionsCount} actions in ${stopTime - startTime}ms`); + + return { state: {} }; + }; const formatThreshold = (metric: SnapshotMetricType, value: number | number[]) => { const metricFormatter = get(METRIC_FORMATTERS, metric, METRIC_FORMATTERS.count); diff --git a/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/register_metric_threshold_rule_type.ts b/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/register_metric_threshold_rule_type.ts index 108bf49102393..e7ea693a0e74d 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/register_metric_threshold_rule_type.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/register_metric_threshold_rule_type.ts @@ -11,7 +11,6 @@ import { i18n } from '@kbn/i18n'; import { ActionGroupIdsOf } from '@kbn/alerting-plugin/common'; import { GetViewInAppRelativeUrlFnOpts, - IRuleTypeAlerts, PluginSetupContract, RuleType, } from '@kbn/alerting-plugin/server'; @@ -45,7 +44,6 @@ import { FIRED_ACTIONS, WARNING_ACTIONS, NO_DATA_ACTIONS, - MetricThresholdAlert, } from './metric_threshold_executor'; import { MetricsRulesTypeAlertDefinition } from '../register_rule_types'; import { O11Y_AAD_FIELDS } from '../../../../common/constants'; @@ -199,10 +197,7 @@ export async function registerMetricThresholdRuleType( }, category: DEFAULT_APP_CATEGORIES.observability.id, producer: 'infrastructure', - alerts: { - ...MetricsRulesTypeAlertDefinition, - shouldWrite: true, - } as IRuleTypeAlerts, + alerts: MetricsRulesTypeAlertDefinition, getViewInAppRelativeUrl: ({ rule }: GetViewInAppRelativeUrlFnOpts<{}>) => observabilityPaths.ruleDetails(rule.id), }); diff --git a/x-pack/plugins/observability_solution/infra/server/lib/alerting/register_rule_types.ts b/x-pack/plugins/observability_solution/infra/server/lib/alerting/register_rule_types.ts index c26d92d5291c0..40eb1fb5c3e89 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/alerting/register_rule_types.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/alerting/register_rule_types.ts @@ -12,6 +12,7 @@ import { registerInventoryThresholdRuleType } from './inventory_metric_threshold import { registerLogThresholdRuleType } from './log_threshold/register_log_threshold_rule_type'; import { InfraBackendLibs } from '../infra_types'; import type { InfraConfig } from '../../types'; +import { MetricThresholdAlert } from './metric_threshold/metric_threshold_executor'; export const LOGS_RULES_ALERT_CONTEXT = 'observability.logs'; // Defines which alerts-as-data index logs rules will use @@ -24,12 +25,12 @@ export const LogsRulesTypeAlertDefinition: IRuleTypeAlerts = { export const METRICS_RULES_ALERT_CONTEXT = 'observability.metrics'; // Defines which alerts-as-data index metrics rules will use -export const MetricsRulesTypeAlertDefinition: IRuleTypeAlerts = { +export const MetricsRulesTypeAlertDefinition: IRuleTypeAlerts = { context: METRICS_RULES_ALERT_CONTEXT, mappings: { fieldMap: legacyExperimentalFieldMap }, useEcs: true, useLegacyAlerts: true, - shouldWrite: false, + shouldWrite: true, }; const registerRuleTypes = ( From 8fcf476cbe8cd1807744620b8e71acdde2af5851 Mon Sep 17 00:00:00 2001 From: Jon Date: Fri, 22 Mar 2024 08:22:18 -0500 Subject: [PATCH 54/90] [ci] Re-add Defend Workflows to on-merge (#179112) We recently had failures on the es serverless promotion pipeline and noted these tests were not running on merge. This re-adds the tests to on-merge to be consistent with the rest of the cypress tests. --- .buildkite/pipelines/on_merge.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/.buildkite/pipelines/on_merge.yml b/.buildkite/pipelines/on_merge.yml index fcf4a82c0801c..7fa51db6a49bd 100644 --- a/.buildkite/pipelines/on_merge.yml +++ b/.buildkite/pipelines/on_merge.yml @@ -307,6 +307,34 @@ steps: - exit_status: '*' limit: 1 + - command: .buildkite/scripts/steps/functional/defend_workflows.sh + label: 'Defend Workflows Cypress Tests' + agents: + queue: n2-4-virt + depends_on: + - build + - quick_checks + timeout_in_minutes: 60 + parallelism: 16 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: .buildkite/scripts/steps/functional/defend_workflows_serverless.sh + label: 'Defend Workflows Cypress Tests on Serverless' + agents: + queue: n2-4-virt + depends_on: + - build + - quick_checks + timeout_in_minutes: 60 + parallelism: 10 + retry: + automatic: + - exit_status: '*' + limit: 1 + - command: '.buildkite/scripts/steps/functional/on_merge_unsupported_ftrs.sh' label: Trigger unsupported ftr tests timeout_in_minutes: 10 From 0092bb16aabd1b7640bd2b5fc13c4c38c641652e Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Fri, 22 Mar 2024 09:27:35 -0400 Subject: [PATCH 55/90] [Fleet] Support simplfied package policy in preconfiguration (#179087) --- docs/settings/fleet-settings.asciidoc | 18 ++-- .../simplified_package_policy_helper.ts | 1 + .../common/types/models/preconfiguration.ts | 18 ++-- .../server/services/preconfiguration.test.ts | 86 ++++++++++++++++- .../fleet/server/services/preconfiguration.ts | 92 +++++++++++++------ .../server/types/models/package_policy.ts | 29 ++++-- .../server/types/models/preconfiguration.ts | 86 +++++++++-------- 7 files changed, 236 insertions(+), 94 deletions(-) diff --git a/docs/settings/fleet-settings.asciidoc b/docs/settings/fleet-settings.asciidoc index f20094837b3e7..7a2b427d0fa9c 100644 --- a/docs/settings/fleet-settings.asciidoc +++ b/docs/settings/fleet-settings.asciidoc @@ -137,7 +137,7 @@ List of agent policies that are configured when the {fleet} app starts. `namespace`:::: String identifying this policy's namespace. `inputs`:::: - Array that overrides any default input settings for this integration. Follows the same schema as integration inputs, with the exception that any object in `vars` can be passed `frozen: true` in order to prevent that specific `var` from being edited by the user. + Map of input for the integration. Follows the same schema as the package policy API inputs, with the exception that any object in `vars` can be passed `frozen: true` in order to prevent that specific `var` from being edited by the user. ======= ===== + @@ -151,27 +151,25 @@ xpack.fleet.packages: xpack.fleet.agentPolicies: - name: Preconfigured Policy - id: 1 + id: preconfigured-policy namespace: test package_policies: - package: name: system name: System Integration + namespace: test id: preconfigured-system inputs: - - type: system/metrics + system-system/metrics: enabled: true vars: - - name: system.hostfs - value: home/test + '[system.hostfs]': home/test streams: - - data_stream: - dataset: system.core + '[system.core]': enabled: true vars: - - name: period - value: 20s - - type: winlog + period: 20s + system-winlog: enabled: false ---- 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 ca42d65d8a399..697ef7c077f2e 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 @@ -146,6 +146,7 @@ export function simplifiedPackagePolicytoNewPackagePolicy( vars: packageLevelVars, } = data; const packagePolicy = packageToPackagePolicy(packageInfo, policyId, namespace, name, description); + 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/preconfiguration.ts b/x-pack/plugins/fleet/common/types/models/preconfiguration.ts index c6ad134fb31c9..8363116bf3bb1 100644 --- a/x-pack/plugins/fleet/common/types/models/preconfiguration.ts +++ b/x-pack/plugins/fleet/common/types/models/preconfiguration.ts @@ -5,6 +5,8 @@ * 2.0. */ +import type { SimplifiedPackagePolicy } from '../../services/simplified_package_policy_helper'; + import type { PackagePolicyPackage, NewPackagePolicy, @@ -24,12 +26,16 @@ export interface PreconfiguredAgentPolicy extends Omit> & { - id?: string | number; - name: string; - package: Partial & { name: string }; - inputs?: InputsOverride[]; - } + | (Partial> & { + id?: string | number; + name: string; + package: Partial & { name: string }; + inputs?: InputsOverride[]; + }) + | (Omit & { + id: string; + package: { name: string }; + }) >; } diff --git a/x-pack/plugins/fleet/server/services/preconfiguration.test.ts b/x-pack/plugins/fleet/server/services/preconfiguration.test.ts index fa81ae68a0445..d9fd99bfc2f24 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration.test.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration.test.ts @@ -233,6 +233,22 @@ jest.mock('./epm/packages/get', () => ({ return { status: 'installed', ...installedPackage, + policy_templates: [ + { + name: 'test_template', + inputs: [ + { + type: 'foo', + vars: [ + { + name: 'bar', + type: 'text', + }, + ], + }, + ], + }, + ], }; }, getInstallation({ pkgName }: { pkgName: string }) { @@ -379,6 +395,72 @@ describe('policy preconfiguration', () => { expect(nonFatalErrors.length).toBe(0); }); + it('should install packages and configure agent policies successfully if using simplified package policy', async () => { + const soClient = getPutPreconfiguredPackagesMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + const { policies, packages, nonFatalErrors } = await ensurePreconfiguredPackagesAndPolicies( + soClient, + esClient, + [ + { + name: 'Test policy', + namespace: 'default', + id: 'test-id', + package_policies: [ + { + id: 'test-1', + name: 'Test package', + namespace: 'default', + description: 'test', + package: { name: 'test_package' }, + inputs: { + 'test_template-foo': { + vars: { + bar: 'test', + }, + }, + }, + }, + ], + }, + ] as PreconfiguredAgentPolicy[], + [{ name: 'test_package', version: '3.0.0' }], + mockDefaultOutput, + mockDefaultDownloadService, + DEFAULT_SPACE_ID + ); + + expect(policies.length).toEqual(1); + expect(policies[0].id).toBe('test-id'); + expect(packages).toEqual(expect.arrayContaining(['test_package-3.0.0'])); + expect(nonFatalErrors.length).toBe(0); + + expect(mockedPackagePolicyService.create).toBeCalledWith( + expect.anything(), + expect.anything(), + expect.objectContaining({ + description: 'test', + enabled: true, + inputs: [ + { + enabled: true, + policy_template: 'test_template', + streams: [], + type: 'foo', + vars: { bar: { type: 'text', value: 'test' } }, + }, + ], + name: 'Test package', + namespace: 'default', + package: { name: 'test_package', title: 'test_package', version: '3.0.0' }, + policy_id: 'test-id', + vars: undefined, + }), + expect.objectContaining({ id: 'test-1' }) + ); + }); + it('should install prelease packages if needed', async () => { const soClient = getPutPreconfiguredPackagesMock(); const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; @@ -869,7 +951,9 @@ describe('policy preconfiguration', () => { const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; // Install an older version of a test package - mockInstalledPackages.set('test_package', { version: '0.9.0' }); + mockInstalledPackages.set('test_package', { + version: '0.9.0', + }); const { policies, packages, nonFatalErrors } = await ensurePreconfiguredPackagesAndPolicies( diff --git a/x-pack/plugins/fleet/server/services/preconfiguration.ts b/x-pack/plugins/fleet/server/services/preconfiguration.ts index a6c05bf969ff2..abab7edcc103b 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration.ts @@ -25,6 +25,10 @@ import type { import type { PreconfigurationError } from '../../common/constants'; import { PRECONFIGURATION_LATEST_KEYWORD } from '../../common/constants'; import { PRECONFIGURATION_DELETION_RECORD_SAVED_OBJECT_TYPE } from '../constants'; +import { + type SimplifiedPackagePolicy, + simplifiedPackagePolicytoNewPackagePolicy, +} from '../../common/services/simplified_package_policy_helper'; import { FleetError } from '../errors'; @@ -34,7 +38,7 @@ import { getInstallation, getPackageInfo } from './epm/packages'; import { ensurePackagesCompletedInstall } from './epm/packages/install'; import { bulkInstallPackages } from './epm/packages/bulk_install_packages'; import { agentPolicyService, addPackageToAgentPolicy } from './agent_policy'; -import type { InputsOverride } from './package_policy'; +import { type InputsOverride, packagePolicyService } from './package_policy'; import { preconfigurePackageInputs } from './package_policy'; import { appContextService } from './app_context'; import type { UpgradeManagedPackagePoliciesResult } from './managed_package_policies'; @@ -219,7 +223,8 @@ export async function ensurePreconfiguredPackagesAndPolicies( true ); const installedPackagePolicies = await Promise.all( - packagePolicies.map(async ({ package: pkg, name, ...newPackagePolicy }) => { + packagePolicies.map(async (preconfiguredPackagePolicy) => { + const { package: pkg, ...newPackagePolicy } = preconfiguredPackagePolicy; const installedPackage = await getInstallation({ savedObjectsClient: soClient, pkgName: pkg.name, @@ -245,22 +250,23 @@ export async function ensurePreconfiguredPackagesAndPolicies( '[{agentPolicyName}] could not be added. [{pkgName}] is not installed, add [{pkgName}] to [{packagesConfigValue}] or remove it from [{packagePolicyName}].', values: { agentPolicyName: preconfiguredAgentPolicy.name, - packagePolicyName: name, + packagePolicyName: newPackagePolicy.name, pkgName: pkg.name, packagesConfigValue: 'xpack.fleet.packages', }, }) ); } - return { name, installedPackage, ...newPackagePolicy }; + return { installedPackage, packagePolicy: newPackagePolicy }; }) ); const packagePoliciesToAdd = installedPackagePolicies.filter((installablePackagePolicy) => { return !(agentPolicyWithPackagePolicies?.package_policies as PackagePolicy[]).some( (packagePolicy) => - (packagePolicy.id !== undefined && packagePolicy.id === installablePackagePolicy.id) || - packagePolicy.name === installablePackagePolicy.name + (packagePolicy.id !== undefined && + packagePolicy.id === installablePackagePolicy.packagePolicy.id) || + packagePolicy.name === installablePackagePolicy.packagePolicy.name ); }); logger.debug(`Adding preconfigured package policies ${packagePoliciesToAdd}`); @@ -330,14 +336,16 @@ async function addPreconfiguredPolicyPackages( soClient: SavedObjectsClientContract, esClient: ElasticsearchClient, agentPolicy: AgentPolicy, - installedPackagePolicies: Array< - Partial> & { - id?: string | number; - name: string; - installedPackage: Installation; - inputs?: InputsOverride[]; - } - >, + installedPackagePolicies: Array<{ + installedPackage: Installation; + packagePolicy: + | (Partial> & { + id?: string | number; + name: string; + inputs?: InputsOverride[]; + }) + | (Omit & { id: string }); + }>, defaultOutput: Output, bumpAgentPolicyRevison = false ) { @@ -346,9 +354,8 @@ async function addPreconfiguredPolicyPackages( const packageInfoMap = new Map(); // Add packages synchronously to avoid overwriting - for (const { installedPackage, id, name, description, inputs } of installedPackagePolicies) { + for (const { installedPackage, packagePolicy } of installedPackagePolicies) { let packageInfo: PackageInfo; - if (packageInfoMap.has(installedPackage.name)) { packageInfo = packageInfoMap.get(installedPackage.name)!; } else { @@ -359,18 +366,45 @@ async function addPreconfiguredPolicyPackages( }); } - await addPackageToAgentPolicy( - soClient, - esClient, - installedPackage, - agentPolicy, - defaultOutput, - packageInfo, - name, - id, - description, - (policy) => preconfigurePackageInputs(policy, packageInfo, inputs), - bumpAgentPolicyRevison - ); + if (Array.isArray(packagePolicy.inputs)) { + const { id, name, description, inputs } = packagePolicy; + await addPackageToAgentPolicy( + soClient, + esClient, + installedPackage, + agentPolicy, + defaultOutput, + packageInfo, + name, + id, + description, + (policy) => preconfigurePackageInputs(policy, packageInfo, inputs), + bumpAgentPolicyRevison + ); + } else { + const simplifiedPackagePolicy = packagePolicy as SimplifiedPackagePolicy; + const id = simplifiedPackagePolicy.id?.toString(); + // Simplified package policy + const newPackagePolicy = simplifiedPackagePolicytoNewPackagePolicy( + { + ...(simplifiedPackagePolicy as SimplifiedPackagePolicy), + id, + policy_id: agentPolicy.id, + namespace: packagePolicy.namespace || agentPolicy.namespace, + }, + packageInfo, + {} + ); + + await packagePolicyService.create(soClient, esClient, newPackagePolicy, { + id, + bumpRevision: bumpAgentPolicyRevison, + skipEnsureInstalled: true, + skipUniqueNameVerification: true, + overwrite: true, + force: true, // To add package to managed policy we need the force flag + packageInfo, + }); + } } } 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 7153982498c29..de7277af63b2c 100644 --- a/x-pack/plugins/fleet/server/types/models/package_policy.ts +++ b/x-pack/plugins/fleet/server/types/models/package_policy.ts @@ -160,18 +160,11 @@ const SimplifiedVarsSchema = schema.recordOf( ) ); -export const SimplifiedCreatePackagePolicyRequestBodySchema = schema.object({ +export const SimplifiedPackagePolicyBaseSchema = schema.object({ id: schema.maybe(schema.string()), name: schema.string(), description: schema.maybe(schema.string()), - policy_id: schema.string(), namespace: schema.maybe(schema.string()), - package: schema.object({ - name: schema.string(), - version: schema.string(), - experimental_data_stream_features: schema.maybe(ExperimentalDataStreamFeatures), - }), - force: schema.maybe(schema.boolean()), vars: schema.maybe(SimplifiedVarsSchema), inputs: schema.maybe( schema.recordOf( @@ -193,6 +186,26 @@ export const SimplifiedCreatePackagePolicyRequestBodySchema = schema.object({ ), }); +export const SimplifiedPackagePolicyPreconfiguredSchema = SimplifiedPackagePolicyBaseSchema.extends( + { + id: schema.string(), + package: schema.object({ + name: schema.string(), + }), + } +); + +export const SimplifiedCreatePackagePolicyRequestBodySchema = + SimplifiedPackagePolicyBaseSchema.extends({ + policy_id: schema.string(), + force: schema.maybe(schema.boolean()), + package: schema.object({ + name: schema.string(), + version: schema.string(), + experimental_data_stream_features: schema.maybe(ExperimentalDataStreamFeatures), + }), + }); + export const UpdatePackagePolicyRequestBodySchema = schema.object({ ...CreatePackagePolicyProps, name: schema.maybe(schema.string()), diff --git a/x-pack/plugins/fleet/server/types/models/preconfiguration.ts b/x-pack/plugins/fleet/server/types/models/preconfiguration.ts index e814616268d3d..ce8fb7df3937d 100644 --- a/x-pack/plugins/fleet/server/types/models/preconfiguration.ts +++ b/x-pack/plugins/fleet/server/types/models/preconfiguration.ts @@ -19,7 +19,10 @@ import { } from './output'; import { AgentPolicyBaseSchema, AgentPolicyNamespaceSchema } from './agent_policy'; -import { PackagePolicyNamespaceSchema } from './package_policy'; +import { + PackagePolicyNamespaceSchema, + SimplifiedPackagePolicyPreconfiguredSchema, +} from './package_policy'; const varsSchema = schema.maybe( schema.arrayOf( @@ -139,47 +142,50 @@ export const PreconfiguredAgentPoliciesSchema = schema.arrayOf( data_output_id: schema.maybe(schema.string()), monitoring_output_id: schema.maybe(schema.string()), package_policies: schema.arrayOf( - schema.object({ - id: schema.maybe(schema.oneOf([schema.string(), schema.number()])), - name: schema.string(), - package: schema.object({ - name: schema.string({ - validate: (value) => { - if (value === 'synthetics') { - return i18n.translate('xpack.fleet.config.disableSynthetics', { - defaultMessage: - 'Synthetics package is not supported via kibana.yml config. Please use Synthetics App to create monitors in private locations. https://www.elastic.co/guide/en/observability/current/synthetics-private-location.html', - }); - } - }, + schema.oneOf([ + schema.object({ + id: schema.maybe(schema.oneOf([schema.string(), schema.number()])), + name: schema.string(), + package: schema.object({ + name: schema.string({ + validate: (value) => { + if (value === 'synthetics') { + return i18n.translate('xpack.fleet.config.disableSynthetics', { + defaultMessage: + 'Synthetics package is not supported via kibana.yml config. Please use Synthetics App to create monitors in private locations. https://www.elastic.co/guide/en/observability/current/synthetics-private-location.html', + }); + } + }, + }), }), + description: schema.maybe(schema.string()), + namespace: schema.maybe(PackagePolicyNamespaceSchema), + inputs: schema.maybe( + schema.arrayOf( + schema.object({ + type: schema.string(), + enabled: schema.maybe(schema.boolean()), + keep_enabled: schema.maybe(schema.boolean()), + vars: varsSchema, + streams: schema.maybe( + schema.arrayOf( + schema.object({ + data_stream: schema.object({ + type: schema.maybe(schema.string()), + dataset: schema.string(), + }), + enabled: schema.maybe(schema.boolean()), + keep_enabled: schema.maybe(schema.boolean()), + vars: varsSchema, + }) + ) + ), + }) + ) + ), }), - description: schema.maybe(schema.string()), - namespace: schema.maybe(PackagePolicyNamespaceSchema), - inputs: schema.maybe( - schema.arrayOf( - schema.object({ - type: schema.string(), - enabled: schema.maybe(schema.boolean()), - keep_enabled: schema.maybe(schema.boolean()), - vars: varsSchema, - streams: schema.maybe( - schema.arrayOf( - schema.object({ - data_stream: schema.object({ - type: schema.maybe(schema.string()), - dataset: schema.string(), - }), - enabled: schema.maybe(schema.boolean()), - keep_enabled: schema.maybe(schema.boolean()), - vars: varsSchema, - }) - ) - ), - }) - ) - ), - }) + SimplifiedPackagePolicyPreconfiguredSchema, + ]) ), }), { From d7865619c89c8bf651ae906e1c3348c5f91066bb Mon Sep 17 00:00:00 2001 From: Alex Szabo Date: Fri, 22 Mar 2024 14:31:30 +0100 Subject: [PATCH 56/90] [Ops] Adjust serverless release settings (#179250) ## Summary When we rolled out the pipeline settings resulting from the defaults of the backstage-way of defining resources, we encountered a few defaults we didn't know about. This PR adjusts these missing values (they're not relevant for this job, as this job is more a process starter than a branch-related build job) and renames a used pipeline implementation to something more accurate. --- .../kibana-serverless-release.yml | 10 ++++++++-- ...nt_tag.yml => run_serverless_release_assistant.yml} | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) rename .buildkite/pipelines/serverless_deployment/{create_deployment_tag.yml => run_serverless_release_assistant.yml} (95%) diff --git a/.buildkite/pipeline-resource-definitions/kibana-serverless-release.yml b/.buildkite/pipeline-resource-definitions/kibana-serverless-release.yml index 2be61c32c94cf..5bcc818f1d801 100644 --- a/.buildkite/pipeline-resource-definitions/kibana-serverless-release.yml +++ b/.buildkite/pipeline-resource-definitions/kibana-serverless-release.yml @@ -6,7 +6,7 @@ metadata: description: Initiate kibana serverless releases links: - title: Pipeline - url: https://buildkite.com/elastic/kibana-serverless-release-1 + url: https://buildkite.com/elastic/kibana-serverless-release spec: type: buildkite-pipeline owner: 'group:kibana-operations' @@ -22,17 +22,23 @@ spec: SLACK_NOTIFICATIONS_CHANNEL: '#kibana-operations-alerts' ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'false' default_branch: main + allow_rebuilds: false + skip_intermediate_builds: false repository: elastic/kibana - pipeline_file: .buildkite/pipelines/serverless_deployment/create_deployment_tag.yml + pipeline_file: .buildkite/pipelines/serverless_deployment/run_serverless_release_assistant.yml provider_settings: build_branches: false build_pull_requests: false publish_commit_status: false trigger_mode: none build_tags: false + prefix_pull_request_fork_branch_names: false + skip_pull_request_builds_for_existing_commits: false teams: kibana-release-operators: access_level: MANAGE_BUILD_AND_READ + everyone: + access_level: READ_ONLY schedules: Weekly automated promotion to QA: cronline: 0 6 * * 1 diff --git a/.buildkite/pipelines/serverless_deployment/create_deployment_tag.yml b/.buildkite/pipelines/serverless_deployment/run_serverless_release_assistant.yml similarity index 95% rename from .buildkite/pipelines/serverless_deployment/create_deployment_tag.yml rename to .buildkite/pipelines/serverless_deployment/run_serverless_release_assistant.yml index 528498469fca5..555b50efb2294 100644 --- a/.buildkite/pipelines/serverless_deployment/create_deployment_tag.yml +++ b/.buildkite/pipelines/serverless_deployment/run_serverless_release_assistant.yml @@ -1,4 +1,6 @@ +## Lists potential commits for deployment ## Creates deploy@ tag on Kibana +## Then kicks of the deployment to QA agents: image: family/kibana-ubuntu-2004 From d96666d7807a2d10efb919613e9714523c04ca4e Mon Sep 17 00:00:00 2001 From: Maryam Saeidi Date: Fri, 22 Mar 2024 14:49:32 +0100 Subject: [PATCH 57/90] Correct custom threshold order in the rule list (#179244) Since the custom threshold is now GA, I changed the order based on the original plan mentioned [here](https://github.com/elastic/kibana/issues/166136). --- .../public/rules/register_observability_rule_types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/observability_solution/observability/public/rules/register_observability_rule_types.ts b/x-pack/plugins/observability_solution/observability/public/rules/register_observability_rule_types.ts index 694874e533191..ed3812ebc571b 100644 --- a/x-pack/plugins/observability_solution/observability/public/rules/register_observability_rule_types.ts +++ b/x-pack/plugins/observability_solution/observability/public/rules/register_observability_rule_types.ts @@ -116,6 +116,6 @@ export const registerObservabilityRuleTypes = async ( '../components/custom_threshold/components/alert_details_app_section/alert_details_app_section' ) ), - priority: 5, + priority: 110, }); }; From 758dafe59a34d6cf2649a6437ec9d993ef9d2297 Mon Sep 17 00:00:00 2001 From: Elena Stoeva <59341489+ElenaStoeva@users.noreply.github.com> Date: Fri, 22 Mar 2024 13:56:24 +0000 Subject: [PATCH 58/90] [Console] Apply console settings to new monaco editor (#178982) Closes https://github.com/elastic/kibana/issues/178966 Closes https://github.com/elastic/kibana/issues/176799 ## Summary This PR applies the console settings to the new Monaco editor: - `fontSize` - `wrapMode` - `isAccessibilityOverlayEnabled` It also modifies the `CodeEditor` component to accept an `accessibilityOverlayEnabled` prop. **How to test:** 1. Create a `config/kibana.dev.yml` file (if one doesn't exist already) and add the line: `console.dev.enableMonaco: true` 2. Start Es and Kibana and navigate to Console 3. Click on Settings 4. Try changing the "Font size", "Wrap long lines", and "Accessibility overlay" settings and verify that the changes are correctly applied to the new monaco editor. --- .../shared-ux/code_editor/impl/code_editor.tsx | 8 +++++++- .../containers/editor/monaco/monaco_editor.tsx | 15 ++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/shared-ux/code_editor/impl/code_editor.tsx b/packages/shared-ux/code_editor/impl/code_editor.tsx index 282576f58de94..f55bd115a94d3 100644 --- a/packages/shared-ux/code_editor/impl/code_editor.tsx +++ b/packages/shared-ux/code_editor/impl/code_editor.tsx @@ -148,6 +148,11 @@ export interface CodeEditorProps { minLines?: number; maxLines?: number; }; + + /** + * Enables the editor to get disabled when pressing ESC to resolve focus trapping for accessibility. + */ + accessibilityOverlayEnabled?: boolean; } export const CodeEditor: React.FC = ({ @@ -177,6 +182,7 @@ export const CodeEditor: React.FC = ({ defaultMessage: 'Cannot edit in read-only editor', }), fitToContent, + accessibilityOverlayEnabled = true, }) => { const { colorMode, euiTheme } = useEuiTheme(); const useDarkTheme = useDarkThemeProp ?? colorMode === 'DARK'; @@ -486,7 +492,7 @@ export const CodeEditor: React.FC = ({ data-test-subj="kibanaCodeEditor" className="kibanaCodeEditor" > - {renderPrompt()} + {accessibilityOverlayEnabled && renderPrompt()} {allowFullScreen || isCopyable ? ( 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 f12711db4f3dc..4f637120e32c5 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 @@ -10,8 +10,11 @@ import React, { FunctionComponent, useState } from 'react'; import { CodeEditor } from '@kbn/code-editor'; import { css } from '@emotion/react'; import { CONSOLE_LANG_ID } from '@kbn/monaco'; +import { useEditorReadContext } from '../../../contexts'; export const MonacoEditor: FunctionComponent = () => { + const { settings } = useEditorReadContext(); + const [value, setValue] = useState('GET /.kibana/_search'); return (
{ width: 100%; `} > - +
); }; From ca9c4bd3ea96f34c13ba7ebf50bc38d980228043 Mon Sep 17 00:00:00 2001 From: Devon Thomson Date: Fri, 22 Mar 2024 09:58:17 -0400 Subject: [PATCH 59/90] [Embeddables Rebuild] Enhance BuildEmbeddable function (#179205) Enhances the `buildEmbeddable` function. --- .../react_embeddable_renderer.test.tsx | 42 ++++++++++++++++++- .../react_embeddable_renderer.tsx | 6 ++- .../public/react_embeddable_system/types.ts | 10 ++++- 3 files changed, 53 insertions(+), 5 deletions(-) diff --git a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.test.tsx b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.test.tsx index d2afc6fbb29e9..883854f65863f 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.test.tsx +++ b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.test.tsx @@ -58,7 +58,47 @@ describe('react embeddable renderer', () => { it('builds the embeddable', () => { const buildEmbeddableSpy = jest.spyOn(testEmbeddableFactory, 'buildEmbeddable'); render(); - expect(buildEmbeddableSpy).toHaveBeenCalledWith({ bork: 'blorp?' }, expect.any(Function)); + expect(buildEmbeddableSpy).toHaveBeenCalledWith( + { bork: 'blorp?' }, + expect.any(Function), + expect.any(String), + undefined + ); + }); + + it('builds the embeddable, providing an id', () => { + const buildEmbeddableSpy = jest.spyOn(testEmbeddableFactory, 'buildEmbeddable'); + render( + + ); + expect(buildEmbeddableSpy).toHaveBeenCalledWith( + { bork: 'blorp?' }, + expect.any(Function), + '12345', + undefined + ); + }); + + it('builds the embeddable, providing a parent', () => { + const buildEmbeddableSpy = jest.spyOn(testEmbeddableFactory, 'buildEmbeddable'); + const parentApi = getMockPresentationContainer(); + render( + + ); + expect(buildEmbeddableSpy).toHaveBeenCalledWith( + { bork: 'blorp?' }, + expect.any(Function), + expect.any(String), + parentApi + ); }); it('renders the given component once it resolves', () => { 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 64340dc2d05bc..768ffac88eb2b 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 @@ -49,6 +49,7 @@ export const ReactEmbeddableRenderer = < const componentPromise = useMemo( () => (async () => { + const uuid = maybeId ?? generateId(); const factory = getReactEmbeddableFactory(type) as ReactEmbeddableFactory< StateType, ApiType @@ -57,7 +58,6 @@ export const ReactEmbeddableRenderer = < apiRegistration: ReactEmbeddableApiRegistration, comparators: EmbeddableStateComparators ) => { - const uuid = maybeId ?? generateId(); const { unsavedChanges, resetUnsavedChanges, cleanup } = startTrackingEmbeddableUnsavedChanges( uuid, @@ -83,7 +83,9 @@ export const ReactEmbeddableRenderer = < const { api, Component } = await factory.buildEmbeddable( factory.deserializeState(state), - registerApi + registerApi, + uuid, + parentApi ); return React.forwardRef((_, ref) => { diff --git a/src/plugins/embeddable/public/react_embeddable_system/types.ts b/src/plugins/embeddable/public/react_embeddable_system/types.ts index 247c2f891b718..5068c0c16fdfa 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/types.ts +++ b/src/plugins/embeddable/public/react_embeddable_system/types.ts @@ -5,7 +5,11 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import { HasSerializableState, SerializedPanelState } from '@kbn/presentation-containers'; +import { + HasSerializableState, + PresentationContainer, + SerializedPanelState, +} from '@kbn/presentation-containers'; import { DefaultPresentationPanelApi } from '@kbn/presentation-panel-plugin/public/panel_component/types'; import { HasType, PublishesUnsavedChanges, PublishingSubject } from '@kbn/presentation-publishing'; import React, { ReactElement } from 'react'; @@ -42,7 +46,9 @@ export interface ReactEmbeddableFactory< buildApi: ( apiRegistration: ReactEmbeddableApiRegistration, comparators: EmbeddableStateComparators - ) => ApiType + ) => ApiType, + uuid: string, + parentApi?: PresentationContainer ) => Promise<{ Component: React.FC<{}>; api: ApiType }>; } From dcba4d08f1dcfe2c973f260cba1dea7d7911ac67 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Fri, 22 Mar 2024 15:23:48 +0100 Subject: [PATCH 60/90] Add an option to disable `preboot` phase (#179057) ## Summary Fix https://github.com/elastic/kibana/issues/178180 - Add a new `core.lifecycle.disablePreboot` (internal) config option to forcefully disable Core's `preboot` phase. - Enable the option in the serverless configuration file Gain is around 150/200ms on local developer machine, which translates to ~300/500ms on serverless environment --- config/serverless.yml | 3 + .../src/bootstrap.ts | 30 ++--- .../src/core_config.ts | 23 ++++ .../src/register_service_config.ts | 3 +- .../src/server.test.ts | 34 +++++- .../core-root-server-internal/src/server.ts | 105 +++++++++++------- .../root/disable_preboot.test.ts | 70 ++++++++++++ .../root/jest.integration.config.js | 19 ++++ 8 files changed, 230 insertions(+), 57 deletions(-) create mode 100644 packages/core/root/core-root-server-internal/src/core_config.ts create mode 100644 src/core/server/integration_tests/root/disable_preboot.test.ts create mode 100644 src/core/server/integration_tests/root/jest.integration.config.js diff --git a/config/serverless.yml b/config/serverless.yml index 52ba1bbef1071..00d43341d068c 100644 --- a/config/serverless.yml +++ b/config/serverless.yml @@ -11,6 +11,9 @@ xpack.fleet.internal.retrySetupOnBoot: true # Cloud links xpack.cloud.base_url: 'https://cloud.elastic.co' +# Disable preboot phase for serverless +core.lifecycle.disablePreboot: true + # Enable ZDT migration algorithm migrations.algorithm: zdt diff --git a/packages/core/root/core-root-server-internal/src/bootstrap.ts b/packages/core/root/core-root-server-internal/src/bootstrap.ts index 5c35e03ecf656..aea90c81f4767 100644 --- a/packages/core/root/core-root-server-internal/src/bootstrap.ts +++ b/packages/core/root/core-root-server-internal/src/bootstrap.ts @@ -95,20 +95,24 @@ export async function bootstrap({ configs, cliArgs, applyConfigOverrides }: Boot } try { - const { preboot } = await root.preboot(); - - // If setup is on hold then preboot server is supposed to serve user requests and we can let - // dev parent process know that we are ready for dev mode. - const isSetupOnHold = preboot.isSetupOnHold(); - if (process.send && isSetupOnHold) { - process.send(['SERVER_LISTENING']); - } + const prebootContract = await root.preboot(); + let isSetupOnHold = false; + + if (prebootContract) { + const { preboot } = prebootContract; + // If setup is on hold then preboot server is supposed to serve user requests and we can let + // dev parent process know that we are ready for dev mode. + isSetupOnHold = preboot.isSetupOnHold(); + if (process.send && isSetupOnHold) { + process.send(['SERVER_LISTENING']); + } - if (isSetupOnHold) { - rootLogger.info('Holding setup until preboot stage is completed.'); - const { shouldReloadConfig } = await preboot.waitUntilCanSetup(); - if (shouldReloadConfig) { - await reloadConfiguration('configuration might have changed during preboot stage'); + if (isSetupOnHold) { + rootLogger.info('Holding setup until preboot stage is completed.'); + const { shouldReloadConfig } = await preboot.waitUntilCanSetup(); + if (shouldReloadConfig) { + await reloadConfiguration('configuration might have changed during preboot stage'); + } } } diff --git a/packages/core/root/core-root-server-internal/src/core_config.ts b/packages/core/root/core-root-server-internal/src/core_config.ts new file mode 100644 index 0000000000000..826e21420da14 --- /dev/null +++ b/packages/core/root/core-root-server-internal/src/core_config.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 { schema, type TypeOf } from '@kbn/config-schema'; +import type { ServiceConfigDescriptor } from '@kbn/core-base-server-internal'; + +const coreConfigSchema = schema.object({ + lifecycle: schema.object({ + disablePreboot: schema.boolean({ defaultValue: false }), + }), +}); + +export type CoreConfigType = TypeOf; + +export const coreConfig: ServiceConfigDescriptor = { + path: 'core', + schema: coreConfigSchema, +}; diff --git a/packages/core/root/core-root-server-internal/src/register_service_config.ts b/packages/core/root/core-root-server-internal/src/register_service_config.ts index ccb6a745b6754..be67627720b34 100644 --- a/packages/core/root/core-root-server-internal/src/register_service_config.ts +++ b/packages/core/root/core-root-server-internal/src/register_service_config.ts @@ -26,15 +26,16 @@ import { config as i18nConfig } from '@kbn/core-i18n-server-internal'; import { config as deprecationConfig } from '@kbn/core-deprecations-server-internal'; import { statusConfig } from '@kbn/core-status-server-internal'; import { uiSettingsConfig } from '@kbn/core-ui-settings-server-internal'; - import { config as pluginsConfig } from '@kbn/core-plugins-server-internal'; import { elasticApmConfig } from './root/elastic_config'; import { serverlessConfig } from './root/serverless_config'; +import { coreConfig } from './core_config'; const rootConfigPath = ''; export function registerServiceConfig(configService: ConfigService) { const configDescriptors: Array> = [ + coreConfig, cspConfig, deprecationConfig, elasticsearchConfig, diff --git a/packages/core/root/core-root-server-internal/src/server.test.ts b/packages/core/root/core-root-server-internal/src/server.test.ts index 4fa8bc67ef3f1..3d878921b7ec0 100644 --- a/packages/core/root/core-root-server-internal/src/server.test.ts +++ b/packages/core/root/core-root-server-internal/src/server.test.ts @@ -46,7 +46,10 @@ const logger = loggingSystemMock.create(); const rawConfigService = rawConfigServiceMock.create({}); beforeEach(() => { - mockConfigService.atPath.mockReturnValue(new BehaviorSubject({ autoListen: true })); + mockConfigService.atPath.mockReturnValue( + // config for `core` path, only one used with all the services being mocked + new BehaviorSubject({ lifecycle: { disablePreboot: false } }) + ); mockPluginsService.discover.mockResolvedValue({ preboot: { pluginTree: { asOpaqueIds: new Map(), asNames: new Map() }, @@ -298,3 +301,32 @@ test('migrator-only node throws exception during start', async () => { expect(migrationException!.processExitCode).toBe(0); expect(migrationException!.cause).toBeUndefined(); }); + +describe('When preboot is disabled', () => { + beforeEach(() => { + mockConfigService.atPath.mockReturnValue( + // config for `core` path, only one used with all the services being mocked + new BehaviorSubject({ lifecycle: { disablePreboot: true } }) + ); + }); + + test('only preboots the mandatory services', async () => { + const server = new Server(rawConfigService, env, logger); + + await server.preboot(); + + expect(mockNodeService.preboot).toHaveBeenCalledTimes(1); + expect(mockEnvironmentService.preboot).toHaveBeenCalledTimes(1); + expect(mockUiSettingsService.preboot).toHaveBeenCalledTimes(1); + expect(mockLoggingService.preboot).toHaveBeenCalledTimes(1); + + expect(mockContextService.preboot).not.toHaveBeenCalled(); + expect(mockHttpService.preboot).not.toHaveBeenCalled(); + expect(mockI18nService.preboot).not.toHaveBeenCalled(); + expect(mockElasticsearchService.preboot).not.toHaveBeenCalled(); + expect(mockRenderingService.preboot).not.toHaveBeenCalled(); + expect(mockPluginsService.preboot).not.toHaveBeenCalled(); + expect(mockPrebootService.preboot).not.toHaveBeenCalled(); + expect(mockStatusService.preboot).not.toHaveBeenCalled(); + }); +}); diff --git a/packages/core/root/core-root-server-internal/src/server.ts b/packages/core/root/core-root-server-internal/src/server.ts index 804227bff4442..ce7f7c795ebb4 100644 --- a/packages/core/root/core-root-server-internal/src/server.ts +++ b/packages/core/root/core-root-server-internal/src/server.ts @@ -7,6 +7,7 @@ */ import apm from 'elastic-apm-node'; +import { firstValueFrom } from 'rxjs'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import type { Logger, LoggerFactory } from '@kbn/logging'; import type { NodeRoles } from '@kbn/core-node-server'; @@ -55,6 +56,7 @@ import { CoreAppsService } from '@kbn/core-apps-server-internal'; import { SecurityService } from '@kbn/core-security-server-internal'; import { registerServiceConfig } from './register_service_config'; import { MIGRATION_EXCEPTION_CODE } from './constants'; +import { coreConfig, type CoreConfigType } from './core_config'; const coreId = Symbol('core'); const KIBANA_STARTED_EVENT = 'kibana_started'; @@ -158,16 +160,22 @@ export class Server { this.uptimePerStep.constructor = { start: constructorStartUptime, end: performance.now() }; } - public async preboot() { + public async preboot(): Promise { this.log.debug('prebooting server'); + + const config = await firstValueFrom(this.configService.atPath(coreConfig.path)); + const { disablePreboot } = config.lifecycle; + if (disablePreboot) { + this.log.info('preboot phase is disabled - skipping'); + } + const prebootStartUptime = performance.now(); const prebootTransaction = apm.startTransaction('server-preboot', 'kibana-platform'); + // service required for plugin discovery const analyticsPreboot = this.analytics.preboot(); - const environmentPreboot = await this.environment.preboot({ analytics: analyticsPreboot }); const nodePreboot = await this.node.preboot({ loggingSystem: this.loggingSystem }); - this.nodeRoles = nodePreboot.roles; // Discover any plugins before continuing. This allows other systems to utilize the plugin dependency graph. @@ -176,57 +184,70 @@ export class Server { node: nodePreboot, }); - // Immediately terminate in case of invalid configuration. This needs to be done after plugin discovery. We also - // silent deprecation warnings until `setup` stage where we'll validate config once again. - await ensureValidConfiguration(this.configService, { logDeprecations: false }); + if (!disablePreboot) { + // Immediately terminate in case of invalid configuration. This needs to be done after plugin discovery. We also + // silent deprecation warnings until `setup` stage where we'll validate config once again. + await ensureValidConfiguration(this.configService, { logDeprecations: false }); + } - const { uiPlugins, pluginTree, pluginPaths } = this.discoveredPlugins.preboot; - const contextServicePreboot = this.context.preboot({ - pluginDependencies: new Map([...pluginTree.asOpaqueIds]), - }); - const httpPreboot = await this.http.preboot({ context: contextServicePreboot }); + // services we need to preboot even when preboot is disabled + const uiSettingsPreboot = await this.uiSettings.preboot(); + const loggingPreboot = this.logging.preboot({ loggingSystem: this.loggingSystem }); - // setup i18n prior to any other service, to have translations ready - await this.i18n.preboot({ http: httpPreboot, pluginPaths }); + let corePreboot: InternalCorePreboot | undefined; - this.capabilities.preboot({ http: httpPreboot }); - const elasticsearchServicePreboot = await this.elasticsearch.preboot(); - const uiSettingsPreboot = await this.uiSettings.preboot(); - await this.status.preboot({ http: httpPreboot }); + if (!disablePreboot) { + const { uiPlugins, pluginTree, pluginPaths } = this.discoveredPlugins.preboot; - const renderingPreboot = await this.rendering.preboot({ http: httpPreboot, uiPlugins }); - const httpResourcesPreboot = this.httpResources.preboot({ - http: httpPreboot, - rendering: renderingPreboot, - }); + const contextServicePreboot = this.context.preboot({ + pluginDependencies: new Map([...pluginTree.asOpaqueIds]), + }); - const loggingPreboot = this.logging.preboot({ loggingSystem: this.loggingSystem }); + const httpPreboot = await this.http.preboot({ context: contextServicePreboot }); - const corePreboot: InternalCorePreboot = { - analytics: analyticsPreboot, - context: contextServicePreboot, - elasticsearch: elasticsearchServicePreboot, - http: httpPreboot, - uiSettings: uiSettingsPreboot, - httpResources: httpResourcesPreboot, - logging: loggingPreboot, - preboot: this.prebootService.preboot(), - }; + // setup i18n prior to any other service, to have translations ready + await this.i18n.preboot({ http: httpPreboot, pluginPaths }); - await this.plugins.preboot(corePreboot); + this.capabilities.preboot({ http: httpPreboot }); - httpPreboot.registerRouteHandlerContext( - coreId, - 'core', - () => { - return new PrebootCoreRouteHandlerContext(corePreboot); - } - ); + const elasticsearchServicePreboot = await this.elasticsearch.preboot(); + + await this.status.preboot({ http: httpPreboot }); + + const renderingPreboot = await this.rendering.preboot({ http: httpPreboot, uiPlugins }); - this.coreApp.preboot(corePreboot, uiPlugins); + const httpResourcesPreboot = this.httpResources.preboot({ + http: httpPreboot, + rendering: renderingPreboot, + }); + + corePreboot = { + analytics: analyticsPreboot, + context: contextServicePreboot, + elasticsearch: elasticsearchServicePreboot, + http: httpPreboot, + uiSettings: uiSettingsPreboot, + httpResources: httpResourcesPreboot, + logging: loggingPreboot, + preboot: this.prebootService.preboot(), + }; + + await this.plugins.preboot(corePreboot); + + httpPreboot.registerRouteHandlerContext( + coreId, + 'core', + () => { + return new PrebootCoreRouteHandlerContext(corePreboot!); + } + ); + + this.coreApp.preboot(corePreboot, uiPlugins); + } prebootTransaction.end(); this.uptimePerStep.preboot = { start: prebootStartUptime, end: performance.now() }; + return corePreboot; } diff --git a/src/core/server/integration_tests/root/disable_preboot.test.ts b/src/core/server/integration_tests/root/disable_preboot.test.ts new file mode 100644 index 0000000000000..cae078a958ea6 --- /dev/null +++ b/src/core/server/integration_tests/root/disable_preboot.test.ts @@ -0,0 +1,70 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { + createRootWithCorePlugins, + createTestServers, + TestElasticsearchUtils, +} from '@kbn/core-test-helpers-kbn-server'; + +function createRootWithDisabledPreboot() { + return createRootWithCorePlugins({ + core: { + lifecycle: { + disablePreboot: true, + }, + }, + logging: { + appenders: { + 'test-console': { + type: 'console', + layout: { + type: 'json', + }, + }, + }, + root: { + appenders: ['test-console'], + level: 'info', + }, + }, + }); +} + +describe('Starting root with disabled preboot', () => { + let esServer: TestElasticsearchUtils; + let root: ReturnType; + + beforeEach(async () => { + const { startES } = createTestServers({ + adjustTimeout: (t: number) => jest.setTimeout(t), + settings: { + es: { + license: 'basic', + }, + }, + }); + esServer = await startES(); + + root = createRootWithDisabledPreboot(); + }); + + afterEach(async () => { + await root?.shutdown(); + await esServer?.stop(); + }); + + it('successfully boots', async () => { + const preboot = await root.preboot(); + await root.setup(); + await root.start(); + + // preboot contract is not returned when preboot is disabled + expect(preboot).toBeUndefined(); + }); +}); diff --git a/src/core/server/integration_tests/root/jest.integration.config.js b/src/core/server/integration_tests/root/jest.integration.config.js new file mode 100644 index 0000000000000..81086c30cb0c6 --- /dev/null +++ b/src/core/server/integration_tests/root/jest.integration.config.js @@ -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. + */ + +module.exports = { + // TODO replace the line below with + // preset: '@kbn/test/jest_integration_node + // to do so, we must fix all integration tests first + // see https://github.com/elastic/kibana/pull/130255/ + preset: '@kbn/test/jest_integration', + rootDir: '../../../../..', + roots: ['/src/core/server/integration_tests/root'], + // must override to match all test given there is no `integration_tests` subfolder + testMatch: ['**/*.test.{js,mjs,ts,tsx}'], +}; From 6e215b7096fa00554835657ef06adf1ab9880a53 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Fri, 22 Mar 2024 10:03:06 -0500 Subject: [PATCH 61/90] [ci/on_merge] Fix dependency --- .buildkite/pipelines/on_merge.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.buildkite/pipelines/on_merge.yml b/.buildkite/pipelines/on_merge.yml index 7fa51db6a49bd..910fa754095e2 100644 --- a/.buildkite/pipelines/on_merge.yml +++ b/.buildkite/pipelines/on_merge.yml @@ -313,7 +313,6 @@ steps: queue: n2-4-virt depends_on: - build - - quick_checks timeout_in_minutes: 60 parallelism: 16 retry: @@ -327,7 +326,6 @@ steps: queue: n2-4-virt depends_on: - build - - quick_checks timeout_in_minutes: 60 parallelism: 10 retry: From 7b79885fe27c7f88e41dc49b0bfdadf27651e3db Mon Sep 17 00:00:00 2001 From: Leszek Kubik <39905449+intxgo@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:24:28 +0100 Subject: [PATCH 62/90] add advanced Elastic Defend policy option: advanced.artifacts.global.ca_cert (#179138) ## Summary Elastic Defend allows to configure custom CA certificate for reaching to custom security artifacts server, applicable in air-gapped environments https://www.elastic.co/guide/en/security/current/offline-endpoint.html ### 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) ### 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: Tomasz Ciecierski --- .../policy/models/advanced_policy_schema.ts | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/models/advanced_policy_schema.ts b/x-pack/plugins/security_solution/public/management/pages/policy/models/advanced_policy_schema.ts index b0af7cf2192e9..189902e15f568 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/models/advanced_policy_schema.ts +++ b/x-pack/plugins/security_solution/public/management/pages/policy/models/advanced_policy_schema.ts @@ -1633,4 +1633,37 @@ export const AdvancedPolicySchema: AdvancedPolicySchemaType[] = [ } ), }, + { + key: 'windows.advanced.artifacts.global.ca_cert', + first_supported_version: '7.9', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.windows.advanced.artifacts.global.ca_cert', + { + defaultMessage: + 'PEM-encoded certificate for security artifacts server certificate authority.', + } + ), + }, + { + key: 'mac.advanced.artifacts.global.ca_cert', + first_supported_version: '7.9', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.mac.advanced.artifacts.global.ca_cert', + { + defaultMessage: + 'PEM-encoded certificate for security artifacts server certificate authority.', + } + ), + }, + { + key: 'linux.advanced.artifacts.global.ca_cert', + first_supported_version: '7.9', + documentation: i18n.translate( + 'xpack.securitySolution.endpoint.policy.advanced.linux.advanced.artifacts.global.ca_cert', + { + defaultMessage: + 'PEM-encoded certificate for security artifacts server certificate authority.', + } + ), + }, ]; From c0ad45f52702df41b4ea37d02fe50d591367da21 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Fri, 22 Mar 2024 16:41:03 +0100 Subject: [PATCH 63/90] Use a shorter ES health check interval before initial green (#179023) ## Summary Use a shorter interval for Elasticsearch healthchecks before the first green status, to overall reduce the time spent waiting for ES when both Kibana and ES are starting at the same time. --- .../src/elasticsearch_config.test.ts | 1 + .../src/elasticsearch_config.ts | 21 +- .../src/elasticsearch_service.test.ts | 3 + .../src/elasticsearch_service.ts | 13 +- .../version_check/ensure_es_version.test.ts | 183 +++++++++++------- .../src/version_check/ensure_es_version.ts | 51 ++++- .../src/elasticsearch_config.ts | 6 +- .../server/elasticsearch_service.ts | 2 +- .../plugins/monitoring/server/config.test.ts | 1 + 9 files changed, 182 insertions(+), 99 deletions(-) diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.test.ts b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.test.ts index 77d1ec7542a7e..ddd4c537204ff 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.test.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.test.ts @@ -34,6 +34,7 @@ test('set correct defaults', () => { "compression": false, "customHeaders": Object {}, "healthCheckDelay": "PT2.5S", + "healthCheckStartupDelay": "PT0.5S", "hosts": Array [ "http://localhost:9200", ], diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.ts b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.ts index e3d0dba0a2fd1..82ee5e3dd5610 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_config.ts @@ -144,7 +144,10 @@ export const configSchema = schema.object({ } ), apiVersion: schema.string({ defaultValue: DEFAULT_API_VERSION }), - healthCheck: schema.object({ delay: schema.duration({ defaultValue: 2500 }) }), + healthCheck: schema.object({ + delay: schema.duration({ defaultValue: 2500 }), + startupDelay: schema.duration({ defaultValue: 500 }), + }), ignoreVersionMismatch: offeringBasedSchema({ serverless: schema.boolean({ defaultValue: true }), traditional: schema.conditional( @@ -301,10 +304,13 @@ export class ElasticsearchConfig implements IElasticsearchConfig { */ public readonly skipStartupConnectionCheck: boolean; /** - * The interval between health check requests Kibana sends to the Elasticsearch. + * The interval between health check requests Kibana sends to the Elasticsearch before the first green signal. + */ + public readonly healthCheckStartupDelay: Duration; + /** + * The interval between health check requests Kibana sends to the Elasticsearch after the first green signal. */ public readonly healthCheckDelay: Duration; - /** * Whether to allow kibana to connect to a non-compatible elasticsearch node. */ @@ -435,6 +441,7 @@ export class ElasticsearchConfig implements IElasticsearchConfig { this.sniffOnConnectionFault = rawConfig.sniffOnConnectionFault; this.sniffInterval = rawConfig.sniffInterval; this.healthCheckDelay = rawConfig.healthCheck.delay; + this.healthCheckStartupDelay = rawConfig.healthCheck.startupDelay; this.username = rawConfig.username; this.password = rawConfig.password; this.serviceAccountToken = rawConfig.serviceAccountToken; @@ -466,6 +473,10 @@ const readKeyAndCerts = (rawConfig: ElasticsearchConfigType) => { let certificate: string | undefined; let certificateAuthorities: string[] | undefined; + const readFile = (file: string) => { + return readFileSync(file, 'utf8'); + }; + const addCAs = (ca: string[] | undefined) => { if (ca && ca.length) { certificateAuthorities = [...(certificateAuthorities || []), ...ca]; @@ -522,7 +533,3 @@ const readKeyAndCerts = (rawConfig: ElasticsearchConfigType) => { certificateAuthorities, }; }; - -const readFile = (file: string) => { - return readFileSync(file, 'utf8'); -}; diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.test.ts b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.test.ts index c91db5dc8910c..9ee79a9062973 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.test.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.test.ts @@ -69,6 +69,7 @@ beforeEach(() => { hosts: ['http://1.2.3.4'], healthCheck: { delay: duration(10), + startupDelay: duration(10), }, ssl: { verificationMode: 'none', @@ -182,6 +183,7 @@ describe('#preboot', () => { expect(config).toMatchInlineSnapshot(` Object { "healthCheckDelay": "PT0.01S", + "healthCheckStartupDelay": "PT0.01S", "hosts": Array [ "http://8.8.8.8", ], @@ -400,6 +402,7 @@ describe('#start', () => { expect(config).toMatchInlineSnapshot(` Object { "healthCheckDelay": "PT0.01S", + "healthCheckStartupDelay": "PT0.01S", "hosts": Array [ "http://8.8.8.8", ], diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.ts b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.ts index 38ee9acdfdaf0..8a75bfb4f8234 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/elasticsearch_service.ts @@ -7,7 +7,7 @@ */ import { firstValueFrom, Observable, Subject } from 'rxjs'; -import { map, shareReplay, takeUntil } from 'rxjs/operators'; +import { map, takeUntil } from 'rxjs/operators'; import type { Logger } from '@kbn/logging'; import type { CoreContext, CoreService } from '@kbn/core-base-server-internal'; @@ -98,12 +98,13 @@ export class ElasticsearchService this.client = this.createClusterClient('data', config); const esNodesCompatibility$ = pollEsNodesVersion({ - internalClient: this.client.asInternalUser, - log: this.log, - ignoreVersionMismatch: config.ignoreVersionMismatch, - esVersionCheckInterval: config.healthCheckDelay.asMilliseconds(), kibanaVersion: this.kibanaVersion, - }).pipe(takeUntil(this.stop$), shareReplay({ refCount: true, bufferSize: 1 })); + ignoreVersionMismatch: config.ignoreVersionMismatch, + healthCheckInterval: config.healthCheckDelay.asMilliseconds(), + healthCheckStartupInterval: config.healthCheckStartupDelay.asMilliseconds(), + log: this.log, + internalClient: this.client.asInternalUser, + }).pipe(takeUntil(this.stop$)); this.esNodesCompatibility$ = esNodesCompatibility$; diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/version_check/ensure_es_version.test.ts b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/version_check/ensure_es_version.test.ts index ec22185a29626..5257be97f26e6 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/version_check/ensure_es_version.test.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/version_check/ensure_es_version.test.ts @@ -131,10 +131,6 @@ describe('mapNodesVersionCompatibility', () => { describe('pollEsNodesVersion', () => { let internalClient: ReturnType; - const getTestScheduler = () => - new TestScheduler((actual, expected) => { - expect(actual).toEqual(expected); - }); beforeEach(() => { internalClient = elasticsearchClientMock.createInternalClient(); @@ -159,7 +155,7 @@ describe('pollEsNodesVersion', () => { pollEsNodesVersion({ internalClient, - esVersionCheckInterval: 1, + healthCheckInterval: 1, ignoreVersionMismatch: false, kibanaVersion: KIBANA_VERSION, log: mockLogger, @@ -186,7 +182,7 @@ describe('pollEsNodesVersion', () => { pollEsNodesVersion({ internalClient, - esVersionCheckInterval: 1, + healthCheckInterval: 1, ignoreVersionMismatch: false, kibanaVersion: KIBANA_VERSION, log: mockLogger, @@ -217,7 +213,7 @@ describe('pollEsNodesVersion', () => { pollEsNodesVersion({ internalClient, - esVersionCheckInterval: 1, + healthCheckInterval: 1, ignoreVersionMismatch: false, kibanaVersion: KIBANA_VERSION, log: mockLogger, @@ -252,7 +248,7 @@ describe('pollEsNodesVersion', () => { pollEsNodesVersion({ internalClient, - esVersionCheckInterval: 1, + healthCheckInterval: 1, ignoreVersionMismatch: false, kibanaVersion: KIBANA_VERSION, log: mockLogger, @@ -276,7 +272,7 @@ describe('pollEsNodesVersion', () => { pollEsNodesVersion({ internalClient, - esVersionCheckInterval: 1, + healthCheckInterval: 1, ignoreVersionMismatch: false, kibanaVersion: KIBANA_VERSION, log: mockLogger, @@ -302,7 +298,7 @@ describe('pollEsNodesVersion', () => { pollEsNodesVersion({ internalClient, - esVersionCheckInterval: 1, + healthCheckInterval: 1, ignoreVersionMismatch: false, kibanaVersion: KIBANA_VERSION, log: mockLogger, @@ -315,77 +311,114 @@ describe('pollEsNodesVersion', () => { }); }); - it('starts polling immediately and then every esVersionCheckInterval', () => { - expect.assertions(1); + describe('marble testing', () => { + const getTestScheduler = () => + new TestScheduler((actual, expected) => { + expect(actual).toEqual(expected); + }); - // @ts-expect-error we need to return an incompatible type to use the testScheduler here - internalClient.nodes.info.mockReturnValueOnce([createNodes('5.1.0', '5.2.0', '5.0.0')]); - // @ts-expect-error we need to return an incompatible type to use the testScheduler here - internalClient.nodes.info.mockReturnValueOnce([createNodes('5.1.1', '5.2.0', '5.0.0')]); - - getTestScheduler().run(({ expectObservable }) => { - const expected = 'a 99ms (b|)'; - - const esNodesCompatibility$ = pollEsNodesVersion({ - internalClient, - esVersionCheckInterval: 100, - ignoreVersionMismatch: false, - kibanaVersion: KIBANA_VERSION, - log: mockLogger, - }).pipe(take(2)); - - expectObservable(esNodesCompatibility$).toBe(expected, { - a: mapNodesVersionCompatibility( - createNodes('5.1.0', '5.2.0', '5.0.0'), - KIBANA_VERSION, - false - ), - b: mapNodesVersionCompatibility( - createNodes('5.1.1', '5.2.0', '5.0.0'), - KIBANA_VERSION, - false - ), + const mockTestSchedulerInfoResponseOnce = (infos: NodesInfo) => { + // @ts-expect-error we need to return an incompatible type to use the testScheduler here + internalClient.nodes.info.mockReturnValueOnce([infos]); + }; + + it('starts polling immediately and then every healthCheckInterval', () => { + expect.assertions(1); + + mockTestSchedulerInfoResponseOnce(createNodes('5.1.0', '5.2.0', '5.0.0')); + mockTestSchedulerInfoResponseOnce(createNodes('5.1.1', '5.2.0', '5.0.0')); + + getTestScheduler().run(({ expectObservable }) => { + const expected = 'a 99ms (b|)'; + + const esNodesCompatibility$ = pollEsNodesVersion({ + internalClient, + healthCheckInterval: 100, + ignoreVersionMismatch: false, + kibanaVersion: KIBANA_VERSION, + log: mockLogger, + }).pipe(take(2)); + + expectObservable(esNodesCompatibility$).toBe(expected, { + a: mapNodesVersionCompatibility( + createNodes('5.1.0', '5.2.0', '5.0.0'), + KIBANA_VERSION, + false + ), + b: mapNodesVersionCompatibility( + createNodes('5.1.1', '5.2.0', '5.0.0'), + KIBANA_VERSION, + false + ), + }); }); }); - }); - it('waits for es version check requests to complete before scheduling the next one', () => { - expect.assertions(2); - - getTestScheduler().run(({ expectObservable }) => { - const expected = '100ms a 99ms (b|)'; - - internalClient.nodes.info.mockReturnValueOnce( - // @ts-expect-error we need to return an incompatible type to use the testScheduler here - of(createNodes('5.1.0', '5.2.0', '5.0.0')).pipe(delay(100)) - ); - internalClient.nodes.info.mockReturnValueOnce( - // @ts-expect-error we need to return an incompatible type to use the testScheduler here - of(createNodes('5.1.1', '5.2.0', '5.0.0')).pipe(delay(100)) - ); - - const esNodesCompatibility$ = pollEsNodesVersion({ - internalClient, - esVersionCheckInterval: 10, - ignoreVersionMismatch: false, - kibanaVersion: KIBANA_VERSION, - log: mockLogger, - }).pipe(take(2)); - - expectObservable(esNodesCompatibility$).toBe(expected, { - a: mapNodesVersionCompatibility( - createNodes('5.1.0', '5.2.0', '5.0.0'), - KIBANA_VERSION, - false - ), - b: mapNodesVersionCompatibility( - createNodes('5.1.1', '5.2.0', '5.0.0'), - KIBANA_VERSION, - false - ), + it('waits for es version check requests to complete before scheduling the next one', () => { + expect.assertions(2); + + getTestScheduler().run(({ expectObservable }) => { + const expected = '100ms a 99ms (b|)'; + + internalClient.nodes.info.mockReturnValueOnce( + // @ts-expect-error we need to return an incompatible type to use the testScheduler here + of(createNodes('5.1.0', '5.2.0', '5.0.0')).pipe(delay(100)) + ); + internalClient.nodes.info.mockReturnValueOnce( + // @ts-expect-error we need to return an incompatible type to use the testScheduler here + of(createNodes('5.1.1', '5.2.0', '5.0.0')).pipe(delay(100)) + ); + + const esNodesCompatibility$ = pollEsNodesVersion({ + internalClient, + healthCheckInterval: 10, + ignoreVersionMismatch: false, + kibanaVersion: KIBANA_VERSION, + log: mockLogger, + }).pipe(take(2)); + + expectObservable(esNodesCompatibility$).toBe(expected, { + a: mapNodesVersionCompatibility( + createNodes('5.1.0', '5.2.0', '5.0.0'), + KIBANA_VERSION, + false + ), + b: mapNodesVersionCompatibility( + createNodes('5.1.1', '5.2.0', '5.0.0'), + KIBANA_VERSION, + false + ), + }); }); + + expect(internalClient.nodes.info).toHaveBeenCalledTimes(2); }); - expect(internalClient.nodes.info).toHaveBeenCalledTimes(2); + it('switch from startup interval to normal interval after first green status', () => { + expect.assertions(1); + + mockTestSchedulerInfoResponseOnce(createNodes('6.3.0')); + mockTestSchedulerInfoResponseOnce(createNodes('5.1.0')); + mockTestSchedulerInfoResponseOnce(createNodes('5.2.0')); + mockTestSchedulerInfoResponseOnce(createNodes('5.3.0')); + + getTestScheduler().run(({ expectObservable }) => { + const esNodesCompatibility$ = pollEsNodesVersion({ + internalClient, + healthCheckInterval: 100, + healthCheckStartupInterval: 50, + ignoreVersionMismatch: false, + kibanaVersion: KIBANA_VERSION, + log: mockLogger, + }).pipe(take(4)); + + expectObservable(esNodesCompatibility$).toBe('a 49ms b 99ms c 99ms (d|)', { + a: expect.any(Object), + b: expect.any(Object), + c: expect.any(Object), + d: expect.any(Object), + }); + }); + }); }); }); diff --git a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/version_check/ensure_es_version.ts b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/version_check/ensure_es_version.ts index caa2dd372b8f3..6f557c02b2638 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server-internal/src/version_check/ensure_es_version.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server-internal/src/version_check/ensure_es_version.ts @@ -11,8 +11,17 @@ * that defined in Kibana's package.json. */ -import { timer, of, from, Observable } from 'rxjs'; -import { map, distinctUntilChanged, catchError, exhaustMap } from 'rxjs/operators'; +import { interval, of, from, Observable, BehaviorSubject } from 'rxjs'; +import { + map, + distinctUntilChanged, + catchError, + exhaustMap, + switchMap, + tap, + startWith, + shareReplay, +} from 'rxjs/operators'; import type { Logger } from '@kbn/logging'; import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { @@ -26,7 +35,8 @@ export interface PollEsNodesVersionOptions { log: Logger; kibanaVersion: string; ignoreVersionMismatch: boolean; - esVersionCheckInterval: number; + healthCheckInterval: number; + healthCheckStartupInterval?: number; } /** @public */ @@ -149,10 +159,26 @@ export const pollEsNodesVersion = ({ log, kibanaVersion, ignoreVersionMismatch, - esVersionCheckInterval: healthCheckInterval, + healthCheckInterval, + healthCheckStartupInterval, }: PollEsNodesVersionOptions): Observable => { log.debug('Checking Elasticsearch version'); - return timer(0, healthCheckInterval).pipe( + + const hasStartupInterval = + healthCheckStartupInterval !== undefined && healthCheckStartupInterval !== healthCheckInterval; + + const isStartup$ = new BehaviorSubject(hasStartupInterval); + + const checkInterval$ = isStartup$.pipe( + distinctUntilChanged(), + map((useStartupInterval) => + useStartupInterval ? healthCheckStartupInterval! : healthCheckInterval + ) + ); + + return checkInterval$.pipe( + switchMap((checkInterval) => interval(checkInterval)), + startWith(0), exhaustMap(() => { return from( internalClient.nodes.info({ @@ -164,9 +190,16 @@ export const pollEsNodesVersion = ({ }) ); }), - map((nodesInfoResponse: NodesInfo & { nodesInfoRequestError?: Error }) => - mapNodesVersionCompatibility(nodesInfoResponse, kibanaVersion, ignoreVersionMismatch) - ), - distinctUntilChanged(compareNodes) // Only emit if there are new nodes or versions or if we return an error and that error changes + map((nodesInfoResponse: NodesInfo & { nodesInfoRequestError?: Error }) => { + return mapNodesVersionCompatibility(nodesInfoResponse, kibanaVersion, ignoreVersionMismatch); + }), + // Only emit if there are new nodes or versions or if we return an error and that error changes + distinctUntilChanged(compareNodes), + tap((nodesVersionCompatibility) => { + if (nodesVersionCompatibility.isCompatible) { + isStartup$.next(false); + } + }), + shareReplay({ refCount: true, bufferSize: 1 }) ); }; diff --git a/packages/core/elasticsearch/core-elasticsearch-server/src/elasticsearch_config.ts b/packages/core/elasticsearch/core-elasticsearch-server/src/elasticsearch_config.ts index 8ad2faff90249..a11a97f283e36 100644 --- a/packages/core/elasticsearch/core-elasticsearch-server/src/elasticsearch_config.ts +++ b/packages/core/elasticsearch/core-elasticsearch-server/src/elasticsearch_config.ts @@ -14,7 +14,11 @@ import type { ElasticsearchApiToRedactInLogs } from './client'; */ export interface IElasticsearchConfig { /** - * The interval between health check requests Kibana sends to the Elasticsearch. + * The interval between health check requests Kibana sends to the Elasticsearch before the first green signal. + */ + readonly healthCheckStartupDelay: Duration; + /** + * The interval between health check requests Kibana sends to the Elasticsearch after the first green signal. */ readonly healthCheckDelay: Duration; diff --git a/src/plugins/interactive_setup/server/elasticsearch_service.ts b/src/plugins/interactive_setup/server/elasticsearch_service.ts index 6994a38912ce1..cc44a9edb4e94 100644 --- a/src/plugins/interactive_setup/server/elasticsearch_service.ts +++ b/src/plugins/interactive_setup/server/elasticsearch_service.ts @@ -393,7 +393,7 @@ export class ElasticsearchService { log: this.logger, kibanaVersion: this.kibanaVersion, ignoreVersionMismatch: false, - esVersionCheckInterval: -1, // Passing a negative number here will result in immediate completion after the first value is emitted + healthCheckInterval: -1, // Passing a negative number here will result in immediate completion after the first value is emitted }) ); } diff --git a/x-pack/plugins/monitoring/server/config.test.ts b/x-pack/plugins/monitoring/server/config.test.ts index 02d63ac16ba17..f7833dcba452f 100644 --- a/x-pack/plugins/monitoring/server/config.test.ts +++ b/x-pack/plugins/monitoring/server/config.test.ts @@ -61,6 +61,7 @@ describe('config schema', () => { "customHeaders": Object {}, "healthCheck": Object { "delay": "PT2.5S", + "startupDelay": "PT0.5S", }, "idleSocketTimeout": "PT1M", "ignoreVersionMismatch": false, From 7b2f0e2babb7ea6cffad3023b1cb1a60cbbedc7c Mon Sep 17 00:00:00 2001 From: Ersin Erdal <92688503+ersin-erdal@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:41:25 +0100 Subject: [PATCH 64/90] Remove skipping task logic from Alerting plugin (#179065) Towards: https://github.com/elastic/kibana/issues/176585 This PR is a follow-on of https://github.com/elastic/kibana/pull/177244 and removes the task skipping logic from the Alerting plugin. ## To verify Rules should run as expected and `prepare_to_run_duration_ms` should not be in the event-log metrics. Below query can be used to check metrics. ``` GET /.kibana-event-log-*/_search { "query": { "bool" : { "must" : [ { "term" : { "event.action" : "execute" } }, { "term" : { "event.provider" : "alerting" } } ] } }, "size": 100 } ``` --- .../alerting_event_logger.test.ts | 4 - .../alerting/server/rule_type_registry.ts | 2 - .../server/task_runner/rule_loader.test.ts | 52 +++------- .../server/task_runner/rule_loader.ts | 32 ++----- .../server/task_runner/task_runner.test.ts | 49 ---------- .../server/task_runner/task_runner.ts | 94 +++++++------------ .../task_runner/task_runner_cancel.test.ts | 1 - .../task_runner/task_runner_timer.test.ts | 2 - .../server/task_runner/task_runner_timer.ts | 2 - .../plugins/event_log/generated/mappings.json | 3 - x-pack/plugins/event_log/generated/schemas.ts | 1 - x-pack/plugins/event_log/scripts/mappings.js | 3 - x-pack/plugins/task_manager/server/index.ts | 1 - x-pack/plugins/task_manager/server/task.ts | 23 ----- .../server/task_type_dictionary.ts | 1 - 15 files changed, 55 insertions(+), 215 deletions(-) diff --git a/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.test.ts b/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.test.ts index 451ca628f8607..62d2a2f14162d 100644 --- a/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.test.ts +++ b/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.test.ts @@ -777,7 +777,6 @@ describe('AlertingEventLogger', () => { [TaskRunnerTimerSpan.StartTaskRun]: 10, [TaskRunnerTimerSpan.TotalRunDuration]: 20, [TaskRunnerTimerSpan.PrepareRule]: 30, - [TaskRunnerTimerSpan.PrepareToRun]: 35, [TaskRunnerTimerSpan.RuleTypeRun]: 40, [TaskRunnerTimerSpan.ProcessAlerts]: 50, [TaskRunnerTimerSpan.PersistAlerts]: 60, @@ -801,7 +800,6 @@ describe('AlertingEventLogger', () => { claim_to_start_duration_ms: 10, total_run_duration_ms: 20, prepare_rule_duration_ms: 30, - prepare_to_run_duration_ms: 35, rule_type_run_duration_ms: 40, process_alerts_duration_ms: 50, persist_alerts_duration_ms: 60, @@ -840,7 +838,6 @@ describe('AlertingEventLogger', () => { [TaskRunnerTimerSpan.StartTaskRun]: 10, [TaskRunnerTimerSpan.TotalRunDuration]: 20, [TaskRunnerTimerSpan.PrepareRule]: 30, - [TaskRunnerTimerSpan.PrepareToRun]: 35, [TaskRunnerTimerSpan.RuleTypeRun]: 40, [TaskRunnerTimerSpan.ProcessAlerts]: 50, [TaskRunnerTimerSpan.PersistAlerts]: 60, @@ -875,7 +872,6 @@ describe('AlertingEventLogger', () => { claim_to_start_duration_ms: 10, total_run_duration_ms: 20, prepare_rule_duration_ms: 30, - prepare_to_run_duration_ms: 35, rule_type_run_duration_ms: 40, process_alerts_duration_ms: 50, persist_alerts_duration_ms: 60, diff --git a/x-pack/plugins/alerting/server/rule_type_registry.ts b/x-pack/plugins/alerting/server/rule_type_registry.ts index 2ed57e878291a..79c959a62eedf 100644 --- a/x-pack/plugins/alerting/server/rule_type_registry.ts +++ b/x-pack/plugins/alerting/server/rule_type_registry.ts @@ -39,7 +39,6 @@ import { AlertingRulesConfig } from '.'; import { AlertsService } from './alerts_service/alerts_service'; import { getRuleTypeIdValidLegacyConsumers } from './rule_type_registry_deprecated_consumers'; import { AlertingConfig } from './config'; -import { rawRuleSchemaV1 } from './saved_objects/schemas/raw_rule'; export interface ConstructorOptions { config: AlertingConfig; @@ -315,7 +314,6 @@ export class RuleTypeRegistry { spaceId: schema.string(), consumer: schema.maybe(schema.string()), }), - indirectParamsSchema: rawRuleSchemaV1, }, }); diff --git a/x-pack/plugins/alerting/server/task_runner/rule_loader.test.ts b/x-pack/plugins/alerting/server/task_runner/rule_loader.test.ts index f7d2bc2b0950f..4524c08b56688 100644 --- a/x-pack/plugins/alerting/server/task_runner/rule_loader.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/rule_loader.test.ts @@ -19,7 +19,7 @@ import { ruleTypeRegistryMock } from '../rule_type_registry.mock'; import { rulesClientMock } from '../rules_client.mock'; import { Rule } from '../types'; import { MONITORING_HISTORY_LIMIT, RuleExecutionStatusErrorReasons } from '../../common'; -import { ErrorWithReason, getReasonFromError } from '../lib/error_with_reason'; +import { getReasonFromError } from '../lib/error_with_reason'; import { mockedRawRuleSO, mockedRule } from './fixtures'; import { RULE_SAVED_OBJECT_TYPE } from '../saved_objects'; import { getErrorSource, TaskErrorSource } from '@kbn/task-manager-plugin/server/task_running'; @@ -48,26 +48,16 @@ describe('rule_loader', () => { bar: schema.boolean(), }); - const getDefaultValidateRuleParams = ({ - error, - enabled: ruleEnabled = true, - }: { - error?: ErrorWithReason; - enabled?: boolean; - }) => ({ + const getDefaultValidateRuleParams = (ruleEnabled: boolean = true) => ({ paramValidator, ruleId, spaceId, ruleTypeRegistry, - ruleData: error - ? { error } - : { - data: { - indirectParams: { ...mockedRawRuleSO.attributes, enabled: ruleEnabled }, - version: '1', - references: [], - }, - }, + ruleData: { + rawRule: { ...mockedRawRuleSO.attributes, enabled: ruleEnabled }, + version: '1', + references: [], + }, }); beforeEach(() => { @@ -92,7 +82,7 @@ describe('rule_loader', () => { describe('succeeds', () => { test('validates and returns the results', () => { const result = validateRuleAndCreateFakeRequest({ - ...getDefaultValidateRuleParams({}), + ...getDefaultValidateRuleParams(), context, }); @@ -107,27 +97,11 @@ describe('rule_loader', () => { }); }); - test('throws when there is decrypt attributes error', () => { - let outcome = 'success'; - try { - validateRuleAndCreateFakeRequest({ - ...getDefaultValidateRuleParams({ - error: new ErrorWithReason(RuleExecutionStatusErrorReasons.Decrypt, new Error('test')), - }), - context, - }); - } catch (err) { - outcome = 'failure'; - expect(getReasonFromError(err)).toBe(RuleExecutionStatusErrorReasons.Decrypt); - } - expect(outcome).toBe('failure'); - }); - test('throws when rule is not enabled', async () => { let outcome = 'success'; try { validateRuleAndCreateFakeRequest({ - ...getDefaultValidateRuleParams({ enabled: false }), + ...getDefaultValidateRuleParams(false), context, }); } catch (err) { @@ -146,7 +120,7 @@ describe('rule_loader', () => { let outcome = 'success'; try { validateRuleAndCreateFakeRequest({ - ...getDefaultValidateRuleParams({}), + ...getDefaultValidateRuleParams(), context, }); } catch (err) { @@ -164,7 +138,7 @@ describe('rule_loader', () => { let outcome = 'success'; try { validateRuleAndCreateFakeRequest({ - ...getDefaultValidateRuleParams({}), + ...getDefaultValidateRuleParams(), context, }); } catch (err) { @@ -182,7 +156,7 @@ describe('rule_loader', () => { contextMock.spaceIdToNamespace.mockReturnValue(undefined); const result = await getDecryptedRule(context, ruleId, 'default'); - expect(result.indirectParams).toEqual({ + expect(result.rawRule).toEqual({ ...mockedRawRuleSO.attributes, apiKey, enabled, @@ -201,7 +175,7 @@ describe('rule_loader', () => { const result = await getDecryptedRule(context, ruleId, spaceId); expect(contextMock.spaceIdToNamespace.mock.calls[0]).toEqual([spaceId]); - expect(result.indirectParams).toEqual({ + expect(result.rawRule).toEqual({ ...mockedRawRuleSO.attributes, apiKey, enabled, diff --git a/x-pack/plugins/alerting/server/task_runner/rule_loader.ts b/x-pack/plugins/alerting/server/task_runner/rule_loader.ts index 555a38886d3c5..ae80b03bd0b4e 100644 --- a/x-pack/plugins/alerting/server/task_runner/rule_loader.ts +++ b/x-pack/plugins/alerting/server/task_runner/rule_loader.ts @@ -14,10 +14,6 @@ import { SavedObjectReference, SavedObjectsErrorHelpers, } from '@kbn/core/server'; -import { - LoadedIndirectParams, - LoadIndirectParamsResult, -} from '@kbn/task-manager-plugin/server/task'; import { createTaskRunError, TaskErrorSource } from '@kbn/task-manager-plugin/server'; import { RunRuleParams, TaskRunnerContext } from './types'; import { ErrorWithReason, validateRuleTypeParams } from '../lib'; @@ -30,18 +26,16 @@ import { import { MONITORING_HISTORY_LIMIT, RuleTypeParams } from '../../common'; import { RULE_SAVED_OBJECT_TYPE } from '../saved_objects'; -export interface RuleData extends LoadedIndirectParams { - indirectParams: RawRule; +interface RuleData { + rawRule: RawRule; version: string | undefined; references: SavedObjectReference[]; } -export type RuleDataResult = LoadIndirectParamsResult; - interface ValidateRuleAndCreateFakeRequestParams { context: TaskRunnerContext; paramValidator?: RuleTypeParamsValidator; - ruleData: RuleDataResult; + ruleData: RuleData; ruleId: string; ruleTypeRegistry: RuleTypeRegistry; spaceId: string; @@ -56,23 +50,16 @@ interface ValidateRuleAndCreateFakeRequestParams export function validateRuleAndCreateFakeRequest( params: ValidateRuleAndCreateFakeRequestParams ): RunRuleParams { - // If there was a prior error loading the decrypted rule SO, exit early - if (params.ruleData.error) { - throw params.ruleData.error; - } - const { context, paramValidator, - ruleData: { - data: { indirectParams, references, version }, - }, + ruleData: { rawRule, references, version }, ruleId, ruleTypeRegistry, spaceId, } = params; - const { enabled, apiKey, alertTypeId: ruleTypeId } = indirectParams; + const { enabled, apiKey, alertTypeId: ruleTypeId } = rawRule; if (!enabled) { throw createTaskRunError( @@ -89,7 +76,7 @@ export function validateRuleAndCreateFakeRequest( const rule = rulesClient.getAlertFromRaw({ id: ruleId, ruleTypeId, - rawRule: indirectParams as RawRule, + rawRule, references, includeLegacyId: false, omitGeneratedValues: false, @@ -150,15 +137,16 @@ export async function getDecryptedRule( { namespace } ); } catch (e) { + const error = new ErrorWithReason(RuleExecutionStatusErrorReasons.Decrypt, e); if (SavedObjectsErrorHelpers.isNotFoundError(e)) { - throw createTaskRunError(e, TaskErrorSource.USER); + throw createTaskRunError(error, TaskErrorSource.USER); } - throw createTaskRunError(e, TaskErrorSource.FRAMEWORK); + throw createTaskRunError(error, TaskErrorSource.FRAMEWORK); } return { version: rawRule.version, - indirectParams: rawRule.attributes, + rawRule: rawRule.attributes, references: rawRule.references, }; } diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts b/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts index 56263e0e245a3..cd9ca14d07a1e 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts @@ -3285,52 +3285,6 @@ describe('Task Runner', () => { expect(mockUsageCounter.incrementCounter).not.toHaveBeenCalled(); }); - test('loadIndirectParams Fetches the ruleData and returns the indirectParams', async () => { - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValue(mockedRawRuleSO); - const taskRunner = new TaskRunner({ - ruleType, - taskInstance: { - ...mockedTaskInstance, - state: { - ...mockedTaskInstance.state, - previousStartedAt: new Date(Date.now() - 5 * 60 * 1000).toISOString(), - }, - }, - context: taskRunnerFactoryInitializerParams, - inMemoryMetrics, - }); - - const result = await taskRunner.loadIndirectParams(); - - expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).toHaveBeenCalledTimes(1); - expect(result).toEqual({ - data: expect.objectContaining({ indirectParams: mockedRawRuleSO.attributes }), - }); - }); - - test('loadIndirectParams return error when cannot fetch the ruleData', async () => { - const error = new Error('test'); - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockRejectedValueOnce(error); - const taskRunner = new TaskRunner({ - ruleType, - taskInstance: { - ...mockedTaskInstance, - state: { - ...mockedTaskInstance.state, - previousStartedAt: new Date(Date.now() - 5 * 60 * 1000).toISOString(), - }, - }, - context: taskRunnerFactoryInitializerParams, - inMemoryMetrics, - }); - - const result = await taskRunner.loadIndirectParams(); - - expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).toHaveBeenCalledTimes(1); - expect(result).toEqual({ error }); - expect(getErrorSource(result.error as Error)).toBe(TaskErrorSource.FRAMEWORK); - }); - function testAlertingEventLogCalls({ ruleContext = alertingEventLoggerInitializer, activeAlerts = 0, @@ -3398,7 +3352,6 @@ describe('Task Runner', () => { claim_to_start_duration_ms: 0, persist_alerts_duration_ms: 0, prepare_rule_duration_ms: 0, - prepare_to_run_duration_ms: 0, process_alerts_duration_ms: 0, process_rule_duration_ms: 0, rule_type_run_duration_ms: 0, @@ -3434,7 +3387,6 @@ describe('Task Runner', () => { claim_to_start_duration_ms: 0, persist_alerts_duration_ms: 0, prepare_rule_duration_ms: 0, - prepare_to_run_duration_ms: 0, process_alerts_duration_ms: 0, process_rule_duration_ms: 0, rule_type_run_duration_ms: 0, @@ -3468,7 +3420,6 @@ describe('Task Runner', () => { claim_to_start_duration_ms: 0, persist_alerts_duration_ms: 0, prepare_rule_duration_ms: 0, - prepare_to_run_duration_ms: 0, process_alerts_duration_ms: 0, process_rule_duration_ms: 0, rule_type_run_duration_ms: 0, diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner.ts b/x-pack/plugins/alerting/server/task_runner/task_runner.ts index e65e74c732691..2831ad0657b61 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.ts @@ -22,7 +22,6 @@ import { TaskRunnerContext } from './types'; import { getExecutorServices } from './get_executor_services'; import { ElasticsearchError, - ErrorWithReason, executionStatusFromError, executionStatusFromState, getNextRun, @@ -66,12 +65,7 @@ import { import { IExecutionStatusAndMetrics } from '../lib/rule_execution_status'; import { RuleRunMetricsStore } from '../lib/rule_run_metrics_store'; import { AlertingEventLogger } from '../lib/alerting_event_logger/alerting_event_logger'; -import { - getDecryptedRule, - RuleData, - RuleDataResult, - validateRuleAndCreateFakeRequest, -} from './rule_loader'; +import { getDecryptedRule, validateRuleAndCreateFakeRequest } from './rule_loader'; import { TaskRunnerTimer, TaskRunnerTimerSpan } from './task_runner_timer'; import { RuleMonitoringService } from '../monitoring/rule_monitoring_service'; import { ILastRun, lastRunFromState, lastRunToRaw } from '../lib/last_run_status'; @@ -151,7 +145,6 @@ export class TaskRunner< private ruleMonitoring: RuleMonitoringService; private ruleRunning: RunningHandler; private ruleResult: RuleResultService; - private ruleData?: RuleDataResult; private maintenanceWindows: MaintenanceWindow[] = []; private maintenanceWindowsWithoutScopedQueryIds: string[] = []; private ruleTypeRunner: RuleTypeRunner< @@ -442,12 +435,37 @@ export class TaskRunner< * - clear expired snoozes */ private async prepareToRun(): Promise> { - return await this.timer.runWithTimer(TaskRunnerTimerSpan.PrepareToRun, async () => { + return await this.timer.runWithTimer(TaskRunnerTimerSpan.PrepareRule, async () => { const { - params: { alertId: ruleId, spaceId }, + params: { alertId: ruleId, spaceId, consumer }, startedAt, } = this.taskInstance; + // Initially use consumer as stored inside the task instance + // This allows us to populate a consumer value for event log + // `execute-start` events (which are indexed before the rule SO is read) + // and in the event of decryption errors (where we cannot read the rule SO) + // Because "consumer" is set when a rule is created, this value should be static + // for the life of a rule but there may be edge cases where migrations cause + // the consumer values to become out of sync. + if (consumer) { + this.ruleConsumer = consumer; + } + + // Start the event logger so that something is logged in the + // event that rule SO decryption fails. + const namespace = this.context.spaceIdToNamespace(spaceId); + this.alertingEventLogger.initialize({ + ruleId, + ruleType: this.ruleType as UntypedNormalizedRuleType, + consumer: this.ruleConsumer!, + spaceId, + executionId: this.executionId, + taskScheduledAt: this.taskInstance.scheduledAt, + ...(namespace ? { namespace } : {}), + }); + this.alertingEventLogger.start(this.runDate); + if (apm.currentTransaction) { apm.currentTransaction.name = `Execute Alerting Rule`; apm.currentTransaction.addLabels({ @@ -466,13 +484,10 @@ export class TaskRunner< this.timer.setDuration(TaskRunnerTimerSpan.StartTaskRun, startedAt); } - // Load rule SO (indirect task params) if necessary - if (!this.ruleData) { - this.ruleData = await this.loadIndirectParams(); - } + const ruleData = await getDecryptedRule(this.context, ruleId, spaceId); const runRuleParams = validateRuleAndCreateFakeRequest({ - ruleData: this.ruleData, + ruleData, paramValidator: this.ruleType.validate.params, ruleId, spaceId, @@ -651,53 +666,8 @@ export class TaskRunner< }); } - async loadIndirectParams(): Promise> { - this.runDate = new Date(); - return await this.timer.runWithTimer(TaskRunnerTimerSpan.PrepareRule, async () => { - try { - const { - params: { alertId: ruleId, spaceId, consumer }, - } = this.taskInstance; - - // Initially use consumer as stored inside the task instance - // This allows us to populate a consumer value for event log - // `execute-start` events (which are indexed before the rule SO is read) - // and in the event of decryption errors (where we cannot read the rule SO) - // Because "consumer" is set when a rule is created, this value should be static - // for the life of a rule but there may be edge cases where migrations cause - // the consumer values to become out of sync. - if (consumer) { - this.ruleConsumer = consumer; - } - - // Start the event logger so that something is logged in the - // event that rule SO decryption fails. - const namespace = this.context.spaceIdToNamespace(spaceId); - this.alertingEventLogger.initialize({ - ruleId, - ruleType: this.ruleType as UntypedNormalizedRuleType, - consumer: this.ruleConsumer!, - spaceId, - executionId: this.executionId, - taskScheduledAt: this.taskInstance.scheduledAt, - ...(namespace ? { namespace } : {}), - }); - this.alertingEventLogger.start(this.runDate); - - const data = await getDecryptedRule(this.context, ruleId, spaceId); - this.ruleData = { data }; - } catch (err) { - const error = createTaskRunError( - new ErrorWithReason(RuleExecutionStatusErrorReasons.Decrypt, err), - getErrorSource(err) - ); - this.ruleData = { error }; - } - return this.ruleData; - }); - } - async run(): Promise { + this.runDate = new Date(); const { params: { alertId: ruleId, spaceId }, startedAt, @@ -714,7 +684,7 @@ export class TaskRunner< // fetch the rule again to ensure we return the correct schedule as it may have // changed during the task execution const data = await getDecryptedRule(this.context, ruleId, spaceId); - schedule = asOk(data.indirectParams.schedule); + schedule = asOk(data.rawRule.schedule); } catch (err) { stateWithMetrics = asErr(err); schedule = asErr(err); diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner_cancel.test.ts b/x-pack/plugins/alerting/server/task_runner/task_runner_cancel.test.ts index 9a7367533b7c8..8723fa98ef4fc 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner_cancel.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner_cancel.test.ts @@ -531,7 +531,6 @@ describe('Task Runner Cancel', () => { claim_to_start_duration_ms: 0, persist_alerts_duration_ms: 0, prepare_rule_duration_ms: 0, - prepare_to_run_duration_ms: 0, process_alerts_duration_ms: 0, process_rule_duration_ms: 0, rule_type_run_duration_ms: 0, diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner_timer.test.ts b/x-pack/plugins/alerting/server/task_runner/task_runner_timer.test.ts index 137f1f747c42e..3cabaa1fe0450 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner_timer.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner_timer.test.ts @@ -34,7 +34,6 @@ describe('TaskRunnerTimer', () => { claim_to_start_duration_ms: 259200000, persist_alerts_duration_ms: 0, prepare_rule_duration_ms: 0, - prepare_to_run_duration_ms: 0, process_alerts_duration_ms: 0, process_rule_duration_ms: 0, rule_type_run_duration_ms: 0, @@ -53,7 +52,6 @@ describe('TaskRunnerTimer', () => { claim_to_start_duration_ms: 432000000, persist_alerts_duration_ms: 0, prepare_rule_duration_ms: 0, - prepare_to_run_duration_ms: 0, process_alerts_duration_ms: 0, process_rule_duration_ms: 0, rule_type_run_duration_ms: 0, diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner_timer.ts b/x-pack/plugins/alerting/server/task_runner/task_runner_timer.ts index 237fe66793d1e..bcf07834acb66 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner_timer.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner_timer.ts @@ -10,7 +10,6 @@ import { Logger } from '@kbn/core/server'; export enum TaskRunnerTimerSpan { StartTaskRun = 'claim_to_start_duration_ms', TotalRunDuration = 'total_run_duration_ms', - PrepareToRun = 'prepare_to_run_duration_ms', PrepareRule = 'prepare_rule_duration_ms', RuleTypeRun = 'rule_type_run_duration_ms', ProcessAlerts = 'process_alerts_duration_ms', @@ -61,7 +60,6 @@ export class TaskRunnerTimer { [TaskRunnerTimerSpan.StartTaskRun]: this.timings[TaskRunnerTimerSpan.StartTaskRun] ?? 0, [TaskRunnerTimerSpan.TotalRunDuration]: this.timings[TaskRunnerTimerSpan.TotalRunDuration] ?? 0, - [TaskRunnerTimerSpan.PrepareToRun]: this.timings[TaskRunnerTimerSpan.PrepareToRun] ?? 0, [TaskRunnerTimerSpan.PrepareRule]: this.timings[TaskRunnerTimerSpan.PrepareRule] ?? 0, [TaskRunnerTimerSpan.RuleTypeRun]: this.timings[TaskRunnerTimerSpan.RuleTypeRun] ?? 0, [TaskRunnerTimerSpan.ProcessAlerts]: this.timings[TaskRunnerTimerSpan.ProcessAlerts] ?? 0, diff --git a/x-pack/plugins/event_log/generated/mappings.json b/x-pack/plugins/event_log/generated/mappings.json index 84c7b8acd303f..561217eeae803 100644 --- a/x-pack/plugins/event_log/generated/mappings.json +++ b/x-pack/plugins/event_log/generated/mappings.json @@ -398,9 +398,6 @@ "prepare_rule_duration_ms": { "type": "long" }, - "prepare_to_run_duration_ms": { - "type": "long" - }, "total_run_duration_ms": { "type": "long" }, diff --git a/x-pack/plugins/event_log/generated/schemas.ts b/x-pack/plugins/event_log/generated/schemas.ts index d4865320c042d..b8be2221ec1ed 100644 --- a/x-pack/plugins/event_log/generated/schemas.ts +++ b/x-pack/plugins/event_log/generated/schemas.ts @@ -175,7 +175,6 @@ export const EventSchema = schema.maybe( claim_to_start_duration_ms: ecsStringOrNumber(), persist_alerts_duration_ms: ecsStringOrNumber(), prepare_rule_duration_ms: ecsStringOrNumber(), - prepare_to_run_duration_ms: ecsStringOrNumber(), total_run_duration_ms: ecsStringOrNumber(), total_enrichment_duration_ms: ecsStringOrNumber(), }) diff --git a/x-pack/plugins/event_log/scripts/mappings.js b/x-pack/plugins/event_log/scripts/mappings.js index db5334d7d4ef6..6d0ec3635ab41 100644 --- a/x-pack/plugins/event_log/scripts/mappings.js +++ b/x-pack/plugins/event_log/scripts/mappings.js @@ -173,9 +173,6 @@ exports.EcsCustomPropertyMappings = { prepare_rule_duration_ms: { type: 'long', }, - prepare_to_run_duration_ms: { - type: 'long', - }, total_run_duration_ms: { type: 'long', }, diff --git a/x-pack/plugins/task_manager/server/index.ts b/x-pack/plugins/task_manager/server/index.ts index 4b95f0fb08974..8d50c37adda0b 100644 --- a/x-pack/plugins/task_manager/server/index.ts +++ b/x-pack/plugins/task_manager/server/index.ts @@ -21,7 +21,6 @@ export type { TaskRunCreatorFunction, RunContext, IntervalSchedule, - LoadIndirectParamsResult, } from './task'; export { TaskStatus, TaskPriority } from './task'; diff --git a/x-pack/plugins/task_manager/server/task.ts b/x-pack/plugins/task_manager/server/task.ts index fb4165d1fc9b9..c239263a872b5 100644 --- a/x-pack/plugins/task_manager/server/task.ts +++ b/x-pack/plugins/task_manager/server/task.ts @@ -95,29 +95,9 @@ export interface FailedTaskResult { status: TaskStatus.Failed | TaskStatus.DeadLetter; } -type IndirectParamsType = Record; - -export interface LoadedIndirectParams< - IndirectParams extends IndirectParamsType = IndirectParamsType -> { - [key: string]: unknown; - indirectParams: IndirectParams; -} - -export type LoadIndirectParamsResult = - | { - data: T; - error?: never; - } - | { - data?: never; - error: Error; - }; -export type LoadIndirectParamsFunction = () => Promise; export type RunFunction = () => Promise; export type CancelFunction = () => Promise; export interface CancellableTask { - loadIndirectParams?: LoadIndirectParamsFunction; run: RunFunction; cancel?: CancelFunction; cleanup?: () => Promise; @@ -184,8 +164,6 @@ export const taskDefinitionSchema = schema.object( ), paramsSchema: schema.maybe(schema.any()), - // schema of the data fetched by the task runner (in loadIndirectParams) e.g. rule, action etc. - indirectParamsSchema: schema.maybe(schema.any()), }, { validate({ timeout, priority }) { @@ -220,7 +198,6 @@ export type TaskDefinition = Omit, 'paramsSc } >; paramsSchema?: ObjectType; - indirectParamsSchema?: ObjectType; }; export enum TaskStatus { diff --git a/x-pack/plugins/task_manager/server/task_type_dictionary.ts b/x-pack/plugins/task_manager/server/task_type_dictionary.ts index a29504f04f303..ae46978562223 100644 --- a/x-pack/plugins/task_manager/server/task_type_dictionary.ts +++ b/x-pack/plugins/task_manager/server/task_type_dictionary.ts @@ -82,7 +82,6 @@ export interface TaskRegisterDefinition { >; paramsSchema?: ObjectType; - indirectParamsSchema?: ObjectType; } /** From 15fde3662578e448b469f6f7dadcc48e6c45715f Mon Sep 17 00:00:00 2001 From: Justin Kambic Date: Fri, 22 Mar 2024 11:49:06 -0400 Subject: [PATCH 65/90] [Synthetics] Make core API key include `read_ilm` privilege in Stateful only (#178897) ## Summary Resolves https://github.com/elastic/synthetics-dev/issues/332. ILM is not a concept in Serverless. As such, when the Synthetics plugin requests the `read_ilm` permission for its core API key during bootstrapping, it's asking for a priv that will eventually not exist on Serverless, and ES will give an explicit deny for the request, which will probably cause Synthetics to crash and not be functional. The fix is to detect the build type at startup time and enable the server plugin to determine whether it needs to include this privilege or not, based on whether Kibana is running in stateful or serverless mode. ## Testing You can easily test this in both modes. The steps are the same. _NOTE:_ when testing serverless, if you include the flag ` -E xpack.security.authz.has_privileges.strict_request_validation.enabled=true` this will simulate the manner in which Elasticsearch will explicit deny the API creation request when this is enabled in the MKI environment, and thus you should include it in your testing. 1. Start up Kibana in serverless | stateful mode. 2. As an admin, navigate to Synthetics and wait for the startup flow to display. 3. Navigate to Kibana management's API key page. You should see the Synthetics API key. Click it. 4. For stateful, you should see `read_ilm` included under the `synthetics_writer` object, shown below. For serverless, you should not see this priv in the list. ### Stateful API key perms image ### Serverless API key perms image --- .../synthetics/server/plugin.ts | 10 ++-- .../authentication/check_has_privilege.ts | 15 ++--- .../synthetics_service/get_api_key.test.ts | 18 +++++- .../server/synthetics_service/get_api_key.ts | 56 ++++++++++--------- .../synthetics/server/types.ts | 1 + .../api_integration/apis/security/api_keys.ts | 4 +- .../apis/synthetics/add_monitor.ts | 6 +- .../apis/synthetics/synthetics_enablement.ts | 32 +++++------ 8 files changed, 82 insertions(+), 60 deletions(-) diff --git a/x-pack/plugins/observability_solution/synthetics/server/plugin.ts b/x-pack/plugins/observability_solution/synthetics/server/plugin.ts index e35ea0f9549bc..76ac2afcf102b 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/plugin.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/plugin.ts @@ -34,16 +34,14 @@ import { uptimeRuleTypeFieldMap } from './alert_rules/common'; export class Plugin implements PluginType { private savedObjectsClient?: SavedObjectsClientContract; - private initContext: PluginInitializerContext; - private logger: Logger; + private readonly logger: Logger; private server?: SyntheticsServerSetup; private syntheticsService?: SyntheticsService; private syntheticsMonitorClient?: SyntheticsMonitorClient; private readonly telemetryEventsSender: TelemetryEventsSender; - constructor(initializerContext: PluginInitializerContext) { - this.initContext = initializerContext; - this.logger = initializerContext.logger.get(); + constructor(private readonly initContext: PluginInitializerContext) { + this.logger = initContext.logger.get(); this.telemetryEventsSender = new TelemetryEventsSender(this.logger); } @@ -52,7 +50,6 @@ export class Plugin implements PluginType { savedObjectsAdapter.config = config; - this.logger = this.initContext.logger.get(); const { ruleDataService } = plugins.ruleRegistry; const ruleDataClient = ruleDataService.initializeIndex({ @@ -110,6 +107,7 @@ export class Plugin implements PluginType { this.server.encryptedSavedObjects = pluginsStart.encryptedSavedObjects; this.server.savedObjectsClient = this.savedObjectsClient; this.server.spaces = pluginsStart.spaces; + this.server.isElasticsearchServerless = coreStart.elasticsearch.getCapabilities().serverless; } this.syntheticsService?.start(pluginsStart.taskManager); diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/authentication/check_has_privilege.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/authentication/check_has_privilege.ts index 17286ac368276..06be332e41df5 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/authentication/check_has_privilege.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/authentication/check_has_privilege.ts @@ -9,24 +9,25 @@ import { SecurityIndexPrivilege } from '@elastic/elasticsearch/lib/api/types'; import { UptimeEsClient } from '../../lib'; import { SyntheticsServerSetup } from '../../types'; import { getFakeKibanaRequest } from '../utils/fake_kibana_request'; -import { serviceApiKeyPrivileges, syntheticsIndex } from '../get_api_key'; +import { getServiceApiKeyPrivileges, syntheticsIndex } from '../get_api_key'; -export const checkHasPrivileges = async ( +export const checkHasPrivileges = ( server: SyntheticsServerSetup, apiKey: { id: string; apiKey: string } ) => { - return await server.coreStart.elasticsearch.client + const { indices: index, cluster } = getServiceApiKeyPrivileges(server.isElasticsearchServerless); + return server.coreStart.elasticsearch.client .asScoped(getFakeKibanaRequest({ id: apiKey.id, api_key: apiKey.apiKey })) .asCurrentUser.security.hasPrivileges({ body: { - index: serviceApiKeyPrivileges.indices, - cluster: serviceApiKeyPrivileges.cluster, + index, + cluster, }, }); }; -export const checkIndicesReadPrivileges = async (uptimeEsClient: UptimeEsClient) => { - return await uptimeEsClient.baseESClient.security.hasPrivileges({ +export const checkIndicesReadPrivileges = (uptimeEsClient: UptimeEsClient) => { + return uptimeEsClient.baseESClient.security.hasPrivileges({ body: { index: [ { diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_api_key.test.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_api_key.test.ts index 172888435d338..e8ce91ec6268d 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_api_key.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_api_key.test.ts @@ -5,7 +5,11 @@ * 2.0. */ -import { getAPIKeyForSyntheticsService, syntheticsIndex } from './get_api_key'; +import { + getAPIKeyForSyntheticsService, + getServiceApiKeyPrivileges, + syntheticsIndex, +} from './get_api_key'; import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/server/mocks'; import { securityMock } from '@kbn/security-plugin/server/mocks'; import { coreMock } from '@kbn/core/server/mocks'; @@ -84,6 +88,18 @@ describe('getAPIKeyTest', function () { ); }); + it.each([ + [true, ['monitor', 'read_pipeline']], + [false, ['monitor', 'read_pipeline', 'read_ilm']], + ])( + 'Includes/excludes `read_ilm` priv when serverless is mode is %s', + (isServerlessEs, expectedClusterPrivs) => { + const { cluster } = getServiceApiKeyPrivileges(isServerlessEs); + + expect(cluster).toEqual(expectedClusterPrivs); + } + ); + it('invalidates api keys with missing read permissions', async () => { jest.spyOn(authUtils, 'checkHasPrivileges').mockResolvedValue({ index: { diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_api_key.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_api_key.ts index ec62eb2c80555..66ecf0aff2deb 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_api_key.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_api_key.ts @@ -19,20 +19,24 @@ import { checkHasPrivileges } from './authentication/check_has_privilege'; export const syntheticsIndex = 'synthetics-*'; -export const serviceApiKeyPrivileges = { - cluster: ['monitor', 'read_ilm', 'read_pipeline'] as SecurityClusterPrivilege[], - indices: [ - { - names: [syntheticsIndex], - privileges: [ - 'view_index_metadata', - 'create_doc', - 'auto_configure', - 'read', - ] as SecurityIndexPrivilege[], - }, - ], - run_as: [], +export const getServiceApiKeyPrivileges = (isServerlessEs: boolean) => { + const cluster: SecurityClusterPrivilege[] = ['monitor', 'read_pipeline']; + if (isServerlessEs === false) cluster.push('read_ilm'); + return { + cluster, + indices: [ + { + names: [syntheticsIndex], + privileges: [ + 'view_index_metadata', + 'create_doc', + 'auto_configure', + 'read', + ] as SecurityIndexPrivilege[], + }, + ], + run_as: [], + }; }; export const getAPIKeyForSyntheticsService = async ({ @@ -84,7 +88,7 @@ export const generateAPIKey = async ({ server: SyntheticsServerSetup; request: KibanaRequest; }) => { - const { security } = server; + const { isElasticsearchServerless, security } = server; const isApiKeysEnabled = await security.authc.apiKeys?.areAPIKeysEnabled(); if (!isApiKeysEnabled) { @@ -100,7 +104,7 @@ export const generateAPIKey = async ({ return security.authc.apiKeys?.grantAsInternalUser(request, { name: 'synthetics-api-key (required for Synthetics App)', role_descriptors: { - synthetics_writer: serviceApiKeyPrivileges, + synthetics_writer: getServiceApiKeyPrivileges(isElasticsearchServerless), }, metadata: { description: @@ -202,16 +206,16 @@ export const getSyntheticsEnablement = async ({ server }: { server: SyntheticsSe }; }; -const hasEnablePermissions = async ({ uptimeEsClient }: SyntheticsServerSetup) => { +const hasEnablePermissions = async ({ + uptimeEsClient, + isElasticsearchServerless, +}: SyntheticsServerSetup) => { + const { cluster: clusterPrivs, indices: index } = + getServiceApiKeyPrivileges(isElasticsearchServerless); const hasPrivileges = await uptimeEsClient.baseESClient.security.hasPrivileges({ body: { - cluster: [ - 'manage_security', - 'manage_api_key', - 'manage_own_api_key', - ...serviceApiKeyPrivileges.cluster, - ], - index: serviceApiKeyPrivileges.indices, + cluster: ['manage_security', 'manage_api_key', 'manage_own_api_key', ...clusterPrivs], + index, }, }); @@ -221,7 +225,9 @@ const hasEnablePermissions = async ({ uptimeEsClient }: SyntheticsServerSetup) = manage_api_key: manageApiKey, manage_own_api_key: manageOwnApiKey, monitor, - read_ilm: readILM, + // `read_ilm` is going to be `undefined` when ES is in serverless mode, + // so we default it to the ES capabilities value. + read_ilm: readILM = isElasticsearchServerless, read_pipeline: readPipeline, } = cluster || {}; diff --git a/x-pack/plugins/observability_solution/synthetics/server/types.ts b/x-pack/plugins/observability_solution/synthetics/server/types.ts index a14cf6dcd72c1..9bfab3c676d7f 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/types.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/types.ts @@ -59,6 +59,7 @@ export interface SyntheticsServerSetup { isDev?: boolean; coreStart: CoreStart; pluginsStart: SyntheticsPluginsStartDependencies; + isElasticsearchServerless: boolean; } export interface SyntheticsPluginsSetupDependencies { diff --git a/x-pack/test/api_integration/apis/security/api_keys.ts b/x-pack/test/api_integration/apis/security/api_keys.ts index 84307f3a11d08..3a9edb14a3d15 100644 --- a/x-pack/test/api_integration/apis/security/api_keys.ts +++ b/x-pack/test/api_integration/apis/security/api_keys.ts @@ -7,7 +7,7 @@ import expect from '@kbn/expect'; import { ALL_SPACES_ID } from '@kbn/security-plugin/common/constants'; -import { serviceApiKeyPrivileges } from '@kbn/synthetics-plugin/server/synthetics_service/get_api_key'; +import { getServiceApiKeyPrivileges } from '@kbn/synthetics-plugin/server/synthetics_service/get_api_key'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -116,7 +116,7 @@ export default function ({ getService }: FtrProviderContext) { expiration: '12d', kibana_role_descriptors: { uptime_save: { - elasticsearch: serviceApiKeyPrivileges, + elasticsearch: getServiceApiKeyPrivileges(false), kibana: [ { base: [], diff --git a/x-pack/test/api_integration/apis/synthetics/add_monitor.ts b/x-pack/test/api_integration/apis/synthetics/add_monitor.ts index 72e872de27f99..696558363e637 100644 --- a/x-pack/test/api_integration/apis/synthetics/add_monitor.ts +++ b/x-pack/test/api_integration/apis/synthetics/add_monitor.ts @@ -21,7 +21,7 @@ import { ALL_SPACES_ID } from '@kbn/security-plugin/common/constants'; import { format as formatUrl } from 'url'; import supertest from 'supertest'; -import { serviceApiKeyPrivileges } from '@kbn/synthetics-plugin/server/synthetics_service/get_api_key'; +import { getServiceApiKeyPrivileges } from '@kbn/synthetics-plugin/server/synthetics_service/get_api_key'; import { syntheticsMonitorType } from '@kbn/synthetics-plugin/common/types/saved_objects'; import { FtrProviderContext } from '../../ftr_provider_context'; import { getFixtureJson } from './helper/get_fixture_json'; @@ -217,7 +217,7 @@ export default function ({ getService }: FtrProviderContext) { expiration: '12d', kibana_role_descriptors: { uptime_save: { - elasticsearch: serviceApiKeyPrivileges, + elasticsearch: getServiceApiKeyPrivileges(false), kibana: [ { base: [], @@ -260,7 +260,7 @@ export default function ({ getService }: FtrProviderContext) { expiration: '12d', kibana_role_descriptors: { uptime_save: { - elasticsearch: serviceApiKeyPrivileges, + elasticsearch: getServiceApiKeyPrivileges(false), kibana: [ { base: [], diff --git a/x-pack/test/api_integration/apis/synthetics/synthetics_enablement.ts b/x-pack/test/api_integration/apis/synthetics/synthetics_enablement.ts index 4e48dc2171641..cbefc039ca296 100644 --- a/x-pack/test/api_integration/apis/synthetics/synthetics_enablement.ts +++ b/x-pack/test/api_integration/apis/synthetics/synthetics_enablement.ts @@ -10,14 +10,14 @@ import { syntheticsApiKeyID, syntheticsApiKeyObjectType, } from '@kbn/synthetics-plugin/server/saved_objects/service_api_key'; -import { serviceApiKeyPrivileges } from '@kbn/synthetics-plugin/server/synthetics_service/get_api_key'; +import { getServiceApiKeyPrivileges } from '@kbn/synthetics-plugin/server/synthetics_service/get_api_key'; import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { const correctPrivileges = { applications: [], - cluster: ['monitor', 'read_ilm', 'read_pipeline'], + cluster: ['monitor', 'read_pipeline', 'read_ilm'], indices: [ { allow_restricted_indices: false, @@ -74,7 +74,7 @@ export default function ({ getService }: FtrProviderContext) { ], elasticsearch: { cluster: [privilege], - indices: serviceApiKeyPrivileges.indices, + indices: getServiceApiKeyPrivileges(false).indices, }, }); @@ -119,8 +119,8 @@ export default function ({ getService }: FtrProviderContext) { }, ], elasticsearch: { - cluster: serviceApiKeyPrivileges.cluster, - indices: serviceApiKeyPrivileges.indices, + cluster: getServiceApiKeyPrivileges(false).cluster, + indices: getServiceApiKeyPrivileges(false).indices, }, }); @@ -167,8 +167,8 @@ export default function ({ getService }: FtrProviderContext) { }, ], elasticsearch: { - cluster: serviceApiKeyPrivileges.cluster, - indices: serviceApiKeyPrivileges.indices, + cluster: getServiceApiKeyPrivileges(false).cluster, + indices: getServiceApiKeyPrivileges(false).indices, }, }); @@ -233,7 +233,7 @@ export default function ({ getService }: FtrProviderContext) { expiration: '1d', role_descriptors: { 'role-a': { - cluster: serviceApiKeyPrivileges.cluster, + cluster: getServiceApiKeyPrivileges(false).cluster, indices: [ { names: ['synthetics-*'], @@ -269,8 +269,8 @@ export default function ({ getService }: FtrProviderContext) { }, ], elasticsearch: { - cluster: serviceApiKeyPrivileges.cluster, - indices: serviceApiKeyPrivileges.indices, + cluster: getServiceApiKeyPrivileges(false).cluster, + indices: getServiceApiKeyPrivileges(false).indices, }, }); @@ -318,8 +318,8 @@ export default function ({ getService }: FtrProviderContext) { }, ], elasticsearch: { - cluster: serviceApiKeyPrivileges.cluster, - indices: serviceApiKeyPrivileges.indices, + cluster: getServiceApiKeyPrivileges(false).cluster, + indices: getServiceApiKeyPrivileges(false).indices, }, }); @@ -449,8 +449,8 @@ export default function ({ getService }: FtrProviderContext) { }, ], elasticsearch: { - cluster: serviceApiKeyPrivileges.cluster, - indices: serviceApiKeyPrivileges.indices, + cluster: getServiceApiKeyPrivileges(false).cluster, + indices: getServiceApiKeyPrivileges(false).indices, }, }); @@ -562,8 +562,8 @@ export default function ({ getService }: FtrProviderContext) { }, ], elasticsearch: { - cluster: serviceApiKeyPrivileges.cluster, - indices: serviceApiKeyPrivileges.indices, + cluster: getServiceApiKeyPrivileges(false).cluster, + indices: getServiceApiKeyPrivileges(false).indices, }, }); From f8b3d70900c302fc6bc9c8f1fd792ab4d9b164e3 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Fri, 22 Mar 2024 16:59:30 +0100 Subject: [PATCH 66/90] [CDN/Maps] Update `transformRequest` to create absolute URLs (#179154) ## Summary Fix https://github.com/elastic/kibana/issues/179058 Update the `transformRequest` function to create URLs that are callable from inside workers that don't share the same domain. Proposal is to to convert absolute path values to absolute URLs, e.g. `/my/path` => `https://my.origin/my/path`. - [x] Blocked by https://github.com/elastic/kibana/pull/178669 ## Test locally with CDN Easiest way to test is via the observability project built on this PR (see buildkite output), otherwise: - Build CDN assets (`node ./scripts/build.js --skip-docker-ubi --skip-docker-ubuntu --skip-docker-fips --skip-os-packages`) - Unpack the CDN assets `target/kibana-8.14.0-SNAPSHOT-cdn-assets.tar.gz` and serve them `npx http-server -p 1772 --cors --gzip --brotli`, remember to change the hash dir name to `XXXXXXXXXXXX` - Serve via different domain eg: ``` ## My test 127.0.0.1 my.cdn.test ``` - Configure Kibana to load assets `server.cdn.url: http://my.cdn.test` --------- Co-authored-by: Eyo Okon Eyo Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../mb_map/transform_request.test.ts | 34 +++++++++++++++++++ .../mb_map/transform_request.ts | 29 +++++++++++----- 2 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 x-pack/plugins/maps/public/connected_components/mb_map/transform_request.test.ts diff --git a/x-pack/plugins/maps/public/connected_components/mb_map/transform_request.test.ts b/x-pack/plugins/maps/public/connected_components/mb_map/transform_request.test.ts new file mode 100644 index 0000000000000..c1b2003c782ba --- /dev/null +++ b/x-pack/plugins/maps/public/connected_components/mb_map/transform_request.test.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { transformRequest } from './transform_request'; + +describe('transformRequest', () => { + let location: Location; + + beforeEach(() => { + location = global.window.location; + // @ts-expect-error we need to set our own location value + delete global.window.location; + global.window.location = { + origin: 'https://transform.test.local', + } as unknown as Location; + }); + + afterEach(() => { + Object.defineProperty(global.window, 'location', { value: location }); + }); + + it.each([ + ['/internal/maps/fake/path', 'https://transform.test.local/internal/maps/fake/path'], + ['/', 'https://transform.test.local/'], + [' /with/space', 'https://transform.test.local/with/space'], + ])('converts %s to absolute URL', (input, output) => { + const { url } = transformRequest(input, 'Foo'); + expect(url).toBe(output); + }); +}); diff --git a/x-pack/plugins/maps/public/connected_components/mb_map/transform_request.ts b/x-pack/plugins/maps/public/connected_components/mb_map/transform_request.ts index c30fc533a322f..0b331f0257473 100644 --- a/x-pack/plugins/maps/public/connected_components/mb_map/transform_request.ts +++ b/x-pack/plugins/maps/public/connected_components/mb_map/transform_request.ts @@ -14,14 +14,27 @@ import { MVT_GETTILE_API_PATH, MVT_GETGRIDTILE_API_PATH, } from '../../../common/constants'; -import { getHttp } from '../../kibana_services'; -const FONTS = getHttp().basePath.prepend(FONTS_API_PATH); -const GETTILE = getHttp().basePath.prepend(MVT_GETTILE_API_PATH); -const GETGRIDTILE = getHttp().basePath.prepend(MVT_GETGRIDTILE_API_PATH); +/** + * This URL could be used from inside a Worker which may have a different base + * URL. This function takes a string that may be a path and converts it to an + * absolute URL. + */ +function prepareAbsoluteUrl(pathOrUrl: string): string { + pathOrUrl = pathOrUrl.trim(); + if (pathOrUrl.startsWith('/')) { + return new URL(pathOrUrl, window.location.origin).toString(); + } + return pathOrUrl; +} -export function transformRequest(url: string, resourceType: string | undefined) { - if (resourceType === 'Glyphs' && url.startsWith(FONTS)) { +/** + * @param pathOrUrl - Assumed to be a full URL or a path starting with "/" + * @param resourceType - Indicator of what type of resource is being requested + */ +export function transformRequest(pathOrUrl: string, resourceType: string | undefined) { + const url = prepareAbsoluteUrl(pathOrUrl); + if (resourceType === 'Glyphs' && url.includes(FONTS_API_PATH)) { return { url, method: 'GET' as 'GET', @@ -32,7 +45,7 @@ export function transformRequest(url: string, resourceType: string | undefined) }; } - if (resourceType === 'Tile' && url.startsWith(GETTILE)) { + if (resourceType === 'Tile' && url.includes(MVT_GETTILE_API_PATH)) { return { url, method: 'GET' as 'GET', @@ -43,7 +56,7 @@ export function transformRequest(url: string, resourceType: string | undefined) }; } - if (resourceType === 'Tile' && url.startsWith(GETGRIDTILE)) { + if (resourceType === 'Tile' && url.includes(MVT_GETGRIDTILE_API_PATH)) { return { url, method: 'GET' as 'GET', From 59b1f8ae940312313d7f8276c101ffca478034ad Mon Sep 17 00:00:00 2001 From: Devon Thomson Date: Fri, 22 Mar 2024 12:28:20 -0400 Subject: [PATCH 67/90] [Embeddables Rebuild] Move titles API (#179202) Moves the titles API and state comparators away from the embeddable plugin and to the presentation-publishing package. --- .../eui_markdown_react_embeddable.tsx | 9 ++- .../react_embeddables/eui_markdown/types.ts | 8 +- .../field_list_react_embeddable.tsx | 6 +- .../react_embeddables/field_list/types.ts | 8 +- .../search/build_search_embeddable.tsx | 9 +-- .../comparators/index.ts | 10 +++ .../comparators/state_comparators.ts | 44 +++++++++++ .../comparators/types.ts | 26 +++++++ .../presentation_publishing/index.ts | 73 ++++++++++--------- .../publishes_panel_description.ts | 2 +- .../publishes_panel_title.test.ts | 0 .../{ => titles}/publishes_panel_title.ts | 23 +----- .../interfaces/titles/titles_api.test.ts | 31 ++++---- .../interfaces/titles/titles_api.ts | 41 ++++------- src/plugins/embeddable/public/index.ts | 4 - .../public/react_embeddable_system/index.ts | 6 -- .../react_embeddable_renderer.tsx | 4 +- .../react_embeddable_unsaved_changes.test.tsx | 10 +-- .../react_embeddable_unsaved_changes.ts | 45 ++---------- .../public/react_embeddable_system/types.ts | 24 +----- .../presentation_panel_error.tsx | 7 +- .../embeddable_enhanced/public/plugin.ts | 7 +- 22 files changed, 190 insertions(+), 207 deletions(-) create mode 100644 packages/presentation/presentation_publishing/comparators/index.ts create mode 100644 packages/presentation/presentation_publishing/comparators/state_comparators.ts create mode 100644 packages/presentation/presentation_publishing/comparators/types.ts rename packages/presentation/presentation_publishing/interfaces/{ => titles}/publishes_panel_description.ts (98%) rename packages/presentation/presentation_publishing/interfaces/{ => titles}/publishes_panel_title.test.ts (100%) rename packages/presentation/presentation_publishing/interfaces/{ => titles}/publishes_panel_title.ts (63%) rename src/plugins/embeddable/public/react_embeddable_system/react_embeddable_titles.test.ts => packages/presentation/presentation_publishing/interfaces/titles/titles_api.test.ts (72%) rename src/plugins/embeddable/public/react_embeddable_system/react_embeddable_titles.ts => packages/presentation/presentation_publishing/interfaces/titles/titles_api.ts (57%) diff --git a/examples/embeddable_examples/public/react_embeddables/eui_markdown/eui_markdown_react_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/eui_markdown/eui_markdown_react_embeddable.tsx index f1aeac5d04dce..e7f4cc5daedfd 100644 --- a/examples/embeddable_examples/public/react_embeddables/eui_markdown/eui_markdown_react_embeddable.tsx +++ b/examples/embeddable_examples/public/react_embeddables/eui_markdown/eui_markdown_react_embeddable.tsx @@ -9,12 +9,15 @@ import { EuiMarkdownEditor, EuiMarkdownFormat } from '@elastic/eui'; import { css } from '@emotion/react'; import { - initializeReactEmbeddableTitles, ReactEmbeddableFactory, registerReactEmbeddableFactory, } from '@kbn/embeddable-plugin/public'; import { i18n } from '@kbn/i18n'; -import { useInheritedViewMode, useStateFromPublishingSubject } from '@kbn/presentation-publishing'; +import { + initializeTitles, + useInheritedViewMode, + useStateFromPublishingSubject, +} from '@kbn/presentation-publishing'; import { euiThemeVars } from '@kbn/ui-theme'; import React from 'react'; import { BehaviorSubject } from 'rxjs'; @@ -40,7 +43,7 @@ const markdownEmbeddableFactory: ReactEmbeddableFactory< /** * initialize state (source of truth) */ - const { titlesApi, titleComparators, serializeTitles } = initializeReactEmbeddableTitles(state); + const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); const content$ = new BehaviorSubject(state.content); /** diff --git a/examples/embeddable_examples/public/react_embeddables/eui_markdown/types.ts b/examples/embeddable_examples/public/react_embeddables/eui_markdown/types.ts index c8fd99d842333..31678aa4a2a33 100644 --- a/examples/embeddable_examples/public/react_embeddables/eui_markdown/types.ts +++ b/examples/embeddable_examples/public/react_embeddables/eui_markdown/types.ts @@ -6,12 +6,10 @@ * Side Public License, v 1. */ -import { - DefaultEmbeddableApi, - SerializedReactEmbeddableTitles, -} from '@kbn/embeddable-plugin/public'; +import { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; +import { SerializedTitles } from '@kbn/presentation-publishing'; -export type MarkdownEditorSerializedState = SerializedReactEmbeddableTitles & { +export type MarkdownEditorSerializedState = SerializedTitles & { content: string; }; diff --git a/examples/embeddable_examples/public/react_embeddables/field_list/field_list_react_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/field_list/field_list_react_embeddable.tsx index ccc40ad7067a7..8f7a4955e301b 100644 --- a/examples/embeddable_examples/public/react_embeddables/field_list/field_list_react_embeddable.tsx +++ b/examples/embeddable_examples/public/react_embeddables/field_list/field_list_react_embeddable.tsx @@ -18,13 +18,12 @@ import { DATA_VIEW_SAVED_OBJECT_TYPE, } from '@kbn/data-views-plugin/public'; import { - initializeReactEmbeddableTitles, ReactEmbeddableFactory, registerReactEmbeddableFactory, } from '@kbn/embeddable-plugin/public'; import { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import { i18n } from '@kbn/i18n'; -import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; +import { initializeTitles, useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; import { LazyDataViewPicker, withSuspense } from '@kbn/presentation-util-plugin/public'; import { euiThemeVars } from '@kbn/ui-theme'; import { @@ -83,8 +82,7 @@ export const registerFieldListFactory = ( }, buildEmbeddable: async (initialState, buildApi) => { const subscriptions = new Subscription(); - const { titlesApi, titleComparators, serializeTitles } = - initializeReactEmbeddableTitles(initialState); + const { titlesApi, titleComparators, serializeTitles } = initializeTitles(initialState); const allDataViews = await dataViews.getIdsWithTitle(); const selectedDataViewId$ = new BehaviorSubject( diff --git a/examples/embeddable_examples/public/react_embeddables/field_list/types.ts b/examples/embeddable_examples/public/react_embeddables/field_list/types.ts index 9e51d89be58a5..347f8683be622 100644 --- a/examples/embeddable_examples/public/react_embeddables/field_list/types.ts +++ b/examples/embeddable_examples/public/react_embeddables/field_list/types.ts @@ -6,12 +6,10 @@ * Side Public License, v 1. */ -import { - DefaultEmbeddableApi, - SerializedReactEmbeddableTitles, -} from '@kbn/embeddable-plugin/public'; +import { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; +import { SerializedTitles } from '@kbn/presentation-publishing'; -export type FieldListSerializedStateState = SerializedReactEmbeddableTitles & { +export type FieldListSerializedStateState = SerializedTitles & { dataViewId?: string; selectedFieldNames?: string[]; }; diff --git a/examples/embeddable_examples/public/react_embeddables/search/build_search_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/search/build_search_embeddable.tsx index b84af8ba3b687..2fe28c6e878fb 100644 --- a/examples/embeddable_examples/public/react_embeddables/search/build_search_embeddable.tsx +++ b/examples/embeddable_examples/public/react_embeddables/search/build_search_embeddable.tsx @@ -12,11 +12,8 @@ import { EuiCallOut } from '@elastic/eui'; import { BehaviorSubject } from 'rxjs'; import { TimeRange } from '@kbn/es-query'; import type { DataView } from '@kbn/data-plugin/common'; -import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; -import { - EmbeddableStateComparators, - ReactEmbeddableApiRegistration, -} from '@kbn/embeddable-plugin/public/react_embeddable_system/types'; +import { StateComparators, useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; +import { ReactEmbeddableApiRegistration } from '@kbn/embeddable-plugin/public/react_embeddable_system/types'; import { Api, State, Services } from './types'; import { getCount } from './get_count'; @@ -24,7 +21,7 @@ export const buildSearchEmbeddable = async ( state: State, buildApi: ( apiRegistration: ReactEmbeddableApiRegistration, - comparators: EmbeddableStateComparators + comparators: StateComparators ) => Api, services: Services ) => { diff --git a/packages/presentation/presentation_publishing/comparators/index.ts b/packages/presentation/presentation_publishing/comparators/index.ts new file mode 100644 index 0000000000000..788c811805e3b --- /dev/null +++ b/packages/presentation/presentation_publishing/comparators/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { ComparatorFunction, ComparatorDefinition, StateComparators } from './types'; +export { getInitialValuesFromComparators, runComparators } from './state_comparators'; diff --git a/packages/presentation/presentation_publishing/comparators/state_comparators.ts b/packages/presentation/presentation_publishing/comparators/state_comparators.ts new file mode 100644 index 0000000000000..0589658906338 --- /dev/null +++ b/packages/presentation/presentation_publishing/comparators/state_comparators.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 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 { StateComparators } from './types'; + +const defaultComparator = (a: T, b: T) => a === b; + +export const getInitialValuesFromComparators = ( + comparators: StateComparators, + comparatorKeys: Array +) => { + const initialValues: Partial = {}; + for (const key of comparatorKeys) { + const comparatorSubject = comparators[key][0]; // 0th element of tuple is the subject + initialValues[key] = comparatorSubject?.value; + } + return initialValues; +}; + +export const runComparators = ( + comparators: StateComparators, + comparatorKeys: Array, + lastSavedState: StateType | undefined, + latestState: Partial +) => { + if (!lastSavedState) { + // if we have no last saved state, everything is considered a change + return latestState; + } + const latestChanges: Partial = {}; + for (const key of comparatorKeys) { + const customComparator = comparators[key]?.[2]; // 2nd element of the tuple is the custom comparator + const comparator = customComparator ?? defaultComparator; + if (!comparator(lastSavedState?.[key], latestState[key], lastSavedState, latestState)) { + latestChanges[key] = latestState[key]; + } + } + return Object.keys(latestChanges).length > 0 ? latestChanges : undefined; +}; diff --git a/packages/presentation/presentation_publishing/comparators/types.ts b/packages/presentation/presentation_publishing/comparators/types.ts new file mode 100644 index 0000000000000..dd8bf272452cd --- /dev/null +++ b/packages/presentation/presentation_publishing/comparators/types.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { PublishingSubject } from '../publishing_subject'; + +export type ComparatorFunction = ( + last: StateType[KeyType] | undefined, + current: StateType[KeyType] | undefined, + lastState?: Partial, + currentState?: Partial +) => boolean; + +export type ComparatorDefinition = [ + PublishingSubject, + (value: StateType[KeyType]) => void, + ComparatorFunction? +]; + +export type StateComparators = { + [KeyType in keyof StateType]: ComparatorDefinition; +}; diff --git a/packages/presentation/presentation_publishing/index.ts b/packages/presentation/presentation_publishing/index.ts index d979669f510a8..12a2680d180bf 100644 --- a/packages/presentation/presentation_publishing/index.ts +++ b/packages/presentation/presentation_publishing/index.ts @@ -14,6 +14,13 @@ export interface EmbeddableApiContext { embeddable: unknown; } +export { + getInitialValuesFromComparators, + runComparators, + type ComparatorDefinition, + type ComparatorFunction, + type StateComparators, +} from './comparators'; export { apiCanAccessViewMode, getInheritedViewMode, @@ -21,20 +28,20 @@ export { useInheritedViewMode, type CanAccessViewMode, } from './interfaces/can_access_view_mode'; -export { - apiPublishesPhaseEvents, - type PublishesPhaseEvents, - type PhaseEvent, - type PhaseEventType, -} from './interfaces/publishes_phase_events'; +export { apiHasDisableTriggers, type HasDisableTriggers } from './interfaces/has_disable_triggers'; export { hasEditCapabilities, type HasEditCapabilities } from './interfaces/has_edit_capabilities'; export { apiHasParentApi, type HasParentApi } from './interfaces/has_parent_api'; +export { + apiHasSupportedTriggers, + type HasSupportedTriggers, +} from './interfaces/has_supported_triggers'; export { apiHasType, apiIsOfType, type HasType, type HasTypeDisplayName, } from './interfaces/has_type'; +export { apiHasUniqueId, type HasUniqueId } from './interfaces/has_uuid'; export { apiPublishesBlockingError, useBlockingError, @@ -55,6 +62,12 @@ export { useDisabledActionIds, type PublishesDisabledActionIds, } from './interfaces/publishes_disabled_action_ids'; +export { + apiPublishesPhaseEvents, + type PhaseEvent, + type PhaseEventType, + type PublishesPhaseEvents, +} from './interfaces/publishes_phase_events'; export { apiPublishesTimeRange, apiPublishesUnifiedSearch, @@ -64,35 +77,16 @@ export { type PublishesUnifiedSearch, type PublishesWritableUnifiedSearch, } from './interfaces/publishes_unified_search'; -export { - apiPublishesPanelDescription, - apiPublishesWritablePanelDescription, - useDefaultPanelDescription, - usePanelDescription, - type PublishesPanelDescription, - type PublishesWritablePanelDescription, -} from './interfaces/publishes_panel_description'; -export { - getPanelTitle, - apiPublishesPanelTitle, - apiPublishesWritablePanelTitle, - useDefaultPanelTitle, - useHidePanelTitle, - usePanelTitle, - type PublishesPanelTitle, - type PublishesWritablePanelTitle, -} from './interfaces/publishes_panel_title'; export { apiPublishesSavedObjectId, useSavedObjectId, type PublishesSavedObjectId, } from './interfaces/publishes_saved_object_id'; -export { apiHasUniqueId, type HasUniqueId } from './interfaces/has_uuid'; -export { apiHasDisableTriggers, type HasDisableTriggers } from './interfaces/has_disable_triggers'; export { - apiHasSupportedTriggers, - type HasSupportedTriggers, -} from './interfaces/has_supported_triggers'; + apiPublishesUnsavedChanges, + useUnsavedChanges, + type PublishesUnsavedChanges, +} from './interfaces/publishes_unsaved_changes'; export { apiPublishesViewMode, apiPublishesWritableViewMode, @@ -102,13 +96,24 @@ export { type ViewMode, } from './interfaces/publishes_view_mode'; export { - type PublishesUnsavedChanges, - apiPublishesUnsavedChanges, - useUnsavedChanges, -} from './interfaces/publishes_unsaved_changes'; + apiPublishesPanelDescription, + apiPublishesWritablePanelDescription, + useDefaultPanelDescription, + usePanelDescription, + type PublishesPanelDescription, + type PublishesWritablePanelDescription, +} from './interfaces/titles/publishes_panel_description'; +export { + apiPublishesPanelTitle, + apiPublishesWritablePanelTitle, + getPanelTitle, + type PublishesPanelTitle, + type PublishesWritablePanelTitle, +} from './interfaces/titles/publishes_panel_title'; +export { initializeTitles, type SerializedTitles } from './interfaces/titles/titles_api'; export { useBatchedPublishingSubjects, - useStateFromPublishingSubject, usePublishingSubject, + useStateFromPublishingSubject, type PublishingSubject, } from './publishing_subject'; diff --git a/packages/presentation/presentation_publishing/interfaces/publishes_panel_description.ts b/packages/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts similarity index 98% rename from packages/presentation/presentation_publishing/interfaces/publishes_panel_description.ts rename to packages/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts index fb48b7a6228fa..b5dfd530d4d5e 100644 --- a/packages/presentation/presentation_publishing/interfaces/publishes_panel_description.ts +++ b/packages/presentation/presentation_publishing/interfaces/titles/publishes_panel_description.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { PublishingSubject, useStateFromPublishingSubject } from '../publishing_subject'; +import { PublishingSubject, useStateFromPublishingSubject } from '../../publishing_subject'; export interface PublishesPanelDescription { panelDescription: PublishingSubject; diff --git a/packages/presentation/presentation_publishing/interfaces/publishes_panel_title.test.ts b/packages/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.test.ts similarity index 100% rename from packages/presentation/presentation_publishing/interfaces/publishes_panel_title.test.ts rename to packages/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.test.ts diff --git a/packages/presentation/presentation_publishing/interfaces/publishes_panel_title.ts b/packages/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts similarity index 63% rename from packages/presentation/presentation_publishing/interfaces/publishes_panel_title.ts rename to packages/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts index 29d82c4105816..56cc8a5526826 100644 --- a/packages/presentation/presentation_publishing/interfaces/publishes_panel_title.ts +++ b/packages/presentation/presentation_publishing/interfaces/titles/publishes_panel_title.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { PublishingSubject, useStateFromPublishingSubject } from '../publishing_subject'; +import { PublishingSubject } from '../../publishing_subject'; export interface PublishesPanelTitle { panelTitle: PublishingSubject; @@ -44,24 +44,3 @@ export const apiPublishesWritablePanelTitle = ( typeof (unknownApi as PublishesWritablePanelTitle).setHidePanelTitle === 'function' ); }; - -/** - * A hook that gets this API's panel title as a reactive variable which will cause re-renders on change. - */ -export const usePanelTitle = (api: Partial | undefined) => { - const title = useStateFromPublishingSubject(api?.panelTitle); - const defaultTitle = useStateFromPublishingSubject(api?.defaultPanelTitle); - return title || defaultTitle; -}; - -/** - * A hook that gets this API's hide panel title setting as a reactive variable which will cause re-renders on change. - */ -export const useHidePanelTitle = (api: Partial | undefined) => - useStateFromPublishingSubject(api?.hidePanelTitle); - -/** - * A hook that gets this API's default title as a reactive variable which will cause re-renders on change. - */ -export const useDefaultPanelTitle = (api: Partial | undefined) => - useStateFromPublishingSubject(api?.defaultPanelTitle); diff --git a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_titles.test.ts b/packages/presentation/presentation_publishing/interfaces/titles/titles_api.test.ts similarity index 72% rename from src/plugins/embeddable/public/react_embeddable_system/react_embeddable_titles.test.ts rename to packages/presentation/presentation_publishing/interfaces/titles/titles_api.test.ts index be240cafb7ea6..4cb816094a9d2 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_titles.test.ts +++ b/packages/presentation/presentation_publishing/interfaces/titles/titles_api.test.ts @@ -6,27 +6,24 @@ * Side Public License, v 1. */ -import { - initializeReactEmbeddableTitles, - SerializedReactEmbeddableTitles, -} from './react_embeddable_titles'; +import { initializeTitles, SerializedTitles } from './titles_api'; -describe('react embeddable titles', () => { - const rawState: SerializedReactEmbeddableTitles = { +describe('titles api', () => { + const rawState: SerializedTitles = { title: 'very cool title', description: 'less cool description', hidePanelTitles: false, }; it('should initialize publishing subjects with the provided rawState', () => { - const { titlesApi } = initializeReactEmbeddableTitles(rawState); + const { titlesApi } = initializeTitles(rawState); expect(titlesApi.panelTitle.value).toBe(rawState.title); expect(titlesApi.panelDescription.value).toBe(rawState.description); expect(titlesApi.hidePanelTitle.value).toBe(rawState.hidePanelTitles); }); it('should update publishing subject values when set functions are called', () => { - const { titlesApi } = initializeReactEmbeddableTitles(rawState); + const { titlesApi } = initializeTitles(rawState); titlesApi.setPanelTitle('even cooler title'); titlesApi.setPanelDescription('super uncool description'); @@ -38,21 +35,21 @@ describe('react embeddable titles', () => { }); it('should correctly serialize current state', () => { - const { serializeTitles, titlesApi } = initializeReactEmbeddableTitles(rawState); + const { serializeTitles, titlesApi } = initializeTitles(rawState); titlesApi.setPanelTitle('UH OH, A TITLE'); const serializedTitles = serializeTitles(); expect(serializedTitles).toMatchInlineSnapshot(` - Object { - "description": "less cool description", - "hidePanelTitles": false, - "title": "UH OH, A TITLE", - } - `); + Object { + "description": "less cool description", + "hidePanelTitles": false, + "title": "UH OH, A TITLE", + } + `); }); it('should return the correct set of comparators', () => { - const { titleComparators } = initializeReactEmbeddableTitles(rawState); + const { titleComparators } = initializeTitles(rawState); expect(titleComparators.title).toBeDefined(); expect(titleComparators.description).toBeDefined(); @@ -60,7 +57,7 @@ describe('react embeddable titles', () => { }); it('should correctly compare hidePanelTitles with custom comparator', () => { - const { titleComparators } = initializeReactEmbeddableTitles(rawState); + const { titleComparators } = initializeTitles(rawState); expect(titleComparators.hidePanelTitles![2]!(true, false)).toBe(false); expect(titleComparators.hidePanelTitles![2]!(undefined, false)).toBe(true); diff --git a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_titles.ts b/packages/presentation/presentation_publishing/interfaces/titles/titles_api.ts similarity index 57% rename from src/plugins/embeddable/public/react_embeddable_system/react_embeddable_titles.ts rename to packages/presentation/presentation_publishing/interfaces/titles/titles_api.ts index 3b65b962694e5..026ceb1cc84fc 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_titles.ts +++ b/packages/presentation/presentation_publishing/interfaces/titles/titles_api.ts @@ -6,28 +6,25 @@ * Side Public License, v 1. */ -import { - PublishesWritablePanelDescription, - PublishesWritablePanelTitle, -} from '@kbn/presentation-publishing'; import { BehaviorSubject } from 'rxjs'; -import { EmbeddableStateComparators } from './types'; +import { StateComparators } from '../../comparators'; +import { PublishesWritablePanelDescription } from './publishes_panel_description'; +import { PublishesWritablePanelTitle } from './publishes_panel_title'; -export interface SerializedReactEmbeddableTitles { +export interface SerializedTitles { title?: string; description?: string; hidePanelTitles?: boolean; } -export type ReactEmbeddableTitlesApi = PublishesWritablePanelTitle & - PublishesWritablePanelDescription; +export interface TitlesApi extends PublishesWritablePanelTitle, PublishesWritablePanelDescription {} -export const initializeReactEmbeddableTitles = ( - rawState: SerializedReactEmbeddableTitles +export const initializeTitles = ( + rawState: SerializedTitles ): { - titlesApi: ReactEmbeddableTitlesApi; - titleComparators: EmbeddableStateComparators; - serializeTitles: () => SerializedReactEmbeddableTitles; + titlesApi: TitlesApi; + titleComparators: StateComparators; + serializeTitles: () => SerializedTitles; } => { const panelTitle = new BehaviorSubject(rawState.title); const panelDescription = new BehaviorSubject(rawState.description); @@ -37,7 +34,7 @@ export const initializeReactEmbeddableTitles = ( const setHidePanelTitle = (value: boolean | undefined) => hidePanelTitle.next(value); const setPanelDescription = (value: string | undefined) => panelDescription.next(value); - const titleComparators: EmbeddableStateComparators = { + const titleComparators: StateComparators = { title: [panelTitle, setPanelTitle], description: [panelDescription, setPanelDescription], hidePanelTitles: [hidePanelTitle, setHidePanelTitle, (a, b) => Boolean(a) === Boolean(b)], @@ -53,18 +50,12 @@ export const initializeReactEmbeddableTitles = ( }; return { - serializeTitles: () => serializeReactEmbeddableTitles(titlesApi), + serializeTitles: () => ({ + title: panelTitle.value, + hidePanelTitles: hidePanelTitle.value, + description: panelDescription.value, + }), titleComparators, titlesApi, }; }; - -export const serializeReactEmbeddableTitles = ( - titlesApi: ReactEmbeddableTitlesApi -): SerializedReactEmbeddableTitles => { - return { - title: titlesApi.panelTitle.value, - hidePanelTitles: titlesApi.hidePanelTitle.value, - description: titlesApi.panelDescription.value, - }; -}; diff --git a/src/plugins/embeddable/public/index.ts b/src/plugins/embeddable/public/index.ts index 52e408e8ebcd6..bf317300732ad 100644 --- a/src/plugins/embeddable/public/index.ts +++ b/src/plugins/embeddable/public/index.ts @@ -100,10 +100,6 @@ export { type DefaultEmbeddableApi, type ReactEmbeddableFactory, type ReactEmbeddableRegistration, - type ReactEmbeddableTitlesApi, - type SerializedReactEmbeddableTitles, - initializeReactEmbeddableTitles, - serializeReactEmbeddableTitles, startTrackingEmbeddableUnsavedChanges, } from './react_embeddable_system'; diff --git a/src/plugins/embeddable/public/react_embeddable_system/index.ts b/src/plugins/embeddable/public/react_embeddable_system/index.ts index b48289b7c4127..00f77c87cb5b7 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/index.ts +++ b/src/plugins/embeddable/public/react_embeddable_system/index.ts @@ -11,12 +11,6 @@ export { registerReactEmbeddableFactory, } from './react_embeddable_registry'; export { ReactEmbeddableRenderer } from './react_embeddable_renderer'; -export { - initializeReactEmbeddableTitles, - serializeReactEmbeddableTitles, - type ReactEmbeddableTitlesApi, - type SerializedReactEmbeddableTitles, -} from './react_embeddable_titles'; export { startTrackingEmbeddableUnsavedChanges } from './react_embeddable_unsaved_changes'; export type { DefaultEmbeddableApi, 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 768ffac88eb2b..ec5a763bae28d 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 @@ -12,13 +12,13 @@ import { SerializedPanelState, } from '@kbn/presentation-containers'; import { PresentationPanel } from '@kbn/presentation-panel-plugin/public'; +import { StateComparators } from '@kbn/presentation-publishing'; import React, { useEffect, useImperativeHandle, useMemo, useRef } from 'react'; import { v4 as generateId } from 'uuid'; import { getReactEmbeddableFactory } from './react_embeddable_registry'; import { startTrackingEmbeddableUnsavedChanges } from './react_embeddable_unsaved_changes'; import { DefaultEmbeddableApi, - EmbeddableStateComparators, ReactEmbeddableApiRegistration, ReactEmbeddableFactory, } from './types'; @@ -56,7 +56,7 @@ export const ReactEmbeddableRenderer = < >; const registerApi = ( apiRegistration: ReactEmbeddableApiRegistration, - comparators: EmbeddableStateComparators + comparators: StateComparators ) => { const { unsavedChanges, resetUnsavedChanges, cleanup } = startTrackingEmbeddableUnsavedChanges( diff --git a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.test.tsx b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.test.tsx index be3ecb4645fae..68be8ca5c097d 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.test.tsx +++ b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.test.tsx @@ -12,10 +12,10 @@ import { SerializedPanelState, } from '@kbn/presentation-containers'; import { getMockPresentationContainer } from '@kbn/presentation-containers/mocks'; +import { StateComparators } from '@kbn/presentation-publishing'; import { waitFor } from '@testing-library/react'; import { BehaviorSubject, Subject } from 'rxjs'; import { startTrackingEmbeddableUnsavedChanges } from './react_embeddable_unsaved_changes'; -import { EmbeddableStateComparators } from './types'; interface SuperTestStateType { name: string; @@ -26,7 +26,7 @@ interface SuperTestStateType { describe('react embeddable unsaved changes', () => { let initialState: SuperTestStateType; let lastSavedState: SuperTestStateType; - let comparators: EmbeddableStateComparators; + let comparators: StateComparators; let deserializeState: (state: SerializedPanelState) => SuperTestStateType; let parentApi: (PresentationContainer & PublishesLastSavedState) | null; @@ -47,7 +47,7 @@ describe('react embeddable unsaved changes', () => { const nameSubject = new BehaviorSubject(initialState.name); const ageSubject = new BehaviorSubject(initialState.age); const taglineSubject = new BehaviorSubject(initialState.tagline); - const defaultComparators: EmbeddableStateComparators = { + const defaultComparators: StateComparators = { name: [nameSubject, jest.fn((nextName) => nameSubject.next(nextName))], age: [ageSubject, jest.fn((nextAge) => ageSubject.next(nextAge))], tagline: [taglineSubject, jest.fn((nextTagline) => taglineSubject.next(nextTagline))], @@ -56,7 +56,7 @@ describe('react embeddable unsaved changes', () => { }; const startTrackingUnsavedChanges = ( - customComparators?: EmbeddableStateComparators + customComparators?: StateComparators ) => { comparators = customComparators ?? initializeDefaultComparators(); deserializeState = jest.fn((state) => state.rawState as SuperTestStateType); @@ -142,7 +142,7 @@ describe('react embeddable unsaved changes', () => { lastSavedState.age = 20; initialState.age = 50; const ageSubject = new BehaviorSubject(initialState.age); - const customComparators: EmbeddableStateComparators = { + const customComparators: StateComparators = { ...initializeDefaultComparators(), age: [ ageSubject, diff --git a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.ts b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.ts index b717c47737ad6..f4bc6bbfc4ad8 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.ts +++ b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_unsaved_changes.ts @@ -11,24 +11,14 @@ import { PresentationContainer, SerializedPanelState, } from '@kbn/presentation-containers'; -import { PublishingSubject } from '@kbn/presentation-publishing'; +import { + getInitialValuesFromComparators, + PublishingSubject, + runComparators, + StateComparators, +} from '@kbn/presentation-publishing'; import { BehaviorSubject, combineLatest } from 'rxjs'; import { combineLatestWith, debounceTime, map } from 'rxjs/operators'; -import { EmbeddableStateComparators } from './types'; - -const defaultComparator = (a: T, b: T) => a === b; - -const getInitialValuesFromComparators = ( - comparators: EmbeddableStateComparators, - comparatorKeys: Array -) => { - const initialValues: Partial = {}; - for (const key of comparatorKeys) { - const comparatorSubject = comparators[key][0]; // 0th element of tuple is the subject - initialValues[key] = comparatorSubject?.value; - } - return initialValues; -}; const getDefaultDiffingApi = () => { return { @@ -38,31 +28,10 @@ const getDefaultDiffingApi = () => { }; }; -const runComparators = ( - comparators: EmbeddableStateComparators, - comparatorKeys: Array, - lastSavedState: StateType | undefined, - latestState: Partial -) => { - if (!lastSavedState) { - // if the parent API provides last saved state, but it's empty for this panel, all of our latest state is unsaved. - return latestState; - } - const latestChanges: Partial = {}; - for (const key of comparatorKeys) { - const customComparator = comparators[key]?.[2]; // 2nd element of the tuple is the custom comparator - const comparator = customComparator ?? defaultComparator; - if (!comparator(lastSavedState?.[key], latestState[key], lastSavedState, latestState)) { - latestChanges[key] = latestState[key]; - } - } - return Object.keys(latestChanges).length > 0 ? latestChanges : undefined; -}; - export const startTrackingEmbeddableUnsavedChanges = ( uuid: string, parentApi: PresentationContainer | undefined, - comparators: EmbeddableStateComparators, + comparators: StateComparators, deserializeState: (state: SerializedPanelState) => StateType ) => { if (Object.keys(comparators).length === 0) return getDefaultDiffingApi(); diff --git a/src/plugins/embeddable/public/react_embeddable_system/types.ts b/src/plugins/embeddable/public/react_embeddable_system/types.ts index 5068c0c16fdfa..6c54b13ce5c51 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/types.ts +++ b/src/plugins/embeddable/public/react_embeddable_system/types.ts @@ -11,7 +11,7 @@ import { SerializedPanelState, } from '@kbn/presentation-containers'; import { DefaultPresentationPanelApi } from '@kbn/presentation-panel-plugin/public/panel_component/types'; -import { HasType, PublishesUnsavedChanges, PublishingSubject } from '@kbn/presentation-publishing'; +import { HasType, PublishesUnsavedChanges, StateComparators } from '@kbn/presentation-publishing'; import React, { ReactElement } from 'react'; export type ReactEmbeddableRegistration< @@ -45,29 +45,9 @@ export interface ReactEmbeddableFactory< initialState: StateType, buildApi: ( apiRegistration: ReactEmbeddableApiRegistration, - comparators: EmbeddableStateComparators + comparators: StateComparators ) => ApiType, uuid: string, parentApi?: PresentationContainer ) => Promise<{ Component: React.FC<{}>; api: ApiType }>; } - -/** - * State comparators - */ -export type EmbeddableComparatorFunction = ( - last: StateType[KeyType] | undefined, - current: StateType[KeyType] | undefined, - lastState?: Partial, - currentState?: Partial -) => boolean; - -export type EmbeddableComparatorDefinition = [ - PublishingSubject, - (value: StateType[KeyType]) => void, - EmbeddableComparatorFunction? -]; - -export type EmbeddableStateComparators = { - [KeyType in keyof StateType]: EmbeddableComparatorDefinition; -}; diff --git a/src/plugins/presentation_panel/public/panel_component/presentation_panel_error.tsx b/src/plugins/presentation_panel/public/panel_component/presentation_panel_error.tsx index 92f7a0045003b..5b7de4ec05cc2 100644 --- a/src/plugins/presentation_panel/public/panel_component/presentation_panel_error.tsx +++ b/src/plugins/presentation_panel/public/panel_component/presentation_panel_error.tsx @@ -10,10 +10,9 @@ import { EuiButtonEmpty, EuiEmptyPrompt, EuiText } from '@elastic/eui'; import React, { useEffect, useMemo, useState } from 'react'; import { ErrorLike } from '@kbn/expressions-plugin/common'; -import { Markdown } from '@kbn/shared-ux-markdown'; +import { useStateFromPublishingSubject } from '@kbn/presentation-publishing'; import { renderSearchError } from '@kbn/search-errors'; - -import { usePanelTitle } from '@kbn/presentation-publishing'; +import { Markdown } from '@kbn/shared-ux-markdown'; import { Subscription } from 'rxjs'; import { editPanelAction } from '../panel_actions/panel_actions'; import { getErrorCallToAction } from './presentation_panel_strings'; @@ -36,7 +35,7 @@ export const PresentationPanelError = ({ [api, isEditable] ); - const panelTitle = usePanelTitle(api); + const panelTitle = useStateFromPublishingSubject(api?.panelTitle); const ariaLabel = useMemo( () => (panelTitle ? getErrorCallToAction(panelTitle) : label), [label, panelTitle] diff --git a/x-pack/plugins/embeddable_enhanced/public/plugin.ts b/x-pack/plugins/embeddable_enhanced/public/plugin.ts index ac52d1f78974d..58e6a04ee661e 100644 --- a/x-pack/plugins/embeddable_enhanced/public/plugin.ts +++ b/x-pack/plugins/embeddable_enhanced/public/plugin.ts @@ -18,8 +18,7 @@ import { IEmbeddable, PANEL_NOTIFICATION_TRIGGER, } from '@kbn/embeddable-plugin/public'; -import { EmbeddableStateComparators } from '@kbn/embeddable-plugin/public/react_embeddable_system/types'; -import { apiHasUniqueId } from '@kbn/presentation-publishing'; +import { apiHasUniqueId, StateComparators } from '@kbn/presentation-publishing'; import type { FinderAttributes } from '@kbn/saved-objects-finder-plugin/common'; import { AdvancedUiActionsSetup, @@ -57,7 +56,7 @@ export interface StartContract { state: DynamicActionsSerializedState ) => { dynamicActionsApi: HasDynamicActions; - dynamicActionsComparator: EmbeddableStateComparators; + dynamicActionsComparator: StateComparators; serializeDynamicActions: () => DynamicActionsSerializedState; }; } @@ -137,7 +136,7 @@ export class EmbeddableEnhancedPlugin state: DynamicActionsSerializedState ): { dynamicActionsApi: HasDynamicActions; - dynamicActionsComparator: EmbeddableStateComparators; + dynamicActionsComparator: StateComparators; serializeDynamicActions: () => DynamicActionsSerializedState; } { const dynamicActionsState$ = new BehaviorSubject( From d27ada2e290dfbe225fe43c362859ab27476af78 Mon Sep 17 00:00:00 2001 From: Jeramy Soucy Date: Fri, 22 Mar 2024 12:50:43 -0400 Subject: [PATCH 68/90] Create navigation cards for serverless access management (#176761) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #174953 ## Summary Adds "Access" section to serverless management page, with cards for custom roles, organization members, and API keys. These new cards are gated by the `roleManagementEnabled` feature flag (see #176200). Screenshot 2024-03-11 at 10 17 06 PM ### API keys card Access to this card is gated by API key privileges - any user with permission to access the API keys management page will see this card. ### Custom roles card Access to this card is gated by both the feature flag and role privileges - any user with permission to access the Roles management page will see this card if the feature flag is enabled. ### Organization members card Access to this card is gated by only the feature flag. **Currently there is no way to query if a user has access to manage the cloud organization.** ### Implementation Notes: - Previously, only the serverless search solution offered a link to the API keys management page from the left navigation bar and the landing page. This PR will provide access to the API keys management page in all 3 serverless solutions, via the management cards page, given the user has the minimum API key permissions required. - In order to check the value of the feature flag from outside of the security plugin, I have exposed an authz service from the security plugin (following the paradigm of the authc service). This can be removed once the feature flag is no longer needed. - The `Organization members` card is an "extension" navigation card because it is not tied to an actual application. It provides a link to the cloud organization. This is implemented in the serverless plugin, alongside a `getNavigationCards` helper function, to be commonly located for use in the three serverless solutions plugins. Due to dependency restrictions, each solution plugin passes the feature flag value from the security plugin to this function - a complication that will be removed once the feature flag is no longer needed. ## Manual Testing 1. In the `kibana.dev.yml` file, add the following settings. This enables the role management feature flag, and provides cloud URLs for the `Manage organization members` card. ``` xpack.security.roleManagementEnabled: true xpack.cloud.base_url: 'https://cloud.elastic.co' xpack.cloud.organization_url: '/account/members' ``` 2. Add a test user without access to API keys to the serverless search `roles.yml` file. Example: Copy the viewer role, and remove the `manage_own_api_key` cluster privilege. ``` tester: cluster: ['read_pipeline'] indices: - names: - '*' privileges: - 'read' - 'view_index_metadata' applications: - application: 'kibana-.kibana' privileges: - 'read' resources: - '*' ``` 3. Start Elasticsearch and Kibana in serverless mode and SSL enabled (to access the test user selector). Examples: ``` yarn es --serverless=es --ssl yarn start --serverless=es --ssl ``` 4. Navigate to Kibana (use `https` as SSL is enabled), and log in as the `Admin` test user. 5. Navigate to the Management page using the side navigation bar. Verify the three new cards are rendered in a new `Access` section, and that each functions correctly by navigating the user the appropriate application, or to the cloud organization page (in the case of the Manage organization members card). 6. Switch to a user without access to view or update roles (e.g. `viewer` in the serverless search solution). Verify that the API keys and Org members cards are present, but not the Custom roles card. 7. Switch to a user without access to the API keys management page (the test role added in step 2 for the search solution). Verify that the API keys card is not present. 8. Disable the `xpack.security.roleManagementEnabled` feature flag. Switch to the `admin` test user, and verify that the `Access` section contains only the API keys card 9. Switch to a user without access to the API keys management page. Verify that the `Access` section does not render at all. 10. Repeat testing with other solutions (security, observability). Keep in mind that you may have to add additional test roles to the `roles.yml` file if you want to test conditions for steps 6 and 7 independently. ## Automated Testing See `x-pack/test_serverless/functional/test_suites/common/platform_security/navigation/management_nav_cards.ts`, which can be run from - `x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts` - `x-pack/test_serverless/functional/test_suites/security/config.feature_flags.ts` - `x-pack/test_serverless/functional/test_suites/observability/config.feature_flags.ts`. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../kbn-management/cards_navigation/index.ts | 5 +- .../cards_navigation/src/cards_navigation.tsx | 7 + .../cards_navigation/src/consts.tsx | 21 +-- .../cards_navigation/src/types.ts | 3 +- .../security/plugin_types_public/index.ts | 1 + .../authorization/authorization_service.ts | 18 +++ .../src/authorization/index.ts | 8 ++ .../plugin_types_public/src/plugin.ts | 9 ++ x-pack/plugins/security/kibana.jsonc | 2 +- .../public/authentication/index.mock.ts | 11 ++ .../authorization/authorization_service.ts | 22 ++++ .../security/public/authorization/index.ts | 8 ++ x-pack/plugins/security/public/index.ts | 2 + .../management/management_service.test.ts | 3 + .../public/management/management_service.ts | 6 +- .../roles/roles_management_app.test.tsx | 2 + .../management/roles/roles_management_app.tsx | 15 ++- x-pack/plugins/security/public/mocks.ts | 4 +- .../plugins/security/public/plugin.test.tsx | 5 + x-pack/plugins/security/public/plugin.tsx | 25 +++- .../public/navigation/management_cards.ts | 38 +++--- .../tsconfig.json | 2 +- x-pack/plugins/serverless/public/mocks.ts | 1 + .../serverless/public/navigation/index.tsx | 2 + .../serverless/public/navigation/nav_cards.ts | 26 ++++ x-pack/plugins/serverless/public/plugin.tsx | 16 ++- x-pack/plugins/serverless/public/types.ts | 5 + x-pack/plugins/serverless/tsconfig.json | 2 + .../serverless_observability/kibana.jsonc | 1 + .../serverless_observability/public/plugin.ts | 20 +-- .../serverless_observability/public/types.ts | 2 + .../serverless_observability/tsconfig.json | 1 + .../serverless_search/public/plugin.ts | 8 +- .../page_objects/svl_management_page.ts | 25 +++- .../common/management/landing_page.ts | 24 +++- .../navigation/management_nav_cards.ts | 123 ++++++++++++++++++ .../roles_management_card.ts | 41 ------ .../observability/config.feature_flags.ts | 2 + .../observability/index.feature_flags.ts | 2 +- .../search/config.feature_flags.ts | 6 +- .../test_suites/search/index.feature_flags.ts | 2 +- .../security/config.feature_flags.ts | 6 +- .../security/index.feature_flags.ts | 2 +- 43 files changed, 428 insertions(+), 106 deletions(-) create mode 100644 x-pack/packages/security/plugin_types_public/src/authorization/authorization_service.ts create mode 100644 x-pack/packages/security/plugin_types_public/src/authorization/index.ts create mode 100644 x-pack/plugins/security/public/authorization/authorization_service.ts create mode 100644 x-pack/plugins/security/public/authorization/index.ts create mode 100644 x-pack/plugins/serverless/public/navigation/nav_cards.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/platform_security/navigation/management_nav_cards.ts delete mode 100644 x-pack/test_serverless/functional/test_suites/common/platform_security/roles_management_card.ts diff --git a/packages/kbn-management/cards_navigation/index.ts b/packages/kbn-management/cards_navigation/index.ts index b6d71a5d3638b..5e9fea196e11f 100644 --- a/packages/kbn-management/cards_navigation/index.ts +++ b/packages/kbn-management/cards_navigation/index.ts @@ -7,6 +7,5 @@ */ export type { AppId, CardsNavigationComponentProps } from './src'; - -export { appIds } from './src'; -export { CardsNavigation } from './src'; +export { appCategories, type CardNavExtensionDefinition } from './src/types'; +export { appIds, CardsNavigation } from './src'; diff --git a/packages/kbn-management/cards_navigation/src/cards_navigation.tsx b/packages/kbn-management/cards_navigation/src/cards_navigation.tsx index b7ab58a4777db..b8ea0a1380b30 100644 --- a/packages/kbn-management/cards_navigation/src/cards_navigation.tsx +++ b/packages/kbn-management/cards_navigation/src/cards_navigation.tsx @@ -109,6 +109,13 @@ const getEnabledAppsByCategory = ( }), apps: getAppsForCategory(appCategories.DATA, filteredApps), }, + { + id: appCategories.ACCESS, + title: i18n.translate('management.landing.withCardNavigation.accessTitle', { + defaultMessage: 'Access', + }), + apps: getAppsForCategory(appCategories.ACCESS, filteredApps), + }, { id: appCategories.ALERTS, title: i18n.translate('management.landing.withCardNavigation.alertsTitle', { diff --git a/packages/kbn-management/cards_navigation/src/consts.tsx b/packages/kbn-management/cards_navigation/src/consts.tsx index 68a4f5040ca01..97b62eca90a4c 100644 --- a/packages/kbn-management/cards_navigation/src/consts.tsx +++ b/packages/kbn-management/cards_navigation/src/consts.tsx @@ -119,14 +119,6 @@ export const appDefinitions: Record = { icon: 'tag', }, - [AppIds.API_KEYS]: { - category: appCategories.OTHER, - description: i18n.translate('management.landing.withCardNavigation.apiKeysDescription', { - defaultMessage: 'Allow programmatic access to your project data and capabilities.', - }), - icon: 'lockOpen', - }, - [AppIds.SERVERLESS_SETTINGS]: { category: appCategories.OTHER, description: i18n.translate('management.landing.withCardNavigation.settingsDescription', { @@ -135,10 +127,19 @@ export const appDefinitions: Record = { icon: 'gear', }, + // Access section + [AppIds.API_KEYS]: { + category: appCategories.ACCESS, + description: i18n.translate('management.landing.withCardNavigation.apiKeysDescription', { + defaultMessage: 'Allow programmatic access to your project data and capabilities.', + }), + icon: 'lockOpen', + }, [AppIds.ROLES]: { - category: appCategories.OTHER, + category: appCategories.ACCESS, description: i18n.translate('management.landing.withCardNavigation.rolesDescription', { - defaultMessage: 'Allow custom roles to be created for users.', + defaultMessage: + 'Create roles unique to this project and combine the exact set of privileges that your users need.', }), icon: 'usersRolesApp', }, diff --git a/packages/kbn-management/cards_navigation/src/types.ts b/packages/kbn-management/cards_navigation/src/types.ts index 848f0e57e02df..f03544342abb0 100644 --- a/packages/kbn-management/cards_navigation/src/types.ts +++ b/packages/kbn-management/cards_navigation/src/types.ts @@ -20,7 +20,6 @@ export enum AppIds { SAVED_OBJECTS = 'objects', TAGS = 'tags', FILES_MANAGEMENT = 'filesManagement', - API_KEYS = 'api_keys', DATA_VIEWS = 'dataViews', REPORTING = 'reporting', CONNECTORS = 'triggersActionsConnectors', @@ -28,6 +27,7 @@ export enum AppIds { MAINTENANCE_WINDOWS = 'maintenanceWindows', SERVERLESS_SETTINGS = 'settings', ROLES = 'roles', + API_KEYS = 'api_keys', } // Create new type that is a union of all the appId values @@ -35,6 +35,7 @@ export type AppId = `${AppIds}`; export const appCategories = { DATA: 'data', + ACCESS: 'access', ALERTS: 'alerts', CONTENT: 'content', OTHER: 'other', diff --git a/x-pack/packages/security/plugin_types_public/index.ts b/x-pack/packages/security/plugin_types_public/index.ts index fc129909743e6..682e1641a4c4c 100644 --- a/x-pack/packages/security/plugin_types_public/index.ts +++ b/x-pack/packages/security/plugin_types_public/index.ts @@ -6,6 +6,7 @@ */ export type { AuthenticationServiceStart, AuthenticationServiceSetup } from './src/authentication'; +export type { AuthorizationServiceStart, AuthorizationServiceSetup } from './src/authorization'; export type { UserMenuLink, SecurityNavControlServiceStart } from './src/nav_control'; export type { SecurityPluginSetup, SecurityPluginStart } from './src/plugin'; export type { diff --git a/x-pack/packages/security/plugin_types_public/src/authorization/authorization_service.ts b/x-pack/packages/security/plugin_types_public/src/authorization/authorization_service.ts new file mode 100644 index 0000000000000..16fd10a57d694 --- /dev/null +++ b/x-pack/packages/security/plugin_types_public/src/authorization/authorization_service.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. + */ + +export interface AuthorizationServiceSetup { + /** + * Determines if role management is enabled. + */ + isRoleManagementEnabled: () => boolean | undefined; +} + +/** + * Start has the same contract as Setup for now. + */ +export type AuthorizationServiceStart = AuthorizationServiceSetup; diff --git a/x-pack/packages/security/plugin_types_public/src/authorization/index.ts b/x-pack/packages/security/plugin_types_public/src/authorization/index.ts new file mode 100644 index 0000000000000..e00b9dc817909 --- /dev/null +++ b/x-pack/packages/security/plugin_types_public/src/authorization/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 type { AuthorizationServiceSetup, AuthorizationServiceStart } from './authorization_service'; diff --git a/x-pack/packages/security/plugin_types_public/src/plugin.ts b/x-pack/packages/security/plugin_types_public/src/plugin.ts index 28c5822a2e131..672be02cf38d4 100644 --- a/x-pack/packages/security/plugin_types_public/src/plugin.ts +++ b/x-pack/packages/security/plugin_types_public/src/plugin.ts @@ -7,6 +7,7 @@ import type { SecurityLicense } from '@kbn/security-plugin-types-common'; import type { AuthenticationServiceSetup, AuthenticationServiceStart } from './authentication'; +import type { AuthorizationServiceSetup, AuthorizationServiceStart } from './authorization'; import type { SecurityNavControlServiceStart } from './nav_control'; import type { UserProfileAPIClient } from './user_profile'; @@ -15,6 +16,10 @@ export interface SecurityPluginSetup { * Exposes authentication information about the currently logged in user. */ authc: AuthenticationServiceSetup; + /** + * Exposes authorization configuration. + */ + authz: AuthorizationServiceSetup; /** * Exposes information about the available security features under the current license. */ @@ -30,6 +35,10 @@ export interface SecurityPluginStart { * Exposes authentication information about the currently logged in user. */ authc: AuthenticationServiceStart; + /** + * Exposes authorization configuration. + */ + authz: AuthorizationServiceStart; /** * A set of methods to work with Kibana user profiles. */ diff --git a/x-pack/plugins/security/kibana.jsonc b/x-pack/plugins/security/kibana.jsonc index d004cdba880a4..01d089a90bea9 100644 --- a/x-pack/plugins/security/kibana.jsonc +++ b/x-pack/plugins/security/kibana.jsonc @@ -33,4 +33,4 @@ "remoteClusters" ] } -} \ No newline at end of file +} diff --git a/x-pack/plugins/security/public/authentication/index.mock.ts b/x-pack/plugins/security/public/authentication/index.mock.ts index cc1c098eb6794..58035767e0f2c 100644 --- a/x-pack/plugins/security/public/authentication/index.mock.ts +++ b/x-pack/plugins/security/public/authentication/index.mock.ts @@ -8,6 +8,8 @@ import type { AuthenticationServiceSetup, AuthenticationServiceStart, + AuthorizationServiceSetup, + AuthorizationServiceStart, } from '@kbn/security-plugin-types-public'; export const authenticationMock = { @@ -20,3 +22,12 @@ export const authenticationMock = { areAPIKeysEnabled: jest.fn(), }), }; + +export const authorizationMock = { + createSetup: (): jest.Mocked => ({ + isRoleManagementEnabled: jest.fn(), + }), + createStart: (): jest.Mocked => ({ + isRoleManagementEnabled: jest.fn(), + }), +}; diff --git a/x-pack/plugins/security/public/authorization/authorization_service.ts b/x-pack/plugins/security/public/authorization/authorization_service.ts new file mode 100644 index 0000000000000..8f003dde8659f --- /dev/null +++ b/x-pack/plugins/security/public/authorization/authorization_service.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { AuthorizationServiceSetup } from '@kbn/security-plugin-types-public'; + +import type { ConfigType } from '../config'; + +interface SetupParams { + config: ConfigType; +} + +export class AuthorizationService { + public setup({ config }: SetupParams): AuthorizationServiceSetup { + const isRoleManagementEnabled = () => config.roleManagementEnabled; + + return { isRoleManagementEnabled }; + } +} diff --git a/x-pack/plugins/security/public/authorization/index.ts b/x-pack/plugins/security/public/authorization/index.ts new file mode 100644 index 0000000000000..8d35af667f1a8 --- /dev/null +++ b/x-pack/plugins/security/public/authorization/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 { AuthorizationService } from './authorization_service'; diff --git a/x-pack/plugins/security/public/index.ts b/x-pack/plugins/security/public/index.ts index 419042c4a288c..66f0c08521d52 100644 --- a/x-pack/plugins/security/public/index.ts +++ b/x-pack/plugins/security/public/index.ts @@ -25,6 +25,8 @@ export { ALL_SPACES_ID } from '../common/constants'; export type { AuthenticationServiceStart, AuthenticationServiceSetup, + AuthorizationServiceStart, + AuthorizationServiceSetup, SecurityNavControlServiceStart, UserMenuLink, UserProfileBulkGetParams, diff --git a/x-pack/plugins/security/public/management/management_service.test.ts b/x-pack/plugins/security/public/management/management_service.test.ts index baabb29143a8b..e6beab2525a3d 100644 --- a/x-pack/plugins/security/public/management/management_service.test.ts +++ b/x-pack/plugins/security/public/management/management_service.test.ts @@ -51,6 +51,7 @@ describe('ManagementService', () => { fatalErrors, authc, management: managementSetup, + buildFlavor: 'traditional', }); expect(mockSection.registerApp).toHaveBeenCalledTimes(4); @@ -111,6 +112,7 @@ describe('ManagementService', () => { fatalErrors, authc, management: managementSetup, + buildFlavor: 'traditional', }); // Only API Keys app should be registered @@ -181,6 +183,7 @@ describe('ManagementService', () => { fatalErrors, authc: securityMock.createSetup().authc, management: managementSetup, + buildFlavor: 'traditional', }); const getMockedApp = (id: string) => { diff --git a/x-pack/plugins/security/public/management/management_service.ts b/x-pack/plugins/security/public/management/management_service.ts index 84918cb0943f8..bfdc81637f4d3 100644 --- a/x-pack/plugins/security/public/management/management_service.ts +++ b/x-pack/plugins/security/public/management/management_service.ts @@ -7,6 +7,7 @@ import type { Subscription } from 'rxjs'; +import type { BuildFlavor } from '@kbn/config'; import type { Capabilities, FatalErrorsSetup, StartServicesAccessor } from '@kbn/core/public'; import type { ManagementApp, @@ -35,6 +36,7 @@ interface SetupParams { authc: AuthenticationServiceSetup; fatalErrors: FatalErrorsSetup; getStartServices: StartServicesAccessor; + buildFlavor: BuildFlavor; } interface StartParams { @@ -55,7 +57,7 @@ export class ManagementService { this.roleMappingManagementEnabled = config.ui?.roleMappingManagementEnabled !== false; } - setup({ getStartServices, management, authc, license, fatalErrors }: SetupParams) { + setup({ getStartServices, management, authc, license, fatalErrors, buildFlavor }: SetupParams) { this.license = license; this.securitySection = management.sections.section.security; @@ -65,7 +67,7 @@ export class ManagementService { if (this.roleManagementEnabled) { this.securitySection.registerApp( - rolesManagementApp.create({ fatalErrors, license, getStartServices }) + rolesManagementApp.create({ fatalErrors, license, getStartServices, buildFlavor }) ); } diff --git a/x-pack/plugins/security/public/management/roles/roles_management_app.test.tsx b/x-pack/plugins/security/public/management/roles/roles_management_app.test.tsx index 300f5e195b510..7545c69b7a95f 100644 --- a/x-pack/plugins/security/public/management/roles/roles_management_app.test.tsx +++ b/x-pack/plugins/security/public/management/roles/roles_management_app.test.tsx @@ -48,6 +48,7 @@ async function mountApp(basePath: string, pathname: string) { getStartServices: jest .fn() .mockResolvedValue([coreStart, { data: {}, features: featuresStart }]), + buildFlavor: 'traditional', }) .mount({ basePath, @@ -70,6 +71,7 @@ describe('rolesManagementApp', () => { license: licenseMock.create(), fatalErrors, getStartServices: getStartServices as any, + buildFlavor: 'traditional', }) ).toMatchInlineSnapshot(` Object { diff --git a/x-pack/plugins/security/public/management/roles/roles_management_app.tsx b/x-pack/plugins/security/public/management/roles/roles_management_app.tsx index a77586cdad599..704e975543724 100644 --- a/x-pack/plugins/security/public/management/roles/roles_management_app.tsx +++ b/x-pack/plugins/security/public/management/roles/roles_management_app.tsx @@ -9,6 +9,7 @@ import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; import { useParams } from 'react-router-dom'; +import type { BuildFlavor } from '@kbn/config'; import type { FatalErrorsSetup, StartServicesAccessor } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; @@ -29,14 +30,20 @@ interface CreateParams { fatalErrors: FatalErrorsSetup; license: SecurityLicense; getStartServices: StartServicesAccessor; + buildFlavor: BuildFlavor; } export const rolesManagementApp = Object.freeze({ id: 'roles', - create({ license, fatalErrors, getStartServices }: CreateParams) { - const title = i18n.translate('xpack.security.management.rolesTitle', { - defaultMessage: 'Roles', - }); + create({ license, fatalErrors, getStartServices, buildFlavor }: CreateParams) { + const title = + buildFlavor === 'serverless' + ? i18n.translate('xpack.security.management.rolesTitleServerless', { + defaultMessage: 'Custom Roles', + }) + : i18n.translate('xpack.security.management.rolesTitle', { + defaultMessage: 'Roles', + }); return { id: this.id, order: 20, diff --git a/x-pack/plugins/security/public/mocks.ts b/x-pack/plugins/security/public/mocks.ts index f31a4f01f3535..2e3b19016fd2e 100644 --- a/x-pack/plugins/security/public/mocks.ts +++ b/x-pack/plugins/security/public/mocks.ts @@ -7,7 +7,7 @@ import { of } from 'rxjs'; -import { authenticationMock } from './authentication/index.mock'; +import { authenticationMock, authorizationMock } from './authentication/index.mock'; import { navControlServiceMock } from './nav_control/index.mock'; import { getUiApiMock } from './ui_api/index.mock'; import { licenseMock } from '../common/licensing/index.mock'; @@ -17,12 +17,14 @@ import { mockAuthenticatedUser } from '../common/model/authenticated_user.mock'; function createSetupMock() { return { authc: authenticationMock.createSetup(), + authz: authorizationMock.createStart(), license: licenseMock.create(), }; } function createStartMock() { return { authc: authenticationMock.createStart(), + authz: authorizationMock.createStart(), navControlService: navControlServiceMock.createStart(), userProfiles: { getCurrent: jest.fn(), diff --git a/x-pack/plugins/security/public/plugin.test.tsx b/x-pack/plugins/security/public/plugin.test.tsx index 540f2c44f3074..4a66f7b0cbfdf 100644 --- a/x-pack/plugins/security/public/plugin.test.tsx +++ b/x-pack/plugins/security/public/plugin.test.tsx @@ -36,6 +36,7 @@ describe('Security Plugin', () => { ) ).toEqual({ authc: { getCurrentUser: expect.any(Function), areAPIKeysEnabled: expect.any(Function) }, + authz: { isRoleManagementEnabled: expect.any(Function) }, license: { isLicenseAvailable: expect.any(Function), isEnabled: expect.any(Function), @@ -75,6 +76,7 @@ describe('Security Plugin', () => { management: managementSetupMock, fatalErrors: coreSetupMock.fatalErrors, getStartServices: coreSetupMock.getStartServices, + buildFlavor: expect.stringMatching(new RegExp('^serverless|traditional$')), }); }); @@ -110,6 +112,9 @@ describe('Security Plugin', () => { "areAPIKeysEnabled": [Function], "getCurrentUser": [Function], }, + "authz": Object { + "isRoleManagementEnabled": [Function], + }, "navControlService": Object { "addUserMenuLinks": [Function], "getUserMenuLinks$": [Function], diff --git a/x-pack/plugins/security/public/plugin.tsx b/x-pack/plugins/security/public/plugin.tsx index 820c3bc2cc172..b99d2898bc344 100644 --- a/x-pack/plugins/security/public/plugin.tsx +++ b/x-pack/plugins/security/public/plugin.tsx @@ -6,6 +6,7 @@ */ import type { CloudSetup, CloudStart } from '@kbn/cloud-plugin/public'; +import type { BuildFlavor } from '@kbn/config'; import type { CoreSetup, CoreStart, @@ -22,6 +23,8 @@ import type { ManagementSetup, ManagementStart } from '@kbn/management-plugin/pu import type { AuthenticationServiceSetup, AuthenticationServiceStart, + AuthorizationServiceSetup, + AuthorizationServiceStart, SecurityPluginSetup, SecurityPluginStart as SecurityPluginStartWithoutDeprecatedMembers, } from '@kbn/security-plugin-types-public'; @@ -32,6 +35,7 @@ import { accountManagementApp, UserProfileAPIClient } from './account_management import { AnalyticsService } from './analytics'; import { AnonymousAccessService } from './anonymous_access'; import { AuthenticationService } from './authentication'; +import { AuthorizationService } from './authorization'; import { buildSecurityApi } from './build_security_api'; import type { SecurityApiClients } from './components'; import type { ConfigType } from './config'; @@ -72,6 +76,7 @@ export class SecurityPlugin private readonly config: ConfigType; private sessionTimeout?: SessionTimeout; private readonly authenticationService = new AuthenticationService(); + private readonly authorizationService = new AuthorizationService(); private readonly navControlService; private readonly securityLicenseService = new SecurityLicenseService(); private readonly managementService: ManagementService; @@ -79,16 +84,17 @@ export class SecurityPlugin private readonly anonymousAccessService = new AnonymousAccessService(); private readonly analyticsService = new AnalyticsService(); private authc!: AuthenticationServiceSetup; + private authz!: AuthorizationServiceSetup; private securityApiClients!: SecurityApiClients; + private buildFlavor: BuildFlavor; + constructor(private readonly initializerContext: PluginInitializerContext) { + this.buildFlavor = initializerContext.env.packageInfo.buildFlavor; + this.config = this.initializerContext.config.get(); this.securityCheckupService = new SecurityCheckupService(this.config, localStorage); - this.navControlService = new SecurityNavControlService( - initializerContext.env.packageInfo.buildFlavor - ); - this.managementService = new ManagementService( - this.initializerContext.config.get() - ); + this.navControlService = new SecurityNavControlService(this.buildFlavor); + this.managementService = new ManagementService(this.config); } public setup( @@ -107,6 +113,10 @@ export class SecurityPlugin http: core.http, }); + this.authz = this.authorizationService.setup({ + config: this.config, + }); + this.securityApiClients = { userProfiles: new UserProfileAPIClient(core.http), users: new UserAPIClient(core.http), @@ -142,6 +152,7 @@ export class SecurityPlugin authc: this.authc, fatalErrors: core.fatalErrors, getStartServices: core.getStartServices, + buildFlavor: this.buildFlavor, }); } @@ -168,6 +179,7 @@ export class SecurityPlugin return { authc: this.authc, + authz: this.authz, license, }; } @@ -205,6 +217,7 @@ export class SecurityPlugin uiApi: getUiApi({ core }), navControlService: this.navControlService.start({ core, authc: this.authc }), authc: this.authc as AuthenticationServiceStart, + authz: this.authz as AuthorizationServiceStart, userProfiles: { getCurrent: this.securityApiClients.userProfiles.getCurrent.bind( this.securityApiClients.userProfiles diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/management_cards.ts b/x-pack/plugins/security_solution_serverless/public/navigation/management_cards.ts index 79587f8f0843b..d394efac7776c 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/management_cards.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/management_cards.ts @@ -24,27 +24,31 @@ export const enableManagementCardsLanding = (services: Services) => { const { management, application } = services; services.getProjectNavLinks$().subscribe((projectNavLinks) => { - const extendCardNavDefinitions = projectNavLinks.reduce< - Record - >((acc, projectNavLink) => { - if (SecurityManagementCards.has(projectNavLink.id)) { - const { appId, deepLinkId, path } = getNavigationPropsFromId(projectNavLink.id); + const cardNavDefinitions = projectNavLinks.reduce>( + (acc, projectNavLink) => { + if (SecurityManagementCards.has(projectNavLink.id)) { + const { appId, deepLinkId, path } = getNavigationPropsFromId(projectNavLink.id); - acc[projectNavLink.id] = { - category: SecurityManagementCards.get(projectNavLink.id) ?? 'other', - title: projectNavLink.title, - description: projectNavLink.description ?? '', - icon: projectNavLink.landingIcon ?? '', - href: application.getUrlForApp(appId, { deepLinkId, path }), - skipValidation: true, - }; - } - return acc; - }, {}); + acc[projectNavLink.id] = { + category: SecurityManagementCards.get(projectNavLink.id) ?? 'other', + title: projectNavLink.title, + description: projectNavLink.description ?? '', + icon: projectNavLink.landingIcon ?? '', + href: application.getUrlForApp(appId, { deepLinkId, path }), + skipValidation: true, + }; + } + return acc; + }, + {} + ); management.setupCardsNavigation({ enabled: true, - extendCardNavDefinitions, + extendCardNavDefinitions: services.serverless.getNavigationCards( + services.security.authz.isRoleManagementEnabled(), + cardNavDefinitions + ), }); }); }; diff --git a/x-pack/plugins/security_solution_serverless/tsconfig.json b/x-pack/plugins/security_solution_serverless/tsconfig.json index 639479da3c87d..f98239e38eeb5 100644 --- a/x-pack/plugins/security_solution_serverless/tsconfig.json +++ b/x-pack/plugins/security_solution_serverless/tsconfig.json @@ -46,6 +46,6 @@ "@kbn/actions-plugin", "@kbn/management-cards-navigation", "@kbn/core-application-browser", - "@kbn/discover-plugin" + "@kbn/discover-plugin", ] } diff --git a/x-pack/plugins/serverless/public/mocks.ts b/x-pack/plugins/serverless/public/mocks.ts index 7335de1e37967..2d3b35b6980d4 100644 --- a/x-pack/plugins/serverless/public/mocks.ts +++ b/x-pack/plugins/serverless/public/mocks.ts @@ -12,6 +12,7 @@ const startMock = (): ServerlessPluginStart => ({ setBreadcrumbs: jest.fn(), setProjectHome: jest.fn(), setSideNavComponentDeprecated: jest.fn(), + getNavigationCards: jest.fn(), }); export const serverlessMock = { diff --git a/x-pack/plugins/serverless/public/navigation/index.tsx b/x-pack/plugins/serverless/public/navigation/index.tsx index 23ae455a16ac0..b22b8d51e6166 100644 --- a/x-pack/plugins/serverless/public/navigation/index.tsx +++ b/x-pack/plugins/serverless/public/navigation/index.tsx @@ -16,3 +16,5 @@ export const SideNavComponent: FC = (props) => ( ); + +export { manageOrgMembersNavCardName, generateManageOrgMembersNavCard } from './nav_cards'; diff --git a/x-pack/plugins/serverless/public/navigation/nav_cards.ts b/x-pack/plugins/serverless/public/navigation/nav_cards.ts new file mode 100644 index 0000000000000..632c2030c2561 --- /dev/null +++ b/x-pack/plugins/serverless/public/navigation/nav_cards.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 { i18n } from '@kbn/i18n'; +import { appCategories, CardNavExtensionDefinition } from '@kbn/management-cards-navigation'; + +export const manageOrgMembersNavCardName = 'organization_members'; + +export function generateManageOrgMembersNavCard(cloudOrgUrl?: string): CardNavExtensionDefinition { + return { + category: appCategories.ACCESS, + description: i18n.translate('xpack.serverless.nav.manageOrgMembersDescription', { + defaultMessage: 'Invite team members and assign them roles to access this project.', + }), + icon: 'users', + skipValidation: true, + href: cloudOrgUrl ?? '', + title: i18n.translate('xpack.serverless.nav.manageOrgMembersTitle', { + defaultMessage: 'Manage organization members', + }), + }; +} diff --git a/x-pack/plugins/serverless/public/plugin.tsx b/x-pack/plugins/serverless/public/plugin.tsx index 06cc9f91a5c47..d26e9b66b8d47 100644 --- a/x-pack/plugins/serverless/public/plugin.tsx +++ b/x-pack/plugins/serverless/public/plugin.tsx @@ -15,7 +15,11 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { API_SWITCH_PROJECT as projectChangeAPIUrl } from '../common'; import { ServerlessConfig } from './config'; -import { SideNavComponent } from './navigation'; +import { + generateManageOrgMembersNavCard, + manageOrgMembersNavCardName, + SideNavComponent, +} from './navigation'; import { ServerlessPluginSetup, ServerlessPluginSetupDependencies, @@ -95,6 +99,16 @@ export class ServerlessPlugin }, setBreadcrumbs: (breadcrumbs, params) => project.setBreadcrumbs(breadcrumbs, params), setProjectHome: (homeHref: string) => project.setHome(homeHref), + getNavigationCards: (roleManagementEnabled, extendCardNavDefinitions) => { + if (!roleManagementEnabled) return extendCardNavDefinitions; + + const manageOrgMembersNavCard = generateManageOrgMembersNavCard(cloud.organizationUrl); + if (extendCardNavDefinitions) { + extendCardNavDefinitions[manageOrgMembersNavCardName] = manageOrgMembersNavCard; + return extendCardNavDefinitions; + } + return { [manageOrgMembersNavCardName]: manageOrgMembersNavCard }; + }, }; } diff --git a/x-pack/plugins/serverless/public/types.ts b/x-pack/plugins/serverless/public/types.ts index ed1d7871d02e6..a2fa775314931 100644 --- a/x-pack/plugins/serverless/public/types.ts +++ b/x-pack/plugins/serverless/public/types.ts @@ -14,6 +14,7 @@ import type { import type { CloudSetup, CloudStart } from '@kbn/cloud-plugin/public'; import type { Observable } from 'rxjs'; import type { PanelContentProvider } from '@kbn/shared-ux-chrome-navigation'; +import { CardNavExtensionDefinition } from '@kbn/management-cards-navigation'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface ServerlessPluginSetup {} @@ -35,6 +36,10 @@ export interface ServerlessPluginStart { * @deprecated Use {@link ServerlessPluginStart.initNavigation} instead. */ setSideNavComponentDeprecated: (navigation: SideNavComponent) => void; + getNavigationCards( + roleManagementEnabled?: boolean, + extendCardNavDefinitions?: Record + ): Record | undefined; } export interface ServerlessPluginSetupDependencies { diff --git a/x-pack/plugins/serverless/tsconfig.json b/x-pack/plugins/serverless/tsconfig.json index 97d2345494930..c487758451852 100644 --- a/x-pack/plugins/serverless/tsconfig.json +++ b/x-pack/plugins/serverless/tsconfig.json @@ -26,5 +26,7 @@ "@kbn/cloud-plugin", "@kbn/serverless-common-settings", "@kbn/shared-ux-chrome-navigation", + "@kbn/i18n", + "@kbn/management-cards-navigation", ] } diff --git a/x-pack/plugins/serverless_observability/kibana.jsonc b/x-pack/plugins/serverless_observability/kibana.jsonc index f8ba3cc645543..95795670d0443 100644 --- a/x-pack/plugins/serverless_observability/kibana.jsonc +++ b/x-pack/plugins/serverless_observability/kibana.jsonc @@ -19,6 +19,7 @@ "observabilityShared", "management", "discover", + "security", ], "optionalPlugins": [], "requiredBundles": [] diff --git a/x-pack/plugins/serverless_observability/public/plugin.ts b/x-pack/plugins/serverless_observability/public/plugin.ts index 8ddf0d769909d..eba0d0f1fd0cf 100644 --- a/x-pack/plugins/serverless_observability/public/plugin.ts +++ b/x-pack/plugins/serverless_observability/public/plugin.ts @@ -7,8 +7,7 @@ import { CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; -import { appIds } from '@kbn/management-cards-navigation'; -import { appCategories } from '@kbn/management-cards-navigation/src/types'; +import { appCategories, appIds } from '@kbn/management-cards-navigation'; import { of } from 'rxjs'; import { navigationTree } from './navigation_tree'; import { createObservabilityDashboardRegistration } from './logs_signal/overview_registration'; @@ -52,16 +51,15 @@ export class ServerlessObservabilityPlugin core: CoreStart, setupDeps: ServerlessObservabilityPublicStartDependencies ): ServerlessObservabilityPublicStart { - const { serverless, management } = setupDeps; + const { serverless, management, security } = setupDeps; const navigationTree$ = of(navigationTree); serverless.setProjectHome('/app/observability/landing'); serverless.initNavigation(navigationTree$, { dataTestSubj: 'svlObservabilitySideNav' }); - management.setupCardsNavigation({ - enabled: true, - hideLinksTo: [appIds.RULES], - extendCardNavDefinitions: { + const extendCardNavDefinitions = serverless.getNavigationCards( + security.authz.isRoleManagementEnabled(), + { aiAssistantManagementObservability: { category: appCategories.OTHER, title: i18n.translate('xpack.serverlessObservability.aiAssistantManagementTitle', { @@ -75,8 +73,14 @@ export class ServerlessObservabilityPlugin ), icon: 'sparkles', }, - }, + } + ); + management.setupCardsNavigation({ + enabled: true, + hideLinksTo: [appIds.RULES], + extendCardNavDefinitions, }); + return {}; } diff --git a/x-pack/plugins/serverless_observability/public/types.ts b/x-pack/plugins/serverless_observability/public/types.ts index ff45f155638ff..c93865f0f596e 100644 --- a/x-pack/plugins/serverless_observability/public/types.ts +++ b/x-pack/plugins/serverless_observability/public/types.ts @@ -13,6 +13,7 @@ import { ObservabilitySharedPluginSetup, ObservabilitySharedPluginStart, } from '@kbn/observability-shared-plugin/public'; +import { SecurityPluginStart } from '@kbn/security-plugin/public'; import { ServerlessPluginSetup, ServerlessPluginStart } from '@kbn/serverless/public'; // eslint-disable-next-line @typescript-eslint/no-empty-interface @@ -34,4 +35,5 @@ export interface ServerlessObservabilityPublicStartDependencies { serverless: ServerlessPluginStart; management: ManagementStart; data: DataPublicPluginStart; + security: SecurityPluginStart; } diff --git a/x-pack/plugins/serverless_observability/tsconfig.json b/x-pack/plugins/serverless_observability/tsconfig.json index e409f8ffcff86..f274f6fa7c027 100644 --- a/x-pack/plugins/serverless_observability/tsconfig.json +++ b/x-pack/plugins/serverless_observability/tsconfig.json @@ -28,5 +28,6 @@ "@kbn/serverless-observability-settings", "@kbn/core-chrome-browser", "@kbn/discover-plugin", + "@kbn/security-plugin", ] } diff --git a/x-pack/plugins/serverless_search/public/plugin.ts b/x-pack/plugins/serverless_search/public/plugin.ts index 4c805e4cb2daa..027d651a6b23a 100644 --- a/x-pack/plugins/serverless_search/public/plugin.ts +++ b/x-pack/plugins/serverless_search/public/plugin.ts @@ -121,16 +121,22 @@ export class ServerlessSearchPlugin core: CoreStart, services: ServerlessSearchPluginStartDependencies ): ServerlessSearchPluginStart { - const { serverless, management, indexManagement } = services; + const { serverless, management, indexManagement, security } = services; serverless.setProjectHome('/app/elasticsearch'); const navigationTree$ = of(navigationTree); serverless.initNavigation(navigationTree$, { dataTestSubj: 'svlSearchSideNav' }); + const extendCardNavDefinitions = serverless.getNavigationCards( + security.authz.isRoleManagementEnabled() + ); + management.setupCardsNavigation({ enabled: true, hideLinksTo: [appIds.MAINTENANCE_WINDOWS], + extendCardNavDefinitions, }); + indexManagement?.extensionsService.setIndexMappingsContent(createIndexMappingsContent(core)); indexManagement?.extensionsService.addIndexDetailsTab( createIndexDocumentsContent(core, services) diff --git a/x-pack/test_serverless/functional/page_objects/svl_management_page.ts b/x-pack/test_serverless/functional/page_objects/svl_management_page.ts index a8e57b1119818..0bf05dd198b49 100644 --- a/x-pack/test_serverless/functional/page_objects/svl_management_page.ts +++ b/x-pack/test_serverless/functional/page_objects/svl_management_page.ts @@ -11,16 +11,37 @@ export function SvlManagementPageProvider({ getService }: FtrProviderContext) { const testSubjects = getService('testSubjects'); return { + // API keys card + async assertApiKeysManagementCardExists() { + await testSubjects.existOrFail('app-card-api_keys'); + }, + async assertApiKeysManagementCardDoesNotExist() { + await testSubjects.missingOrFail('app-card-api_keys'); + }, + async clickApiKeysManagementCard() { + await testSubjects.click('app-card-api_keys'); + }, + + // Roles card async assertRoleManagementCardExists() { await testSubjects.existOrFail('app-card-roles'); }, - async assertRoleManagementCardDoesNotExist() { await testSubjects.missingOrFail('app-card-roles'); }, - async clickRoleManagementCard() { await testSubjects.click('app-card-roles'); }, + + // Organization members card + async assertOrgMembersManagementCardExists() { + await testSubjects.existOrFail('app-card-organization_members'); + }, + async assertOrgMembersManagementCardDoesNotExist() { + await testSubjects.missingOrFail('app-card-organization_members'); + }, + async clickOrgMembersManagementCard() { + await testSubjects.click('app-card-organization_members'); + }, }; } 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 3c5d5a984d083..1796997bd7d77 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 @@ -18,6 +18,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { this.tags('smoke'); before(async () => { await pageObjects.svlCommonPage.loginAsAdmin(); + }); + + beforeEach(async () => { await pageObjects.common.navigateToApp('management'); }); @@ -37,12 +40,29 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); }); + it('navigates to API keys management by clicking the card', async () => { + await testSubjects.click('app-card-api_keys'); + expect(async () => { + await pageObjects.common.waitUntilUrlIncludes('/app/management/security/api_keys'); + }).not.to.throwError(); + }); + describe('Roles management card', () => { it('should not be displayed by default', async () => { - await pageObjects.common.navigateToApp('management'); - + await retry.waitFor('page to be visible', async () => { + return await testSubjects.exists('cards-navigation-page'); + }); await pageObjects.svlManagementPage.assertRoleManagementCardDoesNotExist(); }); }); + + describe('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'); + }); + await pageObjects.svlManagementPage.assertOrgMembersManagementCardDoesNotExist(); + }); + }); }); }; diff --git a/x-pack/test_serverless/functional/test_suites/common/platform_security/navigation/management_nav_cards.ts b/x-pack/test_serverless/functional/test_suites/common/platform_security/navigation/management_nav_cards.ts new file mode 100644 index 0000000000000..c2439c1525e5f --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/platform_security/navigation/management_nav_cards.ts @@ -0,0 +1,123 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default ({ getPageObjects, getService }: FtrProviderContext) => { + const testSubjects = getService('testSubjects'); + const pageObjects = getPageObjects(['svlCommonPage', 'common', 'svlManagementPage']); + const browser = getService('browser'); + const retry = getService('retry'); + + describe('Management navigation cards', function () { + this.tags('smoke'); + + describe('as Admin', function () { + before(async () => { + await pageObjects.svlCommonPage.loginAsAdmin(); + }); + + beforeEach(async () => { + await pageObjects.common.navigateToApp('management'); + }); + + it('renders the page', async () => { + await retry.waitFor('page to be visible', async () => { + return await testSubjects.exists('cards-navigation-page'); + }); + + const url = await browser.getCurrentUrl(); + expect(url).to.contain(`/management`); + }); + + it('displays the API keys management card, and will navigate to the API keys UI', async () => { + await pageObjects.svlManagementPage.assertApiKeysManagementCardExists(); + await pageObjects.svlManagementPage.clickApiKeysManagementCard(); + + const url = await browser.getCurrentUrl(); + expect(url).to.contain('/management/security/api_keys'); + }); + + it('displays the roles management card, and will navigate to the Roles UI', async () => { + await pageObjects.svlManagementPage.assertRoleManagementCardExists(); + await pageObjects.svlManagementPage.clickRoleManagementCard(); + + const url = await browser.getCurrentUrl(); + expect(url).to.contain('/management/security/roles'); + }); + + it('displays the Organization members management card, and will navigate to the cloud organization URL', async () => { + await pageObjects.svlManagementPage.assertOrgMembersManagementCardExists(); + await pageObjects.svlManagementPage.clickOrgMembersManagementCard(); + + const url = await browser.getCurrentUrl(); + // `--xpack.cloud.organization_url: '/account/members'`, + expect(url).to.contain('/account/members'); + }); + }); + + describe('as viewer', function () { + before(async () => { + await pageObjects.svlCommonPage.loginWithRole('viewer'); + }); + + beforeEach(async () => { + await pageObjects.common.navigateToApp('management'); + }); + + it('renders the page', async () => { + await retry.waitFor('page to be visible', async () => { + return await testSubjects.exists('cards-navigation-page'); + }); + + const url = await browser.getCurrentUrl(); + expect(url).to.contain(`/management`); + }); + + it('should not display the roles manangement card', async () => { + await retry.waitFor('page to be visible', async () => { + return await testSubjects.exists('cards-navigation-page'); + }); + await pageObjects.svlManagementPage.assertRoleManagementCardDoesNotExist(); + }); + + it('displays the organization members management card, and will navigate to the cloud organization URL', async () => { + // The org members nav card is always visible because there is no way to check if a user has approprite privileges + await pageObjects.svlManagementPage.assertOrgMembersManagementCardExists(); + await pageObjects.svlManagementPage.clickOrgMembersManagementCard(); + + const url = await browser.getCurrentUrl(); + // `--xpack.cloud.organization_url: '/account/members'`, + expect(url).to.contain('/account/members'); + }); + + describe('API keys management card - search solution', function () { + this.tags(['skipSvlOblt', 'skipSvlSec']); + + it('displays the API keys management card, and will navigate to the API keys UI (search only)', async () => { + await pageObjects.svlManagementPage.assertApiKeysManagementCardExists(); + await pageObjects.svlManagementPage.clickApiKeysManagementCard(); + + const url = await browser.getCurrentUrl(); + expect(url).to.contain('/management/security/api_keys'); + }); + }); + + describe('API keys management card - oblt & sec solutions', function () { + this.tags(['skipSvlSearch']); + + it('should not display the API keys manangement card (oblt & security only)', async () => { + await retry.waitFor('page to be visible', async () => { + return await testSubjects.exists('cards-navigation-page'); + }); + await pageObjects.svlManagementPage.assertApiKeysManagementCardDoesNotExist(); + }); + }); + }); + }); +}; diff --git a/x-pack/test_serverless/functional/test_suites/common/platform_security/roles_management_card.ts b/x-pack/test_serverless/functional/test_suites/common/platform_security/roles_management_card.ts deleted file mode 100644 index 23d638a01bb2c..0000000000000 --- a/x-pack/test_serverless/functional/test_suites/common/platform_security/roles_management_card.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../../ftr_provider_context'; - -export default ({ getPageObjects, getService }: FtrProviderContext) => { - const testSubjects = getService('testSubjects'); - const pageObjects = getPageObjects(['svlCommonPage', 'common', 'svlManagementPage']); - const browser = getService('browser'); - const retry = getService('retry'); - - describe('Roles management card', function () { - this.tags('smoke'); - before(async () => { - // Navigate to the index management page - await pageObjects.svlCommonPage.loginAsAdmin(); - await pageObjects.common.navigateToApp('management'); - }); - - it('renders the page, displays the Roles card, and will navigate to the Roles UI', async () => { - await retry.waitFor('page to be visible', async () => { - return await testSubjects.exists('cards-navigation-page'); - }); - - let url = await browser.getCurrentUrl(); - expect(url).to.contain(`/management`); - - await pageObjects.svlManagementPage.assertRoleManagementCardExists(); - - await pageObjects.svlManagementPage.clickRoleManagementCard(); - - url = await browser.getCurrentUrl(); - expect(url).to.contain('/management/security/roles'); - }); - }); -}; diff --git a/x-pack/test_serverless/functional/test_suites/observability/config.feature_flags.ts b/x-pack/test_serverless/functional/test_suites/observability/config.feature_flags.ts index 98a63b36f5cf5..311a0a2f3518b 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/config.feature_flags.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/config.feature_flags.ts @@ -22,6 +22,8 @@ export default createTestConfig({ '--xpack.infra.enabled=true', '--xpack.infra.featureFlags.customThresholdAlertsEnabled=true', '--xpack.security.roleManagementEnabled=true', + `--xpack.cloud.base_url='https://cloud.elastic.co'`, + `--xpack.cloud.organization_url='/account/members'`, ], // load tests in the index file testFiles: [require.resolve('./index.feature_flags.ts')], diff --git a/x-pack/test_serverless/functional/test_suites/observability/index.feature_flags.ts b/x-pack/test_serverless/functional/test_suites/observability/index.feature_flags.ts index 0adfa038b28b7..046e949955885 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/index.feature_flags.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/index.feature_flags.ts @@ -11,6 +11,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { describe('serverless observability UI - feature flags', function () { // add tests that require feature flags, defined in config.feature_flags.ts loadTestFile(require.resolve('./infra')); - loadTestFile(require.resolve('../common/platform_security/roles_management_card.ts')); + loadTestFile(require.resolve('../common/platform_security/navigation/management_nav_cards.ts')); }); } diff --git a/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts b/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts index 2b896ebdb71c1..6e4aa0e0473ea 100644 --- a/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts +++ b/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts @@ -18,7 +18,11 @@ export default createTestConfig({ }, suiteTags: { exclude: ['skipSvlSearch'] }, // add feature flags - kbnServerArgs: ['--xpack.security.roleManagementEnabled=true'], + kbnServerArgs: [ + `--xpack.security.roleManagementEnabled=true`, + `--xpack.cloud.base_url='https://cloud.elastic.co'`, + `--xpack.cloud.organization_url='/account/members'`, + ], // load tests in the index file testFiles: [require.resolve('./index.feature_flags.ts')], diff --git a/x-pack/test_serverless/functional/test_suites/search/index.feature_flags.ts b/x-pack/test_serverless/functional/test_suites/search/index.feature_flags.ts index 69cd1de3010df..b16407a2124dc 100644 --- a/x-pack/test_serverless/functional/test_suites/search/index.feature_flags.ts +++ b/x-pack/test_serverless/functional/test_suites/search/index.feature_flags.ts @@ -10,6 +10,6 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('serverless search UI - feature flags', function () { // add tests that require feature flags, defined in config.feature_flags.ts - loadTestFile(require.resolve('../common/platform_security/roles_management_card.ts')); + loadTestFile(require.resolve('../common/platform_security/navigation/management_nav_cards.ts')); }); } diff --git a/x-pack/test_serverless/functional/test_suites/security/config.feature_flags.ts b/x-pack/test_serverless/functional/test_suites/security/config.feature_flags.ts index f8ec29fa5651d..05a844f2b02b3 100644 --- a/x-pack/test_serverless/functional/test_suites/security/config.feature_flags.ts +++ b/x-pack/test_serverless/functional/test_suites/security/config.feature_flags.ts @@ -18,7 +18,11 @@ export default createTestConfig({ }, suiteTags: { exclude: ['skipSvlSec'] }, // add feature flags - kbnServerArgs: ['--xpack.security.roleManagementEnabled=true'], + kbnServerArgs: [ + `--xpack.security.roleManagementEnabled=true`, + `--xpack.cloud.base_url='https://cloud.elastic.co'`, + `--xpack.cloud.organization_url='/account/members'`, + ], // load tests in the index file testFiles: [require.resolve('./index.feature_flags.ts')], diff --git a/x-pack/test_serverless/functional/test_suites/security/index.feature_flags.ts b/x-pack/test_serverless/functional/test_suites/security/index.feature_flags.ts index 5e311b486b682..2da2ce2291599 100644 --- a/x-pack/test_serverless/functional/test_suites/security/index.feature_flags.ts +++ b/x-pack/test_serverless/functional/test_suites/security/index.feature_flags.ts @@ -10,6 +10,6 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('serverless security UI - feature flags', function () { // add tests that require feature flags, defined in config.feature_flags.ts - loadTestFile(require.resolve('../common/platform_security/roles_management_card.ts')); + loadTestFile(require.resolve('../common/platform_security/navigation/management_nav_cards.ts')); }); } From ec031037b94b2caa8f351726606ae3cc6484c502 Mon Sep 17 00:00:00 2001 From: Janki Salvi <117571355+js-jankisalvi@users.noreply.github.com> Date: Fri, 22 Mar 2024 17:51:00 +0100 Subject: [PATCH 69/90] [Cases] Fix expanding size of cases app component in stack management (#179263) ## Summary This PR fixes a style issue of Cases app expanding in `stack management > cases` when there are less than 10 cases visible in cases table:
Issue: ![Screenshot 2024-03-22 at 12 49 09](https://github.com/elastic/kibana/assets/117571355/18229956-72cb-4633-9fcb-92ea0ada15ee)
Fix: ![image](https://github.com/elastic/kibana/assets/117571355/7c619eff-c043-4d95-94ad-47085daed866)
Observability Cases page: ![image](https://github.com/elastic/kibana/assets/117571355/455c4a4d-d6de-49b5-ac96-20fab07ecf1f)
Security Cases page: ![image](https://github.com/elastic/kibana/assets/117571355/1d280a3b-d4aa-4b3f-af5b-cd7c9bbd6b41)
--- x-pack/plugins/cases/public/components/app/index.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/cases/public/components/app/index.tsx b/x-pack/plugins/cases/public/components/app/index.tsx index 49258c655556c..cc6c572275721 100644 --- a/x-pack/plugins/cases/public/components/app/index.tsx +++ b/x-pack/plugins/cases/public/components/app/index.tsx @@ -7,7 +7,6 @@ import React from 'react'; import type { ScopedFilesClient } from '@kbn/files-plugin/public'; -import { EuiFlexGroup } from '@elastic/eui'; import type { ExternalReferenceAttachmentTypeRegistry } from '../../client/attachment_framework/external_reference_registry'; import type { PersistableStateAttachmentTypeRegistry } from '../../client/attachment_framework/persistable_state_registry'; @@ -33,7 +32,7 @@ const CasesAppComponent: React.FC = ({ const userCapabilities = useApplicationCapabilities(); return ( - +
{getCasesLazy({ externalReferenceAttachmentTypeRegistry, persistableStateAttachmentTypeRegistry, @@ -44,7 +43,7 @@ const CasesAppComponent: React.FC = ({ basePath: '/', features: { alerts: { enabled: true, sync: false } }, })} - +
); }; From 403b200d7d8052c034a84d99842bf92783461fc1 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 22 Mar 2024 16:57:21 +0000 Subject: [PATCH 70/90] skip flaky suite (#179092) --- .../apps/dataset_quality/dataset_quality_table_filters.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts b/x-pack/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts index eee4cefeb1017..0ed1162ccf9ee 100644 --- a/x-pack/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts +++ b/x-pack/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts @@ -20,7 +20,8 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid const testSubjects = getService('testSubjects'); const to = '2024-01-01T12:00:00.000Z'; - describe('Dataset quality table filters', () => { + // FLAKY: https://github.com/elastic/kibana/issues/179092 + describe.skip('Dataset quality table filters', () => { before(async () => { await synthtrace.index(getInitialTestLogs({ to, count: 4 })); await PageObjects.datasetQuality.navigateTo(); From 4690b036d8f671ec9ecfa7dcce7878f0b9bc913e Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 22 Mar 2024 17:01:49 +0000 Subject: [PATCH 71/90] skip flaky suite (#178865) --- .../e2e/entity_analytics/dashboards/entity_analytics.cy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/entity_analytics.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/entity_analytics.cy.ts index 6e9b7470e1c76..08f8442fa7802 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/entity_analytics.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/entity_analytics.cy.ts @@ -271,7 +271,8 @@ describe('Entity Analytics Dashboard', { tags: ['@ess', '@serverless'] }, () => cy.get(USERS_TABLE_ROWS).should('have.length', 1); }); - describe('With alerts data', () => { + // FLAKY: https://github.com/elastic/kibana/issues/178865 + describe.skip('With alerts data', () => { before(() => { createRule(getNewRule()); }); From b41d4238201acf0e36799ad92b64fde9642e8773 Mon Sep 17 00:00:00 2001 From: jennypavlova Date: Fri, 22 Mar 2024 18:05:23 +0100 Subject: [PATCH 72/90] [Infra] Reduce active alert table column to reduce whitespace (#179190) Closes #178871 ## Summary This PR changed the alerts column title and size in services and hosts view tables. It renames "Active Alerts" to alerts and adds a `?` with a tooltip content "The count of the active alerts" ![image](https://github.com/elastic/kibana/assets/14139027/18b28e74-6ffc-4cc8-a701-db6369ee0b40) image ## Testing - To get host data use metricbeat: Example dev config ``` metricbeat.modules: - module: system metricsets: - cpu # CPU usage - load # CPU load averages - memory # Memory usage - network # Network IO - process # Per process metrics - process_summary # Process summary - uptime # System Uptime - socket_summary # Socket summary - core # Per CPU core usage - diskio # Disk IO - filesystem # File system usage for each mountpoint - fsstat # File system summary metrics enabled: true period: 1m processes: [".*"] # ...... output.elasticsearch: hosts: ["localhost:9200"] username: "***" password: "***" processors: - add_host_metadata: ~ ``` - or the synthtrace scenario: ` node scripts/synthtrace infra_hosts_with_apm_hosts.ts ` To set up an alert rule use the menu top right in APM service overview: image To set up an alert rule use the Create Alert inside hosts flyout: image 1. Open Hosts view - Check the table with and without active alerts https://github.com/elastic/kibana/assets/14139027/528abe7f-775e-47b1-90a7-2871f841ba79 2. Open APM Services https://github.com/elastic/kibana/assets/14139027/0a2614f5-e0f8-4fb9-93db-3a4eccf488bf --- .../column_header_with_tooltip.tsx | 53 +++++++++++++++++++ .../service_inventory/service_list/index.tsx | 22 ++++++-- .../common/visualizations/translations.ts | 3 ++ .../hosts/components/table/column_header.tsx | 15 ++++-- .../metrics/hosts/hooks/use_hosts_table.tsx | 33 ++++++++---- .../pages/metrics/hosts/translations.ts | 8 ++- 6 files changed, 114 insertions(+), 20 deletions(-) create mode 100644 x-pack/plugins/observability_solution/apm/public/components/app/service_inventory/service_list/column_header_with_tooltip.tsx diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/service_inventory/service_list/column_header_with_tooltip.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/service_inventory/service_list/column_header_with_tooltip.tsx new file mode 100644 index 0000000000000..4bedb7c6f829b --- /dev/null +++ b/x-pack/plugins/observability_solution/apm/public/components/app/service_inventory/service_list/column_header_with_tooltip.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 { EuiFlexGroup, EuiPopover, EuiIcon } from '@elastic/eui'; +import React, { useCallback } from 'react'; +import useToggle from 'react-use/lib/useToggle'; + +export function ColumnHeaderWithTooltip({ + label, + tooltipContent, +}: { + label: string; + tooltipContent: string; +}) { + const [isPopoverOpen, togglePopover] = useToggle(false); + + const onButtonClick = useCallback( + (e: React.MouseEvent) => { + e.preventDefault(); + e.stopPropagation(); + togglePopover(); + }, + [togglePopover] + ); + + return ( + +
{label}
+ + + + } + isOpen={isPopoverOpen} + closePopover={togglePopover} + offset={10} + anchorPosition="upCenter" + panelStyle={{ maxWidth: 350 }} + > + {tooltipContent} + +
+ ); +} diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/service_inventory/service_list/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/service_inventory/service_list/index.tsx index ba55defaaf4d7..b25f352f609f6 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/service_inventory/service_list/index.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/service_inventory/service_list/index.tsx @@ -57,6 +57,7 @@ import { TableSearchBar, } from '../../../shared/managed_table'; import { HealthBadge } from './health_badge'; +import { ColumnHeaderWithTooltip } from './column_header_with_tooltip'; type ServicesDetailedStatisticsAPIResponse = APIReturnType<'POST /internal/apm/services/detailed_statistics'>; @@ -91,10 +92,23 @@ export function getServiceColumns({ ? [ { field: ServiceInventoryFieldName.AlertsCount, - name: i18n.translate('xpack.apm.servicesTable.alertsColumnLabel', { - defaultMessage: 'Active alerts', - }), - width: `${unit * 8}px`, + name: ( + + ), + width: `${unit * 6}px`, sortable: true, render: (_, { serviceName, alertsCount }) => { if (!alertsCount) { diff --git a/x-pack/plugins/observability_solution/infra/public/common/visualizations/translations.ts b/x-pack/plugins/observability_solution/infra/public/common/visualizations/translations.ts index c29f4e49d9eba..1a0446584e944 100644 --- a/x-pack/plugins/observability_solution/infra/public/common/visualizations/translations.ts +++ b/x-pack/plugins/observability_solution/infra/public/common/visualizations/translations.ts @@ -11,6 +11,9 @@ export const METRICS_TOOLTIP = { hostCount: i18n.translate('xpack.infra.hostsViewPage.metrics.tooltip.hostCount', { defaultMessage: 'Number of hosts returned by your search criteria.', }), + alertsCount: i18n.translate('xpack.infra.hostsViewPage.metrics.tooltip.alertsCount', { + defaultMessage: 'The count of the active alerts', + }), cpuUsage: i18n.translate('xpack.infra.hostsViewPage.metrics.tooltip.cpuUsage', { defaultMessage: diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/table/column_header.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/table/column_header.tsx index e5c5858fba86e..d2f2bf2702205 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/table/column_header.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/table/column_header.tsx @@ -14,10 +14,11 @@ interface Props { label: string; toolTip?: string; formula?: string; + showDocumentationLink?: boolean; } -export const ColumnHeader = React.memo(({ label, toolTip, formula }: Props) => { - return ( +export const ColumnHeader = React.memo( + ({ label, toolTip, formula, showDocumentationLink = true }: Props) => (
{ {toolTip && ( - + )} - ); -}); + ) +); diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx index c54877bd11a20..e026dbf5aca66 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx @@ -27,7 +27,7 @@ import { Sorting, useHostsTableUrlState } from './use_hosts_table_url_state'; import { useHostsViewContext } from './use_hosts_view'; import { useMetricsDataViewContext } from './use_metrics_data_view'; import { ColumnHeader } from '../components/table/column_header'; -import { TABLE_COLUMN_LABEL } from '../translations'; +import { TABLE_COLUMN_LABEL, TABLE_CONTENT_LABEL } from '../translations'; import { METRICS_TOOLTIP } from '../../../../common/visualizations'; import { buildCombinedHostsFilter } from '../../../../utils/filters/build'; @@ -117,10 +117,6 @@ const sortTableData = return sortValues(aValue, bValue, { direction, field }); }; -/** - * Columns translations - */ - /** * Build a table columns and items starting from the snapshot nodes. */ @@ -207,6 +203,8 @@ export const useHostsTable = () => { return items.sort(sortTableData(sorting)).slice(startIndex, endIndex); }, [items, pagination, sorting]); + const metricColumnsWidth = displayAlerts ? '11%' : '15%'; + const columns: Array> = useMemo( () => [ { @@ -231,7 +229,14 @@ export const useHostsTable = () => { ...(displayAlerts ? [ { - name: TABLE_COLUMN_LABEL.alertsCount, + name: ( + + ), + width: '95px', field: 'alertsCount', sortable: true, 'data-test-subj': 'hostsView-tableRow-alertsCount', @@ -240,18 +245,18 @@ export const useHostsTable = () => { return null; } return ( - + { setProperties({ detailsItemId: row.id === detailsItemId ? null : row.id }); }} - onClickAriaLabel={TABLE_COLUMN_LABEL.alertsCount} + onClickAriaLabel={TABLE_CONTENT_LABEL.activeAlerts} iconOnClick={() => { setProperties({ detailsItemId: row.id === detailsItemId ? null : row.id }); }} - iconOnClickAriaLabel={TABLE_COLUMN_LABEL.alertsCount} + iconOnClickAriaLabel={TABLE_CONTENT_LABEL.activeAlerts} > {alertsCount} @@ -270,7 +275,7 @@ export const useHostsTable = () => { render: (title: HostNodeRow['title']) => ( reportHostEntryClick(title)} /> ), - width: '20%', + width: displayAlerts ? '15%' : '20%', }, { name: ( @@ -280,6 +285,7 @@ export const useHostsTable = () => { formula={formulas?.cpuUsage.value} /> ), + width: metricColumnsWidth, field: 'cpu', sortable: true, 'data-test-subj': 'hostsView-tableRow-cpuUsage', @@ -294,6 +300,7 @@ export const useHostsTable = () => { formula={formulas?.normalizedLoad1m.value} /> ), + width: metricColumnsWidth, field: 'normalizedLoad1m', sortable: true, 'data-test-subj': 'hostsView-tableRow-normalizedLoad1m', @@ -308,6 +315,7 @@ export const useHostsTable = () => { formula={formulas?.memoryUsage.value} /> ), + width: metricColumnsWidth, field: 'memory', sortable: true, 'data-test-subj': 'hostsView-tableRow-memoryUsage', @@ -322,6 +330,7 @@ export const useHostsTable = () => { formula={formulas?.memoryFree.value} /> ), + width: metricColumnsWidth, field: 'memoryFree', sortable: true, 'data-test-subj': 'hostsView-tableRow-memoryFree', @@ -336,6 +345,7 @@ export const useHostsTable = () => { formula={formulas?.diskUsage.value} /> ), + width: metricColumnsWidth, field: 'diskSpaceUsage', sortable: true, 'data-test-subj': 'hostsView-tableRow-diskSpaceUsage', @@ -350,6 +360,7 @@ export const useHostsTable = () => { formula={formulas?.rx.value} /> ), + width: '10%', field: 'rx', sortable: true, 'data-test-subj': 'hostsView-tableRow-rx', @@ -364,6 +375,7 @@ export const useHostsTable = () => { formula={formulas?.tx.value} /> ), + width: '10%', field: 'tx', sortable: true, 'data-test-subj': 'hostsView-tableRow-tx', @@ -383,6 +395,7 @@ export const useHostsTable = () => { reportHostEntryClick, setProperties, displayAlerts, + metricColumnsWidth, ] ); diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/translations.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/translations.ts index 9be99e1d70a8b..3f686c6e02056 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/translations.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/translations.ts @@ -9,7 +9,7 @@ import { i18n } from '@kbn/i18n'; export const TABLE_COLUMN_LABEL = { alertsCount: i18n.translate('xpack.infra.hostsViewPage.table.alertsColumnHeader', { - defaultMessage: 'Active alerts', + defaultMessage: 'Alerts', }), title: i18n.translate('xpack.infra.hostsViewPage.table.nameColumnHeader', { @@ -48,3 +48,9 @@ export const TABLE_COLUMN_LABEL = { defaultMessage: 'Toggle dialog with details', }), }; + +export const TABLE_CONTENT_LABEL = { + activeAlerts: i18n.translate('xpack.infra.hostsViewPage.table.tooltip.activeAlertsExplanation', { + defaultMessage: 'Active alerts', + }), +}; From 175b59bf9bce83232ecddf5ba30b4bc6944c1237 Mon Sep 17 00:00:00 2001 From: Yuliia Naumenko Date: Fri, 22 Mar 2024 10:17:13 -0700 Subject: [PATCH 73/90] [Security AI Assistant] Removed connectorTypeTitle from the Conversation API required params. Replaced usage replaced with actionsClient on server and API call on the client (#179117) Current PR is fixing bug mentioned [here](https://github.com/elastic/kibana/pull/179007/files#pullrequestreview-1947890025) and reducing `connectorTypeTitle`/`llmType` params for AI assistant APIs. Streaming is working as it was before: https://github.com/elastic/kibana/assets/55110838/ff7c2ae8-288f-4cba-bb43-e45367845667 --- ...ost_actions_connector_execute_route.gen.ts | 1 - ...ctions_connector_execute_route.schema.yaml | 6 ----- .../conversations/common_attributes.gen.ts | 4 ---- .../common_attributes.schema.yaml | 4 ---- .../use_bulk_actions_conversations.test.ts | 2 +- .../impl/assistant/api/index.test.tsx | 11 ++++----- .../impl/assistant/api/index.tsx | 4 +--- .../conversation_selector/index.tsx | 1 - .../conversation_settings.test.tsx | 4 ---- .../conversation_settings.tsx | 5 ---- .../impl/assistant/helpers.test.ts | 17 ++++++-------- .../impl/assistant/helpers.ts | 6 ----- .../impl/assistant/index.test.tsx | 6 ++--- .../impl/assistant/index.tsx | 2 -- .../system_prompt/index.test.tsx | 3 --- .../system_prompt_settings.tsx | 2 -- .../evaluation_settings.tsx | 2 +- .../use_conversation/helpers.test.ts | 11 ++++----- .../assistant/use_conversation/index.test.tsx | 2 -- .../connector_selector/index.test.tsx | 10 ++------ .../connector_selector/index.tsx | 12 ++++------ .../connector_selector_inline.test.tsx | 11 ++++----- .../connector_selector_inline.tsx | 4 +--- .../connectorland/connector_setup/index.tsx | 10 +++----- .../use_load_connectors/index.tsx | 23 ------------------- .../impl/mock/connectors.ts | 2 -- .../impl/mock/conversation.ts | 3 --- .../__mocks__/conversations_schema.mock.ts | 5 ---- .../server/__mocks__/response.ts | 1 - .../conversations/create_conversation.test.ts | 3 --- .../conversations/create_conversation.ts | 1 - .../conversations/field_maps_configuration.ts | 5 ---- .../conversations/get_conversation.test.ts | 2 -- .../conversations/helpers.ts | 3 --- .../conversations/index.test.ts | 3 --- .../conversations/transforms.ts | 1 - .../conversations/types.ts | 2 -- .../conversations/update_conversation.test.ts | 3 --- .../conversations/update_conversation.ts | 2 -- .../ai_assistant_data_clients/find.test.ts | 3 --- .../ai_assistant_data_clients/index.test.ts | 2 -- .../server/lib/executor.test.ts | 1 + .../elastic_assistant/server/lib/executor.ts | 4 +++- .../lib/langchain/llm/actions_client_llm.ts | 4 +--- .../server/lib/parse_stream.test.ts | 8 +++---- .../server/lib/parse_stream.ts | 2 +- .../server/routes/evaluate/post_evaluate.ts | 1 - .../post_actions_connector_execute.test.ts | 22 +++++++++++++++++- .../routes/post_actions_connector_execute.ts | 10 +++++++- .../user_conversations/update_route.test.ts | 1 - .../assistant/get_comments/index.test.tsx | 2 -- .../public/assistant/get_comments/index.tsx | 9 ++++---- .../get_comments/stream/index.test.tsx | 17 +++++++++++++- .../assistant/get_comments/stream/index.tsx | 10 +++++--- .../stream/stream_observable.test.ts | 10 ++++---- .../get_comments/stream/stream_observable.ts | 14 +++++------ .../get_comments/stream/use_stream.test.tsx | 2 +- .../get_comments/stream/use_stream.tsx | 8 +++---- .../public/assistant/provider.test.tsx | 3 --- .../tests/actions/connector_types/bedrock.ts | 1 - .../trial_license_complete_tier/basic.ts | 3 +-- 61 files changed, 123 insertions(+), 213 deletions(-) diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts index d8af61a2e2d9c..8224d2e32686d 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts @@ -40,7 +40,6 @@ export const ExecuteConnectorRequestBody = z.object({ isEnabledRAGAlerts: z.boolean().optional(), replacements: z.array(Replacement), size: z.number().optional(), - llmType: z.enum(['bedrock', 'openai']), }); export type ExecuteConnectorRequestBodyInput = z.input; diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.schema.yaml index 936d28ce62589..6e36d8e8c2d81 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.schema.yaml @@ -26,7 +26,6 @@ paths: type: object required: - params - - llmType - replacements - subAction properties: @@ -61,11 +60,6 @@ paths: $ref: '../conversations/common_attributes.schema.yaml#/components/schemas/Replacement' size: type: number - llmType: - type: string - enum: - - bedrock - - openai responses: '200': description: Successful response diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts index b95d0f8918705..04bf99a88fd0d 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.gen.ts @@ -145,10 +145,6 @@ export const ApiConfig = z.object({ * connector Id */ connectorId: z.string(), - /** - * connector Type Title - */ - connectorTypeTitle: z.string(), /** * defaultSystemPromptId */ diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.schema.yaml b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.schema.yaml index 1359543f2e588..208f7017d16dc 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.schema.yaml +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/schemas/conversations/common_attributes.schema.yaml @@ -117,14 +117,10 @@ components: type: object required: - connectorId - - connectorTypeTitle properties: connectorId: type: string description: connector Id - connectorTypeTitle: - type: string - description: connector Type Title defaultSystemPromptId: type: string description: defaultSystemPromptId diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_bulk_actions_conversations.test.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_bulk_actions_conversations.test.ts index 011788adf083f..06351ad4b0827 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_bulk_actions_conversations.test.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/conversations/use_bulk_actions_conversations.test.ts @@ -16,7 +16,7 @@ import { IToasts } from '@kbn/core-notifications-browser'; const conversation1 = { id: 'conversation1', title: 'Conversation 1', - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], category: 'default', messages: [ diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.test.tsx index 585dc12e8e7c7..c54cfa56b4898 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.test.tsx @@ -26,7 +26,6 @@ const mockHttp = { const apiConfig: Conversation['apiConfig'] = { connectorId: 'foo', - connectorTypeTitle: 'OpenAI', model: 'gpt-4', provider: OpenAiProviderType.OpenAi, }; @@ -53,7 +52,7 @@ describe('API tests', () => { expect(mockHttp.fetch).toHaveBeenCalledWith( '/internal/elastic_assistant/actions/connector/foo/_execute', { - body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeAI","conversationId":"test","replacements":[],"isEnabledKnowledgeBase":true,"isEnabledRAGAlerts":false,"llmType":"openai"}', + body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeAI","conversationId":"test","replacements":[],"isEnabledKnowledgeBase":true,"isEnabledRAGAlerts":false}', headers: { 'Content-Type': 'application/json' }, method: 'POST', signal: undefined, @@ -73,7 +72,7 @@ describe('API tests', () => { expect(mockHttp.fetch).toHaveBeenCalledWith( '/internal/elastic_assistant/actions/connector/foo/_execute', { - body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeStream","conversationId":"test","replacements":[],"isEnabledKnowledgeBase":false,"isEnabledRAGAlerts":false,"llmType":"openai"}', + body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeStream","conversationId":"test","replacements":[],"isEnabledKnowledgeBase":false,"isEnabledRAGAlerts":false}', method: 'POST', asResponse: true, rawResponse: true, @@ -99,7 +98,7 @@ describe('API tests', () => { expect(mockHttp.fetch).toHaveBeenCalledWith( '/internal/elastic_assistant/actions/connector/foo/_execute', { - body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeAI","conversationId":"test","replacements":[{"uuid":"auuid","value":"real.hostname"}],"isEnabledKnowledgeBase":true,"isEnabledRAGAlerts":true,"llmType":"openai","alertsIndexPattern":".alerts-security.alerts-default","allow":["a","b","c"],"allowReplacement":["b","c"],"size":30}', + body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeAI","conversationId":"test","replacements":[{"uuid":"auuid","value":"real.hostname"}],"isEnabledKnowledgeBase":true,"isEnabledRAGAlerts":true,"alertsIndexPattern":".alerts-security.alerts-default","allow":["a","b","c"],"allowReplacement":["b","c"],"size":30}', headers: { 'Content-Type': 'application/json', }, @@ -122,7 +121,7 @@ describe('API tests', () => { expect(mockHttp.fetch).toHaveBeenCalledWith( '/internal/elastic_assistant/actions/connector/foo/_execute', { - body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeAI","conversationId":"test","replacements":[],"isEnabledKnowledgeBase":false,"isEnabledRAGAlerts":false,"llmType":"openai"}', + body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeAI","conversationId":"test","replacements":[],"isEnabledKnowledgeBase":false,"isEnabledRAGAlerts":false}', method: 'POST', headers: { 'Content-Type': 'application/json', @@ -145,7 +144,7 @@ describe('API tests', () => { expect(mockHttp.fetch).toHaveBeenCalledWith( '/internal/elastic_assistant/actions/connector/foo/_execute', { - body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeAI","conversationId":"test","replacements":[],"isEnabledKnowledgeBase":false,"isEnabledRAGAlerts":true,"llmType":"openai"}', + body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeAI","conversationId":"test","replacements":[],"isEnabledKnowledgeBase":false,"isEnabledRAGAlerts":true}', method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx index bfd567d2f99ca..f5296bb07499a 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api/index.tsx @@ -9,7 +9,7 @@ import { HttpSetup } from '@kbn/core/public'; import { IHttpFetchError } from '@kbn/core-http-browser'; import { ApiConfig, Replacement } from '@kbn/elastic-assistant-common'; import { API_ERROR } from '../translations'; -import { getOptionalRequestParams, llmTypeDictionary } from '../helpers'; +import { getOptionalRequestParams } from '../helpers'; export * from './conversations'; export interface FetchConnectorExecuteAction { @@ -53,7 +53,6 @@ export const fetchConnectorExecuteAction = async ({ signal, size, }: FetchConnectorExecuteAction): Promise => { - const llmType = llmTypeDictionary[apiConfig.connectorTypeTitle]; // TODO: Remove in part 3 of streaming work for security solution // tracked here: https://github.com/elastic/security-team/issues/7363 // In part 3 I will make enhancements to langchain to introduce streaming @@ -76,7 +75,6 @@ export const fetchConnectorExecuteAction = async ({ replacements, isEnabledKnowledgeBase, isEnabledRAGAlerts, - llmType, ...optionalRequestParams, }; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_selector/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_selector/index.tsx index 7a7316c3e6678..17599dedd4176 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_selector/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_selector/index.tsx @@ -118,7 +118,6 @@ export const ConversationSelector: React.FC = React.memo( ? { apiConfig: { connectorId: defaultConnector.id, - connectorTypeTitle: defaultConnector.connectorTypeTitle, provider: defaultConnector.apiProvider, defaultSystemPromptId: defaultSystemPrompt?.id, }, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.test.tsx index fdfea79f4b073..fb75b9d911dda 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.test.tsx @@ -102,7 +102,6 @@ const mockConnector = { id: 'cool-id-bro', actionTypeId: '.gen-ai', name: 'cool name', - connectorTypeTitle: 'OpenAI', }; jest.mock('../../../connectorland/connector_selector', () => ({ // @ts-ignore @@ -231,7 +230,6 @@ describe('ConversationSettings', () => { ...mockConvos[welcomeConvo.title], apiConfig: { connectorId: mockConnector.id, - connectorTypeTitle: 'OpenAI', model: undefined, provider: undefined, }, @@ -243,7 +241,6 @@ describe('ConversationSettings', () => { ...mockConvos[welcomeConvo.title], apiConfig: { connectorId: mockConnector.id, - connectorTypeTitle: 'OpenAI', model: undefined, provider: undefined, }, @@ -331,7 +328,6 @@ describe('ConversationSettings', () => { id: 'not-the-right-id', apiConfig: { connectorId: mockConnector.id, - connectorTypeTitle: 'OpenAI', model: undefined, provider: undefined, }, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.tsx index 08485e7fca4e9..544d08b35e888 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/conversations/conversation_settings/conversation_settings.tsx @@ -47,7 +47,6 @@ export interface ConversationSettingsProps { */ export const ConversationSettings: React.FC = React.memo( ({ - actionTypeRegistry, allSystemPrompts, defaultConnector, selectedConversation, @@ -68,7 +67,6 @@ export const ConversationSettings: React.FC = React.m }, [allSystemPrompts, selectedConversation]); const { data: connectors, isSuccess: areConnectorsFetched } = useLoadConnectors({ - actionTypeRegistry, http, }); @@ -89,7 +87,6 @@ export const ConversationSettings: React.FC = React.m ? { apiConfig: { connectorId: defaultConnector.id, - connectorTypeTitle: defaultConnector.connectorTypeTitle, provider: defaultConnector.apiProvider, defaultSystemPromptId: defaultSystemPrompt?.id, }, @@ -231,7 +228,6 @@ export const ConversationSettings: React.FC = React.m apiConfig: { ...selectedConversation.apiConfig, connectorId: connector.id, - connectorTypeTitle: connector.connectorTypeTitle, provider: config?.apiProvider, model: config?.defaultModel, }, @@ -257,7 +253,6 @@ export const ConversationSettings: React.FC = React.m : {} ).apiConfig ?? {}), connectorId: connector?.id, - connectorTypeTitle: connector?.connectorTypeTitle, provider: config?.apiProvider, model: config?.defaultModel, }, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.test.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.test.ts index a63aa5b809aae..4bb9d099bc7c4 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.test.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.test.ts @@ -23,7 +23,7 @@ describe('helpers', () => { category: 'assistant', theme: {}, messages: [], - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], title: 'conversation_id', }; @@ -46,7 +46,7 @@ describe('helpers', () => { }, }, ], - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], category: 'assistant', title: 'conversation_id', @@ -60,7 +60,7 @@ describe('helpers', () => { id: 'conversation_id', title: 'conversation_id', messages: enterpriseMessaging, - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], category: 'assistant', }; @@ -86,7 +86,7 @@ describe('helpers', () => { }, }, ], - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], }; const result = getBlockBotConversation(conversation, isAssistantEnabled); @@ -102,7 +102,7 @@ describe('helpers', () => { title: 'conversation_id', category: 'assistant', messages: [], - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], }; const result = getBlockBotConversation(conversation, isAssistantEnabled); @@ -124,7 +124,7 @@ describe('helpers', () => { }, }, ], - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], }; const result = getBlockBotConversation(conversation, isAssistantEnabled); @@ -151,7 +151,6 @@ describe('helpers', () => { const connectors: AIConnector[] = [ { actionTypeId: '.gen-ai', - connectorTypeTitle: 'OpenAI', isPreconfigured: false, isDeprecated: false, referencedByCount: 0, @@ -175,7 +174,6 @@ describe('helpers', () => { const connectors: AIConnector[] = [ { actionTypeId: '.gen-ai', - connectorTypeTitle: 'OpenAI', isPreconfigured: false, isDeprecated: false, referencedByCount: 0, @@ -191,7 +189,6 @@ describe('helpers', () => { }, { actionTypeId: '.gen-ai', - connectorTypeTitle: 'OpenAI', isPreconfigured: false, isDeprecated: false, referencedByCount: 0, @@ -268,7 +265,7 @@ describe('helpers', () => { messages, category: 'assistant', theme: {}, - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], }; const baseConversations = { diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.ts index b5308334dafbc..c78d7aee079d0 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/helpers.ts @@ -118,9 +118,3 @@ export const getOptionalRequestParams = ({ ...optionalSize, }; }; - -export const llmTypeDictionary: Record = { - 'Amazon Bedrock': 'bedrock', - 'Azure OpenAI': 'openai', - OpenAI: 'openai', -}; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.test.tsx index f7caee3462bc2..48733ce80cb9f 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.test.tsx @@ -50,7 +50,7 @@ const mockData = { title: 'Welcome', category: 'assistant', messages: [], - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], }, 'electric sheep': { @@ -58,7 +58,7 @@ const mockData = { category: 'assistant', title: 'electric sheep', messages: [], - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], }, }; @@ -169,7 +169,7 @@ describe('Assistant', () => { expect(chatSendSpy).toHaveBeenLastCalledWith( expect.objectContaining({ currentConversation: { - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], category: 'assistant', id: 'Welcome Id', diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx index a322372e75395..64fffb8181678 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx @@ -80,7 +80,6 @@ const AssistantComponent: React.FC = ({ setConversationTitle, }) => { const { - actionTypeRegistry, assistantTelemetry, augmentMessageCodeBlocks, assistantAvailability: { isAssistantEnabled }, @@ -136,7 +135,6 @@ const AssistantComponent: React.FC = ({ // Connector details const { data: connectors, isSuccess: areConnectorsFetched } = useLoadConnectors({ - actionTypeRegistry, http, }); const defaultConnector = useMemo(() => getDefaultConnector(connectors), [connectors]); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/index.test.tsx index 2e45c4109b0ad..454c9bec9fa06 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/index.test.tsx @@ -23,7 +23,6 @@ const BASE_CONVERSATION: Conversation = { ...WELCOME_CONVERSATION, apiConfig: { connectorId: '123', - connectorTypeTitle: 'OpenAI', defaultSystemPromptId: mockSystemPrompt.id, }, }; @@ -377,7 +376,6 @@ describe('SystemPrompt', () => { category: 'assistant', apiConfig: { connectorId: '123', - connectorTypeTitle: 'OpenAI', defaultSystemPromptId: undefined, }, title: 'second', @@ -462,7 +460,6 @@ describe('SystemPrompt', () => { ...secondMockConversation, apiConfig: { connectorId: '123', - connectorTypeTitle: 'OpenAI', defaultSystemPromptId: mockSystemPrompt.id, }, }, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.tsx index adc8157f9b49b..f49284f6a7175 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/prompt_editor/system_prompt/system_prompt_modal/system_prompt_settings.tsx @@ -144,7 +144,6 @@ export const SystemPromptSettings: React.FC = React.memo( apiConfig: { defaultSystemPromptId: getDefaultSystemPromptId(convo), connectorId: defaultConnector?.id ?? '', - connectorTypeTitle: defaultConnector?.connectorTypeTitle ?? '', }, }), })) @@ -211,7 +210,6 @@ export const SystemPromptSettings: React.FC = React.memo( [ conversationSettings, conversationsSettingsBulkActions, - defaultConnector?.connectorTypeTitle, defaultConnector?.id, selectedSystemPrompt, setConversationSettings, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/evaluation_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/evaluation_settings.tsx index f7f89ac1cfe17..09cdf6717ca6c 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/evaluation_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/evaluation_settings.tsx @@ -53,7 +53,7 @@ interface Props { */ export const EvaluationSettings: React.FC = React.memo(({ onEvaluationSettingsChange }) => { const { actionTypeRegistry, basePath, http } = useAssistantContext(); - const { data: connectors } = useLoadConnectors({ actionTypeRegistry, http }); + const { data: connectors } = useLoadConnectors({ http }); const { data: evalResponse, mutate: performEvaluation, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.test.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.test.ts index 60f44d2314c4d..9d101b4423f26 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.test.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/helpers.test.ts @@ -93,7 +93,6 @@ describe('useConversation helpers', () => { const conversation: Conversation = { apiConfig: { connectorId: '123', - connectorTypeTitle: 'OpenAI', defaultSystemPromptId: '3', }, category: 'assistant', @@ -111,7 +110,7 @@ describe('useConversation helpers', () => { test('should return the default (starred) isNewConversationDefault system prompt if conversation system prompt does not exist', () => { const conversationWithoutSystemPrompt: Conversation = { - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], category: 'assistant', id: '1', @@ -128,7 +127,7 @@ describe('useConversation helpers', () => { test('should return the default (starred) isNewConversationDefault system prompt if conversation system prompt does not exist within all system prompts', () => { const conversationWithoutSystemPrompt: Conversation = { - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], category: 'assistant', id: '4', // this id does not exist within allSystemPrompts @@ -145,7 +144,7 @@ describe('useConversation helpers', () => { test('should return the first prompt if both conversation system prompt and default new system prompt do not exist', () => { const conversationWithoutSystemPrompt: Conversation = { - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], category: 'assistant', id: '1', @@ -162,7 +161,7 @@ describe('useConversation helpers', () => { test('should return undefined if conversation system prompt does not exist and there are no system prompts', () => { const conversationWithoutSystemPrompt: Conversation = { - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], category: 'assistant', id: '1', @@ -179,7 +178,7 @@ describe('useConversation helpers', () => { test('should return undefined if conversation system prompt does not exist within all system prompts', () => { const conversationWithoutSystemPrompt: Conversation = { - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], category: 'assistant', id: '4', // this id does not exist within allSystemPrompts diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/index.test.tsx index fda09e1a148fb..29567aed6f1da 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/use_conversation/index.test.tsx @@ -36,7 +36,6 @@ const mockConvo = { messages: [message, anotherMessage], apiConfig: { connectorId: '123', - connectorTypeTitle: 'OpenAI', defaultSystemPromptId: 'default-system-prompt', }, }; @@ -69,7 +68,6 @@ describe('useConversation', () => { replacements: [], apiConfig: { connectorId: '123', - connectorTypeTitle: 'OpenAI', defaultSystemPromptId: 'default-system-prompt', }, title: mockConvo.title, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.test.tsx index 0c984c03fc3e9..fbc89665b8bdf 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.test.tsx @@ -90,10 +90,7 @@ describe('Connector selector', () => { expect(getByTestId('connector-selector')).toBeInTheDocument(); fireEvent.click(getByTestId('connector-selector')); fireEvent.click(getByTestId(connectorTwo.id)); - expect(onConnectorSelectionChange).toHaveBeenCalledWith({ - ...connectorTwo, - connectorTypeTitle: 'OpenAI', - }); + expect(onConnectorSelectionChange).toHaveBeenCalledWith(connectorTwo); }); it('Calls onConnectorSelectionChange once new connector is saved', () => { const { getByTestId } = render( @@ -106,10 +103,7 @@ describe('Connector selector', () => { fireEvent.click(getByTestId('modal-mock')); - expect(onConnectorSelectionChange).toHaveBeenCalledWith({ - ...newConnector, - connectorTypeTitle: 'OpenAI', - }); + expect(onConnectorSelectionChange).toHaveBeenCalledWith(newConnector); expect(mockRefetchConnectors).toHaveBeenCalled(); expect(setIsOpen).toHaveBeenCalledWith(false); }); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.tsx index 33b5cb030b5a9..c93b5b5c5c4a7 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector/index.tsx @@ -30,8 +30,6 @@ interface Props { } export type AIConnector = ActionConnector & { - // ex: Bedrock, OpenAI - connectorTypeTitle: string; // related to OpenAI connectors, ex: Azure OpenAI, OpenAI apiProvider?: OpenAiProviderType; }; @@ -57,7 +55,7 @@ export const ConnectorSelector: React.FC = React.memo( isLoading: isLoadingConnectors, isFetching: isFetchingConnectors, refetch: refetchConnectors, - } = useLoadConnectors({ actionTypeRegistry, http }); + } = useLoadConnectors({ http }); const isLoading = isLoadingConnectors || isFetchingConnectors; const localIsDisabled = isDisabled || !assistantAvailability.hasConnectorsReadPrivilege; @@ -91,7 +89,8 @@ export const ConnectorSelector: React.FC = React.memo( () => (aiConnectors ?? []).map((connector) => { const connectorTypeTitle = - getGenAiConfig(connector)?.apiProvider ?? connector.connectorTypeTitle; + getGenAiConfig(connector)?.apiProvider ?? + getActionTypeTitle(actionTypeRegistry.get(connector.actionTypeId)); const connectorDetails = connector.isPreconfigured ? i18n.PRECONFIGURED_CONNECTOR : connectorTypeTitle; @@ -111,7 +110,7 @@ export const ConnectorSelector: React.FC = React.memo( ), }; }), - [aiConnectors, displayFancy] + [actionTypeRegistry, aiConnectors, displayFancy] ); // Only include add new connector option if user has privilege @@ -151,12 +150,11 @@ export const ConnectorSelector: React.FC = React.memo( (connector: ActionConnector) => { onConnectorSelectionChange({ ...connector, - connectorTypeTitle: getActionTypeTitle(actionTypeRegistry.get(connector.actionTypeId)), }); refetchConnectors?.(); cleanupAndCloseModal(); }, - [actionTypeRegistry, cleanupAndCloseModal, onConnectorSelectionChange, refetchConnectors] + [cleanupAndCloseModal, onConnectorSelectionChange, refetchConnectors] ); return ( diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.test.tsx index 03d829bf22adc..44cfd59bdbecc 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.test.tsx @@ -77,7 +77,7 @@ describe('ConnectorSelectorInline', () => { id: 'conversation_id', category: 'assistant', messages: [], - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], title: 'conversation_id', }; @@ -98,7 +98,7 @@ describe('ConnectorSelectorInline', () => { id: 'conversation_id', category: 'assistant', messages: [], - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], title: 'conversation_id', }; @@ -122,7 +122,7 @@ describe('ConnectorSelectorInline', () => { id: 'conversation_id', category: 'assistant', messages: [], - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], title: 'conversation_id', }; @@ -143,12 +143,11 @@ describe('ConnectorSelectorInline', () => { expect(setApiConfig).toHaveBeenCalledWith({ apiConfig: { connectorId: connectorTwo.id, - connectorTypeTitle: 'OpenAI', model: undefined, provider: 'OpenAI', }, conversation: { - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], category: 'assistant', id: 'conversation_id', @@ -162,7 +161,7 @@ describe('ConnectorSelectorInline', () => { id: 'conversation_id', category: 'assistant', messages: [], - apiConfig: { connectorId: '123', connectorTypeTitle: 'OpenAI' }, + apiConfig: { connectorId: '123' }, replacements: [], title: 'conversation_id', }; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.tsx index 4b05e93305163..842b921f54c35 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/connector_selector_inline.tsx @@ -68,11 +68,10 @@ const placeholderButtonClassName = css` export const ConnectorSelectorInline: React.FC = React.memo( ({ isDisabled = false, selectedConnectorId, selectedConversation, onConnectorSelected }) => { const [isOpen, setIsOpen] = useState(false); - const { actionTypeRegistry, assistantAvailability, http } = useAssistantContext(); + const { assistantAvailability, http } = useAssistantContext(); const { setApiConfig } = useConversation(); const { data: aiConnectors } = useLoadConnectors({ - actionTypeRegistry, http, }); @@ -103,7 +102,6 @@ export const ConnectorSelectorInline: React.FC = React.memo( apiConfig: { ...selectedConversation.apiConfig, connectorId, - connectorTypeTitle: connector.connectorTypeTitle, // With the inline component, prefer config args to handle 'new connector' case provider: apiProvider ?? config?.apiProvider, model: model ?? config?.defaultModel, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.tsx index b4db98b62d953..b57cf286d27f1 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_setup/index.tsx @@ -25,7 +25,7 @@ import * as i18n from '../translations'; import { useAssistantContext } from '../../assistant_context'; import { useLoadConnectors } from '../use_load_connectors'; import { AssistantAvatar } from '../../assistant/assistant_avatar/assistant_avatar'; -import { getActionTypeTitle, getGenAiConfig } from '../helpers'; +import { getGenAiConfig } from '../helpers'; const ConnectorButtonWrapper = styled.div` margin-bottom: 10px; @@ -58,7 +58,7 @@ export const useConnectorSetup = ({ data: connectors, isSuccess: areConnectorsFetched, refetch: refetchConnectors, - } = useLoadConnectors({ actionTypeRegistry, http }); + } = useLoadConnectors({ http }); const isConnectorConfigured = areConnectorsFetched && !!connectors?.length; const [isConnectorModalVisible, setIsConnectorModalVisible] = useState(false); @@ -175,16 +175,12 @@ export const useConnectorSetup = ({ const onSaveConnector = useCallback( async (connector: ActionConnector) => { const config = getGenAiConfig(connector); - // add action type title to new connector - const connectorTypeTitle = getActionTypeTitle(actionTypeRegistry.get(connector.actionTypeId)); // persist only the active conversation - const updatedConversation = await setApiConfig({ conversation, apiConfig: { ...conversation.apiConfig, connectorId: connector.id, - connectorTypeTitle, provider: config?.apiProvider, model: config?.defaultModel, }, @@ -197,7 +193,7 @@ export const useConnectorSetup = ({ setIsConnectorModalVisible(false); } }, - [actionTypeRegistry, conversation, onConversationUpdate, refetchConnectors, setApiConfig] + [conversation, onConversationUpdate, refetchConnectors, setApiConfig] ); return { diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/use_load_connectors/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/use_load_connectors/index.tsx index 0bb401bcd5469..b93c166a9c5d7 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/use_load_connectors/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/use_load_connectors/index.tsx @@ -10,13 +10,10 @@ import { useQuery } from '@tanstack/react-query'; import type { ServerError } from '@kbn/cases-plugin/public/types'; import { loadAllActions as loadConnectors } from '@kbn/triggers-actions-ui-plugin/public/common/constants'; import type { IHttpFetchError } from '@kbn/core-http-browser'; -import { ActionTypeRegistryContract } from '@kbn/triggers-actions-ui-plugin/public'; import { HttpSetup } from '@kbn/core-http-browser'; import { IToasts } from '@kbn/core-notifications-browser'; -import { useMemo } from 'react'; import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants'; import { AIConnector } from '../connector_selector'; -import { getActionTypeTitle } from '../helpers'; import * as i18n from '../translations'; /** @@ -26,7 +23,6 @@ import * as i18n from '../translations'; const QUERY_KEY = ['elastic-assistant, load-connectors']; export interface Props { - actionTypeRegistry: ActionTypeRegistryContract; http: HttpSetup; toasts?: IToasts; } @@ -37,27 +33,9 @@ const actionTypeKey = { }; export const useLoadConnectors = ({ - actionTypeRegistry, http, toasts, }: Props): UseQueryResult => { - const connectorDetails = useMemo( - () => - actionTypeRegistry - ? { - [actionTypeKey.bedrock]: getActionTypeTitle( - actionTypeRegistry.get(actionTypeKey.bedrock) - ), - [actionTypeKey.openai]: getActionTypeTitle( - actionTypeRegistry.get(actionTypeKey.openai) - ), - } - : { - [actionTypeKey.bedrock]: 'Amazon Bedrock', - [actionTypeKey.openai]: 'OpenAI', - }, - [actionTypeRegistry] - ); return useQuery( QUERY_KEY, async () => { @@ -70,7 +48,6 @@ export const useLoadConnectors = ({ ? [ { ...connector, - connectorTypeTitle: connectorDetails[connector.actionTypeId], apiProvider: !connector.isPreconfigured && !connector.isSystemAction && diff --git a/x-pack/packages/kbn-elastic-assistant/impl/mock/connectors.ts b/x-pack/packages/kbn-elastic-assistant/impl/mock/connectors.ts index 855cf6293d7a5..05b4e96d2b0da 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/mock/connectors.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/mock/connectors.ts @@ -34,7 +34,6 @@ export const mockActionTypes = [ export const mockConnectors: AIConnector[] = [ { id: 'connectorId', - connectorTypeTitle: 'OpenAI', name: 'Captain Connector', isMissingSecrets: false, actionTypeId: '.gen-ai', @@ -48,7 +47,6 @@ export const mockConnectors: AIConnector[] = [ }, { id: 'c29c28a0-20fe-11ee-9306-a1f4d42ec542', - connectorTypeTitle: 'OpenAI', name: 'Professor Connector', isMissingSecrets: false, actionTypeId: '.gen-ai', diff --git a/x-pack/packages/kbn-elastic-assistant/impl/mock/conversation.ts b/x-pack/packages/kbn-elastic-assistant/impl/mock/conversation.ts index 46625512a5fca..435e74c547256 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/mock/conversation.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/mock/conversation.ts @@ -23,7 +23,6 @@ export const alertConvo: Conversation = { ], apiConfig: { connectorId: 'c29c28a0-20fe-11ee-9306-a1f4d42ec542', - connectorTypeTitle: 'OpenAI', provider: OpenAiProviderType.OpenAi, }, replacements: [ @@ -42,7 +41,6 @@ export const emptyWelcomeConvo: Conversation = { replacements: [], apiConfig: { connectorId: 'c29c28a0-20fe-11ee-9306-a1f4d42ec542', - connectorTypeTitle: 'OpenAI', provider: OpenAiProviderType.OpenAi, }, }; @@ -74,7 +72,6 @@ export const customConvo: Conversation = { replacements: [], apiConfig: { connectorId: 'c29c28a0-20fe-11ee-9306-a1f4d42ec542', - connectorTypeTitle: 'OpenAI', provider: OpenAiProviderType.OpenAi, }, }; diff --git a/x-pack/plugins/elastic_assistant/server/__mocks__/conversations_schema.mock.ts b/x-pack/plugins/elastic_assistant/server/__mocks__/conversations_schema.mock.ts index aa88fab105266..e7914ccb60acd 100644 --- a/x-pack/plugins/elastic_assistant/server/__mocks__/conversations_schema.mock.ts +++ b/x-pack/plugins/elastic_assistant/server/__mocks__/conversations_schema.mock.ts @@ -65,7 +65,6 @@ export const getCreateConversationSchemaMock = (): ConversationCreateProps => ({ apiConfig: { connectorId: '1', defaultSystemPromptId: 'Default', - connectorTypeTitle: 'Test connector', model: 'model', }, excludeFromLastConversationStorage: false, @@ -91,7 +90,6 @@ export const getUpdateConversationSchemaMock = ( apiConfig: { connectorId: '2', defaultSystemPromptId: 'Default', - connectorTypeTitle: 'Test connector', model: 'model', }, excludeFromLastConversationStorage: false, @@ -131,7 +129,6 @@ export const getConversationMock = ( apiConfig: { connectorId: '1', defaultSystemPromptId: 'Default', - connectorTypeTitle: 'OpenAI', }, replacements: [], title: 'test', @@ -156,7 +153,6 @@ export const getQueryConversationParams = ( apiConfig: { connectorId: '2', defaultSystemPromptId: 'Default', - connectorTypeTitle: 'Test connector', model: 'model', }, category: 'assistant', @@ -180,7 +176,6 @@ export const getQueryConversationParams = ( apiConfig: { connectorId: '1', defaultSystemPromptId: 'Default', - connectorTypeTitle: 'Test connector', model: 'model', }, excludeFromLastConversationStorage: false, diff --git a/x-pack/plugins/elastic_assistant/server/__mocks__/response.ts b/x-pack/plugins/elastic_assistant/server/__mocks__/response.ts index 5ba6946c68688..3b71dfcfbb67c 100644 --- a/x-pack/plugins/elastic_assistant/server/__mocks__/response.ts +++ b/x-pack/plugins/elastic_assistant/server/__mocks__/response.ts @@ -69,7 +69,6 @@ export const getConversationResponseMock = ( title: 'test', apiConfig: { connectorId: '1', - connectorTypeTitle: 'test-connector', defaultSystemPromptId: 'default-system-prompt', model: 'test-model', provider: 'OpenAI', diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.test.ts index 5d6851538be0c..2ac98390ccef0 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.test.ts @@ -30,7 +30,6 @@ export const getCreateConversationMock = (): ConversationCreateProps => ({ title: 'test', apiConfig: { connectorId: '1', - connectorTypeTitle: 'test-connector', defaultSystemPromptId: 'default-system-prompt', model: 'test-model', provider: 'OpenAI', @@ -47,7 +46,6 @@ export const getConversationResponseMock = (): ConversationResponse => ({ title: 'test', apiConfig: { connectorId: '1', - connectorTypeTitle: 'test-connector', defaultSystemPromptId: 'default-system-prompt', model: 'test-model', provider: 'OpenAI', @@ -96,7 +94,6 @@ export const getSearchConversationMock = exclude_from_last_conversation_storage: false, api_config: { connector_id: 'c1', - connector_type_title: 'title-c-1', default_system_prompt_id: 'prompt-1', model: 'test', provider: 'Azure OpenAI', diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.ts index 6c50a1d44bbd7..7dc36f9d4bd36 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/create_conversation.ts @@ -86,7 +86,6 @@ export const transformToCreateScheme = ( api_config: apiConfig ? { connector_id: apiConfig.connectorId, - connector_type_title: apiConfig.connectorTypeTitle, default_system_prompt_id: apiConfig.defaultSystemPromptId, model: apiConfig.model, provider: apiConfig.provider, diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/field_maps_configuration.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/field_maps_configuration.ts index 9c2461ac928f5..870c71157813f 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/field_maps_configuration.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/field_maps_configuration.ts @@ -147,11 +147,6 @@ export const conversationsFieldMap: FieldMap = { array: false, required: false, }, - 'api_config.connector_type_title': { - type: 'keyword', - array: false, - required: false, - }, 'api_config.default_system_prompt_id': { type: 'keyword', array: false, diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/get_conversation.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/get_conversation.test.ts index 1ea3962c9def9..e0b10ab8df5c4 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/get_conversation.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/get_conversation.test.ts @@ -26,7 +26,6 @@ export const getConversationResponseMock = (): ConversationResponse => ({ timestamp: '2020-04-20T15:25:31.830Z', apiConfig: { connectorId: 'c1', - connectorTypeTitle: 'title-c-1', defaultSystemPromptId: 'prompt-1', model: 'test', provider: 'Azure OpenAI', @@ -79,7 +78,6 @@ export const getSearchConversationMock = exclude_from_last_conversation_storage: false, api_config: { connector_id: 'c1', - connector_type_title: 'title-c-1', default_system_prompt_id: 'prompt-1', model: 'test', provider: 'Azure OpenAI', diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/helpers.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/helpers.ts index 3d022c0063fa5..baaa0a6e94a9f 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/helpers.ts @@ -21,9 +21,6 @@ export const getUpdateScript = ({ if (params.assignEmpty == true || params.api_config.containsKey('connector_id')) { ctx._source.api_config.connector_id = params.api_config.connector_id; } - if (params.assignEmpty == true || params.api_config.containsKey('connector_type_title')) { - ctx._source.api_config.connector_type_title = params.api_config.connector_type_title; - } if (params.assignEmpty == true || params.api_config.containsKey('default_system_prompt_id')) { ctx._source.api_config.default_system_prompt_id = params.api_config.default_system_prompt_id; } diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.test.ts index ec1a36ceb3563..5e644861726a1 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/index.test.ts @@ -61,7 +61,6 @@ describe('AIAssistantConversationsDataClient', () => { api_config: { connector_id: 'bedbf764-b991-4115-a9fc-1cfeaef21046', model: 'anthropic.claude-v2', - connector_type_title: 'Amazon Bedrock', }, namespace: 'hghjghjghghjghg33', created_at: '2024-01-25T01:32:37.649Z', @@ -113,7 +112,6 @@ describe('AIAssistantConversationsDataClient', () => { expect(result).toEqual({ apiConfig: { connectorId: 'bedbf764-b991-4115-a9fc-1cfeaef21046', - connectorTypeTitle: 'Amazon Bedrock', defaultSystemPromptId: undefined, model: 'anthropic.claude-v2', provider: undefined, @@ -180,7 +178,6 @@ describe('AIAssistantConversationsDataClient', () => { params: { api_config: { connector_id: '2', - connector_type_title: 'Test connector', default_system_prompt_id: 'Default', model: 'model', provider: undefined, diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/transforms.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/transforms.ts index 05e1ae8d71f8a..fa70914d07e9b 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/transforms.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/transforms.ts @@ -36,7 +36,6 @@ export const transformESToConversations = ( ? { apiConfig: { connectorId: conversationSchema.api_config.connector_id, - connectorTypeTitle: conversationSchema.api_config.connector_type_title, defaultSystemPromptId: conversationSchema.api_config.default_system_prompt_id, model: conversationSchema.api_config.model, provider: conversationSchema.api_config.provider, diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/types.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/types.ts index 9eb4633c366ec..24ef8b2e8a941 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/types.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/types.ts @@ -39,7 +39,6 @@ export interface SearchEsConversationSchema { }>; api_config?: { connector_id: string; - connector_type_title: string; default_system_prompt_id?: string; provider?: Provider; model?: string; @@ -74,7 +73,6 @@ export interface CreateMessageSchema { }>; api_config?: { connector_id?: string; - connector_type_title?: string; default_system_prompt_id?: string; provider?: Provider; model?: string; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts index 271b74d2b01c5..0d2679e839c71 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.test.ts @@ -21,7 +21,6 @@ export const getUpdateConversationOptionsMock = (): ConversationUpdateProps => ( title: 'test', apiConfig: { connectorId: '1', - connectorTypeTitle: 'test-connector', defaultSystemPromptId: 'default-system-prompt', model: 'test-model', provider: 'OpenAI', @@ -44,7 +43,6 @@ export const getConversationResponseMock = (): ConversationResponse => ({ title: 'test', apiConfig: { connectorId: '1', - connectorTypeTitle: 'test-connector', defaultSystemPromptId: 'default-system-prompt', model: 'test-model', provider: 'OpenAI', @@ -164,7 +162,6 @@ describe('transformToUpdateScheme', () => { title: 'test', api_config: { connector_id: '1', - connector_type_title: 'test-connector', default_system_prompt_id: 'default-system-prompt', model: 'test-model', provider: 'OpenAI', diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts index 348b2ae15aeba..8395c26f9916e 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/conversations/update_conversation.ts @@ -37,7 +37,6 @@ export interface UpdateConversationSchema { }>; api_config?: { connector_id?: string; - connector_type_title?: string; default_system_prompt_id?: string; provider?: Provider; model?: string; @@ -118,7 +117,6 @@ export const transformToUpdateScheme = ( title, api_config: { connector_id: apiConfig?.connectorId, - connector_type_title: apiConfig?.connectorTypeTitle, default_system_prompt_id: apiConfig?.defaultSystemPromptId, model: apiConfig?.model, provider: apiConfig?.provider, diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/find.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/find.test.ts index a16cf81fb8de3..bc4f8c574a8a9 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/find.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/find.test.ts @@ -25,7 +25,6 @@ export const findDocumentsResponseMock = (): ConversationResponse => ({ timestamp: '2020-04-20T15:25:31.830Z', apiConfig: { connectorId: 'c1', - connectorTypeTitle: 'title-c-1', defaultSystemPromptId: 'prompt-1', model: 'test', provider: 'Azure OpenAI', @@ -70,7 +69,6 @@ export const getSearchConversationMock = exclude_from_last_conversation_storage: false, api_config: { connector_id: 'c1', - connector_type_title: 'title-c-1', default_system_prompt_id: 'prompt-1', model: 'test', provider: 'Azure OpenAI', @@ -137,7 +135,6 @@ describe('findDocuments', () => { '@timestamp': '2020-04-20T15:25:31.830Z', api_config: { connector_id: 'c1', - connector_type_title: 'title-c-1', default_system_prompt_id: 'prompt-1', model: 'test', provider: 'Azure OpenAI', diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.test.ts index e375b10425123..fa27331f6c6c5 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_data_clients/index.test.ts @@ -134,7 +134,6 @@ describe('AIAssistantDataClient', () => { api_config: { connector_id: 'bedbf764-b991-4115-a9fc-1cfeaef21046', model: 'anthropic.claude-v2', - connector_type_title: 'Amazon Bedrock', }, namespace: 'hghjghjghghjghg33', created_at: '2024-01-25T01:32:37.649Z', @@ -194,7 +193,6 @@ describe('AIAssistantDataClient', () => { '@timestamp': '2024-01-25T01:32:37.649Z', api_config: { connector_id: 'bedbf764-b991-4115-a9fc-1cfeaef21046', - connector_type_title: 'Amazon Bedrock', model: 'anthropic.claude-v2', }, created_at: '2024-01-25T01:32:37.649Z', diff --git a/x-pack/plugins/elastic_assistant/server/lib/executor.test.ts b/x-pack/plugins/elastic_assistant/server/lib/executor.test.ts index dedaad2331f41..7c41c32cc89c0 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/executor.test.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/executor.test.ts @@ -29,6 +29,7 @@ const testProps: Omit = { subAction: 'invokeAI', subActionParams: { messages: [{ content: 'hello', role: 'user' }] }, }, + llmType: '.bedrock', request, connectorId, onLlmResponse, diff --git a/x-pack/plugins/elastic_assistant/server/lib/executor.ts b/x-pack/plugins/elastic_assistant/server/lib/executor.ts index 7d5c917e2c890..a0a2c71c30d63 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/executor.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/executor.ts @@ -18,6 +18,7 @@ export interface Props { connectorId: string; params: InvokeAIActionsParams; request: KibanaRequest; + llmType: string; } interface StaticResponse { connector_id: string; @@ -44,6 +45,7 @@ export const executeAction = async ({ actions, params, connectorId, + llmType, request, }: Props): Promise => { const actionsClient = await actions.getActionsClientWithRequest(request); @@ -76,7 +78,7 @@ export const executeAction = async ({ } // do not await, blocks stream for UI - handleStreamStorage(readable, request.body.llmType, onLlmResponse); + handleStreamStorage(readable, llmType, onLlmResponse); return readable.pipe(new PassThrough()); }; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/llm/actions_client_llm.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/llm/actions_client_llm.ts index ff7086e148b54..b00d6b6233502 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/llm/actions_client_llm.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/llm/actions_client_llm.ts @@ -81,9 +81,7 @@ export class ActionsClientLlm extends LLM { subActionParams: { model: this.#request.body.model, messages: [assistantMessage], // the assistant message - ...(this.#request.body.llmType === 'openai' - ? { n: 1, stop: null, temperature: 0.2 } - : {}), + ...(this.llmType === '.gen-ai' ? { n: 1, stop: null, temperature: 0.2 } : {}), }, }, }; diff --git a/x-pack/plugins/elastic_assistant/server/lib/parse_stream.test.ts b/x-pack/plugins/elastic_assistant/server/lib/parse_stream.test.ts index 079824b11416d..331c026f8ed7c 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/parse_stream.test.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/parse_stream.test.ts @@ -52,11 +52,11 @@ describe('handleStreamStorage', () => { it('saves the final string successful streaming event', async () => { stream.complete(); - await handleStreamStorage(stream.transform, 'openai', onMessageSent); + await handleStreamStorage(stream.transform, '.gen-ai', onMessageSent); expect(onMessageSent).toHaveBeenCalledWith('Single.'); }); it('saves the error message on a failed streaming event', async () => { - const tokenPromise = handleStreamStorage(stream.transform, 'openai', onMessageSent); + const tokenPromise = handleStreamStorage(stream.transform, '.gen-ai', onMessageSent); stream.fail(); await expect(tokenPromise).resolves.not.toThrow(); @@ -73,11 +73,11 @@ describe('handleStreamStorage', () => { it('saves the final string successful streaming event', async () => { stream.complete(); - await handleStreamStorage(stream.transform, 'bedrock', onMessageSent); + await handleStreamStorage(stream.transform, '.bedrock', onMessageSent); expect(onMessageSent).toHaveBeenCalledWith('Simple.'); }); it('saves the error message on a failed streaming event', async () => { - const tokenPromise = handleStreamStorage(stream.transform, 'bedrock', onMessageSent); + const tokenPromise = handleStreamStorage(stream.transform, '.bedrock', onMessageSent); stream.fail(); await expect(tokenPromise).resolves.not.toThrow(); diff --git a/x-pack/plugins/elastic_assistant/server/lib/parse_stream.ts b/x-pack/plugins/elastic_assistant/server/lib/parse_stream.ts index fed0a1cfb37bd..834fc1ce788ae 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/parse_stream.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/parse_stream.ts @@ -18,7 +18,7 @@ export const handleStreamStorage: ( onMessageSent?: (content: string) => void ) => Promise = async (responseStream, llmType, onMessageSent) => { try { - const parser = llmType === 'bedrock' ? parseBedrockStream : parseOpenAIStream; + const parser = llmType === '.bedrock' ? parseBedrockStream : parseOpenAIStream; // TODO @steph add abort signal const parsedResponse = await parser(responseStream); if (onMessageSent) { diff --git a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts index c0157d03a5abc..5a5dd8a8768a3 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts @@ -154,7 +154,6 @@ export const postEvaluateRoute = ( isEnabledKnowledgeBase: true, isEnabledRAGAlerts: true, conversationId: '', - llmType: 'openai', }, }; diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts index 098c25c9c881b..48205e153f37b 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts @@ -20,7 +20,9 @@ import { INVOKE_ASSISTANT_SUCCESS_EVENT, } from '../lib/telemetry/event_based_telemetry'; import { getConversationResponseMock } from '../ai_assistant_data_clients/conversations/update_conversation.test'; +import { actionsClientMock } from '@kbn/actions-plugin/server/actions_client/actions_client.mock'; +const actionsClient = actionsClientMock.create(); jest.mock('../lib/build_response', () => ({ buildResponse: jest.fn().mockImplementation((x) => x), })); @@ -67,7 +69,9 @@ const existingConversation = getConversationResponseMock(); const reportEvent = jest.fn(); const mockContext = { elasticAssistant: { - actions: jest.fn(), + actions: { + getActionsClientWithRequest: jest.fn().mockResolvedValue(actionsClient), + }, getRegisteredTools: jest.fn(() => []), logger: loggingSystemMock.createLogger(), telemetry: { ...coreMock.createSetup().analytics, reportEvent }, @@ -136,6 +140,22 @@ describe('postActionsConnectorExecuteRoute', () => { beforeEach(() => { jest.clearAllMocks(); + actionsClient.getBulk.mockResolvedValue([ + { + id: '1', + isPreconfigured: false, + isSystemAction: false, + isDeprecated: false, + name: 'my name', + actionTypeId: '.gen-ai', + isMissingSecrets: false, + config: { + a: true, + b: true, + c: true, + }, + }, + ]); }); it('returns the expected response when isEnabledKnowledgeBase=false', async () => { diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts index ee75fd92b6063..41cba9e51d7c8 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts @@ -65,6 +65,9 @@ export const postActionsConnectorExecuteRoute = ( const telemetry = assistantContext.telemetry; try { + // Get the actions plugin start contract from the request context for the agents + const actionsClient = await assistantContext.actions.getActionsClientWithRequest(request); + const authenticatedUser = assistantContext.getCurrentUser(); if (authenticatedUser == null) { return response.unauthorized({ @@ -188,6 +191,10 @@ export const postActionsConnectorExecuteRoute = ( } const connectorId = decodeURIComponent(request.params.connectorId); + const connectors = await actionsClient.getBulk({ + ids: [connectorId], + throwIfSystemAction: false, + }); // get the actions plugin start contract from the request context: const actions = (await context.elasticAssistant).actions; @@ -201,12 +208,13 @@ export const postActionsConnectorExecuteRoute = ( actions, request, connectorId, + llmType: connectors[0]?.actionTypeId, params: { subAction: request.body.subAction, subActionParams: { model: request.body.model, messages: [...(prevMessages ?? []), ...(newMessage ? [newMessage] : [])], - ...(request.body.llmType === 'openai' + ...(connectors[0]?.actionTypeId === '.gen-ai' ? { n: 1, stop: null, temperature: 0.2 } : {}), }, diff --git a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/update_route.test.ts b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/update_route.test.ts index 57aceaec745ec..31c5ba2d4a2e5 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/user_conversations/update_route.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/user_conversations/update_route.test.ts @@ -121,7 +121,6 @@ describe('Update conversation route', () => { ...getUpdateConversationSchemaMock(), apiConfig: { connectorId: '123', - connectorTypeTitle: 'OpenAI', defaultSystemPromptId: 'test', }, }, diff --git a/x-pack/plugins/security_solution/public/assistant/get_comments/index.test.tsx b/x-pack/plugins/security_solution/public/assistant/get_comments/index.test.tsx index c99d5c1e0d105..88380450974df 100644 --- a/x-pack/plugins/security_solution/public/assistant/get_comments/index.test.tsx +++ b/x-pack/plugins/security_solution/public/assistant/get_comments/index.test.tsx @@ -13,7 +13,6 @@ const user: ConversationRole = 'user'; const currentConversation = { apiConfig: { connectorId: 'c29c28a0-20fe-11ee-9306-a1f4d42ec542', - connectorTypeTitle: 'OpenAI', provider: OpenAiProviderType.OpenAi, }, replacements: [], @@ -49,7 +48,6 @@ describe('getComments', () => { category: 'assistant', apiConfig: { connectorId: 'c29c28a0-20fe-11ee-9306-a1f4d42ec542', - connectorTypeTitle: 'OpenAI', provider: OpenAiProviderType.OpenAi, }, replacements: [], diff --git a/x-pack/plugins/security_solution/public/assistant/get_comments/index.tsx b/x-pack/plugins/security_solution/public/assistant/get_comments/index.tsx index 0b4a2a600a5d1..42fd3f02f8da7 100644 --- a/x-pack/plugins/security_solution/public/assistant/get_comments/index.tsx +++ b/x-pack/plugins/security_solution/public/assistant/get_comments/index.tsx @@ -58,8 +58,7 @@ export const getComments = ({ const regenerateMessageOfConversation = () => { regenerateMessage(currentConversation.id); }; - - const connectorTypeTitle = currentConversation.apiConfig?.connectorTypeTitle ?? ''; + const connectorId = currentConversation.apiConfig?.connectorId ?? ''; const extraLoadingComment = isFetchingResponse ? [ @@ -69,7 +68,7 @@ export const getComments = ({ timestamp: '...', children: ( , children: ( ; @@ -36,6 +41,16 @@ describe('StreamComment', () => { pendingMessage: 'Test Message', setComplete: mockSetComplete, }); + const connectors: unknown[] = [ + { + id: 'hi', + name: 'OpenAI connector', + actionTypeId: '.gen-ai', + }, + ]; + jest.mocked(useFetchConnectorsQuery).mockReturnValue({ + data: connectors, + } as unknown as UseQueryResult>, unknown>); }); it('renders content correctly', () => { render(); diff --git a/x-pack/plugins/security_solution/public/assistant/get_comments/stream/index.tsx b/x-pack/plugins/security_solution/public/assistant/get_comments/stream/index.tsx index 1ee37aa618827..1f9bb9b7bc3c0 100644 --- a/x-pack/plugins/security_solution/public/assistant/get_comments/stream/index.tsx +++ b/x-pack/plugins/security_solution/public/assistant/get_comments/stream/index.tsx @@ -7,6 +7,7 @@ import React, { useEffect, useMemo, useRef } from 'react'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { useFetchConnectorsQuery } from '../../../detection_engine/rule_management/api/hooks/use_fetch_connectors_query'; import type { ContentMessage } from '..'; import { useStream } from './use_stream'; import { StopGeneratingButton } from './buttons/stop_generating_button'; @@ -20,7 +21,7 @@ interface Props { isFetching?: boolean; isControlsEnabled?: boolean; index: number; - connectorTypeTitle: string; + connectorId: string; reader?: ReadableStreamDefaultReader; refetchCurrentConversation: () => void; regenerateMessage: () => void; @@ -29,7 +30,7 @@ interface Props { export const StreamComment = ({ content, - connectorTypeTitle, + connectorId, index, isControlsEnabled = false, isError = false, @@ -39,10 +40,13 @@ export const StreamComment = ({ regenerateMessage, transformMessage, }: Props) => { + const { data: connectors } = useFetchConnectorsQuery(); + const llmType = connectors?.find((c) => c.id === connectorId)?.connector_type_id ?? '.gen-ai'; + const { error, isLoading, isStreaming, pendingMessage, setComplete } = useStream({ refetchCurrentConversation, content, - connectorTypeTitle, + llmType, reader, isError, }); diff --git a/x-pack/plugins/security_solution/public/assistant/get_comments/stream/stream_observable.test.ts b/x-pack/plugins/security_solution/public/assistant/get_comments/stream/stream_observable.test.ts index 54a5684d20442..c37fe502293ab 100644 --- a/x-pack/plugins/security_solution/public/assistant/get_comments/stream/stream_observable.test.ts +++ b/x-pack/plugins/security_solution/public/assistant/get_comments/stream/stream_observable.test.ts @@ -69,7 +69,7 @@ describe('getStreamObservable', () => { }); const source = getStreamObservable({ - connectorTypeTitle: 'Amazon Bedrock', + llmType: '.bedrock', isError: false, reader: typedReader, setLoading, @@ -142,7 +142,7 @@ describe('getStreamObservable', () => { }); const source = getStreamObservable({ - connectorTypeTitle: 'OpenAI', + llmType: '.gen-ai', isError: false, reader: typedReader, setLoading, @@ -215,7 +215,7 @@ describe('getStreamObservable', () => { }); const source = getStreamObservable({ - connectorTypeTitle: 'OpenAI', + llmType: '.gen-ai', isError: false, reader: typedReader, setLoading, @@ -268,7 +268,7 @@ describe('getStreamObservable', () => { }); const source = getStreamObservable({ - connectorTypeTitle: 'OpenAI', + llmType: '.gen-ai', isError: true, reader: typedReader, setLoading, @@ -299,7 +299,7 @@ describe('getStreamObservable', () => { // Simulate an error mockReader.read.mockRejectedValue(error); const source = getStreamObservable({ - connectorTypeTitle: 'OpenAI', + llmType: '.gen-ai', isError: false, reader: typedReader, setLoading, diff --git a/x-pack/plugins/security_solution/public/assistant/get_comments/stream/stream_observable.ts b/x-pack/plugins/security_solution/public/assistant/get_comments/stream/stream_observable.ts index ce7a38811f229..cbd1c518afd9a 100644 --- a/x-pack/plugins/security_solution/public/assistant/get_comments/stream/stream_observable.ts +++ b/x-pack/plugins/security_solution/public/assistant/get_comments/stream/stream_observable.ts @@ -14,7 +14,7 @@ import { API_ERROR } from '../translations'; const MIN_DELAY = 35; interface StreamObservable { - connectorTypeTitle: string; + llmType: string; reader: ReadableStreamDefaultReader; setLoading: Dispatch>; isError: boolean; @@ -28,7 +28,7 @@ interface StreamObservable { * @returns {Observable} An Observable that emits PromptObservableState */ export const getStreamObservable = ({ - connectorTypeTitle, + llmType, isError, reader, setLoading, @@ -163,17 +163,15 @@ export const getStreamObservable = ({ // this should never actually happen function badConnector() { observer.next({ - chunks: [ - `Invalid connector type - ${connectorTypeTitle} is not a supported GenAI connector.`, - ], - message: `Invalid connector type - ${connectorTypeTitle} is not a supported GenAI connector.`, + chunks: [`Invalid connector type - ${llmType} is not a supported GenAI connector.`], + message: `Invalid connector type - ${llmType} is not a supported GenAI connector.`, loading: false, }); observer.complete(); } - if (connectorTypeTitle === 'Amazon Bedrock') readBedrock(); - else if (connectorTypeTitle === 'OpenAI') readOpenAI(); + if (llmType === '.bedrock') readBedrock(); + else if (llmType === '.gen-ai') readOpenAI(); else badConnector(); return () => { diff --git a/x-pack/plugins/security_solution/public/assistant/get_comments/stream/use_stream.test.tsx b/x-pack/plugins/security_solution/public/assistant/get_comments/stream/use_stream.test.tsx index 9545b5db50202..4edf71bd5eda1 100644 --- a/x-pack/plugins/security_solution/public/assistant/get_comments/stream/use_stream.test.tsx +++ b/x-pack/plugins/security_solution/public/assistant/get_comments/stream/use_stream.test.tsx @@ -40,7 +40,7 @@ const defaultProps = { refetchCurrentConversation, reader: readerComplete, isError: false, - connectorTypeTitle: 'OpenAI', + llmType: '.gen-ai', }; describe('useStream', () => { beforeEach(() => { diff --git a/x-pack/plugins/security_solution/public/assistant/get_comments/stream/use_stream.tsx b/x-pack/plugins/security_solution/public/assistant/get_comments/stream/use_stream.tsx index bc75629deaf1a..c351e14d7dfc9 100644 --- a/x-pack/plugins/security_solution/public/assistant/get_comments/stream/use_stream.tsx +++ b/x-pack/plugins/security_solution/public/assistant/get_comments/stream/use_stream.tsx @@ -13,7 +13,7 @@ interface UseStreamProps { refetchCurrentConversation: () => void; isError: boolean; content?: string; - connectorTypeTitle: string; + llmType: string; reader?: ReadableStreamDefaultReader; } interface UseStream { @@ -39,7 +39,7 @@ interface UseStream { */ export const useStream = ({ content, - connectorTypeTitle, + llmType, reader, refetchCurrentConversation, isError, @@ -51,9 +51,9 @@ export const useStream = ({ const observer$ = useMemo( () => content == null && reader != null - ? getStreamObservable({ connectorTypeTitle, reader, setLoading, isError }) + ? getStreamObservable({ llmType, reader, setLoading, isError }) : getPlaceholderObservable(), - [content, isError, reader, connectorTypeTitle] + [content, isError, reader, llmType] ); const onCompleteStream = useCallback(() => { subscription?.unsubscribe(); diff --git a/x-pack/plugins/security_solution/public/assistant/provider.test.tsx b/x-pack/plugins/security_solution/public/assistant/provider.test.tsx index 78c07c847f017..b9a83f12f568f 100644 --- a/x-pack/plugins/security_solution/public/assistant/provider.test.tsx +++ b/x-pack/plugins/security_solution/public/assistant/provider.test.tsx @@ -18,7 +18,6 @@ const conversations = { isDefault: true, apiConfig: { connectorId: 'my-bedrock', - connectorTypeTitle: 'Amazon Bedrock', defaultSystemPromptId: 'default-system-prompt', }, replacements: { @@ -49,7 +48,6 @@ const conversations = { isDefault: true, apiConfig: { connectorId: 'my-gen-ai', - connectorTypeTitle: 'OpenAI', defaultSystemPromptId: 'default-system-prompt', }, messages: [ @@ -105,7 +103,6 @@ const conversations = { }, apiConfig: { connectorId: 'my-gen-ai', - connectorTypeTitle: 'OpenAI', defaultSystemPromptId: 'default-system-prompt', }, messages: [], diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/bedrock.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/bedrock.ts index 3b1cdeffde74e..abf9e435866a1 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/bedrock.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/bedrock.ts @@ -435,7 +435,6 @@ export default function bedrockTest({ getService }: FtrProviderContext) { message: 'Hello world', isEnabledKnowledgeBase: false, isEnabledRAGAlerts: false, - llmType: 'bedrock', replacements: [], }) .pipe(passThrough); diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/basic.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/basic.ts index 7c83853d5d40a..86477a7277586 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/basic.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/invoke_ai/trial_license_complete_tier/basic.ts @@ -19,7 +19,6 @@ const mockRequest = { subAction: 'invokeAI', isEnabledKnowledgeBase: false, isEnabledRAGAlerts: false, - llmType: 'bedrock', replacements: [], }; @@ -85,7 +84,7 @@ export default ({ getService }: FtrProviderContext) => { it('should execute a chat completion', async () => { const response = await postActionsClientExecute( openaiActionId, - { ...mockRequest, llmType: 'openai' }, + { ...mockRequest }, supertest ); From 3a165855d5a3dd94fc556c869278ff6903c2782d Mon Sep 17 00:00:00 2001 From: Cee Chen <549407+cee-chen@users.noreply.github.com> Date: Fri, 22 Mar 2024 11:06:11 -0700 Subject: [PATCH 74/90] Upgrade EUI to v93.4.0 (#178890) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `v93.3.0`⏩ `v93.4.0` --- ## [`v93.4.0`](https://github.com/elastic/eui/releases/v93.4.0) - Added the following properties to `EuiButtonGroup`'s `options` configs: `toolTipContent`, `toolTipProps`, and `title`. These new properties allow wrapping buttons in `EuiToolTips`, and additionally customizing or disabling the native browser `title` tooltip. ([#7461](https://github.com/elastic/eui/pull/7461)) - Enhanced `EuiResizeObserver` and `useResizeObserver`'s performance to not trigger page reflows on resize event ([#7575](https://github.com/elastic/eui/pull/7575)) - Updated `EuiSuperUpdateButton` to support custom button text via an optional `children` prop ([#7576](https://github.com/elastic/eui/pull/7576)) **Bug fixes** - Fixed `EuiFlyout` to not repeatedly remove/add a body class on resize ([#7462](https://github.com/elastic/eui/pull/7462)) - Fixed `EuiToast` title text to wrap instead of overflowing out of the container ([#7568](https://github.com/elastic/eui/pull/7568)) - Fixed a visual bug with `EuiHeaderBreadcrumbs` with popovers ([#7580](https://github.com/elastic/eui/pull/7580)) **Deprecations** - Deprecated `euiPalettePositive` and `euiPaletteNegative` in favour of a more culturally inclusive `euiPaletteGreen` and `euiPaletteRed` ([#7570](https://github.com/elastic/eui/pull/7570)) - Deprecated all charts theme exports in favor of `@elastic/charts` exports: ([#7572](https://github.com/elastic/eui/pull/7572)) - Deprecated `EUI_CHARTS_THEME_` in favor of `_THEME` from `@elastic/charts`. ([#7572](https://github.com/elastic/eui/pull/7572)) - Deprecated `EUI_SPARKLINE_THEME_PARTIAL` in favor of `useSparklineOverrides` theme from the kibana `charts` plugin `theme` service. **Accessibility** - Updated `EuiModal` to set an `aria-modal` attribute and a default `dialog` role ([#7564](https://github.com/elastic/eui/pull/7564)) - Updated `EuiConfirmModal` to set a default `alertdialog` role ([#7564](https://github.com/elastic/eui/pull/7564)) - Fixed `EuiModal` and `EuiConfirmModal` to properly trap Safari+VoiceOver's virtual cursor ([#7564](https://github.com/elastic/eui/pull/7564)) --- package.json | 2 +- .../ui/header/__snapshots__/header.test.tsx.snap | 2 +- .../__snapshots__/modal_service.test.tsx.snap | 6 ++++++ .../__snapshots__/list_header.test.tsx.snap | 2 ++ .../__snapshots__/edit_modal.test.tsx.snap | 2 ++ src/core/public/styles/_base.scss | 1 - src/dev/license_checker/config.ts | 2 +- .../charts/public/services/palettes/palettes.tsx | 8 ++++---- .../internal_dashboard_top_nav.tsx | 4 ++-- .../apps/dashboard/group1/url_field_formatter.ts | 1 + .../maps/public/classes/styles/color_palettes.ts | 12 ++++++------ .../scatterplot_matrix_vega_lite_spec.ts | 6 +++--- .../application/memory_usage/memory_item_colors.ts | 4 ++-- .../lens_attributes/heatmap_attributes.ts | 4 ++-- .../inventory_view/lib/get_color_palette.ts | 8 ++++---- .../components/header_actions/header_actions.tsx | 14 ++++++++++++-- .../__snapshots__/index.test.tsx.snap | 6 ++++++ .../timelines/bulk_add_to_timeline.cy.ts | 7 ++++++- .../cypress/screens/hosts/events.ts | 6 ++++++ .../cypress/tasks/alerts.ts | 5 +++-- .../cypress/tasks/common/event_table.ts | 10 +++++----- .../cypress/tasks/hosts/events.ts | 7 +++++++ yarn.lock | 8 ++++---- 23 files changed, 86 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index d6a952f436b47..aed319d891fd6 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "@elastic/ecs": "^8.11.1", "@elastic/elasticsearch": "^8.12.2", "@elastic/ems-client": "8.5.1", - "@elastic/eui": "93.3.0", + "@elastic/eui": "93.4.0", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap index 209e2f1d0c113..f0bae81571603 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap @@ -194,7 +194,7 @@ Array [ > diff --git a/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap b/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap index c93fae64cf361..ce53f3fbae63c 100644 --- a/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap +++ b/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap @@ -129,7 +129,9 @@ exports[`ModalService openConfirm() renders a mountpoint confirm message 2`] = ` data-eui="EuiFocusTrap" >