@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,318 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var NestjsConfigIntegrationService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.NestjsConfigIntegrationService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const config_1 = require("@nestjs/config");
19
+ const factory_registration_service_1 = require("./factory-registration.service");
20
+ const nestjs_config_integration_module_1 = require("../nestjs-config-integration.module");
21
+ /**
22
+ * Service that provides integration utilities for working with @nestjs/config.
23
+ * This service creates ConfigModule configurations that include AWS-sourced factories.
24
+ */
25
+ let NestjsConfigIntegrationService = NestjsConfigIntegrationService_1 = class NestjsConfigIntegrationService {
26
+ factoryRegistrationService;
27
+ options;
28
+ logger = new common_1.Logger(NestjsConfigIntegrationService_1.name);
29
+ constructor(factoryRegistrationService, options = {}) {
30
+ this.factoryRegistrationService = factoryRegistrationService;
31
+ this.options = options;
32
+ }
33
+ /**
34
+ * Create a ConfigModule configuration with AWS-sourced factories.
35
+ * This method can be used to enhance existing @nestjs/config setups.
36
+ *
37
+ * @param baseOptions - Base ConfigModule options to enhance
38
+ * @returns Promise resolving to enhanced ConfigModule options
39
+ */
40
+ async createConfigModuleOptions(baseOptions = {}) {
41
+ this.logger.debug('Creating ConfigModule options with AWS integration');
42
+ try {
43
+ // Register AWS configuration factories
44
+ const awsFactories = await this.factoryRegistrationService.registerFactories();
45
+ // Merge AWS factories with existing load array
46
+ const existingLoad = baseOptions.load || [];
47
+ const enhancedLoad = [...existingLoad, ...awsFactories];
48
+ // Create enhanced options
49
+ const enhancedOptions = {
50
+ ...baseOptions,
51
+ load: enhancedLoad,
52
+ // Apply integration-specific options with proper precedence
53
+ isGlobal: baseOptions.isGlobal !== undefined ? baseOptions.isGlobal : (this.options.registerGlobally ?? true),
54
+ cache: baseOptions.cache !== undefined ? baseOptions.cache : (this.options.factoryOptions?.cache ?? true),
55
+ expandVariables: baseOptions.expandVariables !== undefined ? baseOptions.expandVariables : (this.options.factoryOptions?.expandVariables ?? true),
56
+ };
57
+ this.logger.log(`Enhanced ConfigModule options with ${awsFactories.length} AWS factories`);
58
+ return enhancedOptions;
59
+ }
60
+ catch (error) {
61
+ const enhancementError = error instanceof Error ? error : new Error(String(error));
62
+ this.logger.error('Failed to create enhanced ConfigModule options:', enhancementError);
63
+ // Handle enhancement failure based on options
64
+ if (this.options.failOnAwsError) {
65
+ throw enhancementError;
66
+ }
67
+ // Return base options if fallback is enabled
68
+ if (this.options.fallbackToLocal) {
69
+ this.logger.warn('Falling back to base ConfigModule options due to AWS error');
70
+ return baseOptions;
71
+ }
72
+ throw enhancementError;
73
+ }
74
+ }
75
+ /**
76
+ * Create a ConfigModule configuration for async setup.
77
+ * This method works with ConfigModule.forRootAsync() pattern.
78
+ *
79
+ * @param baseOptions - Base async ConfigModule options to enhance
80
+ * @returns Promise resolving to enhanced async ConfigModule options
81
+ */
82
+ async createAsyncConfigModuleOptions(baseOptions = {}) {
83
+ this.logger.debug('Creating async ConfigModule options with AWS integration');
84
+ try {
85
+ // Create a factory function that includes AWS configuration
86
+ const enhancedUseFactory = async (...args) => {
87
+ // Call original factory if it exists
88
+ let baseConfig = {};
89
+ if (baseOptions.useFactory) {
90
+ baseConfig = await baseOptions.useFactory(...args);
91
+ }
92
+ // Enhance with AWS configuration
93
+ return await this.createConfigModuleOptions(baseConfig);
94
+ };
95
+ // Create enhanced async options
96
+ const enhancedAsyncOptions = {
97
+ ...baseOptions,
98
+ useFactory: enhancedUseFactory,
99
+ // Ensure our service is injected
100
+ inject: [...(baseOptions.inject || []), factory_registration_service_1.FactoryRegistrationService],
101
+ };
102
+ this.logger.debug('Created enhanced async ConfigModule options');
103
+ return enhancedAsyncOptions;
104
+ }
105
+ catch (error) {
106
+ const asyncError = error instanceof Error ? error : new Error(String(error));
107
+ this.logger.error('Failed to create async ConfigModule options:', asyncError);
108
+ if (this.options.failOnAwsError) {
109
+ throw asyncError;
110
+ }
111
+ // Return base options if fallback is enabled
112
+ if (this.options.fallbackToLocal) {
113
+ this.logger.warn('Falling back to base async ConfigModule options due to AWS error');
114
+ return baseOptions;
115
+ }
116
+ throw asyncError;
117
+ }
118
+ }
119
+ /**
120
+ * Create a complete ConfigModule with AWS integration.
121
+ * This method returns a ready-to-use DynamicModule.
122
+ *
123
+ * @param baseOptions - Base ConfigModule options
124
+ * @returns Promise resolving to DynamicModule with AWS integration
125
+ */
126
+ async createIntegratedConfigModule(baseOptions = {}) {
127
+ this.logger.debug('Creating integrated ConfigModule with AWS support');
128
+ try {
129
+ // Create enhanced options
130
+ const enhancedOptions = await this.createConfigModuleOptions(baseOptions);
131
+ // Create the ConfigModule with enhanced options
132
+ const configModule = await config_1.ConfigModule.forRoot(enhancedOptions);
133
+ this.logger.log('Created integrated ConfigModule with AWS support');
134
+ return configModule;
135
+ }
136
+ catch (error) {
137
+ const moduleError = error instanceof Error ? error : new Error(String(error));
138
+ this.logger.error('Failed to create integrated ConfigModule:', moduleError);
139
+ if (this.options.failOnAwsError) {
140
+ throw moduleError;
141
+ }
142
+ // Return basic ConfigModule if fallback is enabled
143
+ if (this.options.fallbackToLocal) {
144
+ this.logger.warn('Falling back to basic ConfigModule due to AWS error');
145
+ return await config_1.ConfigModule.forRoot(baseOptions);
146
+ }
147
+ throw moduleError;
148
+ }
149
+ }
150
+ /**
151
+ * Create an async integrated ConfigModule.
152
+ * This method returns a ready-to-use async DynamicModule.
153
+ *
154
+ * @param baseOptions - Base async ConfigModule options
155
+ * @returns Promise resolving to DynamicModule with async AWS integration
156
+ */
157
+ async createAsyncIntegratedConfigModule(baseOptions = {}) {
158
+ this.logger.debug('Creating async integrated ConfigModule with AWS support');
159
+ try {
160
+ // Create enhanced options with AWS integration
161
+ const enhancedOptions = await this.createConfigModuleOptions(baseOptions);
162
+ // Create the ConfigModule with enhanced options
163
+ const asyncConfigModule = await config_1.ConfigModule.forRoot(enhancedOptions);
164
+ this.logger.log('Created async integrated ConfigModule with AWS support');
165
+ return asyncConfigModule;
166
+ }
167
+ catch (error) {
168
+ const asyncModuleError = error instanceof Error ? error : new Error(String(error));
169
+ this.logger.error('Failed to create async integrated ConfigModule:', asyncModuleError);
170
+ if (this.options.failOnAwsError) {
171
+ throw asyncModuleError;
172
+ }
173
+ // Return basic async ConfigModule if fallback is enabled
174
+ if (this.options.fallbackToLocal) {
175
+ this.logger.warn('Falling back to basic async ConfigModule due to AWS error');
176
+ return await config_1.ConfigModule.forRoot(baseOptions);
177
+ }
178
+ throw asyncModuleError;
179
+ }
180
+ }
181
+ /**
182
+ * Get configuration factories for manual registration.
183
+ * This method allows developers to manually register AWS factories with their own ConfigModule setup.
184
+ *
185
+ * @returns Promise resolving to array of configuration factories
186
+ */
187
+ async getConfigurationFactories() {
188
+ this.logger.debug('Getting configuration factories for manual registration');
189
+ try {
190
+ const factories = await this.factoryRegistrationService.registerFactories();
191
+ this.logger.debug(`Retrieved ${factories.length} configuration factories`);
192
+ return factories;
193
+ }
194
+ catch (error) {
195
+ const factoryError = error instanceof Error ? error : new Error(String(error));
196
+ this.logger.error('Failed to get configuration factories:', factoryError);
197
+ if (this.options.failOnAwsError) {
198
+ throw factoryError;
199
+ }
200
+ // Return empty array if fallback is enabled
201
+ if (this.options.fallbackToLocal) {
202
+ this.logger.warn('Returning empty factories array due to AWS error');
203
+ return [];
204
+ }
205
+ throw factoryError;
206
+ }
207
+ }
208
+ /**
209
+ * Get namespaced configuration factories.
210
+ * This method returns factories for specific namespaces only.
211
+ *
212
+ * @param namespaces - Array of namespace names to get factories for
213
+ * @returns Promise resolving to array of namespaced configuration factories
214
+ */
215
+ async getNamespacedFactories(namespaces) {
216
+ this.logger.debug(`Getting namespaced factories for: ${namespaces.join(', ')}`);
217
+ try {
218
+ const factories = await this.factoryRegistrationService.registerNamespacedFactories(namespaces);
219
+ this.logger.debug(`Retrieved ${factories.length} namespaced factories`);
220
+ return factories;
221
+ }
222
+ catch (error) {
223
+ const namespacedError = error instanceof Error ? error : new Error(String(error));
224
+ this.logger.error('Failed to get namespaced factories:', namespacedError);
225
+ if (this.options.failOnAwsError) {
226
+ throw namespacedError;
227
+ }
228
+ // Return empty array if fallback is enabled
229
+ if (this.options.fallbackToLocal) {
230
+ this.logger.warn('Returning empty namespaced factories array due to AWS error');
231
+ return [];
232
+ }
233
+ throw namespacedError;
234
+ }
235
+ }
236
+ /**
237
+ * Create a configuration factory for immediate use.
238
+ * This method creates a single factory that can be used directly with @nestjs/config.
239
+ *
240
+ * @param namespace - Optional namespace for the factory
241
+ * @param config - Optional configuration data to use
242
+ * @returns Configuration factory
243
+ */
244
+ createImmediateFactory(namespace, config) {
245
+ this.logger.debug(`Creating immediate factory for namespace: ${namespace || 'default'}`);
246
+ try {
247
+ const factory = this.factoryRegistrationService.createSyncFactory(namespace, config);
248
+ this.logger.debug(`Created immediate factory: ${namespace || 'default'}`);
249
+ return factory;
250
+ }
251
+ catch (error) {
252
+ const immediateError = error instanceof Error ? error : new Error(String(error));
253
+ this.logger.error('Failed to create immediate factory:', immediateError);
254
+ if (this.options.failOnAwsError) {
255
+ throw immediateError;
256
+ }
257
+ // Return empty factory if fallback is enabled
258
+ if (this.options.fallbackToLocal) {
259
+ this.logger.warn('Creating empty factory due to error');
260
+ return () => config || {};
261
+ }
262
+ throw immediateError;
263
+ }
264
+ }
265
+ /**
266
+ * Check if AWS integration is available and working.
267
+ * This method can be used to verify the integration status.
268
+ *
269
+ * @returns Promise resolving to integration status
270
+ */
271
+ async checkIntegrationStatus() {
272
+ this.logger.debug('Checking AWS integration status');
273
+ const status = {
274
+ isAvailable: false,
275
+ factoriesRegistered: 0,
276
+ errors: []
277
+ };
278
+ try {
279
+ // Check if factories are initialized
280
+ const isInitialized = this.factoryRegistrationService.isFactoriesInitialized();
281
+ if (isInitialized) {
282
+ const registeredFactories = this.factoryRegistrationService.getRegisteredFactories();
283
+ status.factoriesRegistered = registeredFactories.size;
284
+ status.isAvailable = true;
285
+ }
286
+ else {
287
+ // Try to register factories to check availability
288
+ const factories = await this.factoryRegistrationService.registerFactories();
289
+ status.factoriesRegistered = factories.length;
290
+ status.isAvailable = true;
291
+ }
292
+ this.logger.debug(`Integration status: available=${status.isAvailable}, factories=${status.factoriesRegistered}`);
293
+ }
294
+ catch (error) {
295
+ const statusError = error instanceof Error ? error : new Error(String(error));
296
+ status.errors.push(statusError.message);
297
+ this.logger.error('Integration status check failed:', statusError);
298
+ }
299
+ return status;
300
+ }
301
+ /**
302
+ * Reset the integration state.
303
+ * This method clears all registered factories and resets the integration.
304
+ */
305
+ resetIntegration() {
306
+ this.logger.debug('Resetting AWS integration state');
307
+ this.factoryRegistrationService.reset();
308
+ this.logger.debug('AWS integration state reset complete');
309
+ }
310
+ };
311
+ exports.NestjsConfigIntegrationService = NestjsConfigIntegrationService;
312
+ exports.NestjsConfigIntegrationService = NestjsConfigIntegrationService = NestjsConfigIntegrationService_1 = __decorate([
313
+ (0, common_1.Injectable)(),
314
+ __param(1, (0, common_1.Optional)()),
315
+ __param(1, (0, common_1.Inject)(nestjs_config_integration_module_1.NESTJS_CONFIG_AWS_INTEGRATION_OPTIONS)),
316
+ __metadata("design:paramtypes", [factory_registration_service_1.FactoryRegistrationService, Object])
317
+ ], NestjsConfigIntegrationService);
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGpzLWNvbmZpZy1pbnRlZ3JhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uL3NlcnZpY2VzL25lc3Rqcy1jb25maWctaW50ZWdyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXNFO0FBQ3RFLDJDQUFrRjtBQUVsRixpRkFBNEU7QUFFNUUsMEZBQTRGO0FBRTVGOzs7R0FHRztBQUVJLElBQU0sOEJBQThCLHNDQUFwQyxNQUFNLDhCQUE4QjtJQUl0QjtJQUVBO0lBTEYsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLGdDQUE4QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTFFLFlBQ21CLDBCQUFzRCxFQUV0RCxVQUE4QixFQUFFO1FBRmhDLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7UUFFdEQsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7SUFDaEQsQ0FBQztJQUVKOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxjQUFtQyxFQUFFO1FBQ25FLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFFeEUsSUFBSSxDQUFDO1lBQ0gsdUNBQXVDO1lBQ3ZDLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFL0UsK0NBQStDO1lBQy9DLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzVDLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQztZQUV4RCwwQkFBMEI7WUFDMUIsTUFBTSxlQUFlLEdBQXdCO2dCQUMzQyxHQUFHLFdBQVc7Z0JBQ2QsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLDREQUE0RDtnQkFDNUQs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Q0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0NBQ0YsQ0FBQTtBQTVVWSx3RUFBOEI7eUNBQTlCLDhCQUE4QjtJQUQxQyxJQUFBLG1CQUFVLEdBQUU7SUFNUixXQUFBLElBQUEsaUJBQVEsR0FBRSxDQUFBO0lBQUUsV0FBQSxJQUFBLGVBQU0sRUFBQyx3RUFBcUMsQ0FBQyxDQUFBO3FDQURiLHlEQUEwQjtHQUo5RCw4QkFBOEIsQ0E0VTFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTG9nZ2VyLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQG5lc3Rqcy9jb21tb24nO1xyXG5pbXBvcnQgeyBDb25maWdGYWN0b3J5LCBDb25maWdNb2R1bGUsIENvbmZpZ01vZHVsZU9wdGlvbnMgfSBmcm9tICdAbmVzdGpzL2NvbmZpZyc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGUgfSBmcm9tICdAbmVzdGpzL2NvbW1vbic7XHJcbmltcG9ydCB7IEZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9mYWN0b3J5LXJlZ2lzdHJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSW50ZWdyYXRpb25PcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pbnRlZ3JhdGlvbi1vcHRpb25zLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE5FU1RKU19DT05GSUdfQVdTX0lOVEVHUkFUSU9OX09QVElPTlMgfSBmcm9tICcuLi9uZXN0anMtY29uZmlnLWludGVncmF0aW9uLm1vZHVsZSc7XHJcblxyXG4vKipcclxuICogU2VydmljZSB0aGF0IHByb3ZpZGVzIGludGVncmF0aW9uIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIEBuZXN0anMvY29uZmlnLlxyXG4gKiBUaGlzIHNlcnZpY2UgY3JlYXRlcyBDb25maWdNb2R1bGUgY29uZmlndXJhdGlvbnMgdGhhdCBpbmNsdWRlIEFXUy1zb3VyY2VkIGZhY3Rvcmllcy5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5lc3Rqc0NvbmZpZ0ludGVncmF0aW9uU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBuZXcgTG9nZ2VyKE5lc3Rqc0NvbmZpZ0ludGVncmF0aW9uU2VydmljZS5uYW1lKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlOiBGYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZSxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkVTVEpTX0NPTkZJR19BV1NfSU5URUdSQVRJT05fT1BUSU9OUykgXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEludGVncmF0aW9uT3B0aW9ucyA9IHt9XHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBDb25maWdNb2R1bGUgY29uZmlndXJhdGlvbiB3aXRoIEFXUy1zb3VyY2VkIGZhY3Rvcmllcy5cclxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBlbmhhbmNlIGV4aXN0aW5nIEBuZXN0anMvY29uZmlnIHNldHVwcy5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gYmFzZU9wdGlvbnMgLSBCYXNlIENvbmZpZ01vZHVsZSBvcHRpb25zIHRvIGVuaGFuY2VcclxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBlbmhhbmNlZCBDb25maWdNb2R1bGUgb3B0aW9uc1xyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZUNvbmZpZ01vZHVsZU9wdGlvbnMoYmFzZU9wdGlvbnM6IENvbmZpZ01vZHVsZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8Q29uZmlnTW9kdWxlT3B0aW9ucz4ge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0NyZWF0aW5nIENvbmZpZ01vZHVsZSBvcHRpb25zIHdpdGggQVdTIGludGVncmF0aW9uJyk7XHJcbiAgICBcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFJlZ2lzdGVyIEFXUyBjb25maWd1cmF0aW9uIGZhY3Rvcmllc1xyXG4gICAgICBjb25zdCBhd3NGYWN0b3JpZXMgPSBhd2FpdCB0aGlzLmZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlLnJlZ2lzdGVyRmFjdG9yaWVzKCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBNZXJnZSBBV1MgZmFjdG9yaWVzIHdpdGggZXhpc3RpbmcgbG9hZCBhcnJheVxyXG4gICAgICBjb25zdCBleGlzdGluZ0xvYWQgPSBiYXNlT3B0aW9ucy5sb2FkIHx8IFtdO1xyXG4gICAgICBjb25zdCBlbmhhbmNlZExvYWQgPSBbLi4uZXhpc3RpbmdMb2FkLCAuLi5hd3NGYWN0b3JpZXNdO1xyXG4gICAgICBcclxuICAgICAgLy8gQ3JlYXRlIGVuaGFuY2VkIG9wdGlvbnNcclxuICAgICAgY29uc3QgZW5oYW5jZWRPcHRpb25zOiBDb25maWdNb2R1bGVPcHRpb25zID0ge1xyXG4gICAgICAgIC4uLmJhc2VPcHRpb25zLFxyXG4gICAgICAgIGxvYWQ6IGVuaGFuY2VkTG9hZCxcclxuICAgICAgICAvLyBBcHBseSBpbnRlZ3JhdGlvbi1zcGVjaWZpYyBvcHRpb25zIHdpdGggcHJvcGVyIHByZWNlZGVuY2VcclxuICAgICAgICBpc0dsb2JhbDogYmFzZU9wdGlvbnMuaXNHbG9iYWwgIT09IHVuZGVmaW5lZCA/IGJhc2VPcHRpb25zLmlzR2xvYmFsIDogKHRoaXMub3B0aW9ucy5yZWdpc3Rlckdsb2JhbGx5ID8/IHRydWUpLFxyXG4gICAgICAgIGNhY2hlOiBiYXNlT3B0aW9ucy5jYWNoZSAhPT0gdW5kZWZpbmVkID8gYmFzZU9wdGlvbnMuY2FjaGUgOiAodGhpcy5vcHRpb25zLmZhY3RvcnlPcHRpb25zPy5jYWNoZSA/PyB0cnVlKSxcclxuICAgICAgICBleHBhbmRWYXJpYWJsZXM6IGJhc2VPcHRpb25zLmV4cGFuZFZhcmlhYmxlcyAhPT0gdW5kZWZpbmVkID8gYmFzZU9wdGlvbnMuZXhwYW5kVmFyaWFibGVzIDogKHRoaXMub3B0aW9ucy5mYWN0b3J5T3B0aW9ucz8uZXhwYW5kVmFyaWFibGVzID8/IHRydWUpLFxyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgdGhpcy5sb2dnZXIubG9nKGBFbmhhbmNlZCBDb25maWdNb2R1bGUgb3B0aW9ucyB3aXRoICR7YXdzRmFjdG9yaWVzLmxlbmd0aH0gQVdTIGZhY3Rvcmllc2ApO1xyXG4gICAgICByZXR1cm4gZW5oYW5jZWRPcHRpb25zO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgZW5oYW5jZW1lbnRFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgZW5oYW5jZWQgQ29uZmlnTW9kdWxlIG9wdGlvbnM6JywgZW5oYW5jZW1lbnRFcnJvcik7XHJcbiAgICAgIFxyXG4gICAgICAvLyBIYW5kbGUgZW5oYW5jZW1lbnQgZmFpbHVyZSBiYXNlZCBvbiBvcHRpb25zXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFpbE9uQXdzRXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBlbmhhbmNlbWVudEVycm9yO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBSZXR1cm4gYmFzZSBvcHRpb25zIGlmIGZhbGxiYWNrIGlzIGVuYWJsZWRcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWxsYmFja1RvTG9jYWwpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdGYWxsaW5nIGJhY2sgdG8gYmFzZSBDb25maWdNb2R1bGUgb3B0aW9ucyBkdWUgdG8gQVdTIGVycm9yJyk7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VPcHRpb25zO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBlbmhhbmNlbWVudEVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgQ29uZmlnTW9kdWxlIGNvbmZpZ3VyYXRpb24gZm9yIGFzeW5jIHNldHVwLlxyXG4gICAqIFRoaXMgbWV0aG9kIHdvcmtzIHdpdGggQ29uZmlnTW9kdWxlLmZvclJvb3RBc3luYygpIHBhdHRlcm4uXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGJhc2VPcHRpb25zIC0gQmFzZSBhc3luYyBDb25maWdNb2R1bGUgb3B0aW9ucyB0byBlbmhhbmNlXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gZW5oYW5jZWQgYXN5bmMgQ29uZmlnTW9kdWxlIG9wdGlvbnNcclxuICAgKi9cclxuICBhc3luYyBjcmVhdGVBc3luY0NvbmZpZ01vZHVsZU9wdGlvbnMoYmFzZU9wdGlvbnM6IGFueSA9IHt9KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDcmVhdGluZyBhc3luYyBDb25maWdNb2R1bGUgb3B0aW9ucyB3aXRoIEFXUyBpbnRlZ3JhdGlvbicpO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBDcmVhdGUgYSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgaW5jbHVkZXMgQVdTIGNvbmZpZ3VyYXRpb25cclxuICAgICAgY29uc3QgZW5oYW5jZWRVc2VGYWN0b3J5ID0gYXN5bmMgKC4uLmFyZ3M6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgLy8gQ2FsbCBvcmlnaW5hbCBmYWN0b3J5IGlmIGl0IGV4aXN0c1xyXG4gICAgICAgIGxldCBiYXNlQ29uZmlnOiBDb25maWdNb2R1bGVPcHRpb25zID0ge307XHJcbiAgICAgICAgaWYgKGJhc2VPcHRpb25zLnVzZUZhY3RvcnkpIHtcclxuICAgICAgICAgIGJhc2VDb25maWcgPSBhd2FpdCBiYXNlT3B0aW9ucy51c2VGYWN0b3J5KC4uLmFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvLyBFbmhhbmNlIHdpdGggQVdTIGNvbmZpZ3VyYXRpb25cclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVDb25maWdNb2R1bGVPcHRpb25zKGJhc2VDb25maWcpO1xyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgLy8gQ3JlYXRlIGVuaGFuY2VkIGFzeW5jIG9wdGlvbnNcclxuICAgICAgY29uc3QgZW5oYW5jZWRBc3luY09wdGlvbnMgPSB7XHJcbiAgICAgICAgLi4uYmFzZU9wdGlvbnMsXHJcbiAgICAgICAgdXNlRmFjdG9yeTogZW5oYW5jZWRVc2VGYWN0b3J5LFxyXG4gICAgICAgIC8vIEVuc3VyZSBvdXIgc2VydmljZSBpcyBpbmplY3RlZFxyXG4gICAgICAgIGluamVjdDogWy4uLihiYXNlT3B0aW9ucy5pbmplY3QgfHwgW10pLCBGYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZV0sXHJcbiAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ3JlYXRlZCBlbmhhbmNlZCBhc3luYyBDb25maWdNb2R1bGUgb3B0aW9ucycpO1xyXG4gICAgICByZXR1cm4gZW5oYW5jZWRBc3luY09wdGlvbnM7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCBhc3luY0Vycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBhc3luYyBDb25maWdNb2R1bGUgb3B0aW9uczonLCBhc3luY0Vycm9yKTtcclxuICAgICAgXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFpbE9uQXdzRXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBhc3luY0Vycm9yO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBSZXR1cm4gYmFzZSBvcHRpb25zIGlmIGZhbGxiYWNrIGlzIGVuYWJsZWRcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWxsYmFja1RvTG9jYWwpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdGYWxsaW5nIGJhY2sgdG8gYmFzZSBhc3luYyBDb25maWdNb2R1bGUgb3B0aW9ucyBkdWUgdG8gQVdTIGVycm9yJyk7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VPcHRpb25zO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBhc3luY0Vycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgY29tcGxldGUgQ29uZmlnTW9kdWxlIHdpdGggQVdTIGludGVncmF0aW9uLlxyXG4gICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWFkeS10by11c2UgRHluYW1pY01vZHVsZS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gYmFzZU9wdGlvbnMgLSBCYXNlIENvbmZpZ01vZHVsZSBvcHRpb25zXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gRHluYW1pY01vZHVsZSB3aXRoIEFXUyBpbnRlZ3JhdGlvblxyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZUludGVncmF0ZWRDb25maWdNb2R1bGUoYmFzZU9wdGlvbnM6IENvbmZpZ01vZHVsZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8RHluYW1pY01vZHVsZT4ge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0NyZWF0aW5nIGludGVncmF0ZWQgQ29uZmlnTW9kdWxlIHdpdGggQVdTIHN1cHBvcnQnKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gQ3JlYXRlIGVuaGFuY2VkIG9wdGlvbnNcclxuICAgICAgY29uc3QgZW5oYW5jZWRPcHRpb25zID0gYXdhaXQgdGhpcy5jcmVhdGVDb25maWdNb2R1bGVPcHRpb25zKGJhc2VPcHRpb25zKTtcclxuICAgICAgXHJcbiAgICAgIC8vIENyZWF0ZSB0aGUgQ29uZmlnTW9kdWxlIHdpdGggZW5oYW5jZWQgb3B0aW9uc1xyXG4gICAgICBjb25zdCBjb25maWdNb2R1bGUgPSBhd2FpdCBDb25maWdNb2R1bGUuZm9yUm9vdChlbmhhbmNlZE9wdGlvbnMpO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5sb2dnZXIubG9nKCdDcmVhdGVkIGludGVncmF0ZWQgQ29uZmlnTW9kdWxlIHdpdGggQVdTIHN1cHBvcnQnKTtcclxuICAgICAgcmV0dXJuIGNvbmZpZ01vZHVsZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IG1vZHVsZUVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBpbnRlZ3JhdGVkIENvbmZpZ01vZHVsZTonLCBtb2R1bGVFcnJvcik7XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhaWxPbkF3c0Vycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgbW9kdWxlRXJyb3I7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFJldHVybiBiYXNpYyBDb25maWdNb2R1bGUgaWYgZmFsbGJhY2sgaXMgZW5hYmxlZFxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhbGxiYWNrVG9Mb2NhbCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0ZhbGxpbmcgYmFjayB0byBiYXNpYyBDb25maWdNb2R1bGUgZHVlIHRvIEFXUyBlcnJvcicpO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCBDb25maWdNb2R1bGUuZm9yUm9vdChiYXNlT3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHRocm93IG1vZHVsZUVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuIGFzeW5jIGludGVncmF0ZWQgQ29uZmlnTW9kdWxlLlxyXG4gICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWFkeS10by11c2UgYXN5bmMgRHluYW1pY01vZHVsZS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gYmFzZU9wdGlvbnMgLSBCYXNlIGFzeW5jIENvbmZpZ01vZHVsZSBvcHRpb25zXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gRHluYW1pY01vZHVsZSB3aXRoIGFzeW5jIEFXUyBpbnRlZ3JhdGlvblxyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZUFzeW5jSW50ZWdyYXRlZENvbmZpZ01vZHVsZShiYXNlT3B0aW9uczogQ29uZmlnTW9kdWxlT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxEeW5hbWljTW9kdWxlPiB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ3JlYXRpbmcgYXN5bmMgaW50ZWdyYXRlZCBDb25maWdNb2R1bGUgd2l0aCBBV1Mgc3VwcG9ydCcpO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBDcmVhdGUgZW5oYW5jZWQgb3B0aW9ucyB3aXRoIEFXUyBpbnRlZ3JhdGlvblxyXG4gICAgICBjb25zdCBlbmhhbmNlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbmZpZ01vZHVsZU9wdGlvbnMoYmFzZU9wdGlvbnMpO1xyXG4gICAgICBcclxuICAgICAgLy8gQ3JlYXRlIHRoZSBDb25maWdNb2R1bGUgd2l0aCBlbmhhbmNlZCBvcHRpb25zXHJcbiAgICAgIGNvbnN0IGFzeW5jQ29uZmlnTW9kdWxlID0gYXdhaXQgQ29uZmlnTW9kdWxlLmZvclJvb3QoZW5oYW5jZWRPcHRpb25zKTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMubG9nZ2VyLmxvZygnQ3JlYXRlZCBhc3luYyBpbnRlZ3JhdGVkIENvbmZpZ01vZHVsZSB3aXRoIEFXUyBzdXBwb3J0Jyk7XHJcbiAgICAgIHJldHVybiBhc3luY0NvbmZpZ01vZHVsZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IGFzeW5jTW9kdWxlRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIGFzeW5jIGludGVncmF0ZWQgQ29uZmlnTW9kdWxlOicsIGFzeW5jTW9kdWxlRXJyb3IpO1xyXG4gICAgICBcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWlsT25Bd3NFcnJvcikge1xyXG4gICAgICAgIHRocm93IGFzeW5jTW9kdWxlRXJyb3I7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFJldHVybiBiYXNpYyBhc3luYyBDb25maWdNb2R1bGUgaWYgZmFsbGJhY2sgaXMgZW5hYmxlZFxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhbGxiYWNrVG9Mb2NhbCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0ZhbGxpbmcgYmFjayB0byBiYXNpYyBhc3luYyBDb25maWdNb2R1bGUgZHVlIHRvIEFXUyBlcnJvcicpO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCBDb25maWdNb2R1bGUuZm9yUm9vdChiYXNlT3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHRocm93IGFzeW5jTW9kdWxlRXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgY29uZmlndXJhdGlvbiBmYWN0b3JpZXMgZm9yIG1hbnVhbCByZWdpc3RyYXRpb24uXHJcbiAgICogVGhpcyBtZXRob2QgYWxsb3dzIGRldmVsb3BlcnMgdG8gbWFudWFsbHkgcmVnaXN0ZXIgQVdTIGZhY3RvcmllcyB3aXRoIHRoZWlyIG93biBDb25maWdNb2R1bGUgc2V0dXAuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gYXJyYXkgb2YgY29uZmlndXJhdGlvbiBmYWN0b3JpZXNcclxuICAgKi9cclxuICBhc3luYyBnZXRDb25maWd1cmF0aW9uRmFjdG9yaWVzKCk6IFByb21pc2U8Q29uZmlnRmFjdG9yeVtdPiB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnR2V0dGluZyBjb25maWd1cmF0aW9uIGZhY3RvcmllcyBmb3IgbWFudWFsIHJlZ2lzdHJhdGlvbicpO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBmYWN0b3JpZXMgPSBhd2FpdCB0aGlzLmZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlLnJlZ2lzdGVyRmFjdG9yaWVzKCk7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBSZXRyaWV2ZWQgJHtmYWN0b3JpZXMubGVuZ3RofSBjb25maWd1cmF0aW9uIGZhY3Rvcmllc2ApO1xyXG4gICAgICByZXR1cm4gZmFjdG9yaWVzO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgZmFjdG9yeUVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBjb25maWd1cmF0aW9uIGZhY3RvcmllczonLCBmYWN0b3J5RXJyb3IpO1xyXG4gICAgICBcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWlsT25Bd3NFcnJvcikge1xyXG4gICAgICAgIHRocm93IGZhY3RvcnlFcnJvcjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gUmV0dXJuIGVtcHR5IGFycmF5IGlmIGZhbGxiYWNrIGlzIGVuYWJsZWRcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWxsYmFja1RvTG9jYWwpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdSZXR1cm5pbmcgZW1wdHkgZmFjdG9yaWVzIGFycmF5IGR1ZSB0byBBV1MgZXJyb3InKTtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHRocm93IGZhY3RvcnlFcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBuYW1lc3BhY2VkIGNvbmZpZ3VyYXRpb24gZmFjdG9yaWVzLlxyXG4gICAqIFRoaXMgbWV0aG9kIHJldHVybnMgZmFjdG9yaWVzIGZvciBzcGVjaWZpYyBuYW1lc3BhY2VzIG9ubHkuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZXMgLSBBcnJheSBvZiBuYW1lc3BhY2UgbmFtZXMgdG8gZ2V0IGZhY3RvcmllcyBmb3JcclxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBhcnJheSBvZiBuYW1lc3BhY2VkIGNvbmZpZ3VyYXRpb24gZmFjdG9yaWVzXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0TmFtZXNwYWNlZEZhY3RvcmllcyhuYW1lc3BhY2VzOiBzdHJpbmdbXSk6IFByb21pc2U8Q29uZmlnRmFjdG9yeVtdPiB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgR2V0dGluZyBuYW1lc3BhY2VkIGZhY3RvcmllcyBmb3I6ICR7bmFtZXNwYWNlcy5qb2luKCcsICcpfWApO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBmYWN0b3JpZXMgPSBhd2FpdCB0aGlzLmZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlLnJlZ2lzdGVyTmFtZXNwYWNlZEZhY3RvcmllcyhuYW1lc3BhY2VzKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFJldHJpZXZlZCAke2ZhY3Rvcmllcy5sZW5ndGh9IG5hbWVzcGFjZWQgZmFjdG9yaWVzYCk7XHJcbiAgICAgIHJldHVybiBmYWN0b3JpZXM7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCBuYW1lc3BhY2VkRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZ2V0IG5hbWVzcGFjZWQgZmFjdG9yaWVzOicsIG5hbWVzcGFjZWRFcnJvcik7XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhaWxPbkF3c0Vycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgbmFtZXNwYWNlZEVycm9yO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgaWYgZmFsbGJhY2sgaXMgZW5hYmxlZFxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhbGxiYWNrVG9Mb2NhbCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ1JldHVybmluZyBlbXB0eSBuYW1lc3BhY2VkIGZhY3RvcmllcyBhcnJheSBkdWUgdG8gQVdTIGVycm9yJyk7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBuYW1lc3BhY2VkRXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBjb25maWd1cmF0aW9uIGZhY3RvcnkgZm9yIGltbWVkaWF0ZSB1c2UuXHJcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIHNpbmdsZSBmYWN0b3J5IHRoYXQgY2FuIGJlIHVzZWQgZGlyZWN0bHkgd2l0aCBAbmVzdGpzL2NvbmZpZy5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gT3B0aW9uYWwgbmFtZXNwYWNlIGZvciB0aGUgZmFjdG9yeVxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGRhdGEgdG8gdXNlXHJcbiAgICogQHJldHVybnMgQ29uZmlndXJhdGlvbiBmYWN0b3J5XHJcbiAgICovXHJcbiAgY3JlYXRlSW1tZWRpYXRlRmFjdG9yeShuYW1lc3BhY2U/OiBzdHJpbmcsIGNvbmZpZz86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBDb25maWdGYWN0b3J5IHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGluZyBpbW1lZGlhdGUgZmFjdG9yeSBmb3IgbmFtZXNwYWNlOiAke25hbWVzcGFjZSB8fCAnZGVmYXVsdCd9YCk7XHJcbiAgICBcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlLmNyZWF0ZVN5bmNGYWN0b3J5KG5hbWVzcGFjZSwgY29uZmlnKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYENyZWF0ZWQgaW1tZWRpYXRlIGZhY3Rvcnk6ICR7bmFtZXNwYWNlIHx8ICdkZWZhdWx0J31gKTtcclxuICAgICAgcmV0dXJuIGZhY3Rvcnk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCBpbW1lZGlhdGVFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgaW1tZWRpYXRlIGZhY3Rvcnk6JywgaW1tZWRpYXRlRXJyb3IpO1xyXG4gICAgICBcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWlsT25Bd3NFcnJvcikge1xyXG4gICAgICAgIHRocm93IGltbWVkaWF0ZUVycm9yO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBSZXR1cm4gZW1wdHkgZmFjdG9yeSBpZiBmYWxsYmFjayBpcyBlbmFibGVkXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFsbGJhY2tUb0xvY2FsKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignQ3JlYXRpbmcgZW1wdHkgZmFjdG9yeSBkdWUgdG8gZXJyb3InKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4gY29uZmlnIHx8IHt9O1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBpbW1lZGlhdGVFcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIEFXUyBpbnRlZ3JhdGlvbiBpcyBhdmFpbGFibGUgYW5kIHdvcmtpbmcuXHJcbiAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IHRoZSBpbnRlZ3JhdGlvbiBzdGF0dXMuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gaW50ZWdyYXRpb24gc3RhdHVzXHJcbiAgICovXHJcbiAgYXN5bmMgY2hlY2tJbnRlZ3JhdGlvblN0YXR1cygpOiBQcm9taXNlPHtcclxuICAgIGlzQXZhaWxhYmxlOiBib29sZWFuO1xyXG4gICAgZmFjdG9yaWVzUmVnaXN0ZXJlZDogbnVtYmVyO1xyXG4gICAgZXJyb3JzOiBzdHJpbmdbXTtcclxuICB9PiB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ2hlY2tpbmcgQVdTIGludGVncmF0aW9uIHN0YXR1cycpO1xyXG4gICAgXHJcbiAgICBjb25zdCBzdGF0dXMgPSB7XHJcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcclxuICAgICAgZmFjdG9yaWVzUmVnaXN0ZXJlZDogMCxcclxuICAgICAgZXJyb3JzOiBbXSBhcyBzdHJpbmdbXVxyXG4gICAgfTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBDaGVjayBpZiBmYWN0b3JpZXMgYXJlIGluaXRpYWxpemVkXHJcbiAgICAgIGNvbnN0IGlzSW5pdGlhbGl6ZWQgPSB0aGlzLmZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlLmlzRmFjdG9yaWVzSW5pdGlhbGl6ZWQoKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChpc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJlZEZhY3RvcmllcyA9IHRoaXMuZmFjdG9yeVJlZ2lzdHJhdGlvblNlcnZpY2UuZ2V0UmVnaXN0ZXJlZEZhY3RvcmllcygpO1xyXG4gICAgICAgIHN0YXR1cy5mYWN0b3JpZXNSZWdpc3RlcmVkID0gcmVnaXN0ZXJlZEZhY3Rvcmllcy5zaXplO1xyXG4gICAgICAgIHN0YXR1cy5pc0F2YWlsYWJsZSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVHJ5IHRvIHJlZ2lzdGVyIGZhY3RvcmllcyB0byBjaGVjayBhdmFpbGFiaWxpdHlcclxuICAgICAgICBjb25zdCBmYWN0b3JpZXMgPSBhd2FpdCB0aGlzLmZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlLnJlZ2lzdGVyRmFjdG9yaWVzKCk7XHJcbiAgICAgICAgc3RhdHVzLmZhY3Rvcmllc1JlZ2lzdGVyZWQgPSBmYWN0b3JpZXMubGVuZ3RoO1xyXG4gICAgICAgIHN0YXR1cy5pc0F2YWlsYWJsZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBJbnRlZ3JhdGlvbiBzdGF0dXM6IGF2YWlsYWJsZT0ke3N0YXR1cy5pc0F2YWlsYWJsZX0sIGZhY3Rvcmllcz0ke3N0YXR1cy5mYWN0b3JpZXNSZWdpc3RlcmVkfWApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3Qgc3RhdHVzRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHN0YXR1cy5lcnJvcnMucHVzaChzdGF0dXNFcnJvci5tZXNzYWdlKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ludGVncmF0aW9uIHN0YXR1cyBjaGVjayBmYWlsZWQ6Jywgc3RhdHVzRXJyb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdGF0dXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCB0aGUgaW50ZWdyYXRpb24gc3RhdGUuXHJcbiAgICogVGhpcyBtZXRob2QgY2xlYXJzIGFsbCByZWdpc3RlcmVkIGZhY3RvcmllcyBhbmQgcmVzZXRzIHRoZSBpbnRlZ3JhdGlvbi5cclxuICAgKi9cclxuICByZXNldEludGVncmF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1Jlc2V0dGluZyBBV1MgaW50ZWdyYXRpb24gc3RhdGUnKTtcclxuICAgIHRoaXMuZmFjdG9yeVJlZ2lzdHJhdGlvblNlcnZpY2UucmVzZXQoKTtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdBV1MgaW50ZWdyYXRpb24gc3RhdGUgcmVzZXQgY29tcGxldGUnKTtcclxuICB9XHJcbn0iXX0=