mirror of
https://github.com/elastic/kibana.git
synced 2025-06-28 19:13:14 -04:00
## Summary This PR aims at relocating some of the Kibana modules (plugins and packages) into a new folder structure, according to the _Sustainable Kibana Architecture_ initiative. > [!IMPORTANT] > * We kindly ask you to: > * Manually fix the errors in the error section below (if there are any). > * Search for the `packages[\/\\]` and `plugins[\/\\]` patterns in the source code (Babel and Eslint config files), and update them appropriately. > * Manually review `.buildkite/scripts/pipelines/pull_request/pipeline.ts` to ensure that any CI pipeline customizations continue to be correctly applied after the changed path names > * Review all of the updated files, specially the `.ts` and `.js` files listed in the sections below, as some of them contain relative paths that have been updated. > * Think of potential impact of the move, including tooling and configuration files that can be pointing to the relocated modules. E.g.: > * customised eslint rules > * docs pointing to source code > [!NOTE] > * This PR has been auto-generated. > * Any manual contributions will be lost if the 'relocate' script is re-run. > * Try to obtain the missing reviews / approvals before applying manual fixes, and/or keep your changes in a .patch / git stash. > * Please use [#sustainable_kibana_architecture](https://elastic.slack.com/archives/C07TCKTA22E) Slack channel for feedback. Are you trying to rebase this PR to solve merge conflicts? Please follow the steps describe [here](https://elastic.slack.com/archives/C07TCKTA22E/p1734019532879269?thread_ts=1734019339.935419&cid=C07TCKTA22E). #### 13 packages(s) are going to be relocated: | Id | Target folder | | -- | ------------- | | `@kbn/core-chrome-browser-internal` | `src/core/packages/chrome/browser-internal` | | `@kbn/core-custom-branding-browser` | `src/core/packages/custom-branding/browser` | | `@kbn/core-custom-branding-browser-internal` | `src/core/packages/custom-branding/browser-internal` | | `@kbn/core-custom-branding-browser-mocks` | `src/core/packages/custom-branding/browser-mocks` | | `@kbn/core-custom-branding-common` | `src/core/packages/custom-branding/common` | | `@kbn/core-custom-branding-server` | `src/core/packages/custom-branding/server` | | `@kbn/core-custom-branding-server-internal` | `src/core/packages/custom-branding/server-internal` | | `@kbn/core-custom-branding-server-mocks` | `src/core/packages/custom-branding/server-mocks` | | `@kbn/core-ui-settings-browser` | `src/core/packages/ui-settings/browser` | | `@kbn/core-ui-settings-browser-internal` | `src/core/packages/ui-settings/browser-internal` | | `@kbn/core-ui-settings-common` | `src/core/packages/ui-settings/common` | | `@kbn/core-ui-settings-server` | `src/core/packages/ui-settings/server` | | `@kbn/core-ui-settings-server-internal` | `src/core/packages/ui-settings/server-internal` | <details > <summary>Updated references</summary> ``` ./docs/developer/architecture/core/patterns-scoped-services.asciidoc ./docs/developer/architecture/core/uisettings-service.asciidoc ./package.json ./packages/core/custom-branding/core-custom-branding-common/index.ts ./packages/kbn-ts-projects/config-paths.json ./src/core/packages/chrome/browser-internal/jest.config.js ./src/core/packages/custom-branding/browser-internal/jest.config.js ./src/core/packages/custom-branding/browser-mocks/jest.config.js ./src/core/packages/custom-branding/server-internal/jest.config.js ./src/core/packages/custom-branding/server-mocks/jest.config.js ./src/core/packages/ui-settings/browser-internal/jest.config.js ./src/core/packages/ui-settings/browser/jest.config.js ./src/core/packages/ui-settings/common/jest.config.js ./src/core/packages/ui-settings/server-internal/jest.config.js ./src/core/packages/ui-settings/server/jest.config.js ./src/platform/packages/private/kbn-repo-packages/package-map.json ./tsconfig.base.json ./x-pack/platform/plugins/private/transform/public/app/common/time_zone_utils.ts ./yarn.lock .github/CODEOWNERS ``` </details><details > <summary>Updated relative paths</summary> ``` src/core/packages/chrome/browser-internal/jest.config.js:12 src/core/packages/chrome/browser-internal/tsconfig.json:2 src/core/packages/custom-branding/browser-internal/jest.config.js:12 src/core/packages/custom-branding/browser-internal/tsconfig.json:2 src/core/packages/custom-branding/browser-mocks/jest.config.js:12 src/core/packages/custom-branding/browser-mocks/tsconfig.json:2 src/core/packages/custom-branding/browser/tsconfig.json:2 src/core/packages/custom-branding/common/tsconfig.json:2 src/core/packages/custom-branding/server-internal/jest.config.js:12 src/core/packages/custom-branding/server-internal/tsconfig.json:2 src/core/packages/custom-branding/server-mocks/jest.config.js:12 src/core/packages/custom-branding/server-mocks/tsconfig.json:2 src/core/packages/custom-branding/server/tsconfig.json:2 src/core/packages/ui-settings/browser-internal/jest.config.js:12 src/core/packages/ui-settings/browser-internal/tsconfig.json:2 src/core/packages/ui-settings/browser/jest.config.js:12 src/core/packages/ui-settings/browser/tsconfig.json:2 src/core/packages/ui-settings/common/jest.config.js:12 src/core/packages/ui-settings/common/tsconfig.json:2 src/core/packages/ui-settings/server-internal/jest.config.js:12 src/core/packages/ui-settings/server-internal/tsconfig.json:2 src/core/packages/ui-settings/server/jest.config.js:12 src/core/packages/ui-settings/server/tsconfig.json:2 ``` </details> --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
57 lines
2.3 KiB
Text
57 lines
2.3 KiB
Text
[[patterns]]
|
|
== Patterns
|
|
[[scoped-services]]
|
|
=== Scoped services
|
|
Whenever Kibana needs to get access to data saved in Elasticsearch, it
|
|
should perform a check whether an end-user has access to the data.
|
|
The Kibana Platform introduced a handler interface on the server-side to perform that association
|
|
internally. Core services, that require impersonation with an incoming
|
|
request, are exposed via `context` argument of
|
|
{kib-repo}/blob/8.9/src/core/packages/http/server/src/router/request_handler.ts[the request handler interface].
|
|
|
|
[source,js]
|
|
----
|
|
async function handler(context, req, res) {
|
|
const data = await context.core.elasticsearch.client.asCurrentUser('ping');
|
|
}
|
|
----
|
|
|
|
The {kib-repo}/blob/8.9/src/core/packages/http/server/src/router/request_handler.ts[request handler context] exposes the following scoped *core* services:
|
|
|
|
* {kib-repo}/blob/8.9/src/core/packages/saved-objects/api-server/src/saved_objects_client.ts[`context.savedObjects.client`]
|
|
* {kib-repo}/blob/8.9/src/core/packages/elasticsearch/server/src/client/scoped_cluster_client.ts[`context.elasticsearch.client`]
|
|
* {kib-repo}/blob/8.9/src/core/packages/ui-settings/server/src/ui_settings_client.ts[`context.uiSettings.client`]
|
|
|
|
==== Declare a custom scoped service
|
|
|
|
Plugins can extend the handler context with a custom API that will be
|
|
available to the plugin itself and all dependent plugins. For example,
|
|
the plugin creates a custom Elasticsearch client and wants to use it via
|
|
the request handler context:
|
|
|
|
[source,typescript]
|
|
----
|
|
import type { CoreSetup, RequestHandlerContext, IScopedClusterClient } from '@kbn/core/server';
|
|
|
|
interface MyRequestHandlerContext extends RequestHandlerContext {
|
|
myPlugin: {
|
|
client: IScopedClusterClient;
|
|
};
|
|
}
|
|
|
|
class MyPlugin {
|
|
setup(core: CoreSetup) {
|
|
const client = core.elasticsearch.createClient('myClient');
|
|
core.http.registerRouteHandlerContext<MyRequestHandlerContext, 'myPlugin'>('myPlugin', (context, req, res) => {
|
|
return { client: client.asScoped(req) };
|
|
});
|
|
const router = core.http.createRouter<MyRequestHandlerContext>();
|
|
router.get(
|
|
{ path: '/api/my-plugin/', validate: … },
|
|
async (context, req, res) => {
|
|
// context type is inferred as MyPluginContext
|
|
const data = await context.myPlugin.client.asCurrentUser('endpoint');
|
|
}
|
|
);
|
|
}
|
|
----
|