@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.
Files changed (196) hide show
  1. package/README.md +11 -3
  2. package/dist/integrations.cjs +445 -7
  3. package/dist/integrations.js +479 -8
  4. package/jest.config.cjs +1 -1
  5. package/lib/cjs/feature-flags/constants.cjs +16 -0
  6. package/lib/cjs/feature-flags/decorators.cjs +65 -0
  7. package/lib/cjs/feature-flags/environment.cjs +26 -0
  8. package/lib/cjs/feature-flags/index.cjs +31 -0
  9. package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs +81 -0
  10. package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs +78 -0
  11. package/lib/cjs/feature-flags/readers/FeatureFlagReader.cjs +25 -0
  12. package/lib/cjs/feature-flags/readers/index.cjs +19 -0
  13. package/lib/cjs/feature-flags/services/FeatureFlag.service.cjs +259 -0
  14. package/lib/cjs/feature-flags/types.cjs +4 -0
  15. package/lib/cjs/feature-flags/utils.cjs +141 -0
  16. package/lib/cjs/graph/engine/execution/SwitchGraphNodeExecutor.cjs +9 -9
  17. package/lib/cjs/graph/shared/nodes/flow-control.cjs +4 -3
  18. package/lib/cjs/graph/shared/types.cjs +2 -2
  19. package/lib/cjs/index.cjs +6 -5
  20. package/lib/cjs/kibana/builders/KibanaIndexBuilder.cjs +329 -0
  21. package/lib/cjs/kibana/builders/KibanaIndexBuilderCollection.cjs +37 -0
  22. package/lib/cjs/kibana/builders/index.cjs +20 -0
  23. package/lib/cjs/kibana/helpers.cjs +20 -16
  24. package/lib/cjs/kibana/index.cjs +3 -2
  25. package/lib/cjs/kibana/types.cjs +11 -2
  26. package/lib/cjs/loader/ObjectLoader.cjs +154 -0
  27. package/lib/cjs/loader/families.cjs +78 -0
  28. package/lib/cjs/loader/index.cjs +28 -0
  29. package/lib/cjs/loader/types.cjs +4 -0
  30. package/lib/cjs/nest/decorators.cjs +17 -0
  31. package/lib/cjs/nest/index.cjs +3 -3
  32. package/lib/cjs/nest/keycloakAuthHandler.cjs +74 -35
  33. package/lib/cjs/nest/keycloakModule.cjs +7 -10
  34. package/lib/cjs/nest/types.cjs +2 -2
  35. package/lib/cjs/nest/utils.cjs +58 -50
  36. package/lib/cjs/plugins/contract.cjs +76 -0
  37. package/lib/cjs/plugins/index.cjs +35 -0
  38. package/lib/cjs/plugins/kibana/host.cjs +24 -0
  39. package/lib/cjs/plugins/kibana/index.cjs +38 -0
  40. package/lib/cjs/plugins/kibana/installer.cjs +180 -0
  41. package/lib/cjs/plugins/kibana/manifest.cjs +33 -0
  42. package/lib/cjs/plugins/kibana/templates.cjs +503 -0
  43. package/lib/cjs/plugins/kibana/types.cjs +33 -0
  44. package/lib/cjs/plugins/superset/host.cjs +26 -0
  45. package/lib/cjs/plugins/superset/index.cjs +40 -0
  46. package/lib/cjs/plugins/superset/installer.cjs +232 -0
  47. package/lib/cjs/plugins/superset/manifest.cjs +35 -0
  48. package/lib/cjs/plugins/superset/templates.cjs +844 -0
  49. package/lib/cjs/plugins/superset/types.cjs +39 -0
  50. package/lib/esm/feature-flags/constants.js +12 -0
  51. package/lib/esm/feature-flags/decorators.js +49 -0
  52. package/lib/esm/feature-flags/environment.js +18 -0
  53. package/lib/esm/feature-flags/index.js +14 -0
  54. package/lib/esm/feature-flags/models/FeatureFlag.model.js +72 -0
  55. package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js +69 -0
  56. package/lib/esm/feature-flags/readers/FeatureFlagReader.js +19 -0
  57. package/lib/esm/feature-flags/readers/index.js +2 -0
  58. package/lib/esm/feature-flags/services/FeatureFlag.service.js +250 -0
  59. package/lib/esm/feature-flags/types.js +2 -0
  60. package/lib/esm/feature-flags/utils.js +126 -0
  61. package/lib/esm/graph/engine/execution/SwitchGraphNodeExecutor.js +8 -8
  62. package/lib/esm/graph/shared/nodes/flow-control.js +3 -2
  63. package/lib/esm/graph/shared/types.js +1 -1
  64. package/lib/esm/index.js +5 -4
  65. package/lib/esm/kibana/builders/KibanaIndexBuilder.js +319 -0
  66. package/lib/esm/kibana/builders/KibanaIndexBuilderCollection.js +32 -0
  67. package/lib/esm/kibana/builders/index.js +3 -0
  68. package/lib/esm/kibana/helpers.js +19 -15
  69. package/lib/esm/kibana/index.js +2 -1
  70. package/lib/esm/kibana/types.js +13 -2
  71. package/lib/esm/loader/ObjectLoader.js +115 -0
  72. package/lib/esm/loader/families.js +66 -0
  73. package/lib/esm/loader/index.js +11 -0
  74. package/lib/esm/loader/types.js +2 -0
  75. package/lib/esm/nest/decorators.js +12 -0
  76. package/lib/esm/nest/index.js +2 -2
  77. package/lib/esm/nest/keycloakAuthHandler.js +67 -35
  78. package/lib/esm/nest/keycloakModule.js +7 -10
  79. package/lib/esm/nest/types.js +1 -1
  80. package/lib/esm/nest/utils.js +55 -46
  81. package/lib/esm/plugins/contract.js +68 -0
  82. package/lib/esm/plugins/index.js +18 -0
  83. package/lib/esm/plugins/kibana/host.js +19 -0
  84. package/lib/esm/plugins/kibana/index.js +14 -0
  85. package/lib/esm/plugins/kibana/installer.js +140 -0
  86. package/lib/esm/plugins/kibana/manifest.js +32 -0
  87. package/lib/esm/plugins/kibana/templates.js +499 -0
  88. package/lib/esm/plugins/kibana/types.js +10 -0
  89. package/lib/esm/plugins/superset/host.js +21 -0
  90. package/lib/esm/plugins/superset/index.js +16 -0
  91. package/lib/esm/plugins/superset/installer.js +192 -0
  92. package/lib/esm/plugins/superset/manifest.js +30 -0
  93. package/lib/esm/plugins/superset/templates.js +840 -0
  94. package/lib/esm/plugins/superset/types.js +11 -0
  95. package/lib/types/feature-flags/constants.d.cts +11 -0
  96. package/lib/types/feature-flags/constants.d.mts +11 -0
  97. package/lib/types/feature-flags/decorators.d.cts +11 -0
  98. package/lib/types/feature-flags/decorators.d.mts +11 -0
  99. package/lib/types/feature-flags/environment.d.cts +11 -0
  100. package/lib/types/feature-flags/environment.d.mts +11 -0
  101. package/lib/types/feature-flags/index.d.cts +13 -0
  102. package/lib/types/feature-flags/index.d.mts +13 -0
  103. package/lib/types/feature-flags/models/FeatureFlag.model.d.cts +16 -0
  104. package/lib/types/feature-flags/models/FeatureFlag.model.d.mts +16 -0
  105. package/lib/types/feature-flags/models/FeatureFlagAccess.model.d.cts +15 -0
  106. package/lib/types/feature-flags/models/FeatureFlagAccess.model.d.mts +15 -0
  107. package/lib/types/feature-flags/readers/FeatureFlagReader.d.cts +10 -0
  108. package/lib/types/feature-flags/readers/FeatureFlagReader.d.mts +10 -0
  109. package/lib/types/feature-flags/readers/index.d.cts +1 -0
  110. package/lib/types/feature-flags/readers/index.d.mts +1 -0
  111. package/lib/types/feature-flags/services/FeatureFlag.service.d.cts +43 -0
  112. package/lib/types/feature-flags/services/FeatureFlag.service.d.mts +43 -0
  113. package/lib/types/feature-flags/types.d.cts +39 -0
  114. package/lib/types/feature-flags/types.d.mts +39 -0
  115. package/lib/types/feature-flags/utils.d.cts +13 -0
  116. package/lib/types/feature-flags/utils.d.mts +13 -0
  117. package/lib/types/graph/engine/execution/SwitchGraphNodeExecutor.d.cts +2 -2
  118. package/lib/types/graph/engine/execution/SwitchGraphNodeExecutor.d.mts +2 -2
  119. package/lib/types/graph/shared/types.d.cts +3 -3
  120. package/lib/types/graph/shared/types.d.mts +3 -3
  121. package/lib/types/index.d.cts +3 -2
  122. package/lib/types/index.d.mts +3 -2
  123. package/lib/types/kibana/builders/KibanaIndexBuilder.d.cts +67 -0
  124. package/lib/types/kibana/builders/KibanaIndexBuilder.d.mts +67 -0
  125. package/lib/types/kibana/builders/KibanaIndexBuilderCollection.d.cts +17 -0
  126. package/lib/types/kibana/builders/KibanaIndexBuilderCollection.d.mts +17 -0
  127. package/lib/types/kibana/builders/index.d.cts +2 -0
  128. package/lib/types/kibana/builders/index.d.mts +2 -0
  129. package/lib/types/kibana/index.d.cts +1 -0
  130. package/lib/types/kibana/index.d.mts +1 -0
  131. package/lib/types/kibana/types.d.cts +11 -0
  132. package/lib/types/kibana/types.d.mts +11 -0
  133. package/lib/types/loader/ObjectLoader.d.cts +27 -0
  134. package/lib/types/loader/ObjectLoader.d.mts +27 -0
  135. package/lib/types/loader/families.d.cts +34 -0
  136. package/lib/types/loader/families.d.mts +34 -0
  137. package/lib/types/loader/index.d.cts +10 -0
  138. package/lib/types/loader/index.d.mts +10 -0
  139. package/lib/types/loader/types.d.cts +24 -0
  140. package/lib/types/loader/types.d.mts +24 -0
  141. package/lib/types/nest/decorators.d.cts +8 -0
  142. package/lib/types/nest/decorators.d.mts +8 -0
  143. package/lib/types/nest/index.d.cts +1 -1
  144. package/lib/types/nest/index.d.mts +1 -1
  145. package/lib/types/nest/keycloakAuthHandler.d.cts +19 -42
  146. package/lib/types/nest/keycloakAuthHandler.d.mts +19 -42
  147. package/lib/types/nest/keycloakModule.d.cts +3 -5
  148. package/lib/types/nest/keycloakModule.d.mts +3 -5
  149. package/lib/types/nest/types.d.cts +2 -0
  150. package/lib/types/nest/types.d.mts +2 -0
  151. package/lib/types/nest/utils.d.cts +3 -4
  152. package/lib/types/nest/utils.d.mts +3 -4
  153. package/lib/types/plugins/contract.d.cts +180 -0
  154. package/lib/types/plugins/contract.d.mts +180 -0
  155. package/lib/types/plugins/index.d.cts +17 -0
  156. package/lib/types/plugins/index.d.mts +17 -0
  157. package/lib/types/plugins/kibana/host.d.cts +18 -0
  158. package/lib/types/plugins/kibana/host.d.mts +18 -0
  159. package/lib/types/plugins/kibana/index.d.cts +13 -0
  160. package/lib/types/plugins/kibana/index.d.mts +13 -0
  161. package/lib/types/plugins/kibana/installer.d.cts +45 -0
  162. package/lib/types/plugins/kibana/installer.d.mts +45 -0
  163. package/lib/types/plugins/kibana/manifest.d.cts +31 -0
  164. package/lib/types/plugins/kibana/manifest.d.mts +31 -0
  165. package/lib/types/plugins/kibana/templates.d.cts +12 -0
  166. package/lib/types/plugins/kibana/templates.d.mts +12 -0
  167. package/lib/types/plugins/kibana/types.d.cts +9 -0
  168. package/lib/types/plugins/kibana/types.d.mts +9 -0
  169. package/lib/types/plugins/superset/host.d.cts +20 -0
  170. package/lib/types/plugins/superset/host.d.mts +20 -0
  171. package/lib/types/plugins/superset/index.d.cts +15 -0
  172. package/lib/types/plugins/superset/index.d.mts +15 -0
  173. package/lib/types/plugins/superset/installer.d.cts +70 -0
  174. package/lib/types/plugins/superset/installer.d.mts +70 -0
  175. package/lib/types/plugins/superset/manifest.d.cts +28 -0
  176. package/lib/types/plugins/superset/manifest.d.mts +28 -0
  177. package/lib/types/plugins/superset/templates.d.cts +12 -0
  178. package/lib/types/plugins/superset/templates.d.mts +12 -0
  179. package/lib/types/plugins/superset/types.d.cts +10 -0
  180. package/lib/types/plugins/superset/types.d.mts +10 -0
  181. package/package.json +62 -3
  182. package/plugins/kibana/.gitignore +16 -0
  183. package/plugins/kibana/Dockerfile +19 -0
  184. package/plugins/kibana/docker-compose.yml +50 -0
  185. package/plugins/kibana/host/index.html +101 -0
  186. package/plugins/kibana/setup-dashboards.sh +84 -0
  187. package/plugins/superset/.gitignore +17 -0
  188. package/plugins/superset/Dockerfile +79 -0
  189. package/plugins/superset/docker-compose.yml +62 -0
  190. package/plugins/superset/host/index.html +168 -0
  191. package/plugins/superset/setup-dashboards.sh +106 -0
  192. package/plugins/superset/superset_config.py +49 -0
  193. package/lib/cjs/nest/authService.cjs +0 -91
  194. package/lib/esm/nest/authService.js +0 -86
  195. package/lib/types/nest/authService.d.cts +0 -63
  196. package/lib/types/nest/authService.d.mts +0 -63
