(handler: AuthenticationHandler) => void
| To define custom authentication and/or authorization mechanism for incoming requests. |
| [registerOnPostAuth](./kibana-plugin-server.httpservicesetup.registeronpostauth.md) | (handler: OnPostAuthHandler) => void
| To define custom logic to perform for incoming requests. |
| [registerOnPreAuth](./kibana-plugin-server.httpservicesetup.registeronpreauth.md) | (handler: OnPreAuthHandler) => void
| To define custom logic to perform for incoming requests. |
+| [registerOnPreResponse](./kibana-plugin-server.httpservicesetup.registeronpreresponse.md) | (handler: OnPreResponseHandler) => void
| To define custom logic to perform for the server response. |
| [registerRouteHandlerContext](./kibana-plugin-server.httpservicesetup.registerroutehandlercontext.md) | <T extends keyof RequestHandlerContext>(contextName: T, provider: RequestHandlerContextProvider<T>) => RequestHandlerContextContainer
| Register a context provider for a route handler. |
## Example
diff --git a/docs/development/core/server/kibana-plugin-server.httpservicesetup.registeronpreresponse.md b/docs/development/core/server/kibana-plugin-server.httpservicesetup.registeronpreresponse.md
new file mode 100644
index 0000000000000..d88a0c979a4e1
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-server.httpservicesetup.registeronpreresponse.md
@@ -0,0 +1,18 @@
+
+
+[Home](./index.md) > [kibana-plugin-server](./kibana-plugin-server.md) > [HttpServiceSetup](./kibana-plugin-server.httpservicesetup.md) > [registerOnPreResponse](./kibana-plugin-server.httpservicesetup.registeronpreresponse.md)
+
+## HttpServiceSetup.registerOnPreResponse property
+
+To define custom logic to perform for the server response.
+
+Signature:
+
+```typescript
+registerOnPreResponse: (handler: OnPreResponseHandler) => void;
+```
+
+## Remarks
+
+Doesn't provide the whole response object. Allows to extend response with custom headers. See [OnPreResponseHandler](./kibana-plugin-server.onpreresponsehandler.md).
+
diff --git a/docs/development/core/server/kibana-plugin-server.md b/docs/development/core/server/kibana-plugin-server.md
index 17c5136fdc318..3a98e4b0f9987 100644
--- a/docs/development/core/server/kibana-plugin-server.md
+++ b/docs/development/core/server/kibana-plugin-server.md
@@ -74,6 +74,7 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [LogMeta](./kibana-plugin-server.logmeta.md) | Contextual metadata |
| [OnPostAuthToolkit](./kibana-plugin-server.onpostauthtoolkit.md) | A tool set defining an outcome of OnPostAuth interceptor for incoming request. |
| [OnPreAuthToolkit](./kibana-plugin-server.onpreauthtoolkit.md) | A tool set defining an outcome of OnPreAuth interceptor for incoming request. |
+| [OnPreResponseToolkit](./kibana-plugin-server.onpreresponsetoolkit.md) | A tool set defining an outcome of OnPreAuth interceptor for incoming request. |
| [PackageInfo](./kibana-plugin-server.packageinfo.md) | |
| [Plugin](./kibana-plugin-server.plugin.md) | The interface that should be returned by a PluginInitializer
. |
| [PluginConfigDescriptor](./kibana-plugin-server.pluginconfigdescriptor.md) | Describes a plugin configuration schema and capabilities. |
@@ -82,6 +83,8 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [PluginsServiceSetup](./kibana-plugin-server.pluginsservicesetup.md) | |
| [PluginsServiceStart](./kibana-plugin-server.pluginsservicestart.md) | |
| [RequestHandlerContext](./kibana-plugin-server.requesthandlercontext.md) | Plugin specific context passed to a route handler.Provides the following clients: - [savedObjects.client](./kibana-plugin-server.savedobjectsclient.md) - Saved Objects client which uses the credentials of the incoming request - [elasticsearch.dataClient](./kibana-plugin-server.scopedclusterclient.md) - Elasticsearch data client which uses the credentials of the incoming request - [elasticsearch.adminClient](./kibana-plugin-server.scopedclusterclient.md) - Elasticsearch admin client which uses the credentials of the incoming request |
+| [ResponseExtensions](./kibana-plugin-server.responseextensions.md) | Additional data to extend a response. |
+| [ResponseInfo](./kibana-plugin-server.responseinfo.md) | Response status code. |
| [RouteConfig](./kibana-plugin-server.routeconfig.md) | Route specific configuration. |
| [RouteConfigOptions](./kibana-plugin-server.routeconfigoptions.md) | Additional route options. |
| [RouteConfigOptionsBody](./kibana-plugin-server.routeconfigoptionsbody.md) | Additional body options for a route |
@@ -168,6 +171,7 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [MutatingOperationRefreshSetting](./kibana-plugin-server.mutatingoperationrefreshsetting.md) | Elasticsearch Refresh setting for mutating operation |
| [OnPostAuthHandler](./kibana-plugin-server.onpostauthhandler.md) | See [OnPostAuthToolkit](./kibana-plugin-server.onpostauthtoolkit.md). |
| [OnPreAuthHandler](./kibana-plugin-server.onpreauthhandler.md) | See [OnPreAuthToolkit](./kibana-plugin-server.onpreauthtoolkit.md). |
+| [OnPreResponseHandler](./kibana-plugin-server.onpreresponsehandler.md) | See [OnPreAuthToolkit](./kibana-plugin-server.onpreauthtoolkit.md). |
| [PluginConfigSchema](./kibana-plugin-server.pluginconfigschema.md) | Dedicated type for plugin configuration schema. |
| [PluginInitializer](./kibana-plugin-server.plugininitializer.md) | The plugin
export at the root of a plugin's server
directory should conform to this interface. |
| [PluginName](./kibana-plugin-server.pluginname.md) | Dedicated type for plugin name/id that is supposed to make Map/Set/Arrays that use it as a key or value more obvious. |
diff --git a/docs/development/core/server/kibana-plugin-server.onpreresponsehandler.md b/docs/development/core/server/kibana-plugin-server.onpreresponsehandler.md
new file mode 100644
index 0000000000000..ca80946fc1470
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-server.onpreresponsehandler.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-server](./kibana-plugin-server.md) > [OnPreResponseHandler](./kibana-plugin-server.onpreresponsehandler.md)
+
+## OnPreResponseHandler type
+
+See [OnPreAuthToolkit](./kibana-plugin-server.onpreauthtoolkit.md).
+
+Signature:
+
+```typescript
+export declare type OnPreResponseHandler = (request: KibanaRequest, response: ResponseInfo, toolkit: OnPreResponseToolkit) => OnPreResponseResult | Promise(responseExtensions?: ResponseExtensions) => OnPreResponseResult
| To pass request to the next handler |
+
diff --git a/docs/development/core/server/kibana-plugin-server.onpreresponsetoolkit.next.md b/docs/development/core/server/kibana-plugin-server.onpreresponsetoolkit.next.md
new file mode 100644
index 0000000000000..bf66577822e5e
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-server.onpreresponsetoolkit.next.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-server](./kibana-plugin-server.md) > [OnPreResponseToolkit](./kibana-plugin-server.onpreresponsetoolkit.md) > [next](./kibana-plugin-server.onpreresponsetoolkit.next.md)
+
+## OnPreResponseToolkit.next property
+
+To pass request to the next handler
+
+Signature:
+
+```typescript
+next: (responseExtensions?: ResponseExtensions) => OnPreResponseResult;
+```
diff --git a/docs/development/core/server/kibana-plugin-server.responseextensions.headers.md b/docs/development/core/server/kibana-plugin-server.responseextensions.headers.md
new file mode 100644
index 0000000000000..4975f8b65b66a
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-server.responseextensions.headers.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-server](./kibana-plugin-server.md) > [ResponseExtensions](./kibana-plugin-server.responseextensions.md) > [headers](./kibana-plugin-server.responseextensions.headers.md)
+
+## ResponseExtensions.headers property
+
+Signature:
+
+```typescript
+headers?: ResponseHeaders;
+```
diff --git a/docs/development/core/server/kibana-plugin-server.responseextensions.md b/docs/development/core/server/kibana-plugin-server.responseextensions.md
new file mode 100644
index 0000000000000..1988bb1ebec02
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-server.responseextensions.md
@@ -0,0 +1,20 @@
+
+
+[Home](./index.md) > [kibana-plugin-server](./kibana-plugin-server.md) > [ResponseExtensions](./kibana-plugin-server.responseextensions.md)
+
+## ResponseExtensions interface
+
+Additional data to extend a response.
+
+Signature:
+
+```typescript
+export interface ResponseExtensions
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [headers](./kibana-plugin-server.responseextensions.headers.md) | ResponseHeaders
| |
+
diff --git a/docs/development/core/server/kibana-plugin-server.responseinfo.md b/docs/development/core/server/kibana-plugin-server.responseinfo.md
new file mode 100644
index 0000000000000..995834e331aab
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-server.responseinfo.md
@@ -0,0 +1,20 @@
+
+
+[Home](./index.md) > [kibana-plugin-server](./kibana-plugin-server.md) > [ResponseInfo](./kibana-plugin-server.responseinfo.md)
+
+## ResponseInfo interface
+
+Response status code.
+
+Signature:
+
+```typescript
+export interface ResponseInfo
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [statusCode](./kibana-plugin-server.responseinfo.statuscode.md) | number
| |
+
diff --git a/docs/development/core/server/kibana-plugin-server.responseinfo.statuscode.md b/docs/development/core/server/kibana-plugin-server.responseinfo.statuscode.md
new file mode 100644
index 0000000000000..7ed8e7283f24a
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-server.responseinfo.statuscode.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-server](./kibana-plugin-server.md) > [ResponseInfo](./kibana-plugin-server.responseinfo.md) > [statusCode](./kibana-plugin-server.responseinfo.statuscode.md)
+
+## ResponseInfo.statusCode property
+
+Signature:
+
+```typescript
+statusCode: number;
+```
diff --git a/src/core/server/http/index.ts b/src/core/server/http/index.ts
index cdc6ec6ce94fe..00791ccc2e657 100644
--- a/src/core/server/http/index.ts
+++ b/src/core/server/http/index.ts
@@ -64,7 +64,12 @@ export {
AuthResultType,
} from './lifecycle/auth';
export { OnPostAuthHandler, OnPostAuthToolkit } from './lifecycle/on_post_auth';
-export { OnPreResponseHandler, OnPreResponseToolkit } from './lifecycle/on_pre_response';
+export {
+ OnPreResponseHandler,
+ OnPreResponseToolkit,
+ ResponseInfo,
+ ResponseExtensions,
+} from './lifecycle/on_pre_response';
export { SessionStorageFactory, SessionStorage } from './session_storage';
export {
SessionStorageCookieOptions,
diff --git a/src/core/server/http/lifecycle/on_pre_response.ts b/src/core/server/http/lifecycle/on_pre_response.ts
index 1a2eeaa912c8d..d20e3c468131f 100644
--- a/src/core/server/http/lifecycle/on_pre_response.ts
+++ b/src/core/server/http/lifecycle/on_pre_response.ts
@@ -22,6 +22,7 @@ import Boom from 'boom';
import { Logger } from '../../logging';
import { HapiResponseAdapter, KibanaRequest, ResponseHeaders } from '../router';
+
enum ResultType {
next = 'next',
}
@@ -31,6 +32,9 @@ interface Next {
headers?: ResponseHeaders;
}
+/**
+ * @internal
+ */
type OnPreResponseResult = Next;
/**
@@ -41,6 +45,14 @@ export interface ResponseExtensions {
headers?: ResponseHeaders;
}
+/**
+ * Response status code.
+ * @public
+ */
+export interface ResponseInfo {
+ statusCode: number;
+}
+
const preResponseResult = {
next(responseExtensions?: ResponseExtensions): OnPreResponseResult {
return { type: ResultType.next, headers: responseExtensions?.headers };
@@ -63,9 +75,6 @@ const toolkit: OnPreResponseToolkit = {
next: preResponseResult.next,
};
-interface ResponseInfo {
- statusCode: number; // body? header?
-}
/**
* See {@link OnPreAuthToolkit}.
* @public
diff --git a/src/core/server/index.ts b/src/core/server/index.ts
index c27b9cbd7ace7..7bb2737a46350 100644
--- a/src/core/server/index.ts
+++ b/src/core/server/index.ts
@@ -105,6 +105,8 @@ export {
OnPostAuthToolkit,
OnPreResponseHandler,
OnPreResponseToolkit,
+ ResponseInfo,
+ ResponseExtensions,
RedirectResponseOptions,
RequestHandler,
RequestHandlerContextContainer,
diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md
index 25ca8ade77aca..e0bce94a87efe 100644
--- a/src/core/server/server.api.md
+++ b/src/core/server/server.api.md
@@ -666,6 +666,7 @@ export interface HttpServiceSetup {
registerAuth: (handler: AuthenticationHandler) => void;
registerOnPostAuth: (handler: OnPostAuthHandler) => void;
registerOnPreAuth: (handler: OnPreAuthHandler) => void;
+ registerOnPreResponse: (handler: OnPreResponseHandler) => void;
registerRouteHandlerContext: | Type