@decaf-ts/integrations 0.1.1

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 (376) hide show
  1. package/.dockerignore +0 -0
  2. package/.gitlab-ci.yml +197 -0
  3. package/.prettierrc +9 -0
  4. package/.snyk +12 -0
  5. package/LICENSE.md +21 -0
  6. package/README.md +22 -0
  7. package/dist/integrations.cjs +2 -0
  8. package/dist/integrations.cjs.map +1 -0
  9. package/dist/integrations.js +2 -0
  10. package/dist/integrations.js.map +1 -0
  11. package/docker/1password-compose.yml +24 -0
  12. package/docker/aws-compose.yml +24 -0
  13. package/docker/azure-compose.yml +23 -0
  14. package/docker/compose.integration.yml +164 -0
  15. package/docker/gcp-compose.yml +16 -0
  16. package/docker/keycloak-compose.yml +24 -0
  17. package/docker/kibana-compose.yml +67 -0
  18. package/docker/vault-compose.yml +25 -0
  19. package/eslint.config.js +32 -0
  20. package/jest.config.cjs +48 -0
  21. package/lib/cjs/docker/DockerComposeService.cjs +152 -0
  22. package/lib/cjs/docker/DockerComposeService.cjs.map +1 -0
  23. package/lib/cjs/docker/index.cjs +24 -0
  24. package/lib/cjs/docker/index.cjs.map +1 -0
  25. package/lib/cjs/index.cjs +29 -0
  26. package/lib/cjs/index.cjs.map +1 -0
  27. package/lib/cjs/keycloak/index.cjs +26 -0
  28. package/lib/cjs/keycloak/index.cjs.map +1 -0
  29. package/lib/cjs/keycloak/services/KeycloakAuthService.cjs +189 -0
  30. package/lib/cjs/keycloak/services/KeycloakAuthService.cjs.map +1 -0
  31. package/lib/cjs/keycloak/services/KeycloakClientService.cjs +245 -0
  32. package/lib/cjs/keycloak/services/KeycloakClientService.cjs.map +1 -0
  33. package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs +234 -0
  34. package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs.map +1 -0
  35. package/lib/cjs/keycloak/services/KeycloakRealmService.cjs +202 -0
  36. package/lib/cjs/keycloak/services/KeycloakRealmService.cjs.map +1 -0
  37. package/lib/cjs/keycloak/services/KeycloakRoleService.cjs +249 -0
  38. package/lib/cjs/keycloak/services/KeycloakRoleService.cjs.map +1 -0
  39. package/lib/cjs/keycloak/services/KeycloakService.cjs +225 -0
  40. package/lib/cjs/keycloak/services/KeycloakService.cjs.map +1 -0
  41. package/lib/cjs/keycloak/services/KeycloakUserService.cjs +279 -0
  42. package/lib/cjs/keycloak/services/KeycloakUserService.cjs.map +1 -0
  43. package/lib/cjs/keycloak/services/index.cjs +30 -0
  44. package/lib/cjs/keycloak/services/index.cjs.map +1 -0
  45. package/lib/cjs/keycloak/types.cjs +4 -0
  46. package/lib/cjs/keycloak/types.cjs.map +1 -0
  47. package/lib/cjs/kibana/helpers.cjs +62 -0
  48. package/lib/cjs/kibana/helpers.cjs.map +1 -0
  49. package/lib/cjs/kibana/index.cjs +27 -0
  50. package/lib/cjs/kibana/index.cjs.map +1 -0
  51. package/lib/cjs/kibana/services/KibanaAuthService.cjs +148 -0
  52. package/lib/cjs/kibana/services/KibanaAuthService.cjs.map +1 -0
  53. package/lib/cjs/kibana/services/KibanaDashboardService.cjs +228 -0
  54. package/lib/cjs/kibana/services/KibanaDashboardService.cjs.map +1 -0
  55. package/lib/cjs/kibana/services/KibanaDataViewService.cjs +216 -0
  56. package/lib/cjs/kibana/services/KibanaDataViewService.cjs.map +1 -0
  57. package/lib/cjs/kibana/services/KibanaRoleService.cjs +184 -0
  58. package/lib/cjs/kibana/services/KibanaRoleService.cjs.map +1 -0
  59. package/lib/cjs/kibana/services/KibanaService.cjs +167 -0
  60. package/lib/cjs/kibana/services/KibanaService.cjs.map +1 -0
  61. package/lib/cjs/kibana/services/KibanaSpaceService.cjs +179 -0
  62. package/lib/cjs/kibana/services/KibanaSpaceService.cjs.map +1 -0
  63. package/lib/cjs/kibana/services/KibanaUserService.cjs +198 -0
  64. package/lib/cjs/kibana/services/KibanaUserService.cjs.map +1 -0
  65. package/lib/cjs/kibana/services/index.cjs +24 -0
  66. package/lib/cjs/kibana/services/index.cjs.map +1 -0
  67. package/lib/cjs/kibana/types.cjs +4 -0
  68. package/lib/cjs/kibana/types.cjs.map +1 -0
  69. package/lib/cjs/nest/authService.cjs +37 -0
  70. package/lib/cjs/nest/authService.cjs.map +1 -0
  71. package/lib/cjs/nest/index.cjs +29 -0
  72. package/lib/cjs/nest/index.cjs.map +1 -0
  73. package/lib/cjs/nest/keycloakAuthHandler.cjs +44 -0
  74. package/lib/cjs/nest/keycloakAuthHandler.cjs.map +1 -0
  75. package/lib/cjs/nest/keycloakModule.cjs +25 -0
  76. package/lib/cjs/nest/keycloakModule.cjs.map +1 -0
  77. package/lib/cjs/nest/types.cjs +4 -0
  78. package/lib/cjs/nest/types.cjs.map +1 -0
  79. package/lib/cjs/nest/utils.cjs +68 -0
  80. package/lib/cjs/nest/utils.cjs.map +1 -0
  81. package/lib/cjs/secrets/aws/AwsSecretService.cjs +307 -0
  82. package/lib/cjs/secrets/aws/AwsSecretService.cjs.map +1 -0
  83. package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs +4 -0
  84. package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs.map +1 -0
  85. package/lib/cjs/secrets/aws/index.cjs +25 -0
  86. package/lib/cjs/secrets/aws/index.cjs.map +1 -0
  87. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs +245 -0
  88. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs.map +1 -0
  89. package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs +4 -0
  90. package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs.map +1 -0
  91. package/lib/cjs/secrets/azure/index.cjs +25 -0
  92. package/lib/cjs/secrets/azure/index.cjs.map +1 -0
  93. package/lib/cjs/secrets/core/SecretErrors.cjs +70 -0
  94. package/lib/cjs/secrets/core/SecretErrors.cjs.map +1 -0
  95. package/lib/cjs/secrets/core/SecretName.cjs +54 -0
  96. package/lib/cjs/secrets/core/SecretName.cjs.map +1 -0
  97. package/lib/cjs/secrets/core/SecretReference.cjs +51 -0
  98. package/lib/cjs/secrets/core/SecretReference.cjs.map +1 -0
  99. package/lib/cjs/secrets/core/SecretSerialization.cjs +52 -0
  100. package/lib/cjs/secrets/core/SecretSerialization.cjs.map +1 -0
  101. package/lib/cjs/secrets/core/SecretService.cjs +19 -0
  102. package/lib/cjs/secrets/core/SecretService.cjs.map +1 -0
  103. package/lib/cjs/secrets/core/SecretTypes.cjs +4 -0
  104. package/lib/cjs/secrets/core/SecretTypes.cjs.map +1 -0
  105. package/lib/cjs/secrets/core/index.cjs +29 -0
  106. package/lib/cjs/secrets/core/index.cjs.map +1 -0
  107. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs +332 -0
  108. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs.map +1 -0
  109. package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs +4 -0
  110. package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs.map +1 -0
  111. package/lib/cjs/secrets/gcp/index.cjs +25 -0
  112. package/lib/cjs/secrets/gcp/index.cjs.map +1 -0
  113. package/lib/cjs/secrets/index.cjs +25 -0
  114. package/lib/cjs/secrets/index.cjs.map +1 -0
  115. package/lib/cjs/secrets/model/ModelSecretCrypto.cjs +80 -0
  116. package/lib/cjs/secrets/model/ModelSecretCrypto.cjs.map +1 -0
  117. package/lib/cjs/secrets/model/ModelSecretService.cjs +271 -0
  118. package/lib/cjs/secrets/model/ModelSecretService.cjs.map +1 -0
  119. package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs +4 -0
  120. package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs.map +1 -0
  121. package/lib/cjs/secrets/model/Secret.cjs +49 -0
  122. package/lib/cjs/secrets/model/Secret.cjs.map +1 -0
  123. package/lib/cjs/secrets/model/index.cjs +26 -0
  124. package/lib/cjs/secrets/model/index.cjs.map +1 -0
  125. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs +402 -0
  126. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs.map +1 -0
  127. package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs +4 -0
  128. package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs.map +1 -0
  129. package/lib/cjs/secrets/onepassword/index.cjs +25 -0
  130. package/lib/cjs/secrets/onepassword/index.cjs.map +1 -0
  131. package/lib/cjs/secrets/vault/VaultSecretService.cjs +318 -0
  132. package/lib/cjs/secrets/vault/VaultSecretService.cjs.map +1 -0
  133. package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs +4 -0
  134. package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs.map +1 -0
  135. package/lib/cjs/secrets/vault/index.cjs +25 -0
  136. package/lib/cjs/secrets/vault/index.cjs.map +1 -0
  137. package/lib/cjs/utils.cjs +43 -0
  138. package/lib/cjs/utils.cjs.map +1 -0
  139. package/lib/esm/docker/DockerComposeService.js +140 -0
  140. package/lib/esm/docker/DockerComposeService.js.map +1 -0
  141. package/lib/esm/docker/index.js +7 -0
  142. package/lib/esm/docker/index.js.map +1 -0
  143. package/lib/esm/index.js +11 -0
  144. package/lib/esm/index.js.map +1 -0
  145. package/lib/esm/keycloak/index.js +9 -0
  146. package/lib/esm/keycloak/index.js.map +1 -0
  147. package/lib/esm/keycloak/services/KeycloakAuthService.js +148 -0
  148. package/lib/esm/keycloak/services/KeycloakAuthService.js.map +1 -0
  149. package/lib/esm/keycloak/services/KeycloakClientService.js +204 -0
  150. package/lib/esm/keycloak/services/KeycloakClientService.js.map +1 -0
  151. package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js +193 -0
  152. package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js.map +1 -0
  153. package/lib/esm/keycloak/services/KeycloakRealmService.js +161 -0
  154. package/lib/esm/keycloak/services/KeycloakRealmService.js.map +1 -0
  155. package/lib/esm/keycloak/services/KeycloakRoleService.js +208 -0
  156. package/lib/esm/keycloak/services/KeycloakRoleService.js.map +1 -0
  157. package/lib/esm/keycloak/services/KeycloakService.js +180 -0
  158. package/lib/esm/keycloak/services/KeycloakService.js.map +1 -0
  159. package/lib/esm/keycloak/services/KeycloakUserService.js +238 -0
  160. package/lib/esm/keycloak/services/KeycloakUserService.js.map +1 -0
  161. package/lib/esm/keycloak/services/index.js +13 -0
  162. package/lib/esm/keycloak/services/index.js.map +1 -0
  163. package/lib/esm/keycloak/types.js +2 -0
  164. package/lib/esm/keycloak/types.js.map +1 -0
  165. package/lib/esm/kibana/helpers.js +56 -0
  166. package/lib/esm/kibana/helpers.js.map +1 -0
  167. package/lib/esm/kibana/index.js +10 -0
  168. package/lib/esm/kibana/index.js.map +1 -0
  169. package/lib/esm/kibana/services/KibanaAuthService.js +107 -0
  170. package/lib/esm/kibana/services/KibanaAuthService.js.map +1 -0
  171. package/lib/esm/kibana/services/KibanaDashboardService.js +182 -0
  172. package/lib/esm/kibana/services/KibanaDashboardService.js.map +1 -0
  173. package/lib/esm/kibana/services/KibanaDataViewService.js +170 -0
  174. package/lib/esm/kibana/services/KibanaDataViewService.js.map +1 -0
  175. package/lib/esm/kibana/services/KibanaRoleService.js +138 -0
  176. package/lib/esm/kibana/services/KibanaRoleService.js.map +1 -0
  177. package/lib/esm/kibana/services/KibanaService.js +126 -0
  178. package/lib/esm/kibana/services/KibanaService.js.map +1 -0
  179. package/lib/esm/kibana/services/KibanaSpaceService.js +133 -0
  180. package/lib/esm/kibana/services/KibanaSpaceService.js.map +1 -0
  181. package/lib/esm/kibana/services/KibanaUserService.js +152 -0
  182. package/lib/esm/kibana/services/KibanaUserService.js.map +1 -0
  183. package/lib/esm/kibana/services/index.js +13 -0
  184. package/lib/esm/kibana/services/index.js.map +1 -0
  185. package/lib/esm/kibana/types.js +2 -0
  186. package/lib/esm/kibana/types.js.map +1 -0
  187. package/lib/esm/nest/authService.js +32 -0
  188. package/lib/esm/nest/authService.js.map +1 -0
  189. package/lib/esm/nest/index.js +12 -0
  190. package/lib/esm/nest/index.js.map +1 -0
  191. package/lib/esm/nest/keycloakAuthHandler.js +39 -0
  192. package/lib/esm/nest/keycloakAuthHandler.js.map +1 -0
  193. package/lib/esm/nest/keycloakModule.js +19 -0
  194. package/lib/esm/nest/keycloakModule.js.map +1 -0
  195. package/lib/esm/nest/types.js +2 -0
  196. package/lib/esm/nest/types.js.map +1 -0
  197. package/lib/esm/nest/utils.js +60 -0
  198. package/lib/esm/nest/utils.js.map +1 -0
  199. package/lib/esm/secrets/aws/AwsSecretService.js +302 -0
  200. package/lib/esm/secrets/aws/AwsSecretService.js.map +1 -0
  201. package/lib/esm/secrets/aws/AwsSecretServiceConfig.js +2 -0
  202. package/lib/esm/secrets/aws/AwsSecretServiceConfig.js.map +1 -0
  203. package/lib/esm/secrets/aws/index.js +8 -0
  204. package/lib/esm/secrets/aws/index.js.map +1 -0
  205. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js +240 -0
  206. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js.map +1 -0
  207. package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js +2 -0
  208. package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js.map +1 -0
  209. package/lib/esm/secrets/azure/index.js +8 -0
  210. package/lib/esm/secrets/azure/index.js.map +1 -0
  211. package/lib/esm/secrets/core/SecretErrors.js +61 -0
  212. package/lib/esm/secrets/core/SecretErrors.js.map +1 -0
  213. package/lib/esm/secrets/core/SecretName.js +49 -0
  214. package/lib/esm/secrets/core/SecretName.js.map +1 -0
  215. package/lib/esm/secrets/core/SecretReference.js +45 -0
  216. package/lib/esm/secrets/core/SecretReference.js.map +1 -0
  217. package/lib/esm/secrets/core/SecretSerialization.js +47 -0
  218. package/lib/esm/secrets/core/SecretSerialization.js.map +1 -0
  219. package/lib/esm/secrets/core/SecretService.js +14 -0
  220. package/lib/esm/secrets/core/SecretService.js.map +1 -0
  221. package/lib/esm/secrets/core/SecretTypes.js +2 -0
  222. package/lib/esm/secrets/core/SecretTypes.js.map +1 -0
  223. package/lib/esm/secrets/core/index.js +12 -0
  224. package/lib/esm/secrets/core/index.js.map +1 -0
  225. package/lib/esm/secrets/gcp/GcpSecretManagerService.js +294 -0
  226. package/lib/esm/secrets/gcp/GcpSecretManagerService.js.map +1 -0
  227. package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js +2 -0
  228. package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js.map +1 -0
  229. package/lib/esm/secrets/gcp/index.js +8 -0
  230. package/lib/esm/secrets/gcp/index.js.map +1 -0
  231. package/lib/esm/secrets/index.js +8 -0
  232. package/lib/esm/secrets/index.js.map +1 -0
  233. package/lib/esm/secrets/model/ModelSecretCrypto.js +73 -0
  234. package/lib/esm/secrets/model/ModelSecretCrypto.js.map +1 -0
  235. package/lib/esm/secrets/model/ModelSecretService.js +266 -0
  236. package/lib/esm/secrets/model/ModelSecretService.js.map +1 -0
  237. package/lib/esm/secrets/model/ModelSecretServiceConfig.js +2 -0
  238. package/lib/esm/secrets/model/ModelSecretServiceConfig.js.map +1 -0
  239. package/lib/esm/secrets/model/Secret.js +39 -0
  240. package/lib/esm/secrets/model/Secret.js.map +1 -0
  241. package/lib/esm/secrets/model/index.js +9 -0
  242. package/lib/esm/secrets/model/index.js.map +1 -0
  243. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js +397 -0
  244. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js.map +1 -0
  245. package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js +2 -0
  246. package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js.map +1 -0
  247. package/lib/esm/secrets/onepassword/index.js +8 -0
  248. package/lib/esm/secrets/onepassword/index.js.map +1 -0
  249. package/lib/esm/secrets/vault/VaultSecretService.js +312 -0
  250. package/lib/esm/secrets/vault/VaultSecretService.js.map +1 -0
  251. package/lib/esm/secrets/vault/VaultSecretServiceConfig.js +2 -0
  252. package/lib/esm/secrets/vault/VaultSecretServiceConfig.js.map +1 -0
  253. package/lib/esm/secrets/vault/index.js +8 -0
  254. package/lib/esm/secrets/vault/index.js.map +1 -0
  255. package/lib/esm/utils.js +39 -0
  256. package/lib/esm/utils.js.map +1 -0
  257. package/lib/types/docker/DockerComposeService.d.cts +53 -0
  258. package/lib/types/docker/DockerComposeService.d.mts +53 -0
  259. package/lib/types/docker/index.d.cts +6 -0
  260. package/lib/types/docker/index.d.mts +6 -0
  261. package/lib/types/index.d.cts +10 -0
  262. package/lib/types/index.d.mts +10 -0
  263. package/lib/types/keycloak/index.d.cts +8 -0
  264. package/lib/types/keycloak/index.d.mts +8 -0
  265. package/lib/types/keycloak/services/KeycloakAuthService.d.cts +20 -0
  266. package/lib/types/keycloak/services/KeycloakAuthService.d.mts +20 -0
  267. package/lib/types/keycloak/services/KeycloakClientService.d.cts +25 -0
  268. package/lib/types/keycloak/services/KeycloakClientService.d.mts +25 -0
  269. package/lib/types/keycloak/services/KeycloakIdentityProviderService.d.cts +23 -0
  270. package/lib/types/keycloak/services/KeycloakIdentityProviderService.d.mts +23 -0
  271. package/lib/types/keycloak/services/KeycloakRealmService.d.cts +31 -0
  272. package/lib/types/keycloak/services/KeycloakRealmService.d.mts +31 -0
  273. package/lib/types/keycloak/services/KeycloakRoleService.d.cts +29 -0
  274. package/lib/types/keycloak/services/KeycloakRoleService.d.mts +29 -0
  275. package/lib/types/keycloak/services/KeycloakService.d.cts +38 -0
  276. package/lib/types/keycloak/services/KeycloakService.d.mts +38 -0
  277. package/lib/types/keycloak/services/KeycloakUserService.d.cts +46 -0
  278. package/lib/types/keycloak/services/KeycloakUserService.d.mts +46 -0
  279. package/lib/types/keycloak/services/index.d.cts +12 -0
  280. package/lib/types/keycloak/services/index.d.mts +12 -0
  281. package/lib/types/keycloak/types.d.cts +103 -0
  282. package/lib/types/keycloak/types.d.mts +103 -0
  283. package/lib/types/kibana/helpers.d.cts +9 -0
  284. package/lib/types/kibana/helpers.d.mts +9 -0
  285. package/lib/types/kibana/index.d.cts +9 -0
  286. package/lib/types/kibana/index.d.mts +9 -0
  287. package/lib/types/kibana/services/KibanaAuthService.d.cts +16 -0
  288. package/lib/types/kibana/services/KibanaAuthService.d.mts +16 -0
  289. package/lib/types/kibana/services/KibanaDashboardService.d.cts +31 -0
  290. package/lib/types/kibana/services/KibanaDashboardService.d.mts +31 -0
  291. package/lib/types/kibana/services/KibanaDataViewService.d.cts +23 -0
  292. package/lib/types/kibana/services/KibanaDataViewService.d.mts +23 -0
  293. package/lib/types/kibana/services/KibanaRoleService.d.cts +19 -0
  294. package/lib/types/kibana/services/KibanaRoleService.d.mts +19 -0
  295. package/lib/types/kibana/services/KibanaService.d.cts +55 -0
  296. package/lib/types/kibana/services/KibanaService.d.mts +55 -0
  297. package/lib/types/kibana/services/KibanaSpaceService.d.cts +20 -0
  298. package/lib/types/kibana/services/KibanaSpaceService.d.mts +20 -0
  299. package/lib/types/kibana/services/KibanaUserService.d.cts +19 -0
  300. package/lib/types/kibana/services/KibanaUserService.d.mts +19 -0
  301. package/lib/types/kibana/services/index.d.cts +12 -0
  302. package/lib/types/kibana/services/index.d.mts +12 -0
  303. package/lib/types/kibana/types.d.cts +75 -0
  304. package/lib/types/kibana/types.d.mts +75 -0
  305. package/lib/types/nest/authService.d.cts +9 -0
  306. package/lib/types/nest/authService.d.mts +9 -0
  307. package/lib/types/nest/index.d.cts +11 -0
  308. package/lib/types/nest/index.d.mts +11 -0
  309. package/lib/types/nest/keycloakAuthHandler.d.cts +7 -0
  310. package/lib/types/nest/keycloakAuthHandler.d.mts +7 -0
  311. package/lib/types/nest/keycloakModule.d.cts +15 -0
  312. package/lib/types/nest/keycloakModule.d.mts +15 -0
  313. package/lib/types/nest/types.d.cts +48 -0
  314. package/lib/types/nest/types.d.mts +48 -0
  315. package/lib/types/nest/utils.d.cts +11 -0
  316. package/lib/types/nest/utils.d.mts +11 -0
  317. package/lib/types/secrets/aws/AwsSecretService.d.cts +19 -0
  318. package/lib/types/secrets/aws/AwsSecretService.d.mts +19 -0
  319. package/lib/types/secrets/aws/AwsSecretServiceConfig.d.cts +16 -0
  320. package/lib/types/secrets/aws/AwsSecretServiceConfig.d.mts +16 -0
  321. package/lib/types/secrets/aws/index.d.cts +7 -0
  322. package/lib/types/secrets/aws/index.d.mts +7 -0
  323. package/lib/types/secrets/azure/AzureKeyVaultSecretService.d.cts +20 -0
  324. package/lib/types/secrets/azure/AzureKeyVaultSecretService.d.mts +20 -0
  325. package/lib/types/secrets/azure/AzureKeyVaultSecretServiceConfig.d.cts +11 -0
  326. package/lib/types/secrets/azure/AzureKeyVaultSecretServiceConfig.d.mts +11 -0
  327. package/lib/types/secrets/azure/index.d.cts +7 -0
  328. package/lib/types/secrets/azure/index.d.mts +7 -0
  329. package/lib/types/secrets/core/SecretErrors.d.cts +15 -0
  330. package/lib/types/secrets/core/SecretErrors.d.mts +15 -0
  331. package/lib/types/secrets/core/SecretName.d.cts +2 -0
  332. package/lib/types/secrets/core/SecretName.d.mts +2 -0
  333. package/lib/types/secrets/core/SecretReference.d.cts +13 -0
  334. package/lib/types/secrets/core/SecretReference.d.mts +13 -0
  335. package/lib/types/secrets/core/SecretSerialization.d.cts +3 -0
  336. package/lib/types/secrets/core/SecretSerialization.d.mts +3 -0
  337. package/lib/types/secrets/core/SecretService.d.cts +22 -0
  338. package/lib/types/secrets/core/SecretService.d.mts +22 -0
  339. package/lib/types/secrets/core/SecretTypes.d.cts +76 -0
  340. package/lib/types/secrets/core/SecretTypes.d.mts +76 -0
  341. package/lib/types/secrets/core/index.d.cts +11 -0
  342. package/lib/types/secrets/core/index.d.mts +11 -0
  343. package/lib/types/secrets/gcp/GcpSecretManagerService.d.cts +20 -0
  344. package/lib/types/secrets/gcp/GcpSecretManagerService.d.mts +20 -0
  345. package/lib/types/secrets/gcp/GcpSecretManagerServiceConfig.d.cts +15 -0
  346. package/lib/types/secrets/gcp/GcpSecretManagerServiceConfig.d.mts +15 -0
  347. package/lib/types/secrets/gcp/index.d.cts +7 -0
  348. package/lib/types/secrets/gcp/index.d.mts +7 -0
  349. package/lib/types/secrets/index.d.cts +7 -0
  350. package/lib/types/secrets/index.d.mts +7 -0
  351. package/lib/types/secrets/model/ModelSecretCrypto.d.cts +11 -0
  352. package/lib/types/secrets/model/ModelSecretCrypto.d.mts +11 -0
  353. package/lib/types/secrets/model/ModelSecretService.d.cts +21 -0
  354. package/lib/types/secrets/model/ModelSecretService.d.mts +21 -0
  355. package/lib/types/secrets/model/ModelSecretServiceConfig.d.cts +10 -0
  356. package/lib/types/secrets/model/ModelSecretServiceConfig.d.mts +10 -0
  357. package/lib/types/secrets/model/Secret.d.cts +24 -0
  358. package/lib/types/secrets/model/Secret.d.mts +24 -0
  359. package/lib/types/secrets/model/index.d.cts +8 -0
  360. package/lib/types/secrets/model/index.d.mts +8 -0
  361. package/lib/types/secrets/onepassword/OnePasswordSecretService.d.cts +22 -0
  362. package/lib/types/secrets/onepassword/OnePasswordSecretService.d.mts +22 -0
  363. package/lib/types/secrets/onepassword/OnePasswordSecretServiceConfig.d.cts +13 -0
  364. package/lib/types/secrets/onepassword/OnePasswordSecretServiceConfig.d.mts +13 -0
  365. package/lib/types/secrets/onepassword/index.d.cts +7 -0
  366. package/lib/types/secrets/onepassword/index.d.mts +7 -0
  367. package/lib/types/secrets/vault/VaultSecretService.d.cts +37 -0
  368. package/lib/types/secrets/vault/VaultSecretService.d.mts +37 -0
  369. package/lib/types/secrets/vault/VaultSecretServiceConfig.d.cts +13 -0
  370. package/lib/types/secrets/vault/VaultSecretServiceConfig.d.mts +13 -0
  371. package/lib/types/secrets/vault/index.d.cts +7 -0
  372. package/lib/types/secrets/vault/index.d.mts +7 -0
  373. package/lib/types/utils.d.cts +7 -0
  374. package/lib/types/utils.d.mts +7 -0
  375. package/package.json +192 -0
  376. package/renovate.json +21 -0
