@dyanet/nestjs-config-aws 1.0.1 → 1.2.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 (391) hide show
  1. package/README.md +213 -1013
  2. package/dist/cjs/config-aws/src/config-manager.js +366 -0
  3. package/dist/cjs/config-aws/src/errors/index.js +77 -0
  4. package/dist/cjs/config-aws/src/index.js +37 -0
  5. package/dist/cjs/config-aws/src/interfaces/config-loader.interface.js +3 -0
  6. package/dist/cjs/config-aws/src/interfaces/config-manager.interface.js +3 -0
  7. package/dist/cjs/config-aws/src/interfaces/env-file-loader.interface.js +3 -0
  8. package/dist/cjs/config-aws/src/interfaces/environment-loader.interface.js +3 -0
  9. package/dist/cjs/config-aws/src/interfaces/s3-loader.interface.js +3 -0
  10. package/dist/cjs/config-aws/src/interfaces/secrets-manager-loader.interface.js +3 -0
  11. package/dist/cjs/config-aws/src/interfaces/ssm-parameter-store-loader.interface.js +3 -0
  12. package/dist/cjs/config-aws/src/loaders/env-file.loader.js +169 -0
  13. package/dist/cjs/config-aws/src/loaders/environment.loader.js +85 -0
  14. package/dist/cjs/config-aws/src/loaders/s3.loader.js +145 -0
  15. package/dist/cjs/config-aws/src/loaders/secrets-manager.loader.js +169 -0
  16. package/dist/cjs/config-aws/src/loaders/ssm-parameter-store.loader.js +199 -0
  17. package/dist/cjs/config-aws/src/utils/env-file-parser.util.js +98 -0
  18. package/dist/cjs/config-aws/src/utils/validation.util.js +116 -0
  19. package/dist/cjs/nestjs-config-aws/src/config.module.js +175 -0
  20. package/dist/cjs/nestjs-config-aws/src/index.js +61 -0
  21. package/dist/cjs/{integration → nestjs-config-aws/src/integration}/index.js +1 -1
  22. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.js +3 -0
  23. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.js +3 -0
  24. package/dist/cjs/{integration → nestjs-config-aws/src/integration}/interfaces/index.js +1 -1
  25. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/integration-options.interface.js +3 -0
  26. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/integration-state.interface.js +3 -0
  27. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.js +73 -0
  28. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.js +3 -0
  29. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.js +4 -0
  30. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/utility-types.interface.js +52 -0
  31. package/dist/cjs/nestjs-config-aws/src/integration/nestjs-config-integration.module.js +124 -0
  32. package/dist/cjs/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.js +592 -0
  33. package/dist/cjs/nestjs-config-aws/src/integration/providers/configuration-factory.provider.js +385 -0
  34. package/dist/cjs/{integration → nestjs-config-aws/src/integration}/providers/index.js +1 -1
  35. package/dist/cjs/nestjs-config-aws/src/integration/services/async-config-helper.service.js +366 -0
  36. package/dist/cjs/nestjs-config-aws/src/integration/services/error-handler.service.js +267 -0
  37. package/dist/cjs/nestjs-config-aws/src/integration/services/factory-registration.service.js +517 -0
  38. package/dist/cjs/{integration → nestjs-config-aws/src/integration}/services/index.js +1 -1
  39. package/dist/cjs/nestjs-config-aws/src/integration/services/integration-state.service.js +81 -0
  40. package/dist/cjs/nestjs-config-aws/src/integration/services/namespace-handler.service.js +465 -0
  41. package/dist/cjs/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.js +318 -0
  42. package/dist/cjs/nestjs-config-aws/src/integration/services/precedence-handler.service.js +292 -0
  43. package/dist/cjs/nestjs-config-aws/src/integration/services/validation-integration.service.js +595 -0
  44. package/dist/cjs/nestjs-config-aws/src/integration/utils/config-integration.util.js +283 -0
  45. package/dist/cjs/{integration → nestjs-config-aws/src/integration}/utils/index.js +1 -1
  46. package/dist/cjs/nestjs-config-aws/src/interfaces/config-service.interface.js +11 -0
  47. package/dist/cjs/nestjs-config-aws/src/interfaces/default-schema.interface.js +63 -0
  48. package/dist/cjs/nestjs-config-aws/src/interfaces/index.js +30 -0
  49. package/dist/cjs/nestjs-config-aws/src/interfaces/module-options.interface.js +3 -0
  50. package/dist/cjs/nestjs-config-aws/src/services/config.service.js +142 -0
  51. package/dist/esm/config-aws/src/config-manager.js +362 -0
  52. package/dist/esm/config-aws/src/errors/index.js +69 -0
  53. package/dist/esm/config-aws/src/index.js +21 -0
  54. package/dist/esm/config-aws/src/interfaces/config-loader.interface.js +2 -0
  55. package/dist/esm/config-aws/src/interfaces/config-manager.interface.js +2 -0
  56. package/dist/esm/config-aws/src/interfaces/env-file-loader.interface.js +2 -0
  57. package/dist/esm/config-aws/src/interfaces/environment-loader.interface.js +2 -0
  58. package/dist/esm/config-aws/src/interfaces/s3-loader.interface.js +2 -0
  59. package/dist/esm/config-aws/src/interfaces/secrets-manager-loader.interface.js +2 -0
  60. package/dist/esm/config-aws/src/interfaces/ssm-parameter-store-loader.interface.js +2 -0
  61. package/dist/esm/config-aws/src/loaders/env-file.loader.js +132 -0
  62. package/dist/esm/config-aws/src/loaders/environment.loader.js +81 -0
  63. package/dist/esm/config-aws/src/loaders/s3.loader.js +141 -0
  64. package/dist/esm/config-aws/src/loaders/secrets-manager.loader.js +165 -0
  65. package/dist/esm/config-aws/src/loaders/ssm-parameter-store.loader.js +195 -0
  66. package/dist/esm/config-aws/src/utils/env-file-parser.util.js +94 -0
  67. package/dist/esm/config-aws/src/utils/validation.util.js +112 -0
  68. package/dist/esm/nestjs-config-aws/src/config.module.js +172 -0
  69. package/dist/esm/nestjs-config-aws/src/index.js +23 -0
  70. package/dist/esm/nestjs-config-aws/src/integration/index.js +7 -0
  71. package/dist/esm/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.js +2 -0
  72. package/dist/esm/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.js +2 -0
  73. package/dist/esm/nestjs-config-aws/src/integration/interfaces/index.js +10 -0
  74. package/dist/esm/nestjs-config-aws/src/integration/interfaces/integration-options.interface.js +2 -0
  75. package/dist/esm/nestjs-config-aws/src/integration/interfaces/integration-state.interface.js +2 -0
  76. package/dist/esm/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.js +64 -0
  77. package/dist/esm/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.js +2 -0
  78. package/dist/esm/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.js +3 -0
  79. package/dist/esm/nestjs-config-aws/src/integration/interfaces/utility-types.interface.js +44 -0
  80. package/dist/esm/nestjs-config-aws/src/integration/nestjs-config-integration.module.js +121 -0
  81. package/dist/esm/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.js +589 -0
  82. package/dist/esm/nestjs-config-aws/src/integration/providers/configuration-factory.provider.js +382 -0
  83. package/dist/esm/nestjs-config-aws/src/integration/providers/index.js +4 -0
  84. package/dist/esm/nestjs-config-aws/src/integration/services/async-config-helper.service.js +363 -0
  85. package/dist/esm/nestjs-config-aws/src/integration/services/error-handler.service.js +264 -0
  86. package/dist/esm/nestjs-config-aws/src/integration/services/factory-registration.service.js +514 -0
  87. package/dist/esm/nestjs-config-aws/src/integration/services/index.js +10 -0
  88. package/dist/esm/nestjs-config-aws/src/integration/services/integration-state.service.js +78 -0
  89. package/dist/esm/nestjs-config-aws/src/integration/services/namespace-handler.service.js +462 -0
  90. package/dist/esm/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.js +315 -0
  91. package/dist/esm/nestjs-config-aws/src/integration/services/precedence-handler.service.js +289 -0
  92. package/dist/esm/nestjs-config-aws/src/integration/services/validation-integration.service.js +589 -0
  93. package/dist/esm/nestjs-config-aws/src/integration/utils/config-integration.util.js +240 -0
  94. package/dist/esm/nestjs-config-aws/src/integration/utils/index.js +3 -0
  95. package/dist/esm/nestjs-config-aws/src/interfaces/config-service.interface.js +7 -0
  96. package/dist/esm/nestjs-config-aws/src/interfaces/default-schema.interface.js +59 -0
  97. package/dist/esm/nestjs-config-aws/src/interfaces/index.js +8 -0
  98. package/dist/esm/nestjs-config-aws/src/interfaces/module-options.interface.js +2 -0
  99. package/dist/esm/nestjs-config-aws/src/services/config.service.js +139 -0
  100. package/dist/types/config-aws/src/config-manager.d.ts +119 -0
  101. package/dist/types/config-aws/src/config-manager.d.ts.map +1 -0
  102. package/dist/types/config-aws/src/errors/index.d.ts +43 -0
  103. package/dist/types/config-aws/src/errors/index.d.ts.map +1 -0
  104. package/dist/types/config-aws/src/index.d.ts +24 -0
  105. package/dist/types/config-aws/src/index.d.ts.map +1 -0
  106. package/dist/types/config-aws/src/interfaces/config-loader.interface.d.ts +33 -0
  107. package/dist/types/config-aws/src/interfaces/config-loader.interface.d.ts.map +1 -0
  108. package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts +86 -0
  109. package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts.map +1 -0
  110. package/dist/types/config-aws/src/interfaces/env-file-loader.interface.d.ts +12 -0
  111. package/dist/types/config-aws/src/interfaces/env-file-loader.interface.d.ts.map +1 -0
  112. package/dist/types/config-aws/src/interfaces/environment-loader.interface.d.ts +10 -0
  113. package/dist/types/config-aws/src/interfaces/environment-loader.interface.d.ts.map +1 -0
  114. package/dist/types/config-aws/src/interfaces/s3-loader.interface.d.ts +14 -0
  115. package/dist/types/config-aws/src/interfaces/s3-loader.interface.d.ts.map +1 -0
  116. package/dist/types/config-aws/src/interfaces/secrets-manager-loader.interface.d.ts +12 -0
  117. package/dist/types/config-aws/src/interfaces/secrets-manager-loader.interface.d.ts.map +1 -0
  118. package/dist/types/config-aws/src/interfaces/ssm-parameter-store-loader.interface.d.ts +14 -0
  119. package/dist/types/config-aws/src/interfaces/ssm-parameter-store-loader.interface.d.ts.map +1 -0
  120. package/dist/types/config-aws/src/loaders/env-file.loader.d.ts +69 -0
  121. package/dist/types/config-aws/src/loaders/env-file.loader.d.ts.map +1 -0
  122. package/dist/types/config-aws/src/loaders/environment.loader.d.ts +46 -0
  123. package/dist/types/config-aws/src/loaders/environment.loader.d.ts.map +1 -0
  124. package/dist/types/config-aws/src/loaders/s3.loader.d.ts +62 -0
  125. package/dist/types/config-aws/src/loaders/s3.loader.d.ts.map +1 -0
  126. package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts +68 -0
  127. package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts.map +1 -0
  128. package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts +78 -0
  129. package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts.map +1 -0
  130. package/dist/types/config-aws/src/utils/env-file-parser.util.d.ts +45 -0
  131. package/dist/types/config-aws/src/utils/env-file-parser.util.d.ts.map +1 -0
  132. package/dist/types/{utils → config-aws/src/utils}/validation.util.d.ts +10 -10
  133. package/dist/types/config-aws/src/utils/validation.util.d.ts.map +1 -0
  134. package/dist/types/{config.module.d.ts → nestjs-config-aws/src/config.module.d.ts} +1 -0
  135. package/dist/types/nestjs-config-aws/src/config.module.d.ts.map +1 -0
  136. package/dist/types/{index.d.ts → nestjs-config-aws/src/index.d.ts} +2 -4
  137. package/dist/types/nestjs-config-aws/src/index.d.ts.map +1 -0
  138. package/dist/types/nestjs-config-aws/src/integration/index.d.ts.map +1 -0
  139. package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.d.ts.map +1 -0
  140. package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.d.ts.map +1 -0
  141. package/dist/types/nestjs-config-aws/src/integration/interfaces/index.d.ts.map +1 -0
  142. package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-options.interface.d.ts.map +1 -0
  143. package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-state.interface.d.ts.map +1 -0
  144. package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.d.ts.map +1 -0
  145. package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.d.ts.map +1 -0
  146. package/dist/types/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.d.ts.map +1 -0
  147. package/dist/types/nestjs-config-aws/src/integration/interfaces/utility-types.interface.d.ts.map +1 -0
  148. package/dist/types/nestjs-config-aws/src/integration/nestjs-config-integration.module.d.ts.map +1 -0
  149. package/dist/types/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.d.ts.map +1 -0
  150. package/dist/types/nestjs-config-aws/src/integration/providers/configuration-factory.provider.d.ts.map +1 -0
  151. package/dist/types/nestjs-config-aws/src/integration/providers/index.d.ts.map +1 -0
  152. package/dist/types/nestjs-config-aws/src/integration/services/async-config-helper.service.d.ts.map +1 -0
  153. package/dist/types/nestjs-config-aws/src/integration/services/error-handler.service.d.ts.map +1 -0
  154. package/dist/types/nestjs-config-aws/src/integration/services/factory-registration.service.d.ts.map +1 -0
  155. package/dist/types/nestjs-config-aws/src/integration/services/index.d.ts.map +1 -0
  156. package/dist/types/nestjs-config-aws/src/integration/services/integration-state.service.d.ts.map +1 -0
  157. package/dist/types/nestjs-config-aws/src/integration/services/namespace-handler.service.d.ts.map +1 -0
  158. package/dist/types/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.d.ts.map +1 -0
  159. package/dist/types/nestjs-config-aws/src/integration/services/precedence-handler.service.d.ts.map +1 -0
  160. package/dist/types/nestjs-config-aws/src/integration/services/validation-integration.service.d.ts.map +1 -0
  161. package/dist/types/nestjs-config-aws/src/integration/utils/config-integration.util.d.ts.map +1 -0
  162. package/dist/types/nestjs-config-aws/src/integration/utils/index.d.ts.map +1 -0
  163. package/dist/types/nestjs-config-aws/src/interfaces/config-service.interface.d.ts.map +1 -0
  164. package/dist/types/{interfaces → nestjs-config-aws/src/interfaces}/default-schema.interface.d.ts +28 -28
  165. package/dist/types/nestjs-config-aws/src/interfaces/default-schema.interface.d.ts.map +1 -0
  166. package/dist/types/nestjs-config-aws/src/interfaces/index.d.ts +5 -0
  167. package/dist/types/nestjs-config-aws/src/interfaces/index.d.ts.map +1 -0
  168. package/dist/types/nestjs-config-aws/src/interfaces/module-options.interface.d.ts.map +1 -0
  169. package/dist/types/nestjs-config-aws/src/services/config.service.d.ts +88 -0
  170. package/dist/types/nestjs-config-aws/src/services/config.service.d.ts.map +1 -0
  171. package/package.json +20 -27
  172. package/LICENSE +0 -21
  173. package/dist/cjs/config.module.js +0 -178
  174. package/dist/cjs/config.module.js.map +0 -1
  175. package/dist/cjs/index.js +0 -47
  176. package/dist/cjs/index.js.map +0 -1
  177. package/dist/cjs/integration/index.js.map +0 -1
  178. package/dist/cjs/integration/interfaces/configuration-factory.interface.js +0 -3
  179. package/dist/cjs/integration/interfaces/configuration-factory.interface.js.map +0 -1
  180. package/dist/cjs/integration/interfaces/configuration-source.interface.js +0 -3
  181. package/dist/cjs/integration/interfaces/configuration-source.interface.js.map +0 -1
  182. package/dist/cjs/integration/interfaces/index.js.map +0 -1
  183. package/dist/cjs/integration/interfaces/integration-options.interface.js +0 -3
  184. package/dist/cjs/integration/interfaces/integration-options.interface.js.map +0 -1
  185. package/dist/cjs/integration/interfaces/integration-state.interface.js +0 -3
  186. package/dist/cjs/integration/interfaces/integration-state.interface.js.map +0 -1
  187. package/dist/cjs/integration/interfaces/nestjs-config-compatibility.interface.js +0 -73
  188. package/dist/cjs/integration/interfaces/nestjs-config-compatibility.interface.js.map +0 -1
  189. package/dist/cjs/integration/interfaces/nestjs-config-integration.interface.js +0 -3
  190. package/dist/cjs/integration/interfaces/nestjs-config-integration.interface.js.map +0 -1
  191. package/dist/cjs/integration/interfaces/typed-configuration.interface.js +0 -4
  192. package/dist/cjs/integration/interfaces/typed-configuration.interface.js.map +0 -1
  193. package/dist/cjs/integration/interfaces/utility-types.interface.js +0 -52
  194. package/dist/cjs/integration/interfaces/utility-types.interface.js.map +0 -1
  195. package/dist/cjs/integration/nestjs-config-integration.module.js +0 -124
  196. package/dist/cjs/integration/nestjs-config-integration.module.js.map +0 -1
  197. package/dist/cjs/integration/providers/aws-configuration-loader.service.js +0 -591
  198. package/dist/cjs/integration/providers/aws-configuration-loader.service.js.map +0 -1
  199. package/dist/cjs/integration/providers/configuration-factory.provider.js +0 -383
  200. package/dist/cjs/integration/providers/configuration-factory.provider.js.map +0 -1
  201. package/dist/cjs/integration/providers/index.js.map +0 -1
  202. package/dist/cjs/integration/services/async-config-helper.service.js +0 -356
  203. package/dist/cjs/integration/services/async-config-helper.service.js.map +0 -1
  204. package/dist/cjs/integration/services/error-handler.service.js +0 -265
  205. package/dist/cjs/integration/services/error-handler.service.js.map +0 -1
  206. package/dist/cjs/integration/services/factory-registration.service.js +0 -512
  207. package/dist/cjs/integration/services/factory-registration.service.js.map +0 -1
  208. package/dist/cjs/integration/services/index.js.map +0 -1
  209. package/dist/cjs/integration/services/integration-state.service.js +0 -83
  210. package/dist/cjs/integration/services/integration-state.service.js.map +0 -1
  211. package/dist/cjs/integration/services/namespace-handler.service.js +0 -467
  212. package/dist/cjs/integration/services/namespace-handler.service.js.map +0 -1
  213. package/dist/cjs/integration/services/nestjs-config-integration.service.js +0 -316
  214. package/dist/cjs/integration/services/nestjs-config-integration.service.js.map +0 -1
  215. package/dist/cjs/integration/services/precedence-handler.service.js +0 -294
  216. package/dist/cjs/integration/services/precedence-handler.service.js.map +0 -1
  217. package/dist/cjs/integration/services/validation-integration.service.js +0 -591
  218. package/dist/cjs/integration/services/validation-integration.service.js.map +0 -1
  219. package/dist/cjs/integration/utils/config-integration.util.js +0 -283
  220. package/dist/cjs/integration/utils/config-integration.util.js.map +0 -1
  221. package/dist/cjs/integration/utils/index.js.map +0 -1
  222. package/dist/cjs/interfaces/config-loader.interface.js +0 -3
  223. package/dist/cjs/interfaces/config-loader.interface.js.map +0 -1
  224. package/dist/cjs/interfaces/config-service.interface.js +0 -11
  225. package/dist/cjs/interfaces/config-service.interface.js.map +0 -1
  226. package/dist/cjs/interfaces/default-schema.interface.js +0 -63
  227. package/dist/cjs/interfaces/default-schema.interface.js.map +0 -1
  228. package/dist/cjs/interfaces/errors.interface.js +0 -77
  229. package/dist/cjs/interfaces/errors.interface.js.map +0 -1
  230. package/dist/cjs/interfaces/index.js +0 -25
  231. package/dist/cjs/interfaces/index.js.map +0 -1
  232. package/dist/cjs/interfaces/module-options.interface.js +0 -3
  233. package/dist/cjs/interfaces/module-options.interface.js.map +0 -1
  234. package/dist/cjs/loaders/environment.loader.js +0 -59
  235. package/dist/cjs/loaders/environment.loader.js.map +0 -1
  236. package/dist/cjs/loaders/secrets-manager.loader.js +0 -122
  237. package/dist/cjs/loaders/secrets-manager.loader.js.map +0 -1
  238. package/dist/cjs/loaders/ssm-parameter-store.loader.js +0 -146
  239. package/dist/cjs/loaders/ssm-parameter-store.loader.js.map +0 -1
  240. package/dist/cjs/services/config.service.js +0 -297
  241. package/dist/cjs/services/config.service.js.map +0 -1
  242. package/dist/cjs/utils/validation.util.js +0 -114
  243. package/dist/cjs/utils/validation.util.js.map +0 -1
  244. package/dist/esm/config.module.js +0 -175
  245. package/dist/esm/config.module.js.map +0 -1
  246. package/dist/esm/index.js +0 -18
  247. package/dist/esm/index.js.map +0 -1
  248. package/dist/esm/integration/index.js +0 -7
  249. package/dist/esm/integration/index.js.map +0 -1
  250. package/dist/esm/integration/interfaces/configuration-factory.interface.js +0 -2
  251. package/dist/esm/integration/interfaces/configuration-factory.interface.js.map +0 -1
  252. package/dist/esm/integration/interfaces/configuration-source.interface.js +0 -2
  253. package/dist/esm/integration/interfaces/configuration-source.interface.js.map +0 -1
  254. package/dist/esm/integration/interfaces/index.js +0 -10
  255. package/dist/esm/integration/interfaces/index.js.map +0 -1
  256. package/dist/esm/integration/interfaces/integration-options.interface.js +0 -2
  257. package/dist/esm/integration/interfaces/integration-options.interface.js.map +0 -1
  258. package/dist/esm/integration/interfaces/integration-state.interface.js +0 -2
  259. package/dist/esm/integration/interfaces/integration-state.interface.js.map +0 -1
  260. package/dist/esm/integration/interfaces/nestjs-config-compatibility.interface.js +0 -64
  261. package/dist/esm/integration/interfaces/nestjs-config-compatibility.interface.js.map +0 -1
  262. package/dist/esm/integration/interfaces/nestjs-config-integration.interface.js +0 -2
  263. package/dist/esm/integration/interfaces/nestjs-config-integration.interface.js.map +0 -1
  264. package/dist/esm/integration/interfaces/typed-configuration.interface.js +0 -3
  265. package/dist/esm/integration/interfaces/typed-configuration.interface.js.map +0 -1
  266. package/dist/esm/integration/interfaces/utility-types.interface.js +0 -44
  267. package/dist/esm/integration/interfaces/utility-types.interface.js.map +0 -1
  268. package/dist/esm/integration/nestjs-config-integration.module.js +0 -121
  269. package/dist/esm/integration/nestjs-config-integration.module.js.map +0 -1
  270. package/dist/esm/integration/providers/aws-configuration-loader.service.js +0 -588
  271. package/dist/esm/integration/providers/aws-configuration-loader.service.js.map +0 -1
  272. package/dist/esm/integration/providers/configuration-factory.provider.js +0 -380
  273. package/dist/esm/integration/providers/configuration-factory.provider.js.map +0 -1
  274. package/dist/esm/integration/providers/index.js +0 -4
  275. package/dist/esm/integration/providers/index.js.map +0 -1
  276. package/dist/esm/integration/services/async-config-helper.service.js +0 -353
  277. package/dist/esm/integration/services/async-config-helper.service.js.map +0 -1
  278. package/dist/esm/integration/services/error-handler.service.js +0 -262
  279. package/dist/esm/integration/services/error-handler.service.js.map +0 -1
  280. package/dist/esm/integration/services/factory-registration.service.js +0 -509
  281. package/dist/esm/integration/services/factory-registration.service.js.map +0 -1
  282. package/dist/esm/integration/services/index.js +0 -10
  283. package/dist/esm/integration/services/index.js.map +0 -1
  284. package/dist/esm/integration/services/integration-state.service.js +0 -80
  285. package/dist/esm/integration/services/integration-state.service.js.map +0 -1
  286. package/dist/esm/integration/services/namespace-handler.service.js +0 -464
  287. package/dist/esm/integration/services/namespace-handler.service.js.map +0 -1
  288. package/dist/esm/integration/services/nestjs-config-integration.service.js +0 -313
  289. package/dist/esm/integration/services/nestjs-config-integration.service.js.map +0 -1
  290. package/dist/esm/integration/services/precedence-handler.service.js +0 -291
  291. package/dist/esm/integration/services/precedence-handler.service.js.map +0 -1
  292. package/dist/esm/integration/services/validation-integration.service.js +0 -585
  293. package/dist/esm/integration/services/validation-integration.service.js.map +0 -1
  294. package/dist/esm/integration/utils/config-integration.util.js +0 -240
  295. package/dist/esm/integration/utils/config-integration.util.js.map +0 -1
  296. package/dist/esm/integration/utils/index.js +0 -3
  297. package/dist/esm/integration/utils/index.js.map +0 -1
  298. package/dist/esm/interfaces/config-loader.interface.js +0 -2
  299. package/dist/esm/interfaces/config-loader.interface.js.map +0 -1
  300. package/dist/esm/interfaces/config-service.interface.js +0 -7
  301. package/dist/esm/interfaces/config-service.interface.js.map +0 -1
  302. package/dist/esm/interfaces/default-schema.interface.js +0 -59
  303. package/dist/esm/interfaces/default-schema.interface.js.map +0 -1
  304. package/dist/esm/interfaces/errors.interface.js +0 -69
  305. package/dist/esm/interfaces/errors.interface.js.map +0 -1
  306. package/dist/esm/interfaces/index.js +0 -9
  307. package/dist/esm/interfaces/index.js.map +0 -1
  308. package/dist/esm/interfaces/module-options.interface.js +0 -2
  309. package/dist/esm/interfaces/module-options.interface.js.map +0 -1
  310. package/dist/esm/loaders/environment.loader.js +0 -55
  311. package/dist/esm/loaders/environment.loader.js.map +0 -1
  312. package/dist/esm/loaders/secrets-manager.loader.js +0 -118
  313. package/dist/esm/loaders/secrets-manager.loader.js.map +0 -1
  314. package/dist/esm/loaders/ssm-parameter-store.loader.js +0 -142
  315. package/dist/esm/loaders/ssm-parameter-store.loader.js.map +0 -1
  316. package/dist/esm/services/config.service.js +0 -261
  317. package/dist/esm/services/config.service.js.map +0 -1
  318. package/dist/esm/utils/validation.util.js +0 -110
  319. package/dist/esm/utils/validation.util.js.map +0 -1
  320. package/dist/types/config.module.d.ts.map +0 -1
  321. package/dist/types/index.d.ts.map +0 -1
  322. package/dist/types/integration/index.d.ts.map +0 -1
  323. package/dist/types/integration/interfaces/configuration-factory.interface.d.ts.map +0 -1
  324. package/dist/types/integration/interfaces/configuration-source.interface.d.ts.map +0 -1
  325. package/dist/types/integration/interfaces/index.d.ts.map +0 -1
  326. package/dist/types/integration/interfaces/integration-options.interface.d.ts.map +0 -1
  327. package/dist/types/integration/interfaces/integration-state.interface.d.ts.map +0 -1
  328. package/dist/types/integration/interfaces/nestjs-config-compatibility.interface.d.ts.map +0 -1
  329. package/dist/types/integration/interfaces/nestjs-config-integration.interface.d.ts.map +0 -1
  330. package/dist/types/integration/interfaces/typed-configuration.interface.d.ts.map +0 -1
  331. package/dist/types/integration/interfaces/utility-types.interface.d.ts.map +0 -1
  332. package/dist/types/integration/nestjs-config-integration.module.d.ts.map +0 -1
  333. package/dist/types/integration/providers/aws-configuration-loader.service.d.ts.map +0 -1
  334. package/dist/types/integration/providers/configuration-factory.provider.d.ts.map +0 -1
  335. package/dist/types/integration/providers/index.d.ts.map +0 -1
  336. package/dist/types/integration/services/async-config-helper.service.d.ts.map +0 -1
  337. package/dist/types/integration/services/error-handler.service.d.ts.map +0 -1
  338. package/dist/types/integration/services/factory-registration.service.d.ts.map +0 -1
  339. package/dist/types/integration/services/index.d.ts.map +0 -1
  340. package/dist/types/integration/services/integration-state.service.d.ts.map +0 -1
  341. package/dist/types/integration/services/namespace-handler.service.d.ts.map +0 -1
  342. package/dist/types/integration/services/nestjs-config-integration.service.d.ts.map +0 -1
  343. package/dist/types/integration/services/precedence-handler.service.d.ts.map +0 -1
  344. package/dist/types/integration/services/validation-integration.service.d.ts.map +0 -1
  345. package/dist/types/integration/utils/config-integration.util.d.ts.map +0 -1
  346. package/dist/types/integration/utils/index.d.ts.map +0 -1
  347. package/dist/types/interfaces/config-loader.interface.d.ts +0 -22
  348. package/dist/types/interfaces/config-loader.interface.d.ts.map +0 -1
  349. package/dist/types/interfaces/config-service.interface.d.ts.map +0 -1
  350. package/dist/types/interfaces/default-schema.interface.d.ts.map +0 -1
  351. package/dist/types/interfaces/errors.interface.d.ts +0 -38
  352. package/dist/types/interfaces/errors.interface.d.ts.map +0 -1
  353. package/dist/types/interfaces/index.d.ts +0 -6
  354. package/dist/types/interfaces/index.d.ts.map +0 -1
  355. package/dist/types/interfaces/module-options.interface.d.ts.map +0 -1
  356. package/dist/types/loaders/environment.loader.d.ts +0 -26
  357. package/dist/types/loaders/environment.loader.d.ts.map +0 -1
  358. package/dist/types/loaders/secrets-manager.loader.d.ts +0 -52
  359. package/dist/types/loaders/secrets-manager.loader.d.ts.map +0 -1
  360. package/dist/types/loaders/ssm-parameter-store.loader.d.ts +0 -68
  361. package/dist/types/loaders/ssm-parameter-store.loader.d.ts.map +0 -1
  362. package/dist/types/services/config.service.d.ts +0 -94
  363. package/dist/types/services/config.service.d.ts.map +0 -1
  364. package/dist/types/utils/validation.util.d.ts.map +0 -1
  365. /package/dist/types/{integration → nestjs-config-aws/src/integration}/index.d.ts +0 -0
  366. /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/configuration-factory.interface.d.ts +0 -0
  367. /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/configuration-source.interface.d.ts +0 -0
  368. /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/index.d.ts +0 -0
  369. /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/integration-options.interface.d.ts +0 -0
  370. /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/integration-state.interface.d.ts +0 -0
  371. /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/nestjs-config-compatibility.interface.d.ts +0 -0
  372. /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/nestjs-config-integration.interface.d.ts +0 -0
  373. /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/typed-configuration.interface.d.ts +0 -0
  374. /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/utility-types.interface.d.ts +0 -0
  375. /package/dist/types/{integration → nestjs-config-aws/src/integration}/nestjs-config-integration.module.d.ts +0 -0
  376. /package/dist/types/{integration → nestjs-config-aws/src/integration}/providers/aws-configuration-loader.service.d.ts +0 -0
  377. /package/dist/types/{integration → nestjs-config-aws/src/integration}/providers/configuration-factory.provider.d.ts +0 -0
  378. /package/dist/types/{integration → nestjs-config-aws/src/integration}/providers/index.d.ts +0 -0
  379. /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/async-config-helper.service.d.ts +0 -0
  380. /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/error-handler.service.d.ts +0 -0
  381. /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/factory-registration.service.d.ts +0 -0
  382. /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/index.d.ts +0 -0
  383. /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/integration-state.service.d.ts +0 -0
  384. /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/namespace-handler.service.d.ts +0 -0
  385. /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/nestjs-config-integration.service.d.ts +0 -0
  386. /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/precedence-handler.service.d.ts +0 -0
  387. /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/validation-integration.service.d.ts +0 -0
  388. /package/dist/types/{integration → nestjs-config-aws/src/integration}/utils/config-integration.util.d.ts +0 -0
  389. /package/dist/types/{integration → nestjs-config-aws/src/integration}/utils/index.d.ts +0 -0
  390. /package/dist/types/{interfaces → nestjs-config-aws/src/interfaces}/config-service.interface.d.ts +0 -0
  391. /package/dist/types/{interfaces → nestjs-config-aws/src/interfaces}/module-options.interface.d.ts +0 -0
