IAnonymousPaths
| APIs for denoting certain paths for not requiring authentication |
| [basePath](./kibana-plugin-core-public.httpsetup.basepath.md) | IBasePath
| APIs for manipulating the basePath on URL segments. See [IBasePath](./kibana-plugin-core-public.ibasepath.md) |
| [delete](./kibana-plugin-core-public.httpsetup.delete.md) | HttpHandler
| Makes an HTTP request with the DELETE method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. |
+| [externalUrl](./kibana-plugin-core-public.httpsetup.externalurl.md) | IExternalUrl
| |
| [fetch](./kibana-plugin-core-public.httpsetup.fetch.md) | HttpHandler
| Makes an HTTP request. Defaults to a GET request unless overriden. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. |
| [get](./kibana-plugin-core-public.httpsetup.get.md) | HttpHandler
| Makes an HTTP request with the GET method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. |
| [head](./kibana-plugin-core-public.httpsetup.head.md) | HttpHandler
| Makes an HTTP request with the HEAD method. See [HttpHandler](./kibana-plugin-core-public.httphandler.md) for options. |
diff --git a/docs/development/core/public/kibana-plugin-core-public.iexternalurl.md b/docs/development/core/public/kibana-plugin-core-public.iexternalurl.md
new file mode 100644
index 0000000000000..5a598281c7be7
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.iexternalurl.md
@@ -0,0 +1,20 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IExternalUrl](./kibana-plugin-core-public.iexternalurl.md)
+
+## IExternalUrl interface
+
+APIs for working with external URLs.
+
+Signature:
+
+```typescript
+export interface IExternalUrl
+```
+
+## Methods
+
+| Method | Description |
+| --- | --- |
+| [validateUrl(relativeOrAbsoluteUrl)](./kibana-plugin-core-public.iexternalurl.validateurl.md) | Determines if the provided URL is a valid location to send users. Validation is based on the configured allow list in kibana.yml.If the URL is valid, then a URL will be returned. Otherwise, this will return null. |
+
diff --git a/docs/development/core/public/kibana-plugin-core-public.iexternalurl.validateurl.md b/docs/development/core/public/kibana-plugin-core-public.iexternalurl.validateurl.md
new file mode 100644
index 0000000000000..466d7cfebf547
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.iexternalurl.validateurl.md
@@ -0,0 +1,26 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IExternalUrl](./kibana-plugin-core-public.iexternalurl.md) > [validateUrl](./kibana-plugin-core-public.iexternalurl.validateurl.md)
+
+## IExternalUrl.validateUrl() method
+
+Determines if the provided URL is a valid location to send users. Validation is based on the configured allow list in kibana.yml.
+
+If the URL is valid, then a URL will be returned. Otherwise, this will return null.
+
+Signature:
+
+```typescript
+validateUrl(relativeOrAbsoluteUrl: string): URL | null;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| relativeOrAbsoluteUrl | string
| |
+
+Returns:
+
+`URL | null`
+
diff --git a/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.allow.md b/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.allow.md
new file mode 100644
index 0000000000000..ec7129a43b99a
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.allow.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IExternalUrlPolicy](./kibana-plugin-core-public.iexternalurlpolicy.md) > [allow](./kibana-plugin-core-public.iexternalurlpolicy.allow.md)
+
+## IExternalUrlPolicy.allow property
+
+Indicates if this policy allows or denies access to the described destination.
+
+Signature:
+
+```typescript
+allow: boolean;
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.host.md b/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.host.md
new file mode 100644
index 0000000000000..5551d52cc1226
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.host.md
@@ -0,0 +1,24 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IExternalUrlPolicy](./kibana-plugin-core-public.iexternalurlpolicy.md) > [host](./kibana-plugin-core-public.iexternalurlpolicy.host.md)
+
+## IExternalUrlPolicy.host property
+
+Optional host describing the external destination. May be combined with `protocol`. Required if `protocol` is not defined.
+
+Signature:
+
+```typescript
+host?: string;
+```
+
+## Example
+
+
+```ts
+// allows access to all of google.com, using any protocol.
+allow: true,
+host: 'google.com'
+
+```
+
diff --git a/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.md b/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.md
new file mode 100644
index 0000000000000..a87dc69d79e23
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IExternalUrlPolicy](./kibana-plugin-core-public.iexternalurlpolicy.md)
+
+## IExternalUrlPolicy interface
+
+A policy describing whether access to an external destination is allowed.
+
+Signature:
+
+```typescript
+export interface IExternalUrlPolicy
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [allow](./kibana-plugin-core-public.iexternalurlpolicy.allow.md) | boolean
| Indicates if this policy allows or denies access to the described destination. |
+| [host](./kibana-plugin-core-public.iexternalurlpolicy.host.md) | string
| Optional host describing the external destination. May be combined with protocol
. Required if protocol
is not defined. |
+| [protocol](./kibana-plugin-core-public.iexternalurlpolicy.protocol.md) | string
| Optional protocol describing the external destination. May be combined with host
. Required if host
is not defined. |
+
diff --git a/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.protocol.md b/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.protocol.md
new file mode 100644
index 0000000000000..67b9b439a54f6
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.iexternalurlpolicy.protocol.md
@@ -0,0 +1,24 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [IExternalUrlPolicy](./kibana-plugin-core-public.iexternalurlpolicy.md) > [protocol](./kibana-plugin-core-public.iexternalurlpolicy.protocol.md)
+
+## IExternalUrlPolicy.protocol property
+
+Optional protocol describing the external destination. May be combined with `host`. Required if `host` is not defined.
+
+Signature:
+
+```typescript
+protocol?: string;
+```
+
+## Example
+
+
+```ts
+// allows access to all destinations over the `https` protocol.
+allow: true,
+protocol: 'https'
+
+```
+
diff --git a/docs/development/core/public/kibana-plugin-core-public.md b/docs/development/core/public/kibana-plugin-core-public.md
index 5f656b9ca510d..a3df5d30137df 100644
--- a/docs/development/core/public/kibana-plugin-core-public.md
+++ b/docs/development/core/public/kibana-plugin-core-public.md
@@ -73,6 +73,8 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [IAnonymousPaths](./kibana-plugin-core-public.ianonymouspaths.md) | APIs for denoting paths as not requiring authentication |
| [IBasePath](./kibana-plugin-core-public.ibasepath.md) | APIs for manipulating the basePath on URL segments. |
| [IContextContainer](./kibana-plugin-core-public.icontextcontainer.md) | An object that handles registration of context providers and configuring handlers with context. |
+| [IExternalUrl](./kibana-plugin-core-public.iexternalurl.md) | APIs for working with external URLs. |
+| [IExternalUrlPolicy](./kibana-plugin-core-public.iexternalurlpolicy.md) | A policy describing whether access to an external destination is allowed. |
| [IHttpFetchError](./kibana-plugin-core-public.ihttpfetcherror.md) | |
| [IHttpInterceptController](./kibana-plugin-core-public.ihttpinterceptcontroller.md) | Used to halt a request Promise chain in a [HttpInterceptor](./kibana-plugin-core-public.httpinterceptor.md). |
| [IHttpResponseInterceptorOverrides](./kibana-plugin-core-public.ihttpresponseinterceptoroverrides.md) | Properties that can be returned by HttpInterceptor.request to override the response. |
diff --git a/docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.md b/docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.md
new file mode 100644
index 0000000000000..8df4db4aa9b5e
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.md
@@ -0,0 +1,20 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExternalUrlConfig](./kibana-plugin-core-server.iexternalurlconfig.md)
+
+## IExternalUrlConfig interface
+
+External Url configuration for use in Kibana.
+
+Signature:
+
+```typescript
+export interface IExternalUrlConfig
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [policy](./kibana-plugin-core-server.iexternalurlconfig.policy.md) | IExternalUrlPolicy[]
| A set of policies describing which external urls are allowed. |
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.policy.md b/docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.policy.md
new file mode 100644
index 0000000000000..b5b6f07038076
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.iexternalurlconfig.policy.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExternalUrlConfig](./kibana-plugin-core-server.iexternalurlconfig.md) > [policy](./kibana-plugin-core-server.iexternalurlconfig.policy.md)
+
+## IExternalUrlConfig.policy property
+
+A set of policies describing which external urls are allowed.
+
+Signature:
+
+```typescript
+readonly policy: IExternalUrlPolicy[];
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.allow.md b/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.allow.md
new file mode 100644
index 0000000000000..e0c140409dcf0
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.allow.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExternalUrlPolicy](./kibana-plugin-core-server.iexternalurlpolicy.md) > [allow](./kibana-plugin-core-server.iexternalurlpolicy.allow.md)
+
+## IExternalUrlPolicy.allow property
+
+Indicates of this policy allows or denies access to the described destination.
+
+Signature:
+
+```typescript
+allow: boolean;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.host.md b/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.host.md
new file mode 100644
index 0000000000000..e65de074f1578
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.host.md
@@ -0,0 +1,24 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExternalUrlPolicy](./kibana-plugin-core-server.iexternalurlpolicy.md) > [host](./kibana-plugin-core-server.iexternalurlpolicy.host.md)
+
+## IExternalUrlPolicy.host property
+
+Optional host describing the external destination. May be combined with `protocol`. Required if `protocol` is not defined.
+
+Signature:
+
+```typescript
+host?: string;
+```
+
+## Example
+
+
+```ts
+// allows access to all of google.com, using any protocol.
+allow: true,
+host: 'google.com'
+
+```
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.md b/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.md
new file mode 100644
index 0000000000000..8e3658a10ed81
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExternalUrlPolicy](./kibana-plugin-core-server.iexternalurlpolicy.md)
+
+## IExternalUrlPolicy interface
+
+A policy describing whether access to an external destination is allowed.
+
+Signature:
+
+```typescript
+export interface IExternalUrlPolicy
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [allow](./kibana-plugin-core-server.iexternalurlpolicy.allow.md) | boolean
| Indicates of this policy allows or denies access to the described destination. |
+| [host](./kibana-plugin-core-server.iexternalurlpolicy.host.md) | string
| Optional host describing the external destination. May be combined with protocol
. Required if protocol
is not defined. |
+| [protocol](./kibana-plugin-core-server.iexternalurlpolicy.protocol.md) | string
| Optional protocol describing the external destination. May be combined with host
. Required if host
is not defined. |
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.protocol.md b/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.protocol.md
new file mode 100644
index 0000000000000..00c5d05eb0cc4
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.iexternalurlpolicy.protocol.md
@@ -0,0 +1,24 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [IExternalUrlPolicy](./kibana-plugin-core-server.iexternalurlpolicy.md) > [protocol](./kibana-plugin-core-server.iexternalurlpolicy.protocol.md)
+
+## IExternalUrlPolicy.protocol property
+
+Optional protocol describing the external destination. May be combined with `host`. Required if `host` is not defined.
+
+Signature:
+
+```typescript
+protocol?: string;
+```
+
+## Example
+
+
+```ts
+// allows access to all destinations over the `https` protocol.
+allow: true,
+protocol: 'https'
+
+```
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.md b/docs/development/core/server/kibana-plugin-core-server.md
index 1a4209ff87c5b..269db90c4db9b 100644
--- a/docs/development/core/server/kibana-plugin-core-server.md
+++ b/docs/development/core/server/kibana-plugin-core-server.md
@@ -94,6 +94,8 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [IContextContainer](./kibana-plugin-core-server.icontextcontainer.md) | An object that handles registration of context providers and configuring handlers with context. |
| [ICspConfig](./kibana-plugin-core-server.icspconfig.md) | CSP configuration for use in Kibana. |
| [ICustomClusterClient](./kibana-plugin-core-server.icustomclusterclient.md) | See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md) |
+| [IExternalUrlConfig](./kibana-plugin-core-server.iexternalurlconfig.md) | External Url configuration for use in Kibana. |
+| [IExternalUrlPolicy](./kibana-plugin-core-server.iexternalurlpolicy.md) | A policy describing whether access to an external destination is allowed. |
| [IKibanaResponse](./kibana-plugin-core-server.ikibanaresponse.md) | A response data object, expected to returned as a result of [RequestHandler](./kibana-plugin-core-server.requesthandler.md) execution |
| [IKibanaSocket](./kibana-plugin-core-server.ikibanasocket.md) | A tiny abstraction for TCP socket. |
| [ImageValidation](./kibana-plugin-core-server.imagevalidation.md) | |
diff --git a/package.json b/package.json
index 513d9b907c96c..1295217b4bcbe 100644
--- a/package.json
+++ b/package.json
@@ -47,7 +47,6 @@
"test:jest": "node scripts/jest",
"test:jest_integration": "node scripts/jest_integration",
"test:mocha": "node scripts/mocha",
- "test:mocha:coverage": "grunt test:mochaCoverage",
"test:ftr": "node scripts/functional_tests",
"test:ftr:server": "node scripts/functional_tests_server",
"test:ftr:runner": "node scripts/functional_test_runner",
@@ -85,6 +84,7 @@
"**/@types/hapi__hapi": "^18.2.6",
"**/@types/hapi__mimos": "4.1.0",
"**/@types/node": "14.14.7",
+ "**/chokidar": "^3.4.3",
"**/cross-fetch/node-fetch": "^2.6.1",
"**/deepmerge": "^4.2.2",
"**/fast-deep-equal": "^3.1.1",
@@ -175,7 +175,7 @@
"chalk": "^4.1.0",
"check-disk-space": "^2.1.0",
"cheerio": "0.22.0",
- "chokidar": "^3.4.2",
+ "chokidar": "^3.4.3",
"chroma-js": "^1.4.1",
"classnames": "2.2.6",
"color": "1.0.3",
@@ -354,7 +354,7 @@
"@cypress/webpack-preprocessor": "^5.4.11",
"@elastic/apm-rum": "^5.6.1",
"@elastic/apm-rum-react": "^1.2.5",
- "@elastic/charts": "24.3.0",
+ "@elastic/charts": "24.4.0",
"@elastic/eslint-config-kibana": "link:packages/elastic-eslint-config-kibana",
"@elastic/eslint-plugin-eui": "0.0.2",
"@elastic/github-checks-reporter": "0.0.20b3",
@@ -674,7 +674,6 @@
"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-watch": "^1.1.0",
"grunt-peg": "^2.0.1",
- "grunt-run": "0.8.1",
"gulp": "4.0.2",
"gulp-babel": "^8.0.0",
"gulp-sourcemaps": "2.6.5",
diff --git a/packages/kbn-pm/dist/index.js b/packages/kbn-pm/dist/index.js
index eb9b7a4a35dc7..922159ab555c8 100644
--- a/packages/kbn-pm/dist/index.js
+++ b/packages/kbn-pm/dist/index.js
@@ -59762,11 +59762,11 @@ const os = __webpack_require__(121);
const pMap = __webpack_require__(514);
const arrify = __webpack_require__(509);
const globby = __webpack_require__(515);
-const hasGlob = __webpack_require__(711);
-const cpFile = __webpack_require__(713);
-const junk = __webpack_require__(723);
-const pFilter = __webpack_require__(724);
-const CpyError = __webpack_require__(726);
+const hasGlob = __webpack_require__(715);
+const cpFile = __webpack_require__(717);
+const junk = __webpack_require__(727);
+const pFilter = __webpack_require__(728);
+const CpyError = __webpack_require__(730);
const defaultOptions = {
ignoreJunk: true
@@ -60014,8 +60014,8 @@ const fs = __webpack_require__(134);
const arrayUnion = __webpack_require__(516);
const glob = __webpack_require__(147);
const fastGlob = __webpack_require__(518);
-const dirGlob = __webpack_require__(704);
-const gitignore = __webpack_require__(707);
+const dirGlob = __webpack_require__(708);
+const gitignore = __webpack_require__(711);
const DEFAULT_FILTER = () => false;
@@ -60266,11 +60266,11 @@ module.exports.generateTasks = pkg.generateTasks;
Object.defineProperty(exports, "__esModule", { value: true });
var optionsManager = __webpack_require__(520);
var taskManager = __webpack_require__(521);
-var reader_async_1 = __webpack_require__(675);
-var reader_stream_1 = __webpack_require__(699);
-var reader_sync_1 = __webpack_require__(700);
-var arrayUtils = __webpack_require__(702);
-var streamUtils = __webpack_require__(703);
+var reader_async_1 = __webpack_require__(679);
+var reader_stream_1 = __webpack_require__(703);
+var reader_sync_1 = __webpack_require__(704);
+var arrayUtils = __webpack_require__(706);
+var streamUtils = __webpack_require__(707);
/**
* Synchronous API.
*/
@@ -60851,16 +60851,16 @@ module.exports.win32 = win32;
var util = __webpack_require__(112);
var braces = __webpack_require__(527);
var toRegex = __webpack_require__(528);
-var extend = __webpack_require__(641);
+var extend = __webpack_require__(645);
/**
* Local dependencies
*/
-var compilers = __webpack_require__(643);
-var parsers = __webpack_require__(670);
-var cache = __webpack_require__(671);
-var utils = __webpack_require__(672);
+var compilers = __webpack_require__(647);
+var parsers = __webpack_require__(674);
+var cache = __webpack_require__(675);
+var utils = __webpack_require__(676);
var MAX_LENGTH = 1024 * 64;
/**
@@ -61741,8 +61741,8 @@ var extend = __webpack_require__(551);
*/
var compilers = __webpack_require__(553);
-var parsers = __webpack_require__(566);
-var Braces = __webpack_require__(570);
+var parsers = __webpack_require__(568);
+var Braces = __webpack_require__(572);
var utils = __webpack_require__(554);
var MAX_LENGTH = 1024 * 64;
var cache = {};
@@ -64182,7 +64182,7 @@ utils.extend = __webpack_require__(551);
utils.flatten = __webpack_require__(558);
utils.isObject = __webpack_require__(536);
utils.fillRange = __webpack_require__(559);
-utils.repeat = __webpack_require__(565);
+utils.repeat = __webpack_require__(567);
utils.unique = __webpack_require__(550);
utils.define = function(obj, key, val) {
@@ -64825,9 +64825,9 @@ function flat(arr, res) {
var util = __webpack_require__(112);
var isNumber = __webpack_require__(560);
-var extend = __webpack_require__(551);
-var repeat = __webpack_require__(563);
-var toRegex = __webpack_require__(564);
+var extend = __webpack_require__(563);
+var repeat = __webpack_require__(565);
+var toRegex = __webpack_require__(566);
/**
* Return a range of numbers or letters.
@@ -65206,6 +65206,66 @@ function isSlowBuffer (obj) {
/* 563 */
/***/ (function(module, exports, __webpack_require__) {
+"use strict";
+
+
+var isObject = __webpack_require__(564);
+
+module.exports = function extend(o/*, objects*/) {
+ if (!isObject(o)) { o = {}; }
+
+ var len = arguments.length;
+ for (var i = 1; i < len; i++) {
+ var obj = arguments[i];
+
+ if (isObject(obj)) {
+ assign(o, obj);
+ }
+ }
+ return o;
+};
+
+function assign(a, b) {
+ for (var key in b) {
+ if (hasOwn(b, key)) {
+ a[key] = b[key];
+ }
+ }
+}
+
+/**
+ * Returns true if the given `key` is an own property of `obj`.
+ */
+
+function hasOwn(obj, key) {
+ return Object.prototype.hasOwnProperty.call(obj, key);
+}
+
+
+/***/ }),
+/* 564 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/*!
+ * is-extendable
@@ -82,7 +82,7 @@ describe('markdown vis controller', () => {