@@ -0,0 +1,238 @@
1
+ import { BadRequestError, ConflictError, InternalError, NotFoundError, } from "@decaf-ts/db-decorators";
2
+ import { ClientBasedService } from "@decaf-ts/core";
3
+ import Axios from "axios";
4
+ import * as https from "node:https";
5
+ export class KeycloakUserService extends ClientBasedService {
6
+ async initialize(...args) {
7
+ const { ctxArgs } = (await this.logCtx(args, "initialize", true)).for(this.initialize);
8
+ const config = ctxArgs[0];
9
+ this._config = config;
10
+ const client = this.createHttpClient(config);
11
+ this._client = client;
12
+ return { config, client };
13
+ }
14
+ async addUserToRealm(keycloakUser, payload, ...args) {
15
+ const { ctxArgs } = (await this.logCtx(args, "addUserToRealm", true)).for(this.addUserToRealm);
16
+ return this.createRealmUser(keycloakUser, payload, ...ctxArgs);
17
+ }
18
+ async editUser(realmName, userUUID, payload, ...args) {
19
+ const { ctxArgs } = (await this.logCtx(args, "editUser", true)).for(this.editUser);
20
+ await this.updateRealmUser(realmName, userUUID, payload, ...ctxArgs);
21
+ }
22
+ async updateRealmUser(realmName, userUUID, payload, ...args) {
23
+ const { ctxArgs } = (await this.logCtx(args, "updateRealmUser", true)).for(this.updateRealmUser);
24
+ const adminAccessToken = await this.getAdminAccessToken(...ctxArgs);
25
+ const response = await this.request("GET", `/admin/realms/${realmName}/users/${userUUID}`, adminAccessToken, undefined, 200, {}, ...ctxArgs);
26
+ const currentUser = this.parseJsonResponse(response.data) ?? {};
27
+ await this.request("PUT", `/admin/realms/${realmName}/users/${userUUID}`, adminAccessToken, { ...currentUser, ...payload }, 204, {}, ...ctxArgs);
28
+ }
29
+ async removeUserFromRealm(realmName, userUUID, ...args) {
30
+ const { ctxArgs } = (await this.logCtx(args, "removeUserFromRealm", true)).for(this.removeUserFromRealm);
31
+ const adminAccessToken = await this.getAccessToken(this.config.adminApiUser, ...ctxArgs);
32
+ await this.deleteUser(adminAccessToken, {
33
+ realm: realmName,
34
+ usernameUUID: userUUID,
35
+ apiClientId: "",
36
+ username: "",
37
+ password: "",
38
+ }, ...ctxArgs);
39
+ }
40
+ async deleteUser(accessToken, keycloakUser, ...args) {
41
+ const { ctxArgs } = (await this.logCtx(args, "deleteUser", true)).for(this.deleteUser);
42
+ await this.request("DELETE", `/admin/realms/${keycloakUser.realm}/users/${keycloakUser.usernameUUID}`, accessToken, undefined, 204, {}, ...ctxArgs);
43
+ }
44
+ async createRealmUser(keycloakUser, payload, ...args) {
45
+ const { ctxArgs } = (await this.logCtx(args, "createRealmUser", true)).for(this.createRealmUser);
46
+ const adminAccessToken = await this.getAdminAccessToken(...ctxArgs);
47
+ const userPayload = {
48
+ username: keycloakUser.username,
49
+ firstName: "Api",
50
+ lastName: "Admin",
51
+ email: `${keycloakUser.apiClientId}@${keycloakUser.realm}.com`,
52
+ emailVerified: true,
53
+ enabled: true,
54
+ credentials: [
55
+ {
56
+ type: "password",
57
+ value: keycloakUser.password,
58
+ temporary: false,
59
+ },
60
+ ],
61
+ ...payload,
62
+ };
63
+ const response = await this.request("POST", `/admin/realms/${keycloakUser.realm}/users`, adminAccessToken, userPayload, 201, {}, ...ctxArgs);
64
+ return this.extractUUIDfromResponse(response);
65
+ }
66
+ async assignRolesToUser(rolesUrl, setRolesUrl, roleNames, accessToken, ...args) {
67
+ const { ctxArgs } = (await this.logCtx(args, "assignRolesToUser", true)).for(this.assignRolesToUser);
68
+ const response = await this.request("GET", rolesUrl, accessToken, undefined, 200, {}, ...ctxArgs);
69
+ const roles = this.parseJsonResponse(response.data) ?? [];
70
+ const selectedRoles = roles.filter((role) => roleNames.includes(role.name));
71
+ if (selectedRoles.length === 0) {
72
+ throw new NotFoundError(`No roles matched ${roleNames.join(", ")}`);
73
+ }
74
+ const promises = selectedRoles.map((role) => this.request("POST", setRolesUrl, accessToken, [role], 204, {}, ...ctxArgs));
75
+ await Promise.all(promises);
76
+ }
77
+ async grantRealmRolesToUser(realmName, userUUID, roleNames, ...args) {
78
+ const { ctxArgs } = (await this.logCtx(args, "grantRealmRolesToUser", true)).for(this.grantRealmRolesToUser);
79
+ const adminAccessToken = await this.getAdminAccessToken(...ctxArgs);
80
+ await this.assignRolesToUser(`/admin/realms/${realmName}/roles`, `/admin/realms/${realmName}/users/${userUUID}/role-mappings/realm`, roleNames, adminAccessToken, ...ctxArgs);
81
+ }
82
+ async grantClientRolesToUser(realmName, clientUUID, userUUID, roleNames, ...args) {
83
+ const { ctxArgs } = (await this.logCtx(args, "grantClientRolesToUser", true)).for(this.grantClientRolesToUser);
84
+ const adminAccessToken = await this.getAdminAccessToken(...ctxArgs);
85
+ await this.assignRolesToUser(`/admin/realms/${realmName}/clients/${clientUUID}/roles`, `/admin/realms/${realmName}/users/${userUUID}/role-mappings/clients/${clientUUID}`, roleNames, adminAccessToken, ...ctxArgs);
86
+ }
87
+ async revokeRealmRolesFromUser(realmName, userUUID, roleNames, ...args) {
88
+ const { ctxArgs } = (await this.logCtx(args, "revokeRealmRolesFromUser", true)).for(this.revokeRealmRolesFromUser);
89
+ const adminAccessToken = await this.getAdminAccessToken(...ctxArgs);
90
+ const rolesResponse = await this.request("GET", `/admin/realms/${realmName}/roles`, adminAccessToken, undefined, 200, {}, ...ctxArgs);
91
+ const roles = this.parseJsonResponse(rolesResponse.data) ?? [];
92
+ const selectedRoles = roles.filter((role) => roleNames.includes(role.name));
93
+ await this.request("DELETE", `/admin/realms/${realmName}/users/${userUUID}/role-mappings/realm`, adminAccessToken, selectedRoles, 204, {}, ...ctxArgs);
94
+ }
95
+ async replaceRealmRolesForUser(realmName, userUUID, roleNames, ...args) {
96
+ const { ctxArgs } = (await this.logCtx(args, "replaceRealmRolesForUser", true)).for(this.replaceRealmRolesForUser);
97
+ const adminAccessToken = await this.getAdminAccessToken(...ctxArgs);
98
+ const currentRolesResponse = await this.request("GET", `/admin/realms/${realmName}/users/${userUUID}/role-mappings/realm`, adminAccessToken, undefined, 200, {}, ...ctxArgs);
99
+ const currentRoles = this.parseJsonResponse(currentRolesResponse.data) ?? [];
100
+ if (currentRoles.length > 0) {
101
+ await this.request("DELETE", `/admin/realms/${realmName}/users/${userUUID}/role-mappings/realm`, adminAccessToken, currentRoles, 204, {}, ...ctxArgs);
102
+ }
103
+ await this.grantRealmRolesToUser(realmName, userUUID, roleNames, ...ctxArgs);
104
+ }
105
+ async revokeClientRolesFromUser(realmName, clientUUID, userUUID, roleNames, ...args) {
106
+ const { ctxArgs } = (await this.logCtx(args, "revokeClientRolesFromUser", true)).for(this.revokeClientRolesFromUser);
107
+ const adminAccessToken = await this.getAdminAccessToken(...ctxArgs);
108
+ const rolesResponse = await this.request("GET", `/admin/realms/${realmName}/clients/${clientUUID}/roles`, adminAccessToken, undefined, 200, {}, ...ctxArgs);
109
+ const roles = this.parseJsonResponse(rolesResponse.data) ?? [];
110
+ const selectedRoles = roles.filter((role) => roleNames.includes(role.name));
111
+ await this.request("DELETE", `/admin/realms/${realmName}/users/${userUUID}/role-mappings/clients/${clientUUID}`, adminAccessToken, selectedRoles, 204, {}, ...ctxArgs);
112
+ }
113
+ async replaceClientRolesForUser(realmName, clientUUID, userUUID, roleNames, ...args) {
114
+ const { ctxArgs } = (await this.logCtx(args, "replaceClientRolesForUser", true)).for(this.replaceClientRolesForUser);
115
+ const adminAccessToken = await this.getAdminAccessToken(...ctxArgs);
116
+ const currentRolesResponse = await this.request("GET", `/admin/realms/${realmName}/users/${userUUID}/role-mappings/clients/${clientUUID}`, adminAccessToken, undefined, 200, {}, ...ctxArgs);
117
+ const currentRoles = this.parseJsonResponse(currentRolesResponse.data) ?? [];
118
+ if (currentRoles.length > 0) {
119
+ await this.request("DELETE", `/admin/realms/${realmName}/users/${userUUID}/role-mappings/clients/${clientUUID}`, adminAccessToken, currentRoles, 204, {}, ...ctxArgs);
120
+ }
121
+ await this.grantClientRolesToUser(realmName, clientUUID, userUUID, roleNames, ...ctxArgs);
122
+ }
123
+ createHttpClient(config) {
124
+ return Axios.create({
125
+ baseURL: `${config.protocol}://${config.host}`,
126
+ headers: { "Content-Type": "application/json" },
127
+ validateStatus: () => true,
128
+ httpsAgent: new https.Agent({
129
+ rejectUnauthorized: this.isProduction(config),
130
+ }),
131
+ });
132
+ }
133
+ isProduction(config) {
134
+ return config.id === "production" || config.host.includes("prod");
135
+ }
136
+ async getAdminAccessToken(...args) {
137
+ const { ctxArgs } = this.logCtx(args, this.getAdminAccessToken);
138
+ return this.getAccessToken(this.config.adminApiUser, ...ctxArgs);
139
+ }
140
+ async getAccessToken(keycloakUser, ...args) {
141
+ const { ctxArgs } = this.logCtx(args, this.getAccessToken);
142
+ const response = await this.request("POST", `/realms/${keycloakUser.realm}/protocol/openid-connect/token`, undefined, new URLSearchParams({
143
+ client_id: keycloakUser.apiClientId,
144
+ username: keycloakUser.username,
145
+ password: keycloakUser.password,
146
+ grant_type: "password",
147
+ }).toString(), 200, { "content-type": "application/x-www-form-urlencoded" }, ...ctxArgs);
148
+ const data = this.parseJsonResponse(response.data);
149
+ if (data?.access_token)
150
+ return data.access_token;
151
+ throw new BadRequestError(`Unable to get Keycloak access token for user ${keycloakUser.username}`);
152
+ }
153
+ async request(method, path, accessToken, payload, successCode, headers, ...args) {
154
+ this.logCtx(args, this.request);
155
+ const response = await this.client.request({
156
+ method,
157
+ url: `${this.config.protocol}://${this.config.host}${path}`,
158
+ data: payload === undefined
159
+ ? undefined
160
+ : typeof payload === "string"
161
+ ? payload
162
+ : JSON.stringify(payload),
163
+ headers: {
164
+ ...headers,
165
+ ...(accessToken ? { Authorization: `Bearer ${accessToken}` } : {}),
166
+ ...(payload !== undefined && typeof payload !== "string"
167
+ ? { "Content-Type": "application/json" }
168
+ : {}),
169
+ },
170
+ httpsAgent: new https.Agent({
171
+ rejectUnauthorized: this.isProduction(this.config),
172
+ }),
173
+ validateStatus: () => true,
174
+ });
175
+ if (response.status !== successCode) {
176
+ this.handleHttpResponse(response, successCode);
177
+ }
178
+ return response;
179
+ }
180
+ handleHttpResponse(response, successCode, errorMsg) {
181
+ const status = response.status;
182
+ const message = errorMsg
183
+ ? `${errorMsg}: Expected ${successCode}, received ${response.status}: ${response.statusText}.`
184
+ : `Expected ${successCode}, received ${response.status}: ${response.statusText}`;
185
+ if (status === 404 || message.toLowerCase().includes("not found")) {
186
+ throw new NotFoundError(message);
187
+ }
188
+ if (status === 409 || message.toLowerCase().includes("conflict")) {
189
+ throw new ConflictError(message);
190
+ }
191
+ if (status === 400) {
192
+ throw new BadRequestError(message);
193
+ }
194
+ if (status === 401 || status === 403) {
195
+ throw new NotFoundError(message);
196
+ }
197
+ throw new InternalError(message);
198
+ }
199
+ parseError(error) {
200
+ const message = error.message || error.name || "Unknown error";
201
+ const lowerMessage = message.toLowerCase();
202
+ if (lowerMessage.includes("not found") || lowerMessage.includes("404")) {
203
+ return new NotFoundError(message);
204
+ }
205
+ if (lowerMessage.includes("already exists") || lowerMessage.includes("conflict") || lowerMessage.includes("409")) {
206
+ return new ConflictError(message);
207
+ }
208
+ if (lowerMessage.includes("invalid") || lowerMessage.includes("bad request") || lowerMessage.includes("400")) {
209
+ return new BadRequestError(message);
210
+ }
211
+ if (lowerMessage.includes("unauthorized") || lowerMessage.includes("401")) {
212
+ return new NotFoundError(message);
213
+ }
214
+ if (lowerMessage.includes("forbidden") || lowerMessage.includes("403")) {
215
+ return new NotFoundError(message);
216
+ }
217
+ return new InternalError(message);
218
+ }
219
+ extractUUIDfromResponse(response) {
220
+ const location = response.headers.location;
221
+ if (!location) {
222
+ throw new InternalError("Keycloak response did not include a location header");
223
+ }
224
+ return location.split("/").pop() ?? "";
225
+ }
226
+ parseJsonResponse(data) {
227
+ if (typeof data === "string") {
228
+ try {
229
+ return JSON.parse(data);
230
+ }
231
+ catch {
232
+ return undefined;
233
+ }
234
+ }
235
+ return data;
236
+ }
237
+ }
238
+ //# sourceMappingURL=KeycloakUserService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeycloakUserService.js","sourceRoot":"","sources":["../../../../src/keycloak/services/KeycloakUserService.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAiBpC,MAAM,OAAO,mBAAoB,SAAQ,kBAGxC;IACC,KAAK,CAAC,UAAU,CACd,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,CAC5C,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAwB,CAAC;QACjD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,YAA0B,EAC1B,OAAwD,EACxD,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAChD,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,SAAiB,EACjB,QAAgB,EAChB,OAA4C,EAC5C,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAC1C,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,SAAiB,EACjB,QAAgB,EAChB,OAA4C,EAC5C,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,CACjD,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CACjC,KAAK,EACL,iBAAiB,SAAS,UAAU,QAAQ,EAAE,EAC9C,gBAAgB,EAChB,SAAS,EACT,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CAAC;QACF,MAAM,WAAW,GACf,IAAI,CAAC,iBAAiB,CAA6B,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1E,MAAM,IAAI,CAAC,OAAO,CAChB,KAAK,EACL,iBAAiB,SAAS,UAAU,QAAQ,EAAE,EAC9C,gBAAgB,EAChB,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,EAAE,EAC9B,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,SAAiB,EACjB,QAAgB,EAChB,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,CAAC,CACrD,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,CAChD,IAAI,CAAC,MAAM,CAAC,YAAa,EACzB,GAAG,OAAO,CACX,CAAC;QACF,MAAM,IAAI,CAAC,UAAU,CACnB,gBAAgB,EAChB;YACE,KAAK,EAAE,SAAS;YAChB,YAAY,EAAE,QAAQ;YACtB,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;SACb,EACD,GAAG,OAAO,CACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CACd,WAAmB,EACnB,YAA0B,EAC1B,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,CAC5C,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,MAAM,IAAI,CAAC,OAAO,CAChB,QAAQ,EACR,iBAAiB,YAAY,CAAC,KAAK,UAAU,YAAY,CAAC,YAAY,EAAE,EACxE,WAAW,EACX,SAAS,EACT,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,YAA0B,EAC1B,OAAwD,EACxD,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,CACjD,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG;YAClB,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,GAAG,YAAY,CAAC,WAAW,IAAI,YAAY,CAAC,KAAK,MAAM;YAC9D,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE,IAAI;YACb,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,YAAY,CAAC,QAAQ;oBAC5B,SAAS,EAAE,KAAK;iBACjB;aACF;YACD,GAAG,OAAO;SACX,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CACjC,MAAM,EACN,iBAAiB,YAAY,CAAC,KAAK,QAAQ,EAC3C,gBAAgB,EAChB,WAAW,EACX,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CAAC;QACF,OAAO,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,QAAgB,EAChB,WAAmB,EACnB,SAAmB,EACnB,WAAmB,EACnB,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,CAAC,CACnD,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CACjC,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAQ,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjE,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,aAAa,CAAC,oBAAoB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,QAAQ,GAAoB,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3D,IAAI,CAAC,OAAO,CACV,MAAM,EACN,WAAW,EACX,WAAW,EACX,CAAC,IAAI,CAAC,EACN,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CACF,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,SAAiB,EACjB,QAAgB,EAChB,SAAmB,EACnB,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,uBAAuB,EAAE,IAAI,CAAC,CACvD,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,iBAAiB,CAC1B,iBAAiB,SAAS,QAAQ,EAClC,iBAAiB,SAAS,UAAU,QAAQ,sBAAsB,EAClE,SAAS,EACT,gBAAgB,EAChB,GAAG,OAAO,CACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,SAAiB,EACjB,UAAkB,EAClB,QAAgB,EAChB,SAAmB,EACnB,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,wBAAwB,EAAE,IAAI,CAAC,CACxD,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,iBAAiB,CAC1B,iBAAiB,SAAS,YAAY,UAAU,QAAQ,EACxD,iBAAiB,SAAS,UAAU,QAAQ,0BAA0B,UAAU,EAAE,EAClF,SAAS,EACT,gBAAgB,EAChB,GAAG,OAAO,CACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,SAAiB,EACjB,QAAgB,EAChB,SAAmB,EACnB,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,0BAA0B,EAAE,IAAI,CAAC,CAC1D,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,CAAC;QACpE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CACtC,KAAK,EACL,iBAAiB,SAAS,QAAQ,EAClC,gBAAgB,EAChB,SAAS,EACT,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAQ,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtE,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,MAAM,IAAI,CAAC,OAAO,CAChB,QAAQ,EACR,iBAAiB,SAAS,UAAU,QAAQ,sBAAsB,EAClE,gBAAgB,EAChB,aAAa,EACb,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,SAAiB,EACjB,QAAgB,EAChB,SAAmB,EACnB,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,0BAA0B,EAAE,IAAI,CAAC,CAC1D,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,CAAC;QACpE,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,OAAO,CAC7C,KAAK,EACL,iBAAiB,SAAS,UAAU,QAAQ,sBAAsB,EAClE,gBAAgB,EAChB,SAAS,EACT,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CAAC;QACF,MAAM,YAAY,GAChB,IAAI,CAAC,iBAAiB,CAAQ,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,OAAO,CAChB,QAAQ,EACR,iBAAiB,SAAS,UAAU,QAAQ,sBAAsB,EAClE,gBAAgB,EAChB,YAAY,EACZ,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,CAAC,qBAAqB,CAC9B,SAAS,EACT,QAAQ,EACR,SAAS,EACT,GAAG,OAAO,CACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,SAAiB,EACjB,UAAkB,EAClB,QAAgB,EAChB,SAAmB,EACnB,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,2BAA2B,EAAE,IAAI,CAAC,CAC3D,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,CAAC;QACpE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CACtC,KAAK,EACL,iBAAiB,SAAS,YAAY,UAAU,QAAQ,EACxD,gBAAgB,EAChB,SAAS,EACT,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAQ,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtE,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,MAAM,IAAI,CAAC,OAAO,CAChB,QAAQ,EACR,iBAAiB,SAAS,UAAU,QAAQ,0BAA0B,UAAU,EAAE,EAClF,gBAAgB,EAChB,aAAa,EACb,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,SAAiB,EACjB,UAAkB,EAClB,QAAgB,EAChB,SAAmB,EACnB,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,2BAA2B,EAAE,IAAI,CAAC,CAC3D,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,CAAC;QACpE,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,OAAO,CAC7C,KAAK,EACL,iBAAiB,SAAS,UAAU,QAAQ,0BAA0B,UAAU,EAAE,EAClF,gBAAgB,EAChB,SAAS,EACT,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CAAC;QACF,MAAM,YAAY,GAChB,IAAI,CAAC,iBAAiB,CAAQ,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,OAAO,CAChB,QAAQ,EACR,iBAAiB,SAAS,UAAU,QAAQ,0BAA0B,UAAU,EAAE,EAClF,gBAAgB,EAChB,YAAY,EACZ,GAAG,EACH,EAAE,EACF,GAAG,OAAO,CACX,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,CAAC,sBAAsB,CAC/B,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,GAAG,OAAO,CACX,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,MAA2B;QAClD,OAAO,KAAK,CAAC,MAAM,CAAC;YAClB,OAAO,EAAE,GAAG,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,IAAI,EAAE;YAC9C,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;YAC1B,UAAU,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC;gBAC1B,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;aAC9C,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,MAA2B;QAC9C,OAAO,MAAM,CAAC,EAAE,KAAK,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,GAAG,IAAyB;QAE5B,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,YAAa,EAAE,GAAG,OAAO,CAAC,CAAC;IACpE,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,YAA0B,EAC1B,GAAG,IAAyB;QAE5B,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CACjC,MAAM,EACN,WAAW,YAAY,CAAC,KAAK,gCAAgC,EAC7D,SAAS,EACT,IAAI,eAAe,CAAC;YAClB,SAAS,EAAE,YAAY,CAAC,WAAW;YACnC,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC,QAAQ,EAAE,EACb,GAAG,EACH,EAAE,cAAc,EAAE,mCAAmC,EAAE,EACvD,GAAG,OAAO,CACX,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CACjC,QAAQ,CAAC,IAAI,CACd,CAAC;QACF,IAAI,IAAI,EAAE,YAAY;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QACjD,MAAM,IAAI,eAAe,CACvB,gDAAgD,YAAY,CAAC,QAAQ,EAAE,CACxE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,MAAyC,EACzC,IAAY,EACZ,WAA+B,EAC/B,OAAgB,EAChB,WAAmB,EACnB,OAA+B,EAC/B,GAAG,IAAyB;QAE5B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YACzC,MAAM;YACN,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE;YAC3D,IAAI,EACF,OAAO,KAAK,SAAS;gBACnB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ;oBAC3B,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC/B,OAAO,EAAE;gBACP,GAAG,OAAO;gBACV,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,QAAQ;oBACtD,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBACxC,CAAC,CAAC,EAAE,CAAC;aACR;YACD,UAAU,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC;gBAC1B,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;aACnD,CAAC;YACF,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;SAC3B,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,kBAAkB,CACxB,QAAa,EACb,WAAmB,EACnB,QAAiB;QAEjB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAgB,CAAC;QACzC,MAAM,OAAO,GAAG,QAAQ;YACtB,CAAC,CAAC,GAAG,QAAQ,cAAc,WAAW,cAAc,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,GAAG;YAC9F,CAAC,CAAC,YAAY,WAAW,cAAc,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;QACnF,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACrC,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAES,UAAU,CAAC,KAAY;QAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,eAAe,CAAC;QAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAE3C,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvE,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjH,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7G,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1E,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvE,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEO,uBAAuB,CAAC,QAAa;QAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAA8B,CAAC;QACjE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,aAAa,CACrB,qDAAqD,CACtD,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC;IAEO,iBAAiB,CAAI,IAAa;QACxC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,IAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @module integrations/keycloak/services
3
+ * @summary Keycloak provisioning services.
4
+ * @description Re-exports the orchestrator and lower-level services used to manage realms, roles, clients, users, identity providers, and access tokens.
5
+ */
6
+ export * from "./KeycloakAuthService.js";
7
+ export * from "./KeycloakClientService.js";
8
+ export * from "./KeycloakIdentityProviderService.js";
9
+ export * from "./KeycloakRealmService.js";
10
+ export * from "./KeycloakRoleService.js";
11
+ export * from "./KeycloakService.js";
12
+ export * from "./KeycloakUserService.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/keycloak/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,yCAAsC;AACtC,2CAAwC;AACxC,qDAAkD;AAClD,0CAAuC;AACvC,yCAAsC;AACtC,qCAAkC;AAClC,yCAAsC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/keycloak/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ export function createDefaultKibanaSpaceConfig(realm) {
2
+ return {
3
+ id: realm.toLowerCase(),
4
+ name: realm.toUpperCase(),
5
+ description: `Tenant space for ${realm.toUpperCase()} dashboards and logs`,
6
+ initials: realm.slice(0, 2).toUpperCase(),
7
+ disabledFeatures: [],
8
+ };
9
+ }
10
+ export function createDefaultKibanaDataViewConfigs(realm) {
11
+ const suffix = realm.toLowerCase();
12
+ return [
13
+ {
14
+ id: `filebeat_pla_${suffix}`,
15
+ name: `PLA Filebeat Logs (${realm})`,
16
+ title: `filebeat-pla-${suffix}-*`,
17
+ timeFieldName: "@timestamp",
18
+ allowNoIndex: true,
19
+ },
20
+ {
21
+ id: `logs_pla_${suffix}`,
22
+ name: `PLA Metricbeat Logs (${realm})`,
23
+ title: `metricbeat-pla-${suffix}-*`,
24
+ timeFieldName: "@timestamp",
25
+ allowNoIndex: true,
26
+ },
27
+ ];
28
+ }
29
+ export function createDefaultKibanaRoleConfig(realm) {
30
+ const suffix = realm.toLowerCase();
31
+ return {
32
+ name: `pla_${suffix}_reader`,
33
+ indices: [
34
+ {
35
+ names: [`filebeat-pla-${suffix}-*`, `metricbeat-pla-${suffix}-*`],
36
+ privileges: ["read", "view_index_metadata"],
37
+ allow_restricted_indices: false,
38
+ },
39
+ ],
40
+ applications: [
41
+ {
42
+ application: "kibana-.kibana",
43
+ privileges: ["feature_discover.read", "feature_dashboard.read"],
44
+ resources: [`space:${realm}`],
45
+ },
46
+ ],
47
+ kibana: [
48
+ {
49
+ spaces: [realm],
50
+ base: ["read"],
51
+ },
52
+ ],
53
+ metadata: {},
54
+ };
55
+ }
56
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/kibana/helpers.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,8BAA8B,CAAC,KAAa;IAC1D,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE;QACvB,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE;QACzB,WAAW,EAAE,oBAAoB,KAAK,CAAC,WAAW,EAAE,sBAAsB;QAC1E,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE;QACzC,gBAAgB,EAAE,EAAE;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,KAAa;IAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACnC,OAAO;QACL;YACE,EAAE,EAAE,gBAAgB,MAAM,EAAE;YAC5B,IAAI,EAAE,sBAAsB,KAAK,GAAG;YACpC,KAAK,EAAE,gBAAgB,MAAM,IAAI;YACjC,aAAa,EAAE,YAAY;YAC3B,YAAY,EAAE,IAAI;SACnB;QACD;YACE,EAAE,EAAE,YAAY,MAAM,EAAE;YACxB,IAAI,EAAE,wBAAwB,KAAK,GAAG;YACtC,KAAK,EAAE,kBAAkB,MAAM,IAAI;YACnC,aAAa,EAAE,YAAY;YAC3B,YAAY,EAAE,IAAI;SACnB;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAa;IACzD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACnC,OAAO;QACL,IAAI,EAAE,OAAO,MAAM,SAAS;QAC5B,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,CAAC,gBAAgB,MAAM,IAAI,EAAE,kBAAkB,MAAM,IAAI,CAAC;gBACjE,UAAU,EAAE,CAAC,MAAM,EAAE,qBAAqB,CAAC;gBAC3C,wBAAwB,EAAE,KAAK;aAChC;SACF;QACD,YAAY,EAAE;YACZ;gBACE,WAAW,EAAE,gBAAgB;gBAC7B,UAAU,EAAE,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;gBAC/D,SAAS,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC;aAC9B;SACF;QACD,MAAM,EAAE;YACN;gBACE,MAAM,EAAE,CAAC,KAAK,CAAC;gBACf,IAAI,EAAE,CAAC,MAAM,CAAC;aACf;SACF;QACD,QAAQ,EAAE,EAAE;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ export * from "./types.js";
2
+ export * from "./helpers.js";
3
+ export * from "./services/index.js";
4
+ /**
5
+ * @summary Kibana integrations.
6
+ * @description Helpers for provisioning Kibana spaces, data views, and dashboards.
7
+ * @namespace kibana
8
+ * @memberOf module:integrations
9
+ */
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kibana/index.ts"],"names":[],"mappings":"AAAA,2BAAwB;AACxB,6BAA0B;AAC1B,oCAA2B;AAE3B;;;;;GAKG"}
@@ -0,0 +1,107 @@
1
+ import { BadRequestError, ConflictError, InternalError, NotFoundError, } from "@decaf-ts/db-decorators";
2
+ import { ClientBasedService } from "@decaf-ts/core";
3
+ import Axios from "axios";
4
+ import * as https from "node:https";
5
+ export class KibanaAuthService extends ClientBasedService {
6
+ async initialize(...args) {
7
+ const { ctxArgs } = (await this.logCtx(args, "initialize", true)).for(this.initialize);
8
+ const config = ctxArgs[0];
9
+ this._config = config;
10
+ const client = this.createHttpClient(config);
11
+ this._client = client;
12
+ return { config, client };
13
+ }
14
+ async loginToKibana(username, password, ...args) {
15
+ const { ctxArgs } = (await this.logCtx(args, "loginToKibana", true)).for(this.loginToKibana);
16
+ const config = this.config;
17
+ const credentials = {
18
+ username: username ?? config.adminApiUser?.username,
19
+ password: password ?? config.adminApiUser?.password,
20
+ };
21
+ if (!credentials.username || !credentials.password) {
22
+ throw new BadRequestError("Kibana login requires credentials");
23
+ }
24
+ const response = await this.request("POST", `${config.protocol}://${config.host}/internal/security/login`, {
25
+ providerType: "basic",
26
+ providerName: "basic",
27
+ currentURL: "/login",
28
+ }, undefined, {
29
+ auth: credentials,
30
+ headers: {
31
+ "kbn-xsrf": "true",
32
+ "content-type": "application/json",
33
+ },
34
+ withCredentials: true,
35
+ httpsAgent: new https.Agent({
36
+ rejectUnauthorized: this.isSecureEnvironment(),
37
+ }),
38
+ }, 200, ...ctxArgs);
39
+ if (response.status >= 300) {
40
+ const message = `Kibana login failed: ${response.statusText}`;
41
+ throw new BadRequestError(message);
42
+ }
43
+ const setCookie = response.headers["set-cookie"];
44
+ if (!setCookie?.length)
45
+ return undefined;
46
+ return setCookie;
47
+ }
48
+ async logout(user, ...args) {
49
+ const { ctxArgs } = (await this.logCtx(args, "logout", true)).for(this.logout);
50
+ await this.request("POST", `${this.config.protocol}://${this.config.host}/logout`, undefined, user, {
51
+ headers: { "kbn-xsrf": "true" },
52
+ }, 200, ...ctxArgs);
53
+ }
54
+ parseError(error) {
55
+ const message = error.message || error.name || "Unknown error";
56
+ const lowerMessage = message.toLowerCase();
57
+ if (lowerMessage.includes("not found") || lowerMessage.includes("404")) {
58
+ return new NotFoundError(message);
59
+ }
60
+ if (lowerMessage.includes("already exists") || lowerMessage.includes("conflict") || lowerMessage.includes("409")) {
61
+ return new ConflictError(message);
62
+ }
63
+ if (lowerMessage.includes("invalid") || lowerMessage.includes("bad request") || lowerMessage.includes("400")) {
64
+ return new BadRequestError(message);
65
+ }
66
+ if (lowerMessage.includes("unauthorized") || lowerMessage.includes("401")) {
67
+ return new NotFoundError(message);
68
+ }
69
+ if (lowerMessage.includes("forbidden") || lowerMessage.includes("403")) {
70
+ return new NotFoundError(message);
71
+ }
72
+ return new InternalError(message);
73
+ }
74
+ createHttpClient(config) {
75
+ return Axios.create({
76
+ baseURL: `${config.protocol}://${config.host}`,
77
+ validateStatus: () => true,
78
+ httpsAgent: new https.Agent({
79
+ rejectUnauthorized: this.isSecureEnvironment(),
80
+ }),
81
+ });
82
+ }
83
+ isSecureEnvironment() {
84
+ return (!this.config.id || !["development", "local"].includes(this.config.id));
85
+ }
86
+ async request(method, url, payload, apiUser, extra, successCode, ...args) {
87
+ this.logCtx(args, this.request);
88
+ return this.client.request({
89
+ method,
90
+ url,
91
+ data: payload === undefined
92
+ ? undefined
93
+ : typeof payload === "string"
94
+ ? payload
95
+ : JSON.stringify(payload),
96
+ auth: apiUser
97
+ ? { username: apiUser.username, password: apiUser.password }
98
+ : undefined,
99
+ validateStatus: () => true,
100
+ httpsAgent: new https.Agent({
101
+ rejectUnauthorized: this.isSecureEnvironment(),
102
+ }),
103
+ ...extra,
104
+ });
105
+ }
106
+ }
107
+ //# sourceMappingURL=KibanaAuthService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KibanaAuthService.js","sourceRoot":"","sources":["../../../../src/kibana/services/KibanaAuthService.ts"],"names":[],"mappings":"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"}