@@ -0,0 +1,315 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ var NestjsConfigIntegrationService_1;
14
+ import { Injectable, Logger, Inject, Optional } from '@nestjs/common';
15
+ import { ConfigModule } from '@nestjs/config';
16
+ import { FactoryRegistrationService } from './factory-registration.service';
17
+ import { NESTJS_CONFIG_AWS_INTEGRATION_OPTIONS } from '../nestjs-config-integration.module';
18
+ /**
19
+ * Service that provides integration utilities for working with @nestjs/config.
20
+ * This service creates ConfigModule configurations that include AWS-sourced factories.
21
+ */
22
+ let NestjsConfigIntegrationService = NestjsConfigIntegrationService_1 = class NestjsConfigIntegrationService {
23
+ factoryRegistrationService;
24
+ options;
25
+ logger = new Logger(NestjsConfigIntegrationService_1.name);
26
+ constructor(factoryRegistrationService, options = {}) {
27
+ this.factoryRegistrationService = factoryRegistrationService;
28
+ this.options = options;
29
+ }
30
+ /**
31
+ * Create a ConfigModule configuration with AWS-sourced factories.
32
+ * This method can be used to enhance existing @nestjs/config setups.
33
+ *
34
+ * @param baseOptions - Base ConfigModule options to enhance
35
+ * @returns Promise resolving to enhanced ConfigModule options
36
+ */
37
+ async createConfigModuleOptions(baseOptions = {}) {
38
+ this.logger.debug('Creating ConfigModule options with AWS integration');
39
+ try {
40
+ // Register AWS configuration factories
41
+ const awsFactories = await this.factoryRegistrationService.registerFactories();
42
+ // Merge AWS factories with existing load array
43
+ const existingLoad = baseOptions.load || [];
44
+ const enhancedLoad = [...existingLoad, ...awsFactories];
45
+ // Create enhanced options
46
+ const enhancedOptions = {
47
+ ...baseOptions,
48
+ load: enhancedLoad,
49
+ // Apply integration-specific options with proper precedence
50
+ isGlobal: baseOptions.isGlobal !== undefined ? baseOptions.isGlobal : (this.options.registerGlobally ?? true),
51
+ cache: baseOptions.cache !== undefined ? baseOptions.cache : (this.options.factoryOptions?.cache ?? true),
52
+ expandVariables: baseOptions.expandVariables !== undefined ? baseOptions.expandVariables : (this.options.factoryOptions?.expandVariables ?? true),
53
+ };
54
+ this.logger.log(`Enhanced ConfigModule options with ${awsFactories.length} AWS factories`);
55
+ return enhancedOptions;
56
+ }
57
+ catch (error) {
58
+ const enhancementError = error instanceof Error ? error : new Error(String(error));
59
+ this.logger.error('Failed to create enhanced ConfigModule options:', enhancementError);
60
+ // Handle enhancement failure based on options
61
+ if (this.options.failOnAwsError) {
62
+ throw enhancementError;
63
+ }
64
+ // Return base options if fallback is enabled
65
+ if (this.options.fallbackToLocal) {
66
+ this.logger.warn('Falling back to base ConfigModule options due to AWS error');
67
+ return baseOptions;
68
+ }
69
+ throw enhancementError;
70
+ }
71
+ }
72
+ /**
73
+ * Create a ConfigModule configuration for async setup.
74
+ * This method works with ConfigModule.forRootAsync() pattern.
75
+ *
76
+ * @param baseOptions - Base async ConfigModule options to enhance
77
+ * @returns Promise resolving to enhanced async ConfigModule options
78
+ */
79
+ async createAsyncConfigModuleOptions(baseOptions = {}) {
80
+ this.logger.debug('Creating async ConfigModule options with AWS integration');
81
+ try {
82
+ // Create a factory function that includes AWS configuration
83
+ const enhancedUseFactory = async (...args) => {
84
+ // Call original factory if it exists
85
+ let baseConfig = {};
86
+ if (baseOptions.useFactory) {
87
+ baseConfig = await baseOptions.useFactory(...args);
88
+ }
89
+ // Enhance with AWS configuration
90
+ return await this.createConfigModuleOptions(baseConfig);
91
+ };
92
+ // Create enhanced async options
93
+ const enhancedAsyncOptions = {
94
+ ...baseOptions,
95
+ useFactory: enhancedUseFactory,
96
+ // Ensure our service is injected
97
+ inject: [...(baseOptions.inject || []), FactoryRegistrationService],
98
+ };
99
+ this.logger.debug('Created enhanced async ConfigModule options');
100
+ return enhancedAsyncOptions;
101
+ }
102
+ catch (error) {
103
+ const asyncError = error instanceof Error ? error : new Error(String(error));
104
+ this.logger.error('Failed to create async ConfigModule options:', asyncError);
105
+ if (this.options.failOnAwsError) {
106
+ throw asyncError;
107
+ }
108
+ // Return base options if fallback is enabled
109
+ if (this.options.fallbackToLocal) {
110
+ this.logger.warn('Falling back to base async ConfigModule options due to AWS error');
111
+ return baseOptions;
112
+ }
113
+ throw asyncError;
114
+ }
115
+ }
116
+ /**
117
+ * Create a complete ConfigModule with AWS integration.
118
+ * This method returns a ready-to-use DynamicModule.
119
+ *
120
+ * @param baseOptions - Base ConfigModule options
121
+ * @returns Promise resolving to DynamicModule with AWS integration
122
+ */
123
+ async createIntegratedConfigModule(baseOptions = {}) {
124
+ this.logger.debug('Creating integrated ConfigModule with AWS support');
125
+ try {
126
+ // Create enhanced options
127
+ const enhancedOptions = await this.createConfigModuleOptions(baseOptions);
128
+ // Create the ConfigModule with enhanced options
129
+ const configModule = await ConfigModule.forRoot(enhancedOptions);
130
+ this.logger.log('Created integrated ConfigModule with AWS support');
131
+ return configModule;
132
+ }
133
+ catch (error) {
134
+ const moduleError = error instanceof Error ? error : new Error(String(error));
135
+ this.logger.error('Failed to create integrated ConfigModule:', moduleError);
136
+ if (this.options.failOnAwsError) {
137
+ throw moduleError;
138
+ }
139
+ // Return basic ConfigModule if fallback is enabled
140
+ if (this.options.fallbackToLocal) {
141
+ this.logger.warn('Falling back to basic ConfigModule due to AWS error');
142
+ return await ConfigModule.forRoot(baseOptions);
143
+ }
144
+ throw moduleError;
145
+ }
146
+ }
147
+ /**
148
+ * Create an async integrated ConfigModule.
149
+ * This method returns a ready-to-use async DynamicModule.
150
+ *
151
+ * @param baseOptions - Base async ConfigModule options
152
+ * @returns Promise resolving to DynamicModule with async AWS integration
153
+ */
154
+ async createAsyncIntegratedConfigModule(baseOptions = {}) {
155
+ this.logger.debug('Creating async integrated ConfigModule with AWS support');
156
+ try {
157
+ // Create enhanced options with AWS integration
158
+ const enhancedOptions = await this.createConfigModuleOptions(baseOptions);
159
+ // Create the ConfigModule with enhanced options
160
+ const asyncConfigModule = await ConfigModule.forRoot(enhancedOptions);
161
+ this.logger.log('Created async integrated ConfigModule with AWS support');
162
+ return asyncConfigModule;
163
+ }
164
+ catch (error) {
165
+ const asyncModuleError = error instanceof Error ? error : new Error(String(error));
166
+ this.logger.error('Failed to create async integrated ConfigModule:', asyncModuleError);
167
+ if (this.options.failOnAwsError) {
168
+ throw asyncModuleError;
169
+ }
170
+ // Return basic async ConfigModule if fallback is enabled
171
+ if (this.options.fallbackToLocal) {
172
+ this.logger.warn('Falling back to basic async ConfigModule due to AWS error');
173
+ return await ConfigModule.forRoot(baseOptions);
174
+ }
175
+ throw asyncModuleError;
176
+ }
177
+ }
178
+ /**
179
+ * Get configuration factories for manual registration.
180
+ * This method allows developers to manually register AWS factories with their own ConfigModule setup.
181
+ *
182
+ * @returns Promise resolving to array of configuration factories
183
+ */
184
+ async getConfigurationFactories() {
185
+ this.logger.debug('Getting configuration factories for manual registration');
186
+ try {
187
+ const factories = await this.factoryRegistrationService.registerFactories();
188
+ this.logger.debug(`Retrieved ${factories.length} configuration factories`);
189
+ return factories;
190
+ }
191
+ catch (error) {
192
+ const factoryError = error instanceof Error ? error : new Error(String(error));
193
+ this.logger.error('Failed to get configuration factories:', factoryError);
194
+ if (this.options.failOnAwsError) {
195
+ throw factoryError;
196
+ }
197
+ // Return empty array if fallback is enabled
198
+ if (this.options.fallbackToLocal) {
199
+ this.logger.warn('Returning empty factories array due to AWS error');
200
+ return [];
201
+ }
202
+ throw factoryError;
203
+ }
204
+ }
205
+ /**
206
+ * Get namespaced configuration factories.
207
+ * This method returns factories for specific namespaces only.
208
+ *
209
+ * @param namespaces - Array of namespace names to get factories for
210
+ * @returns Promise resolving to array of namespaced configuration factories
211
+ */
212
+ async getNamespacedFactories(namespaces) {
213
+ this.logger.debug(`Getting namespaced factories for: ${namespaces.join(', ')}`);
214
+ try {
215
+ const factories = await this.factoryRegistrationService.registerNamespacedFactories(namespaces);
216
+ this.logger.debug(`Retrieved ${factories.length} namespaced factories`);
217
+ return factories;
218
+ }
219
+ catch (error) {
220
+ const namespacedError = error instanceof Error ? error : new Error(String(error));
221
+ this.logger.error('Failed to get namespaced factories:', namespacedError);
222
+ if (this.options.failOnAwsError) {
223
+ throw namespacedError;
224
+ }
225
+ // Return empty array if fallback is enabled
226
+ if (this.options.fallbackToLocal) {
227
+ this.logger.warn('Returning empty namespaced factories array due to AWS error');
228
+ return [];
229
+ }
230
+ throw namespacedError;
231
+ }
232
+ }
233
+ /**
234
+ * Create a configuration factory for immediate use.
235
+ * This method creates a single factory that can be used directly with @nestjs/config.
236
+ *
237
+ * @param namespace - Optional namespace for the factory
238
+ * @param config - Optional configuration data to use
239
+ * @returns Configuration factory
240
+ */
241
+ createImmediateFactory(namespace, config) {
242
+ this.logger.debug(`Creating immediate factory for namespace: ${namespace || 'default'}`);
243
+ try {
244
+ const factory = this.factoryRegistrationService.createSyncFactory(namespace, config);
245
+ this.logger.debug(`Created immediate factory: ${namespace || 'default'}`);
246
+ return factory;
247
+ }
248
+ catch (error) {
249
+ const immediateError = error instanceof Error ? error : new Error(String(error));
250
+ this.logger.error('Failed to create immediate factory:', immediateError);
251
+ if (this.options.failOnAwsError) {
252
+ throw immediateError;
253
+ }
254
+ // Return empty factory if fallback is enabled
255
+ if (this.options.fallbackToLocal) {
256
+ this.logger.warn('Creating empty factory due to error');
257
+ return () => config || {};
258
+ }
259
+ throw immediateError;
260
+ }
261
+ }
262
+ /**
263
+ * Check if AWS integration is available and working.
264
+ * This method can be used to verify the integration status.
265
+ *
266
+ * @returns Promise resolving to integration status
267
+ */
268
+ async checkIntegrationStatus() {
269
+ this.logger.debug('Checking AWS integration status');
270
+ const status = {
271
+ isAvailable: false,
272
+ factoriesRegistered: 0,
273
+ errors: []
274
+ };
275
+ try {
276
+ // Check if factories are initialized
277
+ const isInitialized = this.factoryRegistrationService.isFactoriesInitialized();
278
+ if (isInitialized) {
279
+ const registeredFactories = this.factoryRegistrationService.getRegisteredFactories();
280
+ status.factoriesRegistered = registeredFactories.size;
281
+ status.isAvailable = true;
282
+ }
283
+ else {
284
+ // Try to register factories to check availability
285
+ const factories = await this.factoryRegistrationService.registerFactories();
286
+ status.factoriesRegistered = factories.length;
287
+ status.isAvailable = true;
288
+ }
289
+ this.logger.debug(`Integration status: available=${status.isAvailable}, factories=${status.factoriesRegistered}`);
290
+ }
291
+ catch (error) {
292
+ const statusError = error instanceof Error ? error : new Error(String(error));
293
+ status.errors.push(statusError.message);
294
+ this.logger.error('Integration status check failed:', statusError);
295
+ }
296
+ return status;
297
+ }
298
+ /**
299
+ * Reset the integration state.
300
+ * This method clears all registered factories and resets the integration.
301
+ */
302
+ resetIntegration() {
303
+ this.logger.debug('Resetting AWS integration state');
304
+ this.factoryRegistrationService.reset();
305
+ this.logger.debug('AWS integration state reset complete');
306
+ }
307
+ };
308
+ NestjsConfigIntegrationService = NestjsConfigIntegrationService_1 = __decorate([
309
+ Injectable(),
310
+ __param(1, Optional()),
311
+ __param(1, Inject(NESTJS_CONFIG_AWS_INTEGRATION_OPTIONS)),
312
+ __metadata("design:paramtypes", [FactoryRegistrationService, Object])
313
+ ], NestjsConfigIntegrationService);
314
+ export { NestjsConfigIntegrationService };
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGpzLWNvbmZpZy1pbnRlZ3JhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uL3NlcnZpY2VzL25lc3Rqcy1jb25maWctaW50ZWdyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBaUIsWUFBWSxFQUF1QixNQUFNLGdCQUFnQixDQUFDO0FBRWxGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTVGOzs7R0FHRztBQUVJLElBQU0sOEJBQThCLHNDQUFwQyxNQUFNLDhCQUE4QjtJQUl0QjtJQUVBO0lBTEYsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLGdDQUE4QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTFFLFlBQ21CLDBCQUFzRCxFQUV0RCxVQUE4QixFQUFFO1FBRmhDLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7UUFFdEQsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7SUFDaEQsQ0FBQztJQUVKOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxjQUFtQyxFQUFFO1FBQ25FLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFFeEUsSUFBSSxDQUFDO1lBQ0gsdUNBQXVDO1lBQ3ZDLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFL0UsK0NBQStDO1lBQy9DLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lB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QUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM5RSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQzVELENBQUM7Q0FDRixDQUFBO0FBNVVZLDhCQUE4QjtJQUQxQyxVQUFVLEVBQUU7SUFNUixXQUFBLFFBQVEsRUFBRSxDQUFBO0lBQUUsV0FBQSxNQUFNLENBQUMscUNBQXFDLENBQUMsQ0FBQTtxQ0FEYiwwQkFBMEI7R0FKOUQsOEJBQThCLENBNFUxQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIExvZ2dlciwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0BuZXN0anMvY29tbW9uJztcclxuaW1wb3J0IHsgQ29uZmlnRmFjdG9yeSwgQ29uZmlnTW9kdWxlLCBDb25maWdNb2R1bGVPcHRpb25zIH0gZnJvbSAnQG5lc3Rqcy9jb25maWcnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlIH0gZnJvbSAnQG5lc3Rqcy9jb21tb24nO1xyXG5pbXBvcnQgeyBGYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZSB9IGZyb20gJy4vZmFjdG9yeS1yZWdpc3RyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEludGVncmF0aW9uT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaW50ZWdyYXRpb24tb3B0aW9ucy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBORVNUSlNfQ09ORklHX0FXU19JTlRFR1JBVElPTl9PUFRJT05TIH0gZnJvbSAnLi4vbmVzdGpzLWNvbmZpZy1pbnRlZ3JhdGlvbi5tb2R1bGUnO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgdGhhdCBwcm92aWRlcyBpbnRlZ3JhdGlvbiB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBAbmVzdGpzL2NvbmZpZy5cclxuICogVGhpcyBzZXJ2aWNlIGNyZWF0ZXMgQ29uZmlnTW9kdWxlIGNvbmZpZ3VyYXRpb25zIHRoYXQgaW5jbHVkZSBBV1Mtc291cmNlZCBmYWN0b3JpZXMuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOZXN0anNDb25maWdJbnRlZ3JhdGlvblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gbmV3IExvZ2dlcihOZXN0anNDb25maWdJbnRlZ3JhdGlvblNlcnZpY2UubmFtZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBmYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZTogRmFjdG9yeVJlZ2lzdHJhdGlvblNlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5FU1RKU19DT05GSUdfQVdTX0lOVEVHUkFUSU9OX09QVElPTlMpIFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBJbnRlZ3JhdGlvbk9wdGlvbnMgPSB7fVxyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgQ29uZmlnTW9kdWxlIGNvbmZpZ3VyYXRpb24gd2l0aCBBV1Mtc291cmNlZCBmYWN0b3JpZXMuXHJcbiAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gZW5oYW5jZSBleGlzdGluZyBAbmVzdGpzL2NvbmZpZyBzZXR1cHMuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGJhc2VPcHRpb25zIC0gQmFzZSBDb25maWdNb2R1bGUgb3B0aW9ucyB0byBlbmhhbmNlXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gZW5oYW5jZWQgQ29uZmlnTW9kdWxlIG9wdGlvbnNcclxuICAgKi9cclxuICBhc3luYyBjcmVhdGVDb25maWdNb2R1bGVPcHRpb25zKGJhc2VPcHRpb25zOiBDb25maWdNb2R1bGVPcHRpb25zID0ge30pOiBQcm9taXNlPENvbmZpZ01vZHVsZU9wdGlvbnM+IHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDcmVhdGluZyBDb25maWdNb2R1bGUgb3B0aW9ucyB3aXRoIEFXUyBpbnRlZ3JhdGlvbicpO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBSZWdpc3RlciBBV1MgY29uZmlndXJhdGlvbiBmYWN0b3JpZXNcclxuICAgICAgY29uc3QgYXdzRmFjdG9yaWVzID0gYXdhaXQgdGhpcy5mYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZS5yZWdpc3RlckZhY3RvcmllcygpO1xyXG4gICAgICBcclxuICAgICAgLy8gTWVyZ2UgQVdTIGZhY3RvcmllcyB3aXRoIGV4aXN0aW5nIGxvYWQgYXJyYXlcclxuICAgICAgY29uc3QgZXhpc3RpbmdMb2FkID0gYmFzZU9wdGlvbnMubG9hZCB8fCBbXTtcclxuICAgICAgY29uc3QgZW5oYW5jZWRMb2FkID0gWy4uLmV4aXN0aW5nTG9hZCwgLi4uYXdzRmFjdG9yaWVzXTtcclxuICAgICAgXHJcbiAgICAgIC8vIENyZWF0ZSBlbmhhbmNlZCBvcHRpb25zXHJcbiAgICAgIGNvbnN0IGVuaGFuY2VkT3B0aW9uczogQ29uZmlnTW9kdWxlT3B0aW9ucyA9IHtcclxuICAgICAgICAuLi5iYXNlT3B0aW9ucyxcclxuICAgICAgICBsb2FkOiBlbmhhbmNlZExvYWQsXHJcbiAgICAgICAgLy8gQXBwbHkgaW50ZWdyYXRpb24tc3BlY2lmaWMgb3B0aW9ucyB3aXRoIHByb3BlciBwcmVjZWRlbmNlXHJcbiAgICAgICAgaXNHbG9iYWw6IGJhc2VPcHRpb25zLmlzR2xvYmFsICE9PSB1bmRlZmluZWQgPyBiYXNlT3B0aW9ucy5pc0dsb2JhbCA6ICh0aGlzLm9wdGlvbnMucmVnaXN0ZXJHbG9iYWxseSA/PyB0cnVlKSxcclxuICAgICAgICBjYWNoZTogYmFzZU9wdGlvbnMuY2FjaGUgIT09IHVuZGVmaW5lZCA/IGJhc2VPcHRpb25zLmNhY2hlIDogKHRoaXMub3B0aW9ucy5mYWN0b3J5T3B0aW9ucz8uY2FjaGUgPz8gdHJ1ZSksXHJcbiAgICAgICAgZXhwYW5kVmFyaWFibGVzOiBiYXNlT3B0aW9ucy5leHBhbmRWYXJpYWJsZXMgIT09IHVuZGVmaW5lZCA/IGJhc2VPcHRpb25zLmV4cGFuZFZhcmlhYmxlcyA6ICh0aGlzLm9wdGlvbnMuZmFjdG9yeU9wdGlvbnM/LmV4cGFuZFZhcmlhYmxlcyA/PyB0cnVlKSxcclxuICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMubG9nZ2VyLmxvZyhgRW5oYW5jZWQgQ29uZmlnTW9kdWxlIG9wdGlvbnMgd2l0aCAke2F3c0ZhY3Rvcmllcy5sZW5ndGh9IEFXUyBmYWN0b3JpZXNgKTtcclxuICAgICAgcmV0dXJuIGVuaGFuY2VkT3B0aW9ucztcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IGVuaGFuY2VtZW50RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIGVuaGFuY2VkIENvbmZpZ01vZHVsZSBvcHRpb25zOicsIGVuaGFuY2VtZW50RXJyb3IpO1xyXG4gICAgICBcclxuICAgICAgLy8gSGFuZGxlIGVuaGFuY2VtZW50IGZhaWx1cmUgYmFzZWQgb24gb3B0aW9uc1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhaWxPbkF3c0Vycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgZW5oYW5jZW1lbnRFcnJvcjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gUmV0dXJuIGJhc2Ugb3B0aW9ucyBpZiBmYWxsYmFjayBpcyBlbmFibGVkXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFsbGJhY2tUb0xvY2FsKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignRmFsbGluZyBiYWNrIHRvIGJhc2UgQ29uZmlnTW9kdWxlIG9wdGlvbnMgZHVlIHRvIEFXUyBlcnJvcicpO1xyXG4gICAgICAgIHJldHVybiBiYXNlT3B0aW9ucztcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgdGhyb3cgZW5oYW5jZW1lbnRFcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIENvbmZpZ01vZHVsZSBjb25maWd1cmF0aW9uIGZvciBhc3luYyBzZXR1cC5cclxuICAgKiBUaGlzIG1ldGhvZCB3b3JrcyB3aXRoIENvbmZpZ01vZHVsZS5mb3JSb290QXN5bmMoKSBwYXR0ZXJuLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBiYXNlT3B0aW9ucyAtIEJhc2UgYXN5bmMgQ29uZmlnTW9kdWxlIG9wdGlvbnMgdG8gZW5oYW5jZVxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGVuaGFuY2VkIGFzeW5jIENvbmZpZ01vZHVsZSBvcHRpb25zXHJcbiAgICovXHJcbiAgYXN5bmMgY3JlYXRlQXN5bmNDb25maWdNb2R1bGVPcHRpb25zKGJhc2VPcHRpb25zOiBhbnkgPSB7fSk6IFByb21pc2U8YW55PiB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ3JlYXRpbmcgYXN5bmMgQ29uZmlnTW9kdWxlIG9wdGlvbnMgd2l0aCBBV1MgaW50ZWdyYXRpb24nKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gQ3JlYXRlIGEgZmFjdG9yeSBmdW5jdGlvbiB0aGF0IGluY2x1ZGVzIEFXUyBjb25maWd1cmF0aW9uXHJcbiAgICAgIGNvbnN0IGVuaGFuY2VkVXNlRmFjdG9yeSA9IGFzeW5jICguLi5hcmdzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIC8vIENhbGwgb3JpZ2luYWwgZmFjdG9yeSBpZiBpdCBleGlzdHNcclxuICAgICAgICBsZXQgYmFzZUNvbmZpZzogQ29uZmlnTW9kdWxlT3B0aW9ucyA9IHt9O1xyXG4gICAgICAgIGlmIChiYXNlT3B0aW9ucy51c2VGYWN0b3J5KSB7XHJcbiAgICAgICAgICBiYXNlQ29uZmlnID0gYXdhaXQgYmFzZU9wdGlvbnMudXNlRmFjdG9yeSguLi5hcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gRW5oYW5jZSB3aXRoIEFXUyBjb25maWd1cmF0aW9uXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlQ29uZmlnTW9kdWxlT3B0aW9ucyhiYXNlQ29uZmlnKTtcclxuICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIC8vIENyZWF0ZSBlbmhhbmNlZCBhc3luYyBvcHRpb25zXHJcbiAgICAgIGNvbnN0IGVuaGFuY2VkQXN5bmNPcHRpb25zID0ge1xyXG4gICAgICAgIC4uLmJhc2VPcHRpb25zLFxyXG4gICAgICAgIHVzZUZhY3Rvcnk6IGVuaGFuY2VkVXNlRmFjdG9yeSxcclxuICAgICAgICAvLyBFbnN1cmUgb3VyIHNlcnZpY2UgaXMgaW5qZWN0ZWRcclxuICAgICAgICBpbmplY3Q6IFsuLi4oYmFzZU9wdGlvbnMuaW5qZWN0IHx8IFtdKSwgRmFjdG9yeVJlZ2lzdHJhdGlvblNlcnZpY2VdLFxyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0NyZWF0ZWQgZW5oYW5jZWQgYXN5bmMgQ29uZmlnTW9kdWxlIG9wdGlvbnMnKTtcclxuICAgICAgcmV0dXJuIGVuaGFuY2VkQXN5bmNPcHRpb25zO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgYXN5bmNFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgYXN5bmMgQ29uZmlnTW9kdWxlIG9wdGlvbnM6JywgYXN5bmNFcnJvcik7XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhaWxPbkF3c0Vycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgYXN5bmNFcnJvcjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gUmV0dXJuIGJhc2Ugb3B0aW9ucyBpZiBmYWxsYmFjayBpcyBlbmFibGVkXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFsbGJhY2tUb0xvY2FsKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignRmFsbGluZyBiYWNrIHRvIGJhc2UgYXN5bmMgQ29uZmlnTW9kdWxlIG9wdGlvbnMgZHVlIHRvIEFXUyBlcnJvcicpO1xyXG4gICAgICAgIHJldHVybiBiYXNlT3B0aW9ucztcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgdGhyb3cgYXN5bmNFcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIGNvbXBsZXRlIENvbmZpZ01vZHVsZSB3aXRoIEFXUyBpbnRlZ3JhdGlvbi5cclxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVhZHktdG8tdXNlIER5bmFtaWNNb2R1bGUuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGJhc2VPcHRpb25zIC0gQmFzZSBDb25maWdNb2R1bGUgb3B0aW9uc1xyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIER5bmFtaWNNb2R1bGUgd2l0aCBBV1MgaW50ZWdyYXRpb25cclxuICAgKi9cclxuICBhc3luYyBjcmVhdGVJbnRlZ3JhdGVkQ29uZmlnTW9kdWxlKGJhc2VPcHRpb25zOiBDb25maWdNb2R1bGVPcHRpb25zID0ge30pOiBQcm9taXNlPER5bmFtaWNNb2R1bGU+IHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDcmVhdGluZyBpbnRlZ3JhdGVkIENvbmZpZ01vZHVsZSB3aXRoIEFXUyBzdXBwb3J0Jyk7XHJcbiAgICBcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIENyZWF0ZSBlbmhhbmNlZCBvcHRpb25zXHJcbiAgICAgIGNvbnN0IGVuaGFuY2VkT3B0aW9ucyA9IGF3YWl0IHRoaXMuY3JlYXRlQ29uZmlnTW9kdWxlT3B0aW9ucyhiYXNlT3B0aW9ucyk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBDcmVhdGUgdGhlIENvbmZpZ01vZHVsZSB3aXRoIGVuaGFuY2VkIG9wdGlvbnNcclxuICAgICAgY29uc3QgY29uZmlnTW9kdWxlID0gYXdhaXQgQ29uZmlnTW9kdWxlLmZvclJvb3QoZW5oYW5jZWRPcHRpb25zKTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMubG9nZ2VyLmxvZygnQ3JlYXRlZCBpbnRlZ3JhdGVkIENvbmZpZ01vZHVsZSB3aXRoIEFXUyBzdXBwb3J0Jyk7XHJcbiAgICAgIHJldHVybiBjb25maWdNb2R1bGU7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCBtb2R1bGVFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgaW50ZWdyYXRlZCBDb25maWdNb2R1bGU6JywgbW9kdWxlRXJyb3IpO1xyXG4gICAgICBcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWlsT25Bd3NFcnJvcikge1xyXG4gICAgICAgIHRocm93IG1vZHVsZUVycm9yO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBSZXR1cm4gYmFzaWMgQ29uZmlnTW9kdWxlIGlmIGZhbGxiYWNrIGlzIGVuYWJsZWRcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWxsYmFja1RvTG9jYWwpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdGYWxsaW5nIGJhY2sgdG8gYmFzaWMgQ29uZmlnTW9kdWxlIGR1ZSB0byBBV1MgZXJyb3InKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgQ29uZmlnTW9kdWxlLmZvclJvb3QoYmFzZU9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBtb2R1bGVFcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhbiBhc3luYyBpbnRlZ3JhdGVkIENvbmZpZ01vZHVsZS5cclxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVhZHktdG8tdXNlIGFzeW5jIER5bmFtaWNNb2R1bGUuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGJhc2VPcHRpb25zIC0gQmFzZSBhc3luYyBDb25maWdNb2R1bGUgb3B0aW9uc1xyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIER5bmFtaWNNb2R1bGUgd2l0aCBhc3luYyBBV1MgaW50ZWdyYXRpb25cclxuICAgKi9cclxuICBhc3luYyBjcmVhdGVBc3luY0ludGVncmF0ZWRDb25maWdNb2R1bGUoYmFzZU9wdGlvbnM6IENvbmZpZ01vZHVsZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8RHluYW1pY01vZHVsZT4ge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0NyZWF0aW5nIGFzeW5jIGludGVncmF0ZWQgQ29uZmlnTW9kdWxlIHdpdGggQVdTIHN1cHBvcnQnKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gQ3JlYXRlIGVuaGFuY2VkIG9wdGlvbnMgd2l0aCBBV1MgaW50ZWdyYXRpb25cclxuICAgICAgY29uc3QgZW5oYW5jZWRPcHRpb25zID0gYXdhaXQgdGhpcy5jcmVhdGVDb25maWdNb2R1bGVPcHRpb25zKGJhc2VPcHRpb25zKTtcclxuICAgICAgXHJcbiAgICAgIC8vIENyZWF0ZSB0aGUgQ29uZmlnTW9kdWxlIHdpdGggZW5oYW5jZWQgb3B0aW9uc1xyXG4gICAgICBjb25zdCBhc3luY0NvbmZpZ01vZHVsZSA9IGF3YWl0IENvbmZpZ01vZHVsZS5mb3JSb290KGVuaGFuY2VkT3B0aW9ucyk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmxvZ2dlci5sb2coJ0NyZWF0ZWQgYXN5bmMgaW50ZWdyYXRlZCBDb25maWdNb2R1bGUgd2l0aCBBV1Mgc3VwcG9ydCcpO1xyXG4gICAgICByZXR1cm4gYXN5bmNDb25maWdNb2R1bGU7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCBhc3luY01vZHVsZUVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBhc3luYyBpbnRlZ3JhdGVkIENvbmZpZ01vZHVsZTonLCBhc3luY01vZHVsZUVycm9yKTtcclxuICAgICAgXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFpbE9uQXdzRXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBhc3luY01vZHVsZUVycm9yO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBSZXR1cm4gYmFzaWMgYXN5bmMgQ29uZmlnTW9kdWxlIGlmIGZhbGxiYWNrIGlzIGVuYWJsZWRcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWxsYmFja1RvTG9jYWwpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdGYWxsaW5nIGJhY2sgdG8gYmFzaWMgYXN5bmMgQ29uZmlnTW9kdWxlIGR1ZSB0byBBV1MgZXJyb3InKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgQ29uZmlnTW9kdWxlLmZvclJvb3QoYmFzZU9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBhc3luY01vZHVsZUVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGNvbmZpZ3VyYXRpb24gZmFjdG9yaWVzIGZvciBtYW51YWwgcmVnaXN0cmF0aW9uLlxyXG4gICAqIFRoaXMgbWV0aG9kIGFsbG93cyBkZXZlbG9wZXJzIHRvIG1hbnVhbGx5IHJlZ2lzdGVyIEFXUyBmYWN0b3JpZXMgd2l0aCB0aGVpciBvd24gQ29uZmlnTW9kdWxlIHNldHVwLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGFycmF5IG9mIGNvbmZpZ3VyYXRpb24gZmFjdG9yaWVzXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0Q29uZmlndXJhdGlvbkZhY3RvcmllcygpOiBQcm9taXNlPENvbmZpZ0ZhY3RvcnlbXT4ge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0dldHRpbmcgY29uZmlndXJhdGlvbiBmYWN0b3JpZXMgZm9yIG1hbnVhbCByZWdpc3RyYXRpb24nKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZmFjdG9yaWVzID0gYXdhaXQgdGhpcy5mYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZS5yZWdpc3RlckZhY3RvcmllcygpO1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgUmV0cmlldmVkICR7ZmFjdG9yaWVzLmxlbmd0aH0gY29uZmlndXJhdGlvbiBmYWN0b3JpZXNgKTtcclxuICAgICAgcmV0dXJuIGZhY3RvcmllcztcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IGZhY3RvcnlFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgY29uZmlndXJhdGlvbiBmYWN0b3JpZXM6JywgZmFjdG9yeUVycm9yKTtcclxuICAgICAgXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFpbE9uQXdzRXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBmYWN0b3J5RXJyb3I7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFJldHVybiBlbXB0eSBhcnJheSBpZiBmYWxsYmFjayBpcyBlbmFibGVkXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFsbGJhY2tUb0xvY2FsKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignUmV0dXJuaW5nIGVtcHR5IGZhY3RvcmllcyBhcnJheSBkdWUgdG8gQVdTIGVycm9yJyk7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBmYWN0b3J5RXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgbmFtZXNwYWNlZCBjb25maWd1cmF0aW9uIGZhY3Rvcmllcy5cclxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGZhY3RvcmllcyBmb3Igc3BlY2lmaWMgbmFtZXNwYWNlcyBvbmx5LlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBuYW1lc3BhY2VzIC0gQXJyYXkgb2YgbmFtZXNwYWNlIG5hbWVzIHRvIGdldCBmYWN0b3JpZXMgZm9yXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gYXJyYXkgb2YgbmFtZXNwYWNlZCBjb25maWd1cmF0aW9uIGZhY3Rvcmllc1xyXG4gICAqL1xyXG4gIGFzeW5jIGdldE5hbWVzcGFjZWRGYWN0b3JpZXMobmFtZXNwYWNlczogc3RyaW5nW10pOiBQcm9taXNlPENvbmZpZ0ZhY3RvcnlbXT4ge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYEdldHRpbmcgbmFtZXNwYWNlZCBmYWN0b3JpZXMgZm9yOiAke25hbWVzcGFjZXMuam9pbignLCAnKX1gKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZmFjdG9yaWVzID0gYXdhaXQgdGhpcy5mYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZS5yZWdpc3Rlck5hbWVzcGFjZWRGYWN0b3JpZXMobmFtZXNwYWNlcyk7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBSZXRyaWV2ZWQgJHtmYWN0b3JpZXMubGVuZ3RofSBuYW1lc3BhY2VkIGZhY3Rvcmllc2ApO1xyXG4gICAgICByZXR1cm4gZmFjdG9yaWVzO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgbmFtZXNwYWNlZEVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBuYW1lc3BhY2VkIGZhY3RvcmllczonLCBuYW1lc3BhY2VkRXJyb3IpO1xyXG4gICAgICBcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWlsT25Bd3NFcnJvcikge1xyXG4gICAgICAgIHRocm93IG5hbWVzcGFjZWRFcnJvcjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gUmV0dXJuIGVtcHR5IGFycmF5IGlmIGZhbGxiYWNrIGlzIGVuYWJsZWRcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWxsYmFja1RvTG9jYWwpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdSZXR1cm5pbmcgZW1wdHkgbmFtZXNwYWNlZCBmYWN0b3JpZXMgYXJyYXkgZHVlIHRvIEFXUyBlcnJvcicpO1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgdGhyb3cgbmFtZXNwYWNlZEVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgY29uZmlndXJhdGlvbiBmYWN0b3J5IGZvciBpbW1lZGlhdGUgdXNlLlxyXG4gICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBzaW5nbGUgZmFjdG9yeSB0aGF0IGNhbiBiZSB1c2VkIGRpcmVjdGx5IHdpdGggQG5lc3Rqcy9jb25maWcuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZSAtIE9wdGlvbmFsIG5hbWVzcGFjZSBmb3IgdGhlIGZhY3RvcnlcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBkYXRhIHRvIHVzZVxyXG4gICAqIEByZXR1cm5zIENvbmZpZ3VyYXRpb24gZmFjdG9yeVxyXG4gICAqL1xyXG4gIGNyZWF0ZUltbWVkaWF0ZUZhY3RvcnkobmFtZXNwYWNlPzogc3RyaW5nLCBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogQ29uZmlnRmFjdG9yeSB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ3JlYXRpbmcgaW1tZWRpYXRlIGZhY3RvcnkgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2UgfHwgJ2RlZmF1bHQnfWApO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZS5jcmVhdGVTeW5jRmFjdG9yeShuYW1lc3BhY2UsIGNvbmZpZyk7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGVkIGltbWVkaWF0ZSBmYWN0b3J5OiAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9YCk7XHJcbiAgICAgIHJldHVybiBmYWN0b3J5O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgaW1tZWRpYXRlRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIGltbWVkaWF0ZSBmYWN0b3J5OicsIGltbWVkaWF0ZUVycm9yKTtcclxuICAgICAgXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFpbE9uQXdzRXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBpbW1lZGlhdGVFcnJvcjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gUmV0dXJuIGVtcHR5IGZhY3RvcnkgaWYgZmFsbGJhY2sgaXMgZW5hYmxlZFxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhbGxiYWNrVG9Mb2NhbCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0NyZWF0aW5nIGVtcHR5IGZhY3RvcnkgZHVlIHRvIGVycm9yJyk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IGNvbmZpZyB8fCB7fTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgdGhyb3cgaW1tZWRpYXRlRXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBBV1MgaW50ZWdyYXRpb24gaXMgYXZhaWxhYmxlIGFuZCB3b3JraW5nLlxyXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHZlcmlmeSB0aGUgaW50ZWdyYXRpb24gc3RhdHVzLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGludGVncmF0aW9uIHN0YXR1c1xyXG4gICAqL1xyXG4gIGFzeW5jIGNoZWNrSW50ZWdyYXRpb25TdGF0dXMoKTogUHJvbWlzZTx7XHJcbiAgICBpc0F2YWlsYWJsZTogYm9vbGVhbjtcclxuICAgIGZhY3Rvcmllc1JlZ2lzdGVyZWQ6IG51bWJlcjtcclxuICAgIGVycm9yczogc3RyaW5nW107XHJcbiAgfT4ge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0NoZWNraW5nIEFXUyBpbnRlZ3JhdGlvbiBzdGF0dXMnKTtcclxuICAgIFxyXG4gICAgY29uc3Qgc3RhdHVzID0ge1xyXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXHJcbiAgICAgIGZhY3Rvcmllc1JlZ2lzdGVyZWQ6IDAsXHJcbiAgICAgIGVycm9yczogW10gYXMgc3RyaW5nW11cclxuICAgIH07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gQ2hlY2sgaWYgZmFjdG9yaWVzIGFyZSBpbml0aWFsaXplZFxyXG4gICAgICBjb25zdCBpc0luaXRpYWxpemVkID0gdGhpcy5mYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZS5pc0ZhY3Rvcmllc0luaXRpYWxpemVkKCk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyZWRGYWN0b3JpZXMgPSB0aGlzLmZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlLmdldFJlZ2lzdGVyZWRGYWN0b3JpZXMoKTtcclxuICAgICAgICBzdGF0dXMuZmFjdG9yaWVzUmVnaXN0ZXJlZCA9IHJlZ2lzdGVyZWRGYWN0b3JpZXMuc2l6ZTtcclxuICAgICAgICBzdGF0dXMuaXNBdmFpbGFibGUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFRyeSB0byByZWdpc3RlciBmYWN0b3JpZXMgdG8gY2hlY2sgYXZhaWxhYmlsaXR5XHJcbiAgICAgICAgY29uc3QgZmFjdG9yaWVzID0gYXdhaXQgdGhpcy5mYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZS5yZWdpc3RlckZhY3RvcmllcygpO1xyXG4gICAgICAgIHN0YXR1cy5mYWN0b3JpZXNSZWdpc3RlcmVkID0gZmFjdG9yaWVzLmxlbmd0aDtcclxuICAgICAgICBzdGF0dXMuaXNBdmFpbGFibGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgSW50ZWdyYXRpb24gc3RhdHVzOiBhdmFpbGFibGU9JHtzdGF0dXMuaXNBdmFpbGFibGV9LCBmYWN0b3JpZXM9JHtzdGF0dXMuZmFjdG9yaWVzUmVnaXN0ZXJlZH1gKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IHN0YXR1c0Vycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICBzdGF0dXMuZXJyb3JzLnB1c2goc3RhdHVzRXJyb3IubWVzc2FnZSk7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdJbnRlZ3JhdGlvbiBzdGF0dXMgY2hlY2sgZmFpbGVkOicsIHN0YXR1c0Vycm9yKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgdGhlIGludGVncmF0aW9uIHN0YXRlLlxyXG4gICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgcmVnaXN0ZXJlZCBmYWN0b3JpZXMgYW5kIHJlc2V0cyB0aGUgaW50ZWdyYXRpb24uXHJcbiAgICovXHJcbiAgcmVzZXRJbnRlZ3JhdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdSZXNldHRpbmcgQVdTIGludGVncmF0aW9uIHN0YXRlJyk7XHJcbiAgICB0aGlzLmZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlLnJlc2V0KCk7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQVdTIGludGVncmF0aW9uIHN0YXRlIHJlc2V0IGNvbXBsZXRlJyk7XHJcbiAgfVxyXG59Il19