@@ -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
- roles.add(role);
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
- roles.add(role);
15
+ if (!role?.startsWith("namespace:"))
16
+ roles.add(role);
21
17
  }
22
18
  }
23
19
  }
24
20
  return [...roles];
25
21
  }
26
- /**
27
- * Extracts roles from the `resource_access` claim only, optionally excluding
28
- * specified client IDs (e.g. `"account"`). Unlike {@link extractKeycloakRoles}
29
- * this does NOT include `realm_access.roles`.
30
- *
31
- * @param payload The decoded JWT payload.
32
- * @param excluded Client IDs to skip. @default ["account"]
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
- return [...roles];
48
- }
49
- export function getUser(jwt) {
50
- const payload = getTokenPayload(jwt);
51
- if (!payload)
52
- return undefined;
53
- return {
54
- preferred_username: payload.preferred_username,
55
- email: payload.email,
56
- email_verified: payload.email_verified,
57
- name: payload.name,
58
- given_name: payload.given_name,
59
- family_name: payload.family_name,
60
- realm: getRealmFromIssuer(jwt),
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmVzdC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUV0RSxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQVc7SUFDekMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUErQixDQUFDO0lBQ3RILENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE9BQTBDO0lBQzdFLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxLQUFLLE1BQU0sSUFBSSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSztZQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELElBQUksT0FBTyxFQUFFLGVBQWUsSUFBSSxPQUFPLE9BQU8sQ0FBQyxlQUFlLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUUsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQzFELEtBQUssTUFBTSxJQUFJLElB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RCxPQUFPLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvbmVzdC91dGlsc1xuICogQHN1bW1hcnkgTmVzdCBpbnRlZ3JhdGlvbiB1dGlsaXRpZXMuXG4gKiBAZGVzY3JpcHRpb24gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBOZXN0IGF1dGggYW5kIHJlcXVlc3QtY29udGV4dCBhZGFwdGVycy5cbiAqL1xuaW1wb3J0IHR5cGUgeyBLZXljbG9ha0FjY2Vzc1Rva2VuUGF5bG9hZCwgS2V5Y2xvYWtVc2VyIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IEF1dGhvcml6YXRpb25FcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuXG5leHBvcnQgY29uc3QgREVDQUZfQURBUFRFUl9PUFRJT05TID0gU3ltYm9sKFwiRGVjYWZBZGFwdGVyRm9yT3B0aW9uc1wiKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRva2VuUGF5bG9hZChqd3Q6IHN0cmluZyk6IEtleWNsb2FrQWNjZXNzVG9rZW5QYXlsb2FkIHwgbnVsbCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoQnVmZmVyLmZyb20oand0LnNwbGl0KFwiLlwiKVsxXSA/PyBcIlwiLCBcImJhc2U2NHVybFwiKS50b1N0cmluZyhcInV0ZjhcIikpIGFzIEtleWNsb2FrQWNjZXNzVG9rZW5QYXlsb2FkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEtleWNsb2FrUm9sZXMocGF5bG9hZDogS2V5Y2xvYWtBY2Nlc3NUb2tlblBheWxvYWQgfCBudWxsKTogc3RyaW5nW10ge1xuICBjb25zdCByb2xlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkPy5yZWFsbV9hY2Nlc3M/LnJvbGVzKSkge1xuICAgIGZvciAoY29uc3Qgcm9sZSBvZiBwYXlsb2FkLnJlYWxtX2FjY2Vzcy5yb2xlcykgcm9sZXMuYWRkKHJvbGUpO1xuICB9XG4gIGlmIChwYXlsb2FkPy5yZXNvdXJjZV9hY2Nlc3MgJiYgdHlwZW9mIHBheWxvYWQucmVzb3VyY2VfYWNjZXNzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZm9yIChjb25zdCBjbGllbnQgb2YgT2JqZWN0LmtleXMocGF5bG9hZC5yZXNvdXJjZV9hY2Nlc3MpKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2YgcGF5bG9hZC5yZXNvdXJjZV9hY2Nlc3NbY2xpZW50XT8ucm9sZXMgPz8gW10pIHtcbiAgICAgICAgcm9sZXMuYWRkKHJvbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gWy4uLnJvbGVzXTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyByb2xlcyBmcm9tIHRoZSBgcmVzb3VyY2VfYWNjZXNzYCBjbGFpbSBvbmx5LCBvcHRpb25hbGx5IGV4Y2x1ZGluZ1xuICogc3BlY2lmaWVkIGNsaWVudCBJRHMgKGUuZy4gYFwiYWNjb3VudFwiYCkuICBVbmxpa2Uge0BsaW5rIGV4dHJhY3RLZXljbG9ha1JvbGVzfVxuICogdGhpcyBkb2VzIE5PVCBpbmNsdWRlIGByZWFsbV9hY2Nlc3Mucm9sZXNgLlxuICpcbiAqIEBwYXJhbSBwYXlsb2FkICAgVGhlIGRlY29kZWQgSldUIHBheWxvYWQuXG4gKiBAcGFyYW0gZXhjbHVkZWQgIENsaWVudCBJRHMgdG8gc2tpcC4gIEBkZWZhdWx0IFtcImFjY291bnRcIl1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudFJvbGVzKFxuICBwYXlsb2FkOiBLZXljbG9ha0FjY2Vzc1Rva2VuUGF5bG9hZCB8IG51bGwsXG4gIGV4Y2x1ZGVkOiBzdHJpbmdbXSA9IFtcImFjY291bnRcIl1cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzb3VyY2VBY2Nlc3MgPSBwYXlsb2FkPy5yZXNvdXJjZV9hY2Nlc3M7XG4gIGlmICghcmVzb3VyY2VBY2Nlc3MgfHwgdHlwZW9mIHJlc291cmNlQWNjZXNzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gW107XG4gIGNvbnN0IHJvbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgW2NsaWVudElkLCBkYXRhXSBvZiBPYmplY3QuZW50cmllcyhyZXNvdXJjZUFjY2VzcykpIHtcbiAgICBpZiAoZXhjbHVkZWQuaW5jbHVkZXMoY2xpZW50SWQpKSBjb250aW51ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhPy5yb2xlcykpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiBkYXRhLnJvbGVzKSByb2xlcy5hZGQocm9sZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbLi4ucm9sZXNdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXNlcihqd3Q6IHN0cmluZyk6IEtleWNsb2FrVXNlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBheWxvYWQgPSBnZXRUb2tlblBheWxvYWQoand0KTtcbiAgaWYgKCFwYXlsb2FkKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIHByZWZlcnJlZF91c2VybmFtZTogcGF5bG9hZC5wcmVmZXJyZWRfdXNlcm5hbWUsXG4gICAgZW1haWw6IHBheWxvYWQuZW1haWwsXG4gICAgZW1haWxfdmVyaWZpZWQ6IHBheWxvYWQuZW1haWxfdmVyaWZpZWQsXG4gICAgbmFtZTogcGF5bG9hZC5uYW1lLFxuICAgIGdpdmVuX25hbWU6IHBheWxvYWQuZ2l2ZW5fbmFtZSxcbiAgICBmYW1pbHlfbmFtZTogcGF5bG9hZC5mYW1pbHlfbmFtZSxcbiAgICByZWFsbTogZ2V0UmVhbG1Gcm9tSXNzdWVyKGp3dCksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWFsbUZyb21Jc3N1ZXIoand0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXlsb2FkID0gZ2V0VG9rZW5QYXlsb2FkKGp3dCk7XG4gIGNvbnN0IGlzcyA9IHBheWxvYWQ/LmlzcztcbiAgaWYgKCFpc3MpIHtcbiAgICB0aHJvdyBuZXcgQXV0aG9yaXphdGlvbkVycm9yKFwiSXNzdWVyIChpc3MpIGlzIG1pc3NpbmdcIik7XG4gIH1cbiAgbGV0IHVybDogVVJMO1xuICB0cnkge1xuICAgIHVybCA9IG5ldyBVUkwoaXNzKTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEF1dGhvcml6YXRpb25FcnJvcihgSW52YWxpZCBpc3N1ZXIgVVJMOiAke2lzc31gKTtcbiAgfVxuICBjb25zdCBwYXJ0cyA9IHVybC5wYXRobmFtZS5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCByZWFsbXNJbmRleCA9IHBhcnRzLmluZGV4T2YoXCJyZWFsbXNcIik7XG4gIGlmIChyZWFsbXNJbmRleCA9PT0gLTEgfHwgIXBhcnRzW3JlYWxtc0luZGV4ICsgMV0pIHtcbiAgICB0aHJvdyBuZXcgQXV0aG9yaXphdGlvbkVycm9yKGBDYW5ub3QgZXh0cmFjdCByZWFsbSBmcm9tIGlzc3VlcjogJHtpc3N9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnRzW3JlYWxtc0luZGV4ICsgMV07XG59XG4iXX0=
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