@decaf-ts/integrations 0.3.12 → 0.4.1-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -3
- package/dist/integrations.cjs +445 -7
- package/dist/integrations.js +479 -8
- package/jest.config.cjs +1 -1
- package/lib/cjs/feature-flags/constants.cjs +16 -0
- package/lib/cjs/feature-flags/decorators.cjs +65 -0
- package/lib/cjs/feature-flags/environment.cjs +26 -0
- package/lib/cjs/feature-flags/index.cjs +31 -0
- package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs +81 -0
- package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs +78 -0
- package/lib/cjs/feature-flags/readers/FeatureFlagReader.cjs +25 -0
- package/lib/cjs/feature-flags/readers/index.cjs +19 -0
- package/lib/cjs/feature-flags/services/FeatureFlag.service.cjs +259 -0
- package/lib/cjs/feature-flags/types.cjs +4 -0
- package/lib/cjs/feature-flags/utils.cjs +141 -0
- package/lib/cjs/graph/engine/execution/SwitchGraphNodeExecutor.cjs +9 -9
- package/lib/cjs/graph/shared/nodes/flow-control.cjs +4 -3
- package/lib/cjs/graph/shared/types.cjs +2 -2
- package/lib/cjs/index.cjs +6 -5
- package/lib/cjs/kibana/builders/KibanaIndexBuilder.cjs +329 -0
- package/lib/cjs/kibana/builders/KibanaIndexBuilderCollection.cjs +37 -0
- package/lib/cjs/kibana/builders/index.cjs +20 -0
- package/lib/cjs/kibana/helpers.cjs +20 -16
- package/lib/cjs/kibana/index.cjs +3 -2
- package/lib/cjs/kibana/types.cjs +11 -2
- package/lib/cjs/loader/ObjectLoader.cjs +154 -0
- package/lib/cjs/loader/families.cjs +78 -0
- package/lib/cjs/loader/index.cjs +28 -0
- package/lib/cjs/loader/types.cjs +4 -0
- package/lib/cjs/nest/decorators.cjs +17 -0
- package/lib/cjs/nest/index.cjs +3 -3
- package/lib/cjs/nest/keycloakAuthHandler.cjs +74 -35
- package/lib/cjs/nest/keycloakModule.cjs +7 -10
- package/lib/cjs/nest/types.cjs +2 -2
- package/lib/cjs/nest/utils.cjs +58 -50
- package/lib/cjs/plugins/contract.cjs +76 -0
- package/lib/cjs/plugins/index.cjs +35 -0
- package/lib/cjs/plugins/kibana/host.cjs +24 -0
- package/lib/cjs/plugins/kibana/index.cjs +38 -0
- package/lib/cjs/plugins/kibana/installer.cjs +180 -0
- package/lib/cjs/plugins/kibana/manifest.cjs +33 -0
- package/lib/cjs/plugins/kibana/templates.cjs +503 -0
- package/lib/cjs/plugins/kibana/types.cjs +33 -0
- package/lib/cjs/plugins/superset/host.cjs +26 -0
- package/lib/cjs/plugins/superset/index.cjs +40 -0
- package/lib/cjs/plugins/superset/installer.cjs +232 -0
- package/lib/cjs/plugins/superset/manifest.cjs +35 -0
- package/lib/cjs/plugins/superset/templates.cjs +844 -0
- package/lib/cjs/plugins/superset/types.cjs +39 -0
- package/lib/esm/feature-flags/constants.js +12 -0
- package/lib/esm/feature-flags/decorators.js +49 -0
- package/lib/esm/feature-flags/environment.js +18 -0
- package/lib/esm/feature-flags/index.js +14 -0
- package/lib/esm/feature-flags/models/FeatureFlag.model.js +72 -0
- package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js +69 -0
- package/lib/esm/feature-flags/readers/FeatureFlagReader.js +19 -0
- package/lib/esm/feature-flags/readers/index.js +2 -0
- package/lib/esm/feature-flags/services/FeatureFlag.service.js +250 -0
- package/lib/esm/feature-flags/types.js +2 -0
- package/lib/esm/feature-flags/utils.js +126 -0
- package/lib/esm/graph/engine/execution/SwitchGraphNodeExecutor.js +8 -8
- package/lib/esm/graph/shared/nodes/flow-control.js +3 -2
- package/lib/esm/graph/shared/types.js +1 -1
- package/lib/esm/index.js +5 -4
- package/lib/esm/kibana/builders/KibanaIndexBuilder.js +319 -0
- package/lib/esm/kibana/builders/KibanaIndexBuilderCollection.js +32 -0
- package/lib/esm/kibana/builders/index.js +3 -0
- package/lib/esm/kibana/helpers.js +19 -15
- package/lib/esm/kibana/index.js +2 -1
- package/lib/esm/kibana/types.js +13 -2
- package/lib/esm/loader/ObjectLoader.js +115 -0
- package/lib/esm/loader/families.js +66 -0
- package/lib/esm/loader/index.js +11 -0
- package/lib/esm/loader/types.js +2 -0
- package/lib/esm/nest/decorators.js +12 -0
- package/lib/esm/nest/index.js +2 -2
- package/lib/esm/nest/keycloakAuthHandler.js +67 -35
- package/lib/esm/nest/keycloakModule.js +7 -10
- package/lib/esm/nest/types.js +1 -1
- package/lib/esm/nest/utils.js +55 -46
- package/lib/esm/plugins/contract.js +68 -0
- package/lib/esm/plugins/index.js +18 -0
- package/lib/esm/plugins/kibana/host.js +19 -0
- package/lib/esm/plugins/kibana/index.js +14 -0
- package/lib/esm/plugins/kibana/installer.js +140 -0
- package/lib/esm/plugins/kibana/manifest.js +32 -0
- package/lib/esm/plugins/kibana/templates.js +499 -0
- package/lib/esm/plugins/kibana/types.js +10 -0
- package/lib/esm/plugins/superset/host.js +21 -0
- package/lib/esm/plugins/superset/index.js +16 -0
- package/lib/esm/plugins/superset/installer.js +192 -0
- package/lib/esm/plugins/superset/manifest.js +30 -0
- package/lib/esm/plugins/superset/templates.js +840 -0
- package/lib/esm/plugins/superset/types.js +11 -0
- package/lib/types/feature-flags/constants.d.cts +11 -0
- package/lib/types/feature-flags/constants.d.mts +11 -0
- package/lib/types/feature-flags/decorators.d.cts +11 -0
- package/lib/types/feature-flags/decorators.d.mts +11 -0
- package/lib/types/feature-flags/environment.d.cts +11 -0
- package/lib/types/feature-flags/environment.d.mts +11 -0
- package/lib/types/feature-flags/index.d.cts +13 -0
- package/lib/types/feature-flags/index.d.mts +13 -0
- package/lib/types/feature-flags/models/FeatureFlag.model.d.cts +16 -0
- package/lib/types/feature-flags/models/FeatureFlag.model.d.mts +16 -0
- package/lib/types/feature-flags/models/FeatureFlagAccess.model.d.cts +15 -0
- package/lib/types/feature-flags/models/FeatureFlagAccess.model.d.mts +15 -0
- package/lib/types/feature-flags/readers/FeatureFlagReader.d.cts +10 -0
- package/lib/types/feature-flags/readers/FeatureFlagReader.d.mts +10 -0
- package/lib/types/feature-flags/readers/index.d.cts +1 -0
- package/lib/types/feature-flags/readers/index.d.mts +1 -0
- package/lib/types/feature-flags/services/FeatureFlag.service.d.cts +43 -0
- package/lib/types/feature-flags/services/FeatureFlag.service.d.mts +43 -0
- package/lib/types/feature-flags/types.d.cts +39 -0
- package/lib/types/feature-flags/types.d.mts +39 -0
- package/lib/types/feature-flags/utils.d.cts +13 -0
- package/lib/types/feature-flags/utils.d.mts +13 -0
- package/lib/types/graph/engine/execution/SwitchGraphNodeExecutor.d.cts +2 -2
- package/lib/types/graph/engine/execution/SwitchGraphNodeExecutor.d.mts +2 -2
- package/lib/types/graph/shared/types.d.cts +3 -3
- package/lib/types/graph/shared/types.d.mts +3 -3
- package/lib/types/index.d.cts +3 -2
- package/lib/types/index.d.mts +3 -2
- package/lib/types/kibana/builders/KibanaIndexBuilder.d.cts +67 -0
- package/lib/types/kibana/builders/KibanaIndexBuilder.d.mts +67 -0
- package/lib/types/kibana/builders/KibanaIndexBuilderCollection.d.cts +17 -0
- package/lib/types/kibana/builders/KibanaIndexBuilderCollection.d.mts +17 -0
- package/lib/types/kibana/builders/index.d.cts +2 -0
- package/lib/types/kibana/builders/index.d.mts +2 -0
- package/lib/types/kibana/index.d.cts +1 -0
- package/lib/types/kibana/index.d.mts +1 -0
- package/lib/types/kibana/types.d.cts +11 -0
- package/lib/types/kibana/types.d.mts +11 -0
- package/lib/types/loader/ObjectLoader.d.cts +27 -0
- package/lib/types/loader/ObjectLoader.d.mts +27 -0
- package/lib/types/loader/families.d.cts +34 -0
- package/lib/types/loader/families.d.mts +34 -0
- package/lib/types/loader/index.d.cts +10 -0
- package/lib/types/loader/index.d.mts +10 -0
- package/lib/types/loader/types.d.cts +24 -0
- package/lib/types/loader/types.d.mts +24 -0
- package/lib/types/nest/decorators.d.cts +8 -0
- package/lib/types/nest/decorators.d.mts +8 -0
- package/lib/types/nest/index.d.cts +1 -1
- package/lib/types/nest/index.d.mts +1 -1
- package/lib/types/nest/keycloakAuthHandler.d.cts +19 -42
- package/lib/types/nest/keycloakAuthHandler.d.mts +19 -42
- package/lib/types/nest/keycloakModule.d.cts +3 -5
- package/lib/types/nest/keycloakModule.d.mts +3 -5
- package/lib/types/nest/types.d.cts +2 -0
- package/lib/types/nest/types.d.mts +2 -0
- package/lib/types/nest/utils.d.cts +3 -4
- package/lib/types/nest/utils.d.mts +3 -4
- package/lib/types/plugins/contract.d.cts +180 -0
- package/lib/types/plugins/contract.d.mts +180 -0
- package/lib/types/plugins/index.d.cts +17 -0
- package/lib/types/plugins/index.d.mts +17 -0
- package/lib/types/plugins/kibana/host.d.cts +18 -0
- package/lib/types/plugins/kibana/host.d.mts +18 -0
- package/lib/types/plugins/kibana/index.d.cts +13 -0
- package/lib/types/plugins/kibana/index.d.mts +13 -0
- package/lib/types/plugins/kibana/installer.d.cts +45 -0
- package/lib/types/plugins/kibana/installer.d.mts +45 -0
- package/lib/types/plugins/kibana/manifest.d.cts +31 -0
- package/lib/types/plugins/kibana/manifest.d.mts +31 -0
- package/lib/types/plugins/kibana/templates.d.cts +12 -0
- package/lib/types/plugins/kibana/templates.d.mts +12 -0
- package/lib/types/plugins/kibana/types.d.cts +9 -0
- package/lib/types/plugins/kibana/types.d.mts +9 -0
- package/lib/types/plugins/superset/host.d.cts +20 -0
- package/lib/types/plugins/superset/host.d.mts +20 -0
- package/lib/types/plugins/superset/index.d.cts +15 -0
- package/lib/types/plugins/superset/index.d.mts +15 -0
- package/lib/types/plugins/superset/installer.d.cts +70 -0
- package/lib/types/plugins/superset/installer.d.mts +70 -0
- package/lib/types/plugins/superset/manifest.d.cts +28 -0
- package/lib/types/plugins/superset/manifest.d.mts +28 -0
- package/lib/types/plugins/superset/templates.d.cts +12 -0
- package/lib/types/plugins/superset/templates.d.mts +12 -0
- package/lib/types/plugins/superset/types.d.cts +10 -0
- package/lib/types/plugins/superset/types.d.mts +10 -0
- package/package.json +62 -3
- package/plugins/kibana/.gitignore +16 -0
- package/plugins/kibana/Dockerfile +19 -0
- package/plugins/kibana/docker-compose.yml +50 -0
- package/plugins/kibana/host/index.html +101 -0
- package/plugins/kibana/setup-dashboards.sh +84 -0
- package/plugins/superset/.gitignore +17 -0
- package/plugins/superset/Dockerfile +79 -0
- package/plugins/superset/docker-compose.yml +62 -0
- package/plugins/superset/host/index.html +168 -0
- package/plugins/superset/setup-dashboards.sh +106 -0
- package/plugins/superset/superset_config.py +49 -0
- package/lib/cjs/nest/authService.cjs +0 -91
- package/lib/esm/nest/authService.js +0 -86
- package/lib/types/nest/authService.d.cts +0 -63
- package/lib/types/nest/authService.d.mts +0 -63
package/lib/esm/nest/utils.js
CHANGED
|
@@ -1,64 +1,50 @@
|
|
|
1
1
|
import { AuthorizationError } from "@decaf-ts/core";
|
|
2
|
+
import { getTokenPayload } from "@decaf-ts/crypto/integration/services/jwt";
|
|
2
3
|
export const DECAF_ADAPTER_OPTIONS = Symbol("DecafAdapterForOptions");
|
|
3
|
-
export function getTokenPayload(jwt) {
|
|
4
|
-
try {
|
|
5
|
-
return JSON.parse(Buffer.from(jwt.split(".")[1] ?? "", "base64url").toString("utf8"));
|
|
6
|
-
}
|
|
7
|
-
catch {
|
|
8
|
-
return null;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
4
|
export function extractKeycloakRoles(payload) {
|
|
12
5
|
const roles = new Set();
|
|
13
6
|
if (Array.isArray(payload?.realm_access?.roles)) {
|
|
14
|
-
for (const role of payload.realm_access.roles)
|
|
15
|
-
|
|
7
|
+
for (const role of payload.realm_access.roles) {
|
|
8
|
+
if (!role?.startsWith("namespace:"))
|
|
9
|
+
roles.add(role);
|
|
10
|
+
}
|
|
16
11
|
}
|
|
17
12
|
if (payload?.resource_access && typeof payload.resource_access === "object") {
|
|
18
13
|
for (const client of Object.keys(payload.resource_access)) {
|
|
19
14
|
for (const role of payload.resource_access[client]?.roles ?? []) {
|
|
20
|
-
|
|
15
|
+
if (!role?.startsWith("namespace:"))
|
|
16
|
+
roles.add(role);
|
|
21
17
|
}
|
|
22
18
|
}
|
|
23
19
|
}
|
|
24
20
|
return [...roles];
|
|
25
21
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
*/
|
|
34
|
-
export function getClientRoles(payload, excluded = ["account"]) {
|
|
35
|
-
const resourceAccess = payload?.resource_access;
|
|
36
|
-
if (!resourceAccess || typeof resourceAccess !== "object")
|
|
37
|
-
return [];
|
|
38
|
-
const roles = new Set();
|
|
39
|
-
for (const [clientId, data] of Object.entries(resourceAccess)) {
|
|
40
|
-
if (excluded.includes(clientId))
|
|
41
|
-
continue;
|
|
42
|
-
if (Array.isArray(data?.roles)) {
|
|
43
|
-
for (const role of data.roles)
|
|
44
|
-
roles.add(role);
|
|
22
|
+
export function extractKeycloakNamespaces(payload) {
|
|
23
|
+
const namespaces = new Set();
|
|
24
|
+
const rawNamespaces = payload?.namespaces ?? payload?.namespace;
|
|
25
|
+
if (Array.isArray(rawNamespaces)) {
|
|
26
|
+
for (const namespace of rawNamespaces) {
|
|
27
|
+
if (namespace)
|
|
28
|
+
namespaces.add(namespace);
|
|
45
29
|
}
|
|
46
30
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
31
|
+
else if (typeof rawNamespaces === "string" && rawNamespaces) {
|
|
32
|
+
namespaces.add(rawNamespaces);
|
|
33
|
+
}
|
|
34
|
+
const rawRoles = [
|
|
35
|
+
...(Array.isArray(payload?.realm_access?.roles)
|
|
36
|
+
? payload.realm_access.roles
|
|
37
|
+
: []),
|
|
38
|
+
...(payload?.resource_access && typeof payload.resource_access === "object"
|
|
39
|
+
? Object.values(payload.resource_access).flatMap((client) => client?.roles ?? [])
|
|
40
|
+
: []),
|
|
41
|
+
];
|
|
42
|
+
for (const role of rawRoles) {
|
|
43
|
+
if (role?.startsWith("namespace:")) {
|
|
44
|
+
namespaces.add(role.slice("namespace:".length));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return [...namespaces];
|
|
62
48
|
}
|
|
63
49
|
export function getRealmFromIssuer(jwt) {
|
|
64
50
|
const payload = getTokenPayload(jwt);
|
|
@@ -80,4 +66,27 @@ export function getRealmFromIssuer(jwt) {
|
|
|
80
66
|
}
|
|
81
67
|
return parts[realmsIndex + 1];
|
|
82
68
|
}
|
|
83
|
-
|
|
69
|
+
/**
|
|
70
|
+
* Extracts roles from the `resource_access` claim only, optionally excluding
|
|
71
|
+
* specified client IDs (e.g. `"account"`). Unlike {@link extractKeycloakRoles}
|
|
72
|
+
* this does NOT include `realm_access.roles`.
|
|
73
|
+
*
|
|
74
|
+
* @param payload The decoded JWT payload.
|
|
75
|
+
* @param excluded Client IDs to skip. @default ["account"]
|
|
76
|
+
*/
|
|
77
|
+
export function getClientRoles(payload, excluded = ["account"]) {
|
|
78
|
+
const resourceAccess = payload?.resource_access;
|
|
79
|
+
if (!resourceAccess || typeof resourceAccess !== "object")
|
|
80
|
+
return [];
|
|
81
|
+
const roles = new Set();
|
|
82
|
+
for (const [clientId, data] of Object.entries(resourceAccess)) {
|
|
83
|
+
if (excluded.includes(clientId))
|
|
84
|
+
continue;
|
|
85
|
+
if (Array.isArray(data?.roles)) {
|
|
86
|
+
for (const role of data.roles)
|
|
87
|
+
roles.add(role);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return [...roles];
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmVzdC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFNUUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFdEUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE9BQTBDO0lBQzdFLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxLQUFLLE1BQU0sSUFBSSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDO2dCQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLE9BQU8sRUFBRSxlQUFlLElBQUksT0FBTyxPQUFPLENBQUMsZUFBZSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVFLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUMxRCxLQUFLLE1BQU0sSUFBSSxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUNoRSxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxZQUFZLENBQUM7b0JBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RCxD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QyxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsT0FBMEMsRUFDMUMsV0FBcUIsQ0FBQyxTQUFTLENBQUM7SUFFaEMsTUFBTSxjQUFjLEdBQUcsT0FBTyxFQUFFLGVBQWUsQ0FBQztJQUNoRCxJQUFJLENBQUMsY0FBYyxJQUFJLE9BQU8sY0FBYyxLQUFLLFFBQVE7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyRSxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ2hDLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDOUQsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUFFLFNBQVM7UUFDMUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUs7Z0JBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL25lc3QvdXRpbHNcbiAqIEBzdW1tYXJ5IE5lc3QgaW50ZWdyYXRpb24gdXRpbGl0aWVzLlxuICogQGRlc2NyaXB0aW9uIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSB0aGUgTmVzdCBhdXRoIGFuZCByZXF1ZXN0LWNvbnRleHQgYWRhcHRlcnMuXG4gKi9cbmltcG9ydCB0eXBlIHsgS2V5Y2xvYWtBY2Nlc3NUb2tlblBheWxvYWQgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgQXV0aG9yaXphdGlvbkVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBnZXRUb2tlblBheWxvYWQgfSBmcm9tIFwiQGRlY2FmLXRzL2NyeXB0by9pbnRlZ3JhdGlvbi9zZXJ2aWNlcy9qd3RcIjtcblxuZXhwb3J0IGNvbnN0IERFQ0FGX0FEQVBURVJfT1BUSU9OUyA9IFN5bWJvbChcIkRlY2FmQWRhcHRlckZvck9wdGlvbnNcIik7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0S2V5Y2xvYWtSb2xlcyhwYXlsb2FkOiBLZXljbG9ha0FjY2Vzc1Rva2VuUGF5bG9hZCB8IG51bGwpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJvbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQ/LnJlYWxtX2FjY2Vzcz8ucm9sZXMpKSB7XG4gICAgZm9yIChjb25zdCByb2xlIG9mIHBheWxvYWQucmVhbG1fYWNjZXNzLnJvbGVzKSB7XG4gICAgICBpZiAoIXJvbGU/LnN0YXJ0c1dpdGgoXCJuYW1lc3BhY2U6XCIpKSByb2xlcy5hZGQocm9sZSk7XG4gICAgfVxuICB9XG4gIGlmIChwYXlsb2FkPy5yZXNvdXJjZV9hY2Nlc3MgJiYgdHlwZW9mIHBheWxvYWQucmVzb3VyY2VfYWNjZXNzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZm9yIChjb25zdCBjbGllbnQgb2YgT2JqZWN0LmtleXMocGF5bG9hZC5yZXNvdXJjZV9hY2Nlc3MpKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2YgcGF5bG9hZC5yZXNvdXJjZV9hY2Nlc3NbY2xpZW50XT8ucm9sZXMgPz8gW10pIHtcbiAgICAgICAgaWYgKCFyb2xlPy5zdGFydHNXaXRoKFwibmFtZXNwYWNlOlwiKSkgcm9sZXMuYWRkKHJvbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gWy4uLnJvbGVzXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RLZXljbG9ha05hbWVzcGFjZXMoXG4gIHBheWxvYWQ6IEtleWNsb2FrQWNjZXNzVG9rZW5QYXlsb2FkIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBuYW1lc3BhY2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHJhd05hbWVzcGFjZXMgPSBwYXlsb2FkPy5uYW1lc3BhY2VzID8/IHBheWxvYWQ/Lm5hbWVzcGFjZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocmF3TmFtZXNwYWNlcykpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWVzcGFjZSBvZiByYXdOYW1lc3BhY2VzKSB7XG4gICAgICBpZiAobmFtZXNwYWNlKSBuYW1lc3BhY2VzLmFkZChuYW1lc3BhY2UpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgcmF3TmFtZXNwYWNlcyA9PT0gXCJzdHJpbmdcIiAmJiByYXdOYW1lc3BhY2VzKSB7XG4gICAgbmFtZXNwYWNlcy5hZGQocmF3TmFtZXNwYWNlcyk7XG4gIH1cblxuICBjb25zdCByYXdSb2xlcyA9IFtcbiAgICAuLi4oQXJyYXkuaXNBcnJheShwYXlsb2FkPy5yZWFsbV9hY2Nlc3M/LnJvbGVzKVxuICAgICAgPyBwYXlsb2FkLnJlYWxtX2FjY2Vzcy5yb2xlc1xuICAgICAgOiBbXSksXG4gICAgLi4uKHBheWxvYWQ/LnJlc291cmNlX2FjY2VzcyAmJiB0eXBlb2YgcGF5bG9hZC5yZXNvdXJjZV9hY2Nlc3MgPT09IFwib2JqZWN0XCJcbiAgICAgID8gT2JqZWN0LnZhbHVlcyhwYXlsb2FkLnJlc291cmNlX2FjY2VzcykuZmxhdE1hcChcbiAgICAgICAgICAoY2xpZW50KSA9PiBjbGllbnQ/LnJvbGVzID8/IFtdXG4gICAgICAgIClcbiAgICAgIDogW10pLFxuICBdO1xuICBmb3IgKGNvbnN0IHJvbGUgb2YgcmF3Um9sZXMpIHtcbiAgICBpZiAocm9sZT8uc3RhcnRzV2l0aChcIm5hbWVzcGFjZTpcIikpIHtcbiAgICAgIG5hbWVzcGFjZXMuYWRkKHJvbGUuc2xpY2UoXCJuYW1lc3BhY2U6XCIubGVuZ3RoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFsuLi5uYW1lc3BhY2VzXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlYWxtRnJvbUlzc3Vlcihqd3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBheWxvYWQgPSBnZXRUb2tlblBheWxvYWQ8eyBpc3M/OiBzdHJpbmcgfT4oand0KTtcbiAgY29uc3QgaXNzID0gcGF5bG9hZD8uaXNzO1xuICBpZiAoIWlzcykge1xuICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoXCJJc3N1ZXIgKGlzcykgaXMgbWlzc2luZ1wiKTtcbiAgfVxuICBsZXQgdXJsOiBVUkw7XG4gIHRyeSB7XG4gICAgdXJsID0gbmV3IFVSTChpc3MpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgQXV0aG9yaXphdGlvbkVycm9yKGBJbnZhbGlkIGlzc3VlciBVUkw6ICR7aXNzfWApO1xuICB9XG4gIGNvbnN0IHBhcnRzID0gdXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHJlYWxtc0luZGV4ID0gcGFydHMuaW5kZXhPZihcInJlYWxtc1wiKTtcbiAgaWYgKHJlYWxtc0luZGV4ID09PSAtMSB8fCAhcGFydHNbcmVhbG1zSW5kZXggKyAxXSkge1xuICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoYENhbm5vdCBleHRyYWN0IHJlYWxtIGZyb20gaXNzdWVyOiAke2lzc31gKTtcbiAgfVxuICByZXR1cm4gcGFydHNbcmVhbG1zSW5kZXggKyAxXTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyByb2xlcyBmcm9tIHRoZSBgcmVzb3VyY2VfYWNjZXNzYCBjbGFpbSBvbmx5LCBvcHRpb25hbGx5IGV4Y2x1ZGluZ1xuICogc3BlY2lmaWVkIGNsaWVudCBJRHMgKGUuZy4gYFwiYWNjb3VudFwiYCkuICBVbmxpa2Uge0BsaW5rIGV4dHJhY3RLZXljbG9ha1JvbGVzfVxuICogdGhpcyBkb2VzIE5PVCBpbmNsdWRlIGByZWFsbV9hY2Nlc3Mucm9sZXNgLlxuICpcbiAqIEBwYXJhbSBwYXlsb2FkICAgVGhlIGRlY29kZWQgSldUIHBheWxvYWQuXG4gKiBAcGFyYW0gZXhjbHVkZWQgIENsaWVudCBJRHMgdG8gc2tpcC4gIEBkZWZhdWx0IFtcImFjY291bnRcIl1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudFJvbGVzKFxuICBwYXlsb2FkOiBLZXljbG9ha0FjY2Vzc1Rva2VuUGF5bG9hZCB8IG51bGwsXG4gIGV4Y2x1ZGVkOiBzdHJpbmdbXSA9IFtcImFjY291bnRcIl1cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzb3VyY2VBY2Nlc3MgPSBwYXlsb2FkPy5yZXNvdXJjZV9hY2Nlc3M7XG4gIGlmICghcmVzb3VyY2VBY2Nlc3MgfHwgdHlwZW9mIHJlc291cmNlQWNjZXNzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gW107XG4gIGNvbnN0IHJvbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgW2NsaWVudElkLCBkYXRhXSBvZiBPYmplY3QuZW50cmllcyhyZXNvdXJjZUFjY2VzcykpIHtcbiAgICBpZiAoZXhjbHVkZWQuaW5jbHVkZXMoY2xpZW50SWQpKSBjb250aW51ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhPy5yb2xlcykpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiBkYXRhLnJvbGVzKSByb2xlcy5hZGQocm9sZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbLi4ucm9sZXNdO1xufVxuIl19
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { UnsupportedError } from "@decaf-ts/core";
|
|
2
|
+
/**
|
|
3
|
+
* Message type constants shared between the embedded plugin and the host.
|
|
4
|
+
* The plugin is org-agnostic: there is never space switching; the current
|
|
5
|
+
* Kibana space comes from the request/session/proxy context.
|
|
6
|
+
*/
|
|
7
|
+
export const EMBED_MESSAGE_TYPE = {
|
|
8
|
+
SWITCH: "ORG_DASHBOARD_EMBED_SWITCH_DASHBOARD",
|
|
9
|
+
READY: "ORG_DASHBOARD_EMBED_READY",
|
|
10
|
+
RENDERED: "ORG_DASHBOARD_EMBED_RENDERED",
|
|
11
|
+
ERROR: "ORG_DASHBOARD_EMBED_ERROR",
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Type guard for the switch-dashboard message received by the embedded plugin.
|
|
15
|
+
*/
|
|
16
|
+
export function isSwitchDashboardMessage(data) {
|
|
17
|
+
if (!data || typeof data !== "object") {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const msg = data;
|
|
21
|
+
return (msg.type === EMBED_MESSAGE_TYPE.SWITCH &&
|
|
22
|
+
typeof msg.dashboardId === "string" &&
|
|
23
|
+
msg.dashboardId.length > 0);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Type guard for parent-bound messages emitted by the embedded plugin.
|
|
27
|
+
*/
|
|
28
|
+
export function isEmbedParentMessage(data) {
|
|
29
|
+
if (!data || typeof data !== "object") {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
const msg = data;
|
|
33
|
+
return (msg.type === EMBED_MESSAGE_TYPE.READY ||
|
|
34
|
+
msg.type === EMBED_MESSAGE_TYPE.RENDERED ||
|
|
35
|
+
msg.type === EMBED_MESSAGE_TYPE.ERROR);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Build a switch-dashboard message from a payload (shared by both plugins).
|
|
39
|
+
*/
|
|
40
|
+
export function createSwitchDashboardMessage(payload) {
|
|
41
|
+
return {
|
|
42
|
+
type: EMBED_MESSAGE_TYPE.SWITCH,
|
|
43
|
+
dashboardId: payload.dashboardId,
|
|
44
|
+
timeRange: payload.timeRange,
|
|
45
|
+
query: payload.query,
|
|
46
|
+
filters: payload.filters,
|
|
47
|
+
guestToken: payload.guestToken,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Send a switch-dashboard message to a DOM-free target.
|
|
52
|
+
*
|
|
53
|
+
* If the target supports `postMessage` (Kibana), the message is posted
|
|
54
|
+
* directly. If the target supports `switchDashboard` (Superset SDK handle),
|
|
55
|
+
* the SDK method is invoked instead. Both paths use the same payload shape.
|
|
56
|
+
*/
|
|
57
|
+
export function sendSwitchDashboardMessage(target, payload, targetOrigin) {
|
|
58
|
+
if (typeof target.switchDashboard === "function") {
|
|
59
|
+
void target.switchDashboard(payload.dashboardId, payload.guestToken);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (typeof target.postMessage === "function") {
|
|
63
|
+
target.postMessage(createSwitchDashboardMessage(payload), targetOrigin);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
throw new UnsupportedError("EmbedMessageTarget must provide either postMessage or switchDashboard");
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy9jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFhQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsTUFBTSxFQUFFLHNDQUFzQztJQUM5QyxLQUFLLEVBQUUsMkJBQTJCO0lBQ2xDLFFBQVEsRUFBRSw4QkFBOEI7SUFDeEMsS0FBSyxFQUFFLDJCQUEyQjtDQUMxQixDQUFDO0FBd0tYOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxJQUFhO0lBRWIsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxJQUF1QyxDQUFDO0lBQ3BELE9BQU8sQ0FDTCxHQUFHLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLE1BQU07UUFDdEMsT0FBTyxHQUFHLENBQUMsV0FBVyxLQUFLLFFBQVE7UUFDbkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUMzQixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxJQUFhO0lBRWIsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxJQUF5QixDQUFDO0lBQ3RDLE9BQU8sQ0FDTCxHQUFHLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLEtBQUs7UUFDckMsR0FBRyxDQUFDLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxRQUFRO1FBQ3hDLEdBQUcsQ0FBQyxJQUFJLEtBQUssa0JBQWtCLENBQUMsS0FBSyxDQUN0QyxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUMxQyxPQUErQjtJQUUvQixPQUFPO1FBQ0wsSUFBSSxFQUFFLGtCQUFrQixDQUFDLE1BQU07UUFDL0IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztRQUM1QixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQ3hCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtLQUMvQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsTUFBMEIsRUFDMUIsT0FBK0IsRUFDL0IsWUFBb0I7SUFFcEIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxlQUFlLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDakQsS0FBSyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JFLE9BQU87SUFDVCxDQUFDO0lBQ0QsSUFBSSxPQUFPLE1BQU0sQ0FBQyxXQUFXLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDN0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN4RSxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sSUFBSSxnQkFBZ0IsQ0FDeEIsdUVBQXVFLENBQ3hFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9wbHVnaW5zL2NvbnRyYWN0XG4gKiBAc3VtbWFyeSBTaGFyZWQsIERPTS1mcmVlIGNvbnRyYWN0IGZvciBCSSBkYXNoYm9hcmQgZW1iZWQgcGx1Z2lucy5cbiAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIHRoZSBtZXNzYWdlIHByb3RvY29sLCBlbWJlZCBVUkwgb3B0aW9ucywgaW5zdGFsbFxuICogb3B0aW9ucy9yZXN1bHQsIHBsdWdpbiBkZXNjcmlwdG9yLCBhbmQgdGhlIGBEYXNoYm9hcmRFbWJlZFBsdWdpbmAgaW50ZXJmYWNlXG4gKiB0aGF0IGJvdGggdGhlIEtpYmFuYSBhbmQgU3VwZXJzZXQgcGx1Z2lucyBpbXBsZW1lbnQgd2l0aCB0aGUgZXhhY3Qgc2FtZSBBUEkuXG4gKlxuICogVGhpcyBjb250cmFjdCBpcyBpbnRlbnRpb25hbGx5IERPTS1mcmVlIChubyBgd2luZG93YCAvIGBIVE1MSUZyYW1lRWxlbWVudGApXG4gKiBzbyBpdCBidWlsZHMgdW5kZXIgdGhlIE5vZGUgYGxpYjogW1wiZXMyMDIyXCJdYCB0c2NvbmZpZyBhbmQgaXMgY29uc3VtYWJsZSBmcm9tXG4gKiBib3RoIE5vZGUgYW5kIHRoZSBicm93c2VyLiBUaGUgQW5ndWxhciBob3N0IHN1cHBsaWVzIGEgRE9NLWZyZWVcbiAqIGBFbWJlZE1lc3NhZ2VUYXJnZXRgICh0eXBpY2FsbHkgYGlmcmFtZS5jb250ZW50V2luZG93YCkuXG4gKi9cbmltcG9ydCB0eXBlIHsgTWF5YmVDb250ZXh0dWFsQXJnIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBVbnN1cHBvcnRlZEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5cbi8qKlxuICogTWVzc2FnZSB0eXBlIGNvbnN0YW50cyBzaGFyZWQgYmV0d2VlbiB0aGUgZW1iZWRkZWQgcGx1Z2luIGFuZCB0aGUgaG9zdC5cbiAqIFRoZSBwbHVnaW4gaXMgb3JnLWFnbm9zdGljOiB0aGVyZSBpcyBuZXZlciBzcGFjZSBzd2l0Y2hpbmc7IHRoZSBjdXJyZW50XG4gKiBLaWJhbmEgc3BhY2UgY29tZXMgZnJvbSB0aGUgcmVxdWVzdC9zZXNzaW9uL3Byb3h5IGNvbnRleHQuXG4gKi9cbmV4cG9ydCBjb25zdCBFTUJFRF9NRVNTQUdFX1RZUEUgPSB7XG4gIFNXSVRDSDogXCJPUkdfREFTSEJPQVJEX0VNQkVEX1NXSVRDSF9EQVNIQk9BUkRcIixcbiAgUkVBRFk6IFwiT1JHX0RBU0hCT0FSRF9FTUJFRF9SRUFEWVwiLFxuICBSRU5ERVJFRDogXCJPUkdfREFTSEJPQVJEX0VNQkVEX1JFTkRFUkVEXCIsXG4gIEVSUk9SOiBcIk9SR19EQVNIQk9BUkRfRU1CRURfRVJST1JcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEVtYmVkTWVzc2FnZVR5cGUgPVxuICAodHlwZW9mIEVNQkVEX01FU1NBR0VfVFlQRSlba2V5b2YgdHlwZW9mIEVNQkVEX01FU1NBR0VfVFlQRV07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkUXVlcnkge1xuICBsYW5ndWFnZTogXCJrdWVyeVwiIHwgXCJsdWNlbmVcIjtcbiAgcXVlcnk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRUaW1lUmFuZ2Uge1xuICBmcm9tOiBzdHJpbmc7XG4gIHRvOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGF5bG9hZCB1c2VkIHRvIHN3aXRjaCBkYXNoYm9hcmRzIGF0IHJ1bnRpbWUuXG4gKlxuICogYGd1ZXN0VG9rZW5gIGlzIHVzZWQgYnkgU3VwZXJzZXQgKHdoaWNoIHJlcXVpcmVzIGEgZGFzaGJvYXJkLXNjb3BlZCBndWVzdFxuICogdG9rZW4gZm9yIGVhY2ggc3dpdGNoKSBhbmQgaWdub3JlZCBieSBLaWJhbmEgKHdoaWNoIHJlbGllcyBvbiB0aGUgc2Vzc2lvblxuICogc3BhY2UgY29udGV4dCkuIFRoaXMga2VlcHMgdGhlIHBheWxvYWQgc2hhcGUgaWRlbnRpY2FsIGFjcm9zcyBib3RoIHBsdWdpbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3dpdGNoRGFzaGJvYXJkUGF5bG9hZCB7XG4gIGRhc2hib2FyZElkOiBzdHJpbmc7XG4gIHRpbWVSYW5nZT86IERhc2hib2FyZFRpbWVSYW5nZTtcbiAgcXVlcnk/OiBEYXNoYm9hcmRRdWVyeTtcbiAgZmlsdGVycz86IHVua25vd25bXTtcbiAgLyoqIFN1cGVyc2V0LW9ubHk6IGRhc2hib2FyZC1zY29wZWQgZ3Vlc3QgdG9rZW4uIEtpYmFuYSBpZ25vcmVzIHRoaXMuICovXG4gIGd1ZXN0VG9rZW4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3dpdGNoRGFzaGJvYXJkTWVzc2FnZSBleHRlbmRzIFN3aXRjaERhc2hib2FyZFBheWxvYWQge1xuICB0eXBlOiB0eXBlb2YgRU1CRURfTUVTU0FHRV9UWVBFLlNXSVRDSDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWJlZFJlYWR5TWVzc2FnZSB7XG4gIHR5cGU6IHR5cGVvZiBFTUJFRF9NRVNTQUdFX1RZUEUuUkVBRFk7XG4gIGRhc2hib2FyZElkOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtYmVkUmVuZGVyZWRNZXNzYWdlIHtcbiAgdHlwZTogdHlwZW9mIEVNQkVEX01FU1NBR0VfVFlQRS5SRU5ERVJFRDtcbiAgZGFzaGJvYXJkSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWJlZEVycm9yTWVzc2FnZSB7XG4gIHR5cGU6IHR5cGVvZiBFTUJFRF9NRVNTQUdFX1RZUEUuRVJST1I7XG4gIGRhc2hib2FyZElkOiBzdHJpbmcgfCBudWxsO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVW5pb24gb2YgbWVzc2FnZXMgdGhlIGVtYmVkZGVkIHBsdWdpbiBwb3N0cyBiYWNrIHRvIHRoZSBwYXJlbnQgaG9zdC5cbiAqL1xuZXhwb3J0IHR5cGUgRW1iZWRQYXJlbnRNZXNzYWdlID1cbiAgfCBFbWJlZFJlYWR5TWVzc2FnZVxuICB8IEVtYmVkUmVuZGVyZWRNZXNzYWdlXG4gIHwgRW1iZWRFcnJvck1lc3NhZ2U7XG5cbi8qKlxuICogRE9NLWZyZWUgbWVzc2FnZSB0YXJnZXQuIEJvdGggS2liYW5hIGFuZCBTdXBlcnNldCB1c2UgdGhlIHNhbWUgaW50ZXJmYWNlO1xuICogZWFjaCB0b29sIHVzZXMgYSBkaWZmZXJlbnQgbWVjaGFuaXNtOlxuICpcbiAqIC0gKipLaWJhbmE6KiogdGhlIEFuZ3VsYXIgaG9zdCBwYXNzZXMgYGlmcmFtZS5jb250ZW50V2luZG93YCwgd2hpY2ggcHJvdmlkZXNcbiAqICAgYHBvc3RNZXNzYWdlYC4gYHN3aXRjaERhc2hib2FyZGAgaXMgdW51c2VkLlxuICogLSAqKlN1cGVyc2V0OioqIHRoZSBBbmd1bGFyIGhvc3QgcGFzc2VzIHRoZSBlbWJlZGRlZCBTREsnc1xuICogICBgRW1iZWRkZWREYXNoYm9hcmRgIGhhbmRsZSAod3JhcHBlZCksIHdoaWNoIHByb3ZpZGVzIGBzd2l0Y2hEYXNoYm9hcmRgLlxuICogICBgcG9zdE1lc3NhZ2VgIGlzIHVudXNlZC5cbiAqXG4gKiBBdCBsZWFzdCBvbmUgb2YgdGhlIHR3byBtZXRob2RzIG11c3QgYmUgcHJlc2VudDsgZWFjaCBwbHVnaW4gY2hlY2tzIGZvciB0aGVcbiAqIG1lY2hhbmlzbSBpdCBuZWVkcyBhbmQgdGhyb3dzIGFuIGBVbnN1cHBvcnRlZEVycm9yYCBpZiBhYnNlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1iZWRNZXNzYWdlVGFyZ2V0IHtcbiAgLyoqIEtpYmFuYSBtZWNoYW5pc206IHBvc3QgYSBtZXNzYWdlIHRvIHRoZSBpZnJhbWUgd2luZG93LiAqL1xuICBwb3N0TWVzc2FnZT8obWVzc2FnZTogdW5rbm93biwgdGFyZ2V0T3JpZ2luOiBzdHJpbmcpOiB2b2lkO1xuICAvKiogU3VwZXJzZXQgbWVjaGFuaXNtOiBjYWxsIHRoZSBTREsncyBzd2l0Y2hEYXNoYm9hcmQgbWV0aG9kLiAqL1xuICBzd2l0Y2hEYXNoYm9hcmQ/KFxuICAgIGRhc2hib2FyZElkOiBzdHJpbmcsXG4gICAgZ3Vlc3RUb2tlbj86IHN0cmluZ1xuICApOiBQcm9taXNlPHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtYmVkVmlld09wdGlvbnMge1xuICBzaG93VGltZUZpbHRlcj86IGJvb2xlYW47XG4gIHNob3dRdWVyeUlucHV0PzogYm9vbGVhbjtcbiAgc2hvd0ZpbHRlckJhcj86IGJvb2xlYW47XG4gIGhpZGVQYW5lbFRpdGxlcz86IGJvb2xlYW47XG4gIHRpbWVSYW5nZT86IERhc2hib2FyZFRpbWVSYW5nZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWJlZFVybE9wdGlvbnMge1xuICAvKiogSG9zdCB3aXRob3V0IHByb3RvY29sLCBlLmcuIFwicHRwLmhvc3RcIi4gKi9cbiAgaG9zdDogc3RyaW5nO1xuICAvKiogQmFzZSBwYXRoLCBlLmcuIFwia2liYW5hXCIuIERlZmF1bHRzIHRvIHRoZSB0b29sIGRlZmF1bHQuICovXG4gIGJhc2VQYXRoPzogc3RyaW5nO1xuICAvKiogSW5pdGlhbCBkYXNoYm9hcmQgaWQgdG8gcmVuZGVyLiAqL1xuICBkYXNoYm9hcmRJZDogc3RyaW5nO1xuICAvKiogUGFyZW50IG9yaWdpbiBhbGxvd2xpc3QgKGNvbW1hLXNlcGFyYXRlZCkgcGFzc2VkIHRvIHRoZSBwbHVnaW4uICovXG4gIHBhcmVudE9yaWdpbjogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgdmlldyBvdmVycmlkZXMuICovXG4gIHZpZXc/OiBFbWJlZFZpZXdPcHRpb25zO1xufVxuXG5leHBvcnQgdHlwZSBCaVRvb2wgPSBcImtpYmFuYVwiIHwgXCJzdXBlcnNldFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhc2hib2FyZEVtYmVkUGx1Z2luRGVzY3JpcHRvciB7XG4gIC8qKiBQbHVnaW4gaWQgKGUuZy4gXCJvcmdEYXNoYm9hcmRFbWJlZFwiKS4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIEtpYmFuYSBhcHBsaWNhdGlvbiBpZCAoZS5nLiBcIm9yZ19kYXNoYm9hcmRfZW1iZWRcIikuICovXG4gIGFwcElkOiBzdHJpbmc7XG4gIC8qKiBQbHVnaW4gdmVyc2lvbi4gKi9cbiAgdmVyc2lvbjogc3RyaW5nO1xuICAvKiogVGFyZ2V0IEJJIHRvb2wgdmVyc2lvbiB0aGlzIHBsdWdpbiBpcyBidWlsdCBhZ2FpbnN0LiAqL1xuICB0YXJnZXRWZXJzaW9uOiBzdHJpbmc7XG4gIC8qKiBCSSB0b29sIHRoaXMgcGx1Z2luIHRhcmdldHMuICovXG4gIHRvb2w6IEJpVG9vbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5JbnN0YWxsT3B0aW9ucyB7XG4gIC8qKiBEaXJlY3RvcnkgdG8gbWF0ZXJpYWxpemUgdGhlIHBsdWdpbiBpbnRvLiAqL1xuICB0YXJnZXRQYXRoOiBzdHJpbmc7XG4gIC8qKiBPdmVycmlkZXMgYGRlc2NyaXB0b3IudGFyZ2V0VmVyc2lvbmAgd2hlbiBwcm92aWRlZC4gKi9cbiAgdGFyZ2V0VmVyc2lvbj86IHN0cmluZztcbiAgLyoqIEF0dGVtcHQgdG8gYnVpbGQgdGhlIHBsdWdpbiBhZnRlciB3cml0aW5nIGZpbGVzIChiZXN0LWVmZm9ydCkuICovXG4gIGJ1aWxkPzogYm9vbGVhbjtcbiAgLyoqIE92ZXJ3cml0ZSBhbiBleGlzdGluZyBwbHVnaW4gZGlyZWN0b3J5LiAqL1xuICBvdmVyd3JpdGU/OiBib29sZWFuO1xuICAvKiogT3B0aW9uYWwgY29udGV4dCBmb3IgdHJhY2luZy9sb2dnaW5nLiAqL1xuICBjb250ZXh0PzogTWF5YmVDb250ZXh0dWFsQXJnPGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luSW5zdGFsbFJlc3VsdCB7XG4gIC8qKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBtYXRlcmlhbGl6ZWQgcGx1Z2luIGRpcmVjdG9yeS4gKi9cbiAgcGx1Z2luUGF0aDogc3RyaW5nO1xuICAvKiogRGVzY3JpcHRvciB1c2VkIGZvciB0aGlzIGluc3RhbGwuICovXG4gIGRlc2NyaXB0b3I6IERhc2hib2FyZEVtYmVkUGx1Z2luRGVzY3JpcHRvcjtcbiAgLyoqIFJlbGF0aXZlIGZpbGUgcGF0aHMgd3JpdHRlbi4gKi9cbiAgZmlsZXM6IHN0cmluZ1tdO1xuICAvKiogV2hldGhlciBhIGJ1aWxkIHdhcyBhdHRlbXB0ZWQgYW5kIHJlcG9ydGVkIHN1Y2Nlc3MuICovXG4gIGJ1aWx0OiBib29sZWFuO1xuICAvKiogQ2FwdHVyZWQgYnVpbGQgb3V0cHV0IChzdGRvdXQvc3RkZXJyKSB3aGVuIGBidWlsZGAgd2FzIHJlcXVlc3RlZC4gKi9cbiAgYnVpbGRPdXRwdXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udHJhY3QgYm90aCBCSSBkYXNoYm9hcmQgZW1iZWQgcGx1Z2lucyBpbXBsZW1lbnQuIEJvdGggS2liYW5hIGFuZFxuICogU3VwZXJzZXQgcGx1Z2lucyBleHBvc2UgdGhlIGV4YWN0IHNhbWUgQVBJIHN1cmZhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaGJvYXJkRW1iZWRQbHVnaW4ge1xuICByZWFkb25seSBkZXNjcmlwdG9yOiBEYXNoYm9hcmRFbWJlZFBsdWdpbkRlc2NyaXB0b3I7XG4gIC8qKiBCdWlsZCB0aGUgQkktdG9vbCBtYW5pZmVzdCAoZS5nLiBraWJhbmEuanNvbikgZm9yIGEgdGFyZ2V0IHZlcnNpb24uICovXG4gIG1hbmlmZXN0KHRhcmdldFZlcnNpb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIEJ1aWxkIHRoZSBzdGFibGUgaWZyYW1lIGVtYmVkIFVSTC4gKi9cbiAgYnVpbGRFbWJlZFVybChvcHRpb25zOiBFbWJlZFVybE9wdGlvbnMpOiBzdHJpbmc7XG4gIC8qKiBDcmVhdGUgYSBzd2l0Y2gtZGFzaGJvYXJkIG1lc3NhZ2Ugb2JqZWN0LiAqL1xuICBjcmVhdGVTd2l0Y2hEYXNoYm9hcmRNZXNzYWdlKFxuICAgIHBheWxvYWQ6IFN3aXRjaERhc2hib2FyZFBheWxvYWRcbiAgKTogU3dpdGNoRGFzaGJvYXJkTWVzc2FnZTtcbiAgLyoqIFNlbmQgYSBzd2l0Y2gtZGFzaGJvYXJkIG1lc3NhZ2UgdG8gdGhlIGVtYmVkZGVkIHBsdWdpbiB2aWEgYHBvc3RNZXNzYWdlYC4gKi9cbiAgc2VuZFN3aXRjaERhc2hib2FyZE1lc3NhZ2UoXG4gICAgdGFyZ2V0OiBFbWJlZE1lc3NhZ2VUYXJnZXQsXG4gICAgcGF5bG9hZDogU3dpdGNoRGFzaGJvYXJkUGF5bG9hZCxcbiAgICB0YXJnZXRPcmlnaW46IHN0cmluZ1xuICApOiB2b2lkO1xuICAvKiogTWF0ZXJpYWxpemUgKGFuZCBvcHRpb25hbGx5IGJ1aWxkKSB0aGUgcGx1Z2luIGludG8gYSB0YXJnZXQgZGlyZWN0b3J5LiAqL1xuICBpbnN0YWxsKG9wdGlvbnM6IFBsdWdpbkluc3RhbGxPcHRpb25zKTogUHJvbWlzZTxQbHVnaW5JbnN0YWxsUmVzdWx0Pjtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIGZvciB0aGUgc3dpdGNoLWRhc2hib2FyZCBtZXNzYWdlIHJlY2VpdmVkIGJ5IHRoZSBlbWJlZGRlZCBwbHVnaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N3aXRjaERhc2hib2FyZE1lc3NhZ2UoXG4gIGRhdGE6IHVua25vd25cbik6IGRhdGEgaXMgU3dpdGNoRGFzaGJvYXJkTWVzc2FnZSB7XG4gIGlmICghZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBtc2cgPSBkYXRhIGFzIFBhcnRpYWw8U3dpdGNoRGFzaGJvYXJkTWVzc2FnZT47XG4gIHJldHVybiAoXG4gICAgbXNnLnR5cGUgPT09IEVNQkVEX01FU1NBR0VfVFlQRS5TV0lUQ0ggJiZcbiAgICB0eXBlb2YgbXNnLmRhc2hib2FyZElkID09PSBcInN0cmluZ1wiICYmXG4gICAgbXNnLmRhc2hib2FyZElkLmxlbmd0aCA+IDBcbiAgKTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIGZvciBwYXJlbnQtYm91bmQgbWVzc2FnZXMgZW1pdHRlZCBieSB0aGUgZW1iZWRkZWQgcGx1Z2luLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbWJlZFBhcmVudE1lc3NhZ2UoXG4gIGRhdGE6IHVua25vd25cbik6IGRhdGEgaXMgRW1iZWRQYXJlbnRNZXNzYWdlIHtcbiAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IG1zZyA9IGRhdGEgYXMgeyB0eXBlPzogc3RyaW5nIH07XG4gIHJldHVybiAoXG4gICAgbXNnLnR5cGUgPT09IEVNQkVEX01FU1NBR0VfVFlQRS5SRUFEWSB8fFxuICAgIG1zZy50eXBlID09PSBFTUJFRF9NRVNTQUdFX1RZUEUuUkVOREVSRUQgfHxcbiAgICBtc2cudHlwZSA9PT0gRU1CRURfTUVTU0FHRV9UWVBFLkVSUk9SXG4gICk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBzd2l0Y2gtZGFzaGJvYXJkIG1lc3NhZ2UgZnJvbSBhIHBheWxvYWQgKHNoYXJlZCBieSBib3RoIHBsdWdpbnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3dpdGNoRGFzaGJvYXJkTWVzc2FnZShcbiAgcGF5bG9hZDogU3dpdGNoRGFzaGJvYXJkUGF5bG9hZFxuKTogU3dpdGNoRGFzaGJvYXJkTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogRU1CRURfTUVTU0FHRV9UWVBFLlNXSVRDSCxcbiAgICBkYXNoYm9hcmRJZDogcGF5bG9hZC5kYXNoYm9hcmRJZCxcbiAgICB0aW1lUmFuZ2U6IHBheWxvYWQudGltZVJhbmdlLFxuICAgIHF1ZXJ5OiBwYXlsb2FkLnF1ZXJ5LFxuICAgIGZpbHRlcnM6IHBheWxvYWQuZmlsdGVycyxcbiAgICBndWVzdFRva2VuOiBwYXlsb2FkLmd1ZXN0VG9rZW4sXG4gIH07XG59XG5cbi8qKlxuICogU2VuZCBhIHN3aXRjaC1kYXNoYm9hcmQgbWVzc2FnZSB0byBhIERPTS1mcmVlIHRhcmdldC5cbiAqXG4gKiBJZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGBwb3N0TWVzc2FnZWAgKEtpYmFuYSksIHRoZSBtZXNzYWdlIGlzIHBvc3RlZFxuICogZGlyZWN0bHkuIElmIHRoZSB0YXJnZXQgc3VwcG9ydHMgYHN3aXRjaERhc2hib2FyZGAgKFN1cGVyc2V0IFNESyBoYW5kbGUpLFxuICogdGhlIFNESyBtZXRob2QgaXMgaW52b2tlZCBpbnN0ZWFkLiBCb3RoIHBhdGhzIHVzZSB0aGUgc2FtZSBwYXlsb2FkIHNoYXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZFN3aXRjaERhc2hib2FyZE1lc3NhZ2UoXG4gIHRhcmdldDogRW1iZWRNZXNzYWdlVGFyZ2V0LFxuICBwYXlsb2FkOiBTd2l0Y2hEYXNoYm9hcmRQYXlsb2FkLFxuICB0YXJnZXRPcmlnaW46IHN0cmluZ1xuKTogdm9pZCB7XG4gIGlmICh0eXBlb2YgdGFyZ2V0LnN3aXRjaERhc2hib2FyZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdm9pZCB0YXJnZXQuc3dpdGNoRGFzaGJvYXJkKHBheWxvYWQuZGFzaGJvYXJkSWQsIHBheWxvYWQuZ3Vlc3RUb2tlbik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh0eXBlb2YgdGFyZ2V0LnBvc3RNZXNzYWdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0YXJnZXQucG9zdE1lc3NhZ2UoY3JlYXRlU3dpdGNoRGFzaGJvYXJkTWVzc2FnZShwYXlsb2FkKSwgdGFyZ2V0T3JpZ2luKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXG4gICAgXCJFbWJlZE1lc3NhZ2VUYXJnZXQgbXVzdCBwcm92aWRlIGVpdGhlciBwb3N0TWVzc2FnZSBvciBzd2l0Y2hEYXNoYm9hcmRcIlxuICApO1xufVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/plugins
|
|
3
|
+
* @summary BI dashboard embed plugin surface.
|
|
4
|
+
* @description Aggregates the shared DOM-free contract and both BI tool
|
|
5
|
+
* plugins (Kibana + Superset). Both plugins implement the exact same
|
|
6
|
+
* `DashboardEmbedPlugin` API.
|
|
7
|
+
*
|
|
8
|
+
* - **Kibana:** generated plugin source + installer (writes files, optional build).
|
|
9
|
+
* - **Superset:** patch-and-build strategy (patches Superset's internal source,
|
|
10
|
+
* builds SDK + frontend + optionally Docker image).
|
|
11
|
+
*
|
|
12
|
+
* Both are org-agnostic: there is never space switching. The current BI space
|
|
13
|
+
* comes from the request/session/proxy context, not from the plugin.
|
|
14
|
+
*/
|
|
15
|
+
export * from "./contract.js";
|
|
16
|
+
export * from "./kibana/index.js";
|
|
17
|
+
export * from "./superset/index.js";
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsOEJBQTJCO0FBQzNCLGtDQUF5QjtBQUN6QixvQ0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL3BsdWdpbnNcbiAqIEBzdW1tYXJ5IEJJIGRhc2hib2FyZCBlbWJlZCBwbHVnaW4gc3VyZmFjZS5cbiAqIEBkZXNjcmlwdGlvbiBBZ2dyZWdhdGVzIHRoZSBzaGFyZWQgRE9NLWZyZWUgY29udHJhY3QgYW5kIGJvdGggQkkgdG9vbFxuICogcGx1Z2lucyAoS2liYW5hICsgU3VwZXJzZXQpLiBCb3RoIHBsdWdpbnMgaW1wbGVtZW50IHRoZSBleGFjdCBzYW1lXG4gKiBgRGFzaGJvYXJkRW1iZWRQbHVnaW5gIEFQSS5cbiAqXG4gKiAtICoqS2liYW5hOioqIGdlbmVyYXRlZCBwbHVnaW4gc291cmNlICsgaW5zdGFsbGVyICh3cml0ZXMgZmlsZXMsIG9wdGlvbmFsIGJ1aWxkKS5cbiAqIC0gKipTdXBlcnNldDoqKiBwYXRjaC1hbmQtYnVpbGQgc3RyYXRlZ3kgKHBhdGNoZXMgU3VwZXJzZXQncyBpbnRlcm5hbCBzb3VyY2UsXG4gKiAgIGJ1aWxkcyBTREsgKyBmcm9udGVuZCArIG9wdGlvbmFsbHkgRG9ja2VyIGltYWdlKS5cbiAqXG4gKiBCb3RoIGFyZSBvcmctYWdub3N0aWM6IHRoZXJlIGlzIG5ldmVyIHNwYWNlIHN3aXRjaGluZy4gVGhlIGN1cnJlbnQgQkkgc3BhY2VcbiAqIGNvbWVzIGZyb20gdGhlIHJlcXVlc3Qvc2Vzc2lvbi9wcm94eSBjb250ZXh0LCBub3QgZnJvbSB0aGUgcGx1Z2luLlxuICovXG5leHBvcnQgKiBmcm9tIFwiLi9jb250cmFjdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4va2liYW5hXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdXBlcnNldFwiO1xuIl19
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/plugins/kibana/host
|
|
3
|
+
* @summary Angular host-side helpers for the Kibana embed plugin.
|
|
4
|
+
* @description DOM-free convenience helpers the Angular host uses to build the
|
|
5
|
+
* stable iframe URL and send switch-dashboard messages to the embedded plugin.
|
|
6
|
+
*/
|
|
7
|
+
import { sendSwitchDashboardMessage as sendShared, } from "./../contract.js";
|
|
8
|
+
import { buildKibanaEmbedUrl } from "./installer.js";
|
|
9
|
+
export { buildKibanaEmbedUrl };
|
|
10
|
+
/**
|
|
11
|
+
* Send a switch-dashboard message to the embedded Kibana plugin.
|
|
12
|
+
*
|
|
13
|
+
* The Angular host passes `iframe.contentWindow` (which satisfies
|
|
14
|
+
* `EmbedMessageTarget`) and the Kibana origin as `targetOrigin`.
|
|
15
|
+
*/
|
|
16
|
+
export function sendKibanaSwitchDashboardMessage(target, payload, targetOrigin) {
|
|
17
|
+
sendShared(target, payload, targetOrigin);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL2tpYmFuYS9ob3N0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBQ0gsT0FBTyxFQUNMLDBCQUEwQixJQUFJLFVBQVUsR0FJekMseUJBQW9CO0FBQ3JCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSx1QkFBb0I7QUFFbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLENBQUM7QUFFL0I7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZ0NBQWdDLENBQzlDLE1BQTBCLEVBQzFCLE9BQStCLEVBQy9CLFlBQW9CO0lBRXBCLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL3BsdWdpbnMva2liYW5hL2hvc3RcbiAqIEBzdW1tYXJ5IEFuZ3VsYXIgaG9zdC1zaWRlIGhlbHBlcnMgZm9yIHRoZSBLaWJhbmEgZW1iZWQgcGx1Z2luLlxuICogQGRlc2NyaXB0aW9uIERPTS1mcmVlIGNvbnZlbmllbmNlIGhlbHBlcnMgdGhlIEFuZ3VsYXIgaG9zdCB1c2VzIHRvIGJ1aWxkIHRoZVxuICogc3RhYmxlIGlmcmFtZSBVUkwgYW5kIHNlbmQgc3dpdGNoLWRhc2hib2FyZCBtZXNzYWdlcyB0byB0aGUgZW1iZWRkZWQgcGx1Z2luLlxuICovXG5pbXBvcnQge1xuICBzZW5kU3dpdGNoRGFzaGJvYXJkTWVzc2FnZSBhcyBzZW5kU2hhcmVkLFxuICB0eXBlIEVtYmVkTWVzc2FnZVRhcmdldCxcbiAgdHlwZSBFbWJlZFVybE9wdGlvbnMsXG4gIHR5cGUgU3dpdGNoRGFzaGJvYXJkUGF5bG9hZCxcbn0gZnJvbSBcIi4uL2NvbnRyYWN0XCI7XG5pbXBvcnQgeyBidWlsZEtpYmFuYUVtYmVkVXJsIH0gZnJvbSBcIi4vaW5zdGFsbGVyXCI7XG5cbmV4cG9ydCB7IGJ1aWxkS2liYW5hRW1iZWRVcmwgfTtcblxuLyoqXG4gKiBTZW5kIGEgc3dpdGNoLWRhc2hib2FyZCBtZXNzYWdlIHRvIHRoZSBlbWJlZGRlZCBLaWJhbmEgcGx1Z2luLlxuICpcbiAqIFRoZSBBbmd1bGFyIGhvc3QgcGFzc2VzIGBpZnJhbWUuY29udGVudFdpbmRvd2AgKHdoaWNoIHNhdGlzZmllc1xuICogYEVtYmVkTWVzc2FnZVRhcmdldGApIGFuZCB0aGUgS2liYW5hIG9yaWdpbiBhcyBgdGFyZ2V0T3JpZ2luYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRLaWJhbmFTd2l0Y2hEYXNoYm9hcmRNZXNzYWdlKFxuICB0YXJnZXQ6IEVtYmVkTWVzc2FnZVRhcmdldCxcbiAgcGF5bG9hZDogU3dpdGNoRGFzaGJvYXJkUGF5bG9hZCxcbiAgdGFyZ2V0T3JpZ2luOiBzdHJpbmdcbik6IHZvaWQge1xuICBzZW5kU2hhcmVkKHRhcmdldCwgcGF5bG9hZCwgdGFyZ2V0T3JpZ2luKTtcbn1cblxuLyoqIFJlLWV4cG9ydCB0aGUgVVJMIG9wdGlvbnMgdHlwZSBmb3IgaG9zdCBjb252ZW5pZW5jZS4gKi9cbmV4cG9ydCB0eXBlIHsgRW1iZWRVcmxPcHRpb25zIH07XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/plugins/kibana
|
|
3
|
+
* @summary Kibana dashboard embed plugin surface.
|
|
4
|
+
* @description Org-agnostic multi-tenant Kibana dashboard embed plugin,
|
|
5
|
+
* installer, and host helpers. There is never space switching; the current
|
|
6
|
+
* Kibana space comes from the request/session/proxy context.
|
|
7
|
+
*/
|
|
8
|
+
export * from "./../contract.js";
|
|
9
|
+
export * from "./types.js";
|
|
10
|
+
export * from "./manifest.js";
|
|
11
|
+
export * from "./templates.js";
|
|
12
|
+
export { KibanaDashboardEmbedPlugin, kibanaDashboardEmbedPlugin, createKibanaDashboardEmbedPlugin, buildKibanaEmbedUrl, KIBANA_DEFAULT_BASE_PATH, } from "./installer.js";
|
|
13
|
+
export { sendKibanaSwitchDashboardMessage, } from "./host.js";
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9raWJhbmEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsaUNBQTRCO0FBQzVCLDJCQUF3QjtBQUN4Qiw4QkFBMkI7QUFDM0IsK0JBQTRCO0FBQzVCLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsMEJBQTBCLEVBQzFCLGdDQUFnQyxFQUNoQyxtQkFBbUIsRUFDbkIsd0JBQXdCLEdBQ3pCLHVCQUFvQjtBQUNyQixPQUFPLEVBQ0wsZ0NBQWdDLEdBQ2pDLGtCQUFlIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9wbHVnaW5zL2tpYmFuYVxuICogQHN1bW1hcnkgS2liYW5hIGRhc2hib2FyZCBlbWJlZCBwbHVnaW4gc3VyZmFjZS5cbiAqIEBkZXNjcmlwdGlvbiBPcmctYWdub3N0aWMgbXVsdGktdGVuYW50IEtpYmFuYSBkYXNoYm9hcmQgZW1iZWQgcGx1Z2luLFxuICogaW5zdGFsbGVyLCBhbmQgaG9zdCBoZWxwZXJzLiBUaGVyZSBpcyBuZXZlciBzcGFjZSBzd2l0Y2hpbmc7IHRoZSBjdXJyZW50XG4gKiBLaWJhbmEgc3BhY2UgY29tZXMgZnJvbSB0aGUgcmVxdWVzdC9zZXNzaW9uL3Byb3h5IGNvbnRleHQuXG4gKi9cbmV4cG9ydCAqIGZyb20gXCIuLi9jb250cmFjdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21hbmlmZXN0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZW1wbGF0ZXNcIjtcbmV4cG9ydCB7XG4gIEtpYmFuYURhc2hib2FyZEVtYmVkUGx1Z2luLFxuICBraWJhbmFEYXNoYm9hcmRFbWJlZFBsdWdpbixcbiAgY3JlYXRlS2liYW5hRGFzaGJvYXJkRW1iZWRQbHVnaW4sXG4gIGJ1aWxkS2liYW5hRW1iZWRVcmwsXG4gIEtJQkFOQV9ERUZBVUxUX0JBU0VfUEFUSCxcbn0gZnJvbSBcIi4vaW5zdGFsbGVyXCI7XG5leHBvcnQge1xuICBzZW5kS2liYW5hU3dpdGNoRGFzaGJvYXJkTWVzc2FnZSxcbn0gZnJvbSBcIi4vaG9zdFwiO1xuIl19
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/plugins/kibana/installer
|
|
3
|
+
* @summary Kibana dashboard embed plugin installer.
|
|
4
|
+
* @description Implements `DashboardEmbedPlugin` for Kibana: builds the stable
|
|
5
|
+
* iframe embed URL, creates/sends switch-dashboard messages, and materializes
|
|
6
|
+
* the generated plugin source into a target directory (optionally building it).
|
|
7
|
+
*
|
|
8
|
+
* The plugin is org-agnostic: there is never space switching. The current
|
|
9
|
+
* Kibana space comes from the request/session/proxy context, not from the
|
|
10
|
+
* plugin, so the same plugin serves every org.
|
|
11
|
+
*/
|
|
12
|
+
import { InternalError } from "@decaf-ts/db-decorators";
|
|
13
|
+
import { UnsupportedError } from "@decaf-ts/core";
|
|
14
|
+
import * as fs from "node:fs";
|
|
15
|
+
import * as path from "node:path";
|
|
16
|
+
import { execFile } from "node:child_process";
|
|
17
|
+
import { createSwitchDashboardMessage, sendSwitchDashboardMessage, } from "./../contract.js";
|
|
18
|
+
import { KIBANA_APP_ID, KIBANA_PLUGIN_ID, KIBANA_PLUGIN_VERSION, buildKibanaManifest, } from "./manifest.js";
|
|
19
|
+
import { kibanaPluginFiles } from "./templates.js";
|
|
20
|
+
/** Default Kibana base path when none is provided. */
|
|
21
|
+
export const KIBANA_DEFAULT_BASE_PATH = "kibana";
|
|
22
|
+
/**
|
|
23
|
+
* Build the stable Kibana embed iframe URL.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* buildKibanaEmbedUrl({ host: "ptp.host", dashboardId: "abc", parentOrigin: "https://app.example.com" })
|
|
27
|
+
* // => "//ptp.host/kibana/app/org_dashboard_embed?dashboardId=abc&parentOrigin=https%3A%2F%2Fapp.example.com"
|
|
28
|
+
*/
|
|
29
|
+
export function buildKibanaEmbedUrl(options) {
|
|
30
|
+
const basePath = options.basePath ?? KIBANA_DEFAULT_BASE_PATH;
|
|
31
|
+
const params = new URLSearchParams();
|
|
32
|
+
params.set("dashboardId", options.dashboardId);
|
|
33
|
+
params.set("parentOrigin", options.parentOrigin);
|
|
34
|
+
if (options.view?.timeRange) {
|
|
35
|
+
params.set("timeRange", JSON.stringify(options.view.timeRange));
|
|
36
|
+
}
|
|
37
|
+
return `//${options.host}/${basePath}/app/${KIBANA_APP_ID}?${params.toString()}`;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @class KibanaDashboardEmbedPlugin
|
|
41
|
+
* @summary Kibana implementation of the `DashboardEmbedPlugin` contract.
|
|
42
|
+
* @description Org-agnostic multi-tenant dashboard embed plugin for Kibana.
|
|
43
|
+
*/
|
|
44
|
+
export class KibanaDashboardEmbedPlugin {
|
|
45
|
+
constructor(targetVersion = "kibana") {
|
|
46
|
+
this.descriptor = {
|
|
47
|
+
id: KIBANA_PLUGIN_ID,
|
|
48
|
+
appId: KIBANA_APP_ID,
|
|
49
|
+
version: KIBANA_PLUGIN_VERSION,
|
|
50
|
+
targetVersion,
|
|
51
|
+
tool: "kibana",
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
manifest(targetVersion = this.descriptor.targetVersion) {
|
|
55
|
+
return buildKibanaManifest(targetVersion);
|
|
56
|
+
}
|
|
57
|
+
buildEmbedUrl(options) {
|
|
58
|
+
return buildKibanaEmbedUrl(options);
|
|
59
|
+
}
|
|
60
|
+
createSwitchDashboardMessage(payload) {
|
|
61
|
+
return createSwitchDashboardMessage(payload);
|
|
62
|
+
}
|
|
63
|
+
sendSwitchDashboardMessage(target, payload, targetOrigin) {
|
|
64
|
+
sendSwitchDashboardMessage(target, payload, targetOrigin);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Materialize the generated Kibana plugin into `targetPath/org_dashboard_embed/`.
|
|
68
|
+
*
|
|
69
|
+
* Kibana plugins must be built within the Kibana repo against the exact
|
|
70
|
+
* Kibana version. When `build` is true, this attempts `yarn build` in the
|
|
71
|
+
* plugin directory (best-effort); real builds require the Kibana plugin
|
|
72
|
+
* helpers environment.
|
|
73
|
+
*/
|
|
74
|
+
async install(options) {
|
|
75
|
+
const ctx = options.context;
|
|
76
|
+
if (ctx) {
|
|
77
|
+
// Context is accepted for traceability; no logging side-effect required here.
|
|
78
|
+
void ctx;
|
|
79
|
+
}
|
|
80
|
+
if (!options.targetPath || options.targetPath.trim().length === 0) {
|
|
81
|
+
throw new UnsupportedError("install targetPath is required");
|
|
82
|
+
}
|
|
83
|
+
const targetVersion = options.targetVersion ?? this.descriptor.targetVersion;
|
|
84
|
+
const pluginDir = path.resolve(options.targetPath, KIBANA_APP_ID);
|
|
85
|
+
if (fs.existsSync(pluginDir)) {
|
|
86
|
+
if (!options.overwrite) {
|
|
87
|
+
throw new InternalError(`Plugin directory already exists: ${pluginDir} (use overwrite: true)`);
|
|
88
|
+
}
|
|
89
|
+
fs.rmSync(pluginDir, { recursive: true, force: true });
|
|
90
|
+
}
|
|
91
|
+
const files = kibanaPluginFiles(targetVersion);
|
|
92
|
+
const written = [];
|
|
93
|
+
for (const file of files) {
|
|
94
|
+
const fullPath = path.join(pluginDir, file.path);
|
|
95
|
+
fs.mkdirSync(path.dirname(fullPath), { recursive: true });
|
|
96
|
+
fs.writeFileSync(fullPath, file.content, "utf8");
|
|
97
|
+
written.push(file.path);
|
|
98
|
+
}
|
|
99
|
+
let built = false;
|
|
100
|
+
let buildOutput;
|
|
101
|
+
if (options.build) {
|
|
102
|
+
const result = await this.runBuild(pluginDir).catch((err) => ({
|
|
103
|
+
ok: false,
|
|
104
|
+
output: err.message,
|
|
105
|
+
}));
|
|
106
|
+
built = result.ok;
|
|
107
|
+
buildOutput = result.output;
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
pluginPath: pluginDir,
|
|
111
|
+
descriptor: { ...this.descriptor, targetVersion },
|
|
112
|
+
files: written,
|
|
113
|
+
built,
|
|
114
|
+
buildOutput,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Best-effort `yarn build` in the plugin directory. Real builds require the
|
|
119
|
+
* Kibana plugin helpers environment; failures are captured, not thrown.
|
|
120
|
+
*/
|
|
121
|
+
runBuild(pluginDir) {
|
|
122
|
+
return new Promise((resolve) => {
|
|
123
|
+
execFile("yarn", ["build"], { cwd: pluginDir, timeout: 120000 }, (error, stdout, stderr) => {
|
|
124
|
+
const output = `${stdout ?? ""}${stderr ?? ""}`.trim();
|
|
125
|
+
if (error) {
|
|
126
|
+
resolve({ ok: false, output: output || error.message });
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
resolve({ ok: true, output });
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/** Default singleton instance. */
|
|
135
|
+
export const kibanaDashboardEmbedPlugin = new KibanaDashboardEmbedPlugin();
|
|
136
|
+
/** Factory accepting a target Kibana version. */
|
|
137
|
+
export function createKibanaDashboardEmbedPlugin(targetVersion) {
|
|
138
|
+
return new KibanaDashboardEmbedPlugin(targetVersion);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMva2liYW5hL2luc3RhbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ0gsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUNMLDRCQUE0QixFQUM1QiwwQkFBMEIsR0FTM0IseUJBQW9CO0FBQ3JCLE9BQU8sRUFDTCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixtQkFBbUIsR0FDcEIsc0JBQW1CO0FBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx1QkFBb0I7QUFFaEQsc0RBQXNEO0FBQ3RELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLFFBQVEsQ0FBQztBQUVqRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsT0FBd0I7SUFDMUQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSx3QkFBd0IsQ0FBQztJQUM5RCxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDakQsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxHQUFHLENB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O29CQUNWLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDeEQsT0FBTztnQkFDVCxDQUFDO2dCQUNELE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsa0NBQWtDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLElBQUksMEJBQTBCLEVBQUUsQ0FBQztBQUUzRSxpREFBaUQ7QUFDakQsTUFBTSxVQUFVLGdDQUFnQyxDQUM5QyxhQUFxQjtJQUVyQixPQUFPLElBQUksMEJBQTBCLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvcGx1Z2lucy9raWJhbmEvaW5zdGFsbGVyXG4gKiBAc3VtbWFyeSBLaWJhbmEgZGFzaGJvYXJkIGVtYmVkIHBsdWdpbiBpbnN0YWxsZXIuXG4gKiBAZGVzY3JpcHRpb24gSW1wbGVtZW50cyBgRGFzaGJvYXJkRW1iZWRQbHVnaW5gIGZvciBLaWJhbmE6IGJ1aWxkcyB0aGUgc3RhYmxlXG4gKiBpZnJhbWUgZW1iZWQgVVJMLCBjcmVhdGVzL3NlbmRzIHN3aXRjaC1kYXNoYm9hcmQgbWVzc2FnZXMsIGFuZCBtYXRlcmlhbGl6ZXNcbiAqIHRoZSBnZW5lcmF0ZWQgcGx1Z2luIHNvdXJjZSBpbnRvIGEgdGFyZ2V0IGRpcmVjdG9yeSAob3B0aW9uYWxseSBidWlsZGluZyBpdCkuXG4gKlxuICogVGhlIHBsdWdpbiBpcyBvcmctYWdub3N0aWM6IHRoZXJlIGlzIG5ldmVyIHNwYWNlIHN3aXRjaGluZy4gVGhlIGN1cnJlbnRcbiAqIEtpYmFuYSBzcGFjZSBjb21lcyBmcm9tIHRoZSByZXF1ZXN0L3Nlc3Npb24vcHJveHkgY29udGV4dCwgbm90IGZyb20gdGhlXG4gKiBwbHVnaW4sIHNvIHRoZSBzYW1lIHBsdWdpbiBzZXJ2ZXMgZXZlcnkgb3JnLlxuICovXG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBVbnN1cHBvcnRlZEVycm9yLCBNYXliZUNvbnRleHR1YWxBcmcgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuXG5pbXBvcnQge1xuICBjcmVhdGVTd2l0Y2hEYXNoYm9hcmRNZXNzYWdlLFxuICBzZW5kU3dpdGNoRGFzaGJvYXJkTWVzc2FnZSxcbiAgdHlwZSBEYXNoYm9hcmRFbWJlZFBsdWdpbixcbiAgdHlwZSBEYXNoYm9hcmRFbWJlZFBsdWdpbkRlc2NyaXB0b3IsXG4gIHR5cGUgRW1iZWRVcmxPcHRpb25zLFxuICB0eXBlIFBsdWdpbkluc3RhbGxPcHRpb25zLFxuICB0eXBlIFBsdWdpbkluc3RhbGxSZXN1bHQsXG4gIHR5cGUgU3dpdGNoRGFzaGJvYXJkUGF5bG9hZCxcbiAgdHlwZSBTd2l0Y2hEYXNoYm9hcmRNZXNzYWdlLFxuICB0eXBlIEVtYmVkTWVzc2FnZVRhcmdldCxcbn0gZnJvbSBcIi4uL2NvbnRyYWN0XCI7XG5pbXBvcnQge1xuICBLSUJBTkFfQVBQX0lELFxuICBLSUJBTkFfUExVR0lOX0lELFxuICBLSUJBTkFfUExVR0lOX1ZFUlNJT04sXG4gIGJ1aWxkS2liYW5hTWFuaWZlc3QsXG59IGZyb20gXCIuL21hbmlmZXN0XCI7XG5pbXBvcnQgeyBraWJhbmFQbHVnaW5GaWxlcyB9IGZyb20gXCIuL3RlbXBsYXRlc1wiO1xuXG4vKiogRGVmYXVsdCBLaWJhbmEgYmFzZSBwYXRoIHdoZW4gbm9uZSBpcyBwcm92aWRlZC4gKi9cbmV4cG9ydCBjb25zdCBLSUJBTkFfREVGQVVMVF9CQVNFX1BBVEggPSBcImtpYmFuYVwiO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBzdGFibGUgS2liYW5hIGVtYmVkIGlmcmFtZSBVUkwuXG4gKlxuICogQGV4YW1wbGVcbiAqICAgYnVpbGRLaWJhbmFFbWJlZFVybCh7IGhvc3Q6IFwicHRwLmhvc3RcIiwgZGFzaGJvYXJkSWQ6IFwiYWJjXCIsIHBhcmVudE9yaWdpbjogXCJodHRwczovL2FwcC5leGFtcGxlLmNvbVwiIH0pXG4gKiAgIC8vID0+IFwiLy9wdHAuaG9zdC9raWJhbmEvYXBwL29yZ19kYXNoYm9hcmRfZW1iZWQ/ZGFzaGJvYXJkSWQ9YWJjJnBhcmVudE9yaWdpbj1odHRwcyUzQSUyRiUyRmFwcC5leGFtcGxlLmNvbVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEtpYmFuYUVtYmVkVXJsKG9wdGlvbnM6IEVtYmVkVXJsT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IGJhc2VQYXRoID0gb3B0aW9ucy5iYXNlUGF0aCA/PyBLSUJBTkFfREVGQVVMVF9CQVNFX1BBVEg7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgcGFyYW1zLnNldChcImRhc2hib2FyZElkXCIsIG9wdGlvbnMuZGFzaGJvYXJkSWQpO1xuICBwYXJhbXMuc2V0KFwicGFyZW50T3JpZ2luXCIsIG9wdGlvbnMucGFyZW50T3JpZ2luKTtcbiAgaWYgKG9wdGlvbnMudmlldz8udGltZVJhbmdlKSB7XG4gICAgcGFyYW1zLnNldChcbiAgICAgIFwidGltZVJhbmdlXCIsXG4gICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLnZpZXcudGltZVJhbmdlKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGAvLyR7b3B0aW9ucy5ob3N0fS8ke2Jhc2VQYXRofS9hcHAvJHtLSUJBTkFfQVBQX0lEfT8ke3BhcmFtcy50b1N0cmluZygpfWA7XG59XG5cbi8qKlxuICogQGNsYXNzIEtpYmFuYURhc2hib2FyZEVtYmVkUGx1Z2luXG4gKiBAc3VtbWFyeSBLaWJhbmEgaW1wbGVtZW50YXRpb24gb2YgdGhlIGBEYXNoYm9hcmRFbWJlZFBsdWdpbmAgY29udHJhY3QuXG4gKiBAZGVzY3JpcHRpb24gT3JnLWFnbm9zdGljIG11bHRpLXRlbmFudCBkYXNoYm9hcmQgZW1iZWQgcGx1Z2luIGZvciBLaWJhbmEuXG4gKi9cbmV4cG9ydCBjbGFzcyBLaWJhbmFEYXNoYm9hcmRFbWJlZFBsdWdpbiBpbXBsZW1lbnRzIERhc2hib2FyZEVtYmVkUGx1Z2luIHtcbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0b3I6IERhc2hib2FyZEVtYmVkUGx1Z2luRGVzY3JpcHRvcjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IodGFyZ2V0VmVyc2lvbjogc3RyaW5nID0gXCJraWJhbmFcIikge1xuICAgIHRoaXMuZGVzY3JpcHRvciA9IHtcbiAgICAgIGlkOiBLSUJBTkFfUExVR0lOX0lELFxuICAgICAgYXBwSWQ6IEtJQkFOQV9BUFBfSUQsXG4gICAgICB2ZXJzaW9uOiBLSUJBTkFfUExVR0lOX1ZFUlNJT04sXG4gICAgICB0YXJnZXRWZXJzaW9uLFxuICAgICAgdG9vbDogXCJraWJhbmFcIixcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIG1hbmlmZXN0KHRhcmdldFZlcnNpb246IHN0cmluZyA9IHRoaXMuZGVzY3JpcHRvci50YXJnZXRWZXJzaW9uKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiBidWlsZEtpYmFuYU1hbmlmZXN0KHRhcmdldFZlcnNpb24pIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cblxuICBwdWJsaWMgYnVpbGRFbWJlZFVybChvcHRpb25zOiBFbWJlZFVybE9wdGlvbnMpOiBzdHJpbmcge1xuICAgIHJldHVybiBidWlsZEtpYmFuYUVtYmVkVXJsKG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVN3aXRjaERhc2hib2FyZE1lc3NhZ2UoXG4gICAgcGF5bG9hZDogU3dpdGNoRGFzaGJvYXJkUGF5bG9hZFxuICApOiBTd2l0Y2hEYXNoYm9hcmRNZXNzYWdlIHtcbiAgICByZXR1cm4gY3JlYXRlU3dpdGNoRGFzaGJvYXJkTWVzc2FnZShwYXlsb2FkKTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kU3dpdGNoRGFzaGJvYXJkTWVzc2FnZShcbiAgICB0YXJnZXQ6IEVtYmVkTWVzc2FnZVRhcmdldCxcbiAgICBwYXlsb2FkOiBTd2l0Y2hEYXNoYm9hcmRQYXlsb2FkLFxuICAgIHRhcmdldE9yaWdpbjogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHNlbmRTd2l0Y2hEYXNoYm9hcmRNZXNzYWdlKHRhcmdldCwgcGF5bG9hZCwgdGFyZ2V0T3JpZ2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXRlcmlhbGl6ZSB0aGUgZ2VuZXJhdGVkIEtpYmFuYSBwbHVnaW4gaW50byBgdGFyZ2V0UGF0aC9vcmdfZGFzaGJvYXJkX2VtYmVkL2AuXG4gICAqXG4gICAqIEtpYmFuYSBwbHVnaW5zIG11c3QgYmUgYnVpbHQgd2l0aGluIHRoZSBLaWJhbmEgcmVwbyBhZ2FpbnN0IHRoZSBleGFjdFxuICAgKiBLaWJhbmEgdmVyc2lvbi4gV2hlbiBgYnVpbGRgIGlzIHRydWUsIHRoaXMgYXR0ZW1wdHMgYHlhcm4gYnVpbGRgIGluIHRoZVxuICAgKiBwbHVnaW4gZGlyZWN0b3J5IChiZXN0LWVmZm9ydCk7IHJlYWwgYnVpbGRzIHJlcXVpcmUgdGhlIEtpYmFuYSBwbHVnaW5cbiAgICogaGVscGVycyBlbnZpcm9ubWVudC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbnN0YWxsKFxuICAgIG9wdGlvbnM6IFBsdWdpbkluc3RhbGxPcHRpb25zXG4gICk6IFByb21pc2U8UGx1Z2luSW5zdGFsbFJlc3VsdD4ge1xuICAgIGNvbnN0IGN0eCA9IG9wdGlvbnMuY29udGV4dCBhcyBNYXliZUNvbnRleHR1YWxBcmc8YW55PiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoY3R4KSB7XG4gICAgICAvLyBDb250ZXh0IGlzIGFjY2VwdGVkIGZvciB0cmFjZWFiaWxpdHk7IG5vIGxvZ2dpbmcgc2lkZS1lZmZlY3QgcmVxdWlyZWQgaGVyZS5cbiAgICAgIHZvaWQgY3R4O1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMudGFyZ2V0UGF0aCB8fCBvcHRpb25zLnRhcmdldFBhdGgudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXCJpbnN0YWxsIHRhcmdldFBhdGggaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0VmVyc2lvbiA9IG9wdGlvbnMudGFyZ2V0VmVyc2lvbiA/PyB0aGlzLmRlc2NyaXB0b3IudGFyZ2V0VmVyc2lvbjtcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLnJlc29sdmUoXG4gICAgICBvcHRpb25zLnRhcmdldFBhdGgsXG4gICAgICBLSUJBTkFfQVBQX0lEXG4gICAgKTtcblxuICAgIGlmIChmcy5leGlzdHNTeW5jKHBsdWdpbkRpcikpIHtcbiAgICAgIGlmICghb3B0aW9ucy5vdmVyd3JpdGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgYFBsdWdpbiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHM6ICR7cGx1Z2luRGlyfSAodXNlIG92ZXJ3cml0ZTogdHJ1ZSlgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBmcy5ybVN5bmMocGx1Z2luRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZXMgPSBraWJhbmFQbHVnaW5GaWxlcyh0YXJnZXRWZXJzaW9uKTtcbiAgICBjb25zdCB3cml0dGVuOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4ocGx1Z2luRGlyLCBmaWxlLnBhdGgpO1xuICAgICAgZnMubWtkaXJTeW5jKHBhdGguZGlybmFtZShmdWxsUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhmdWxsUGF0aCwgZmlsZS5jb250ZW50LCBcInV0ZjhcIik7XG4gICAgICB3cml0dGVuLnB1c2goZmlsZS5wYXRoKTtcbiAgICB9XG5cbiAgICBsZXQgYnVpbHQgPSBmYWxzZTtcbiAgICBsZXQgYnVpbGRPdXRwdXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAob3B0aW9ucy5idWlsZCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ydW5CdWlsZChwbHVnaW5EaXIpLmNhdGNoKChlcnI6IEVycm9yKSA9PiAoe1xuICAgICAgICBvazogZmFsc2UgYXMgY29uc3QsXG4gICAgICAgIG91dHB1dDogZXJyLm1lc3NhZ2UsXG4gICAgICB9KSk7XG4gICAgICBidWlsdCA9IHJlc3VsdC5vaztcbiAgICAgIGJ1aWxkT3V0cHV0ID0gcmVzdWx0Lm91dHB1dDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGx1Z2luUGF0aDogcGx1Z2luRGlyLFxuICAgICAgZGVzY3JpcHRvcjogeyAuLi50aGlzLmRlc2NyaXB0b3IsIHRhcmdldFZlcnNpb24gfSxcbiAgICAgIGZpbGVzOiB3cml0dGVuLFxuICAgICAgYnVpbHQsXG4gICAgICBidWlsZE91dHB1dCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJlc3QtZWZmb3J0IGB5YXJuIGJ1aWxkYCBpbiB0aGUgcGx1Z2luIGRpcmVjdG9yeS4gUmVhbCBidWlsZHMgcmVxdWlyZSB0aGVcbiAgICogS2liYW5hIHBsdWdpbiBoZWxwZXJzIGVudmlyb25tZW50OyBmYWlsdXJlcyBhcmUgY2FwdHVyZWQsIG5vdCB0aHJvd24uXG4gICAqL1xuICBwcm90ZWN0ZWQgcnVuQnVpbGQoXG4gICAgcGx1Z2luRGlyOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7IG9rOiBib29sZWFuOyBvdXRwdXQ6IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBleGVjRmlsZShcbiAgICAgICAgXCJ5YXJuXCIsXG4gICAgICAgIFtcImJ1aWxkXCJdLFxuICAgICAgICB7IGN3ZDogcGx1Z2luRGlyLCB0aW1lb3V0OiAxMjAwMDAgfSxcbiAgICAgICAgKGVycm9yLCBzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGAke3N0ZG91dCA/PyBcIlwifSR7c3RkZXJyID8/IFwiXCJ9YC50cmltKCk7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXNvbHZlKHsgb2s6IGZhbHNlLCBvdXRwdXQ6IG91dHB1dCB8fCBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlKHsgb2s6IHRydWUsIG91dHB1dCB9KTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKiogRGVmYXVsdCBzaW5nbGV0b24gaW5zdGFuY2UuICovXG5leHBvcnQgY29uc3Qga2liYW5hRGFzaGJvYXJkRW1iZWRQbHVnaW4gPSBuZXcgS2liYW5hRGFzaGJvYXJkRW1iZWRQbHVnaW4oKTtcblxuLyoqIEZhY3RvcnkgYWNjZXB0aW5nIGEgdGFyZ2V0IEtpYmFuYSB2ZXJzaW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUtpYmFuYURhc2hib2FyZEVtYmVkUGx1Z2luKFxuICB0YXJnZXRWZXJzaW9uOiBzdHJpbmdcbik6IEtpYmFuYURhc2hib2FyZEVtYmVkUGx1Z2luIHtcbiAgcmV0dXJuIG5ldyBLaWJhbmFEYXNoYm9hcmRFbWJlZFBsdWdpbih0YXJnZXRWZXJzaW9uKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/plugins/kibana/manifest
|
|
3
|
+
* @summary Kibana embed plugin manifest builder.
|
|
4
|
+
* @description Builds the `kibana.json` manifest for the org-agnostic
|
|
5
|
+
* `orgDashboardEmbed` plugin against a target Kibana version.
|
|
6
|
+
*/
|
|
7
|
+
import { EMBED_MESSAGE_TYPE } from "./../contract.js";
|
|
8
|
+
export const KIBANA_PLUGIN_ID = "orgDashboardEmbed";
|
|
9
|
+
export const KIBANA_APP_ID = "org_dashboard_embed";
|
|
10
|
+
export const KIBANA_PLUGIN_VERSION = "1.0.0";
|
|
11
|
+
/**
|
|
12
|
+
* Build the `kibana.json` manifest for a target Kibana version.
|
|
13
|
+
*
|
|
14
|
+
* @param targetVersion - Kibana version (defaults to "kibana").
|
|
15
|
+
*/
|
|
16
|
+
export function buildKibanaManifest(targetVersion = "kibana") {
|
|
17
|
+
return {
|
|
18
|
+
id: KIBANA_PLUGIN_ID,
|
|
19
|
+
version: KIBANA_PLUGIN_VERSION,
|
|
20
|
+
kibanaVersion: targetVersion,
|
|
21
|
+
server: true,
|
|
22
|
+
ui: true,
|
|
23
|
+
requiredPlugins: ["dashboard", "embeddable", "data"],
|
|
24
|
+
optionalPlugins: [],
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Message type constants re-exported so the generated plugin templates can
|
|
29
|
+
* reference the same protocol identifiers as the host helpers.
|
|
30
|
+
*/
|
|
31
|
+
export { EMBED_MESSAGE_TYPE };
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9raWJhbmEvbWFuaWZlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUseUJBQW9CO0FBRWpELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxPQUFPLENBQUM7QUFhN0M7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsZ0JBQXdCLFFBQVE7SUFFaEMsT0FBTztRQUNMLEVBQUUsRUFBRSxnQkFBZ0I7UUFDcEIsT0FBTyxFQUFFLHFCQUFxQjtRQUM5QixhQUFhLEVBQUUsYUFBYTtRQUM1QixNQUFNLEVBQUUsSUFBSTtRQUNaLEVBQUUsRUFBRSxJQUFJO1FBQ1IsZUFBZSxFQUFFLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUM7UUFDcEQsZUFBZSxFQUFFLEVBQUU7S0FDcEIsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvcGx1Z2lucy9raWJhbmEvbWFuaWZlc3RcbiAqIEBzdW1tYXJ5IEtpYmFuYSBlbWJlZCBwbHVnaW4gbWFuaWZlc3QgYnVpbGRlci5cbiAqIEBkZXNjcmlwdGlvbiBCdWlsZHMgdGhlIGBraWJhbmEuanNvbmAgbWFuaWZlc3QgZm9yIHRoZSBvcmctYWdub3N0aWNcbiAqIGBvcmdEYXNoYm9hcmRFbWJlZGAgcGx1Z2luIGFnYWluc3QgYSB0YXJnZXQgS2liYW5hIHZlcnNpb24uXG4gKi9cbmltcG9ydCB7IEVNQkVEX01FU1NBR0VfVFlQRSB9IGZyb20gXCIuLi9jb250cmFjdFwiO1xuXG5leHBvcnQgY29uc3QgS0lCQU5BX1BMVUdJTl9JRCA9IFwib3JnRGFzaGJvYXJkRW1iZWRcIjtcbmV4cG9ydCBjb25zdCBLSUJBTkFfQVBQX0lEID0gXCJvcmdfZGFzaGJvYXJkX2VtYmVkXCI7XG5leHBvcnQgY29uc3QgS0lCQU5BX1BMVUdJTl9WRVJTSU9OID0gXCIxLjAuMFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEtpYmFuYU1hbmlmZXN0IHtcbiAgaWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBraWJhbmFWZXJzaW9uOiBzdHJpbmc7XG4gIHNlcnZlcjogYm9vbGVhbjtcbiAgdWk6IGJvb2xlYW47XG4gIHJlcXVpcmVkUGx1Z2luczogc3RyaW5nW107XG4gIG9wdGlvbmFsUGx1Z2luczogc3RyaW5nW107XG4gIHJlcXVpcmVkQnVuZGxlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBga2liYW5hLmpzb25gIG1hbmlmZXN0IGZvciBhIHRhcmdldCBLaWJhbmEgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0VmVyc2lvbiAtIEtpYmFuYSB2ZXJzaW9uIChkZWZhdWx0cyB0byBcImtpYmFuYVwiKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkS2liYW5hTWFuaWZlc3QoXG4gIHRhcmdldFZlcnNpb246IHN0cmluZyA9IFwia2liYW5hXCJcbik6IEtpYmFuYU1hbmlmZXN0IHtcbiAgcmV0dXJuIHtcbiAgICBpZDogS0lCQU5BX1BMVUdJTl9JRCxcbiAgICB2ZXJzaW9uOiBLSUJBTkFfUExVR0lOX1ZFUlNJT04sXG4gICAga2liYW5hVmVyc2lvbjogdGFyZ2V0VmVyc2lvbixcbiAgICBzZXJ2ZXI6IHRydWUsXG4gICAgdWk6IHRydWUsXG4gICAgcmVxdWlyZWRQbHVnaW5zOiBbXCJkYXNoYm9hcmRcIiwgXCJlbWJlZGRhYmxlXCIsIFwiZGF0YVwiXSxcbiAgICBvcHRpb25hbFBsdWdpbnM6IFtdLFxuICB9O1xufVxuXG4vKipcbiAqIE1lc3NhZ2UgdHlwZSBjb25zdGFudHMgcmUtZXhwb3J0ZWQgc28gdGhlIGdlbmVyYXRlZCBwbHVnaW4gdGVtcGxhdGVzIGNhblxuICogcmVmZXJlbmNlIHRoZSBzYW1lIHByb3RvY29sIGlkZW50aWZpZXJzIGFzIHRoZSBob3N0IGhlbHBlcnMuXG4gKi9cbmV4cG9ydCB7IEVNQkVEX01FU1NBR0VfVFlQRSB9O1xuIl19
|