@dyanet/nestjs-config-aws 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1183 -0
  3. package/dist/cjs/config.module.js +178 -0
  4. package/dist/cjs/config.module.js.map +1 -0
  5. package/dist/cjs/index.js +47 -0
  6. package/dist/cjs/index.js.map +1 -0
  7. package/dist/cjs/integration/index.js +23 -0
  8. package/dist/cjs/integration/index.js.map +1 -0
  9. package/dist/cjs/integration/interfaces/configuration-factory.interface.js +3 -0
  10. package/dist/cjs/integration/interfaces/configuration-factory.interface.js.map +1 -0
  11. package/dist/cjs/integration/interfaces/configuration-source.interface.js +3 -0
  12. package/dist/cjs/integration/interfaces/configuration-source.interface.js.map +1 -0
  13. package/dist/cjs/integration/interfaces/index.js +26 -0
  14. package/dist/cjs/integration/interfaces/index.js.map +1 -0
  15. package/dist/cjs/integration/interfaces/integration-options.interface.js +3 -0
  16. package/dist/cjs/integration/interfaces/integration-options.interface.js.map +1 -0
  17. package/dist/cjs/integration/interfaces/integration-state.interface.js +3 -0
  18. package/dist/cjs/integration/interfaces/integration-state.interface.js.map +1 -0
  19. package/dist/cjs/integration/interfaces/nestjs-config-compatibility.interface.js +73 -0
  20. package/dist/cjs/integration/interfaces/nestjs-config-compatibility.interface.js.map +1 -0
  21. package/dist/cjs/integration/interfaces/nestjs-config-integration.interface.js +3 -0
  22. package/dist/cjs/integration/interfaces/nestjs-config-integration.interface.js.map +1 -0
  23. package/dist/cjs/integration/interfaces/typed-configuration.interface.js +4 -0
  24. package/dist/cjs/integration/interfaces/typed-configuration.interface.js.map +1 -0
  25. package/dist/cjs/integration/interfaces/utility-types.interface.js +52 -0
  26. package/dist/cjs/integration/interfaces/utility-types.interface.js.map +1 -0
  27. package/dist/cjs/integration/nestjs-config-integration.module.js +124 -0
  28. package/dist/cjs/integration/nestjs-config-integration.module.js.map +1 -0
  29. package/dist/cjs/integration/providers/aws-configuration-loader.service.js +591 -0
  30. package/dist/cjs/integration/providers/aws-configuration-loader.service.js.map +1 -0
  31. package/dist/cjs/integration/providers/configuration-factory.provider.js +383 -0
  32. package/dist/cjs/integration/providers/configuration-factory.provider.js.map +1 -0
  33. package/dist/cjs/integration/providers/index.js +20 -0
  34. package/dist/cjs/integration/providers/index.js.map +1 -0
  35. package/dist/cjs/integration/services/async-config-helper.service.js +356 -0
  36. package/dist/cjs/integration/services/async-config-helper.service.js.map +1 -0
  37. package/dist/cjs/integration/services/error-handler.service.js +265 -0
  38. package/dist/cjs/integration/services/error-handler.service.js.map +1 -0
  39. package/dist/cjs/integration/services/factory-registration.service.js +512 -0
  40. package/dist/cjs/integration/services/factory-registration.service.js.map +1 -0
  41. package/dist/cjs/integration/services/index.js +26 -0
  42. package/dist/cjs/integration/services/index.js.map +1 -0
  43. package/dist/cjs/integration/services/integration-state.service.js +83 -0
  44. package/dist/cjs/integration/services/integration-state.service.js.map +1 -0
  45. package/dist/cjs/integration/services/namespace-handler.service.js +467 -0
  46. package/dist/cjs/integration/services/namespace-handler.service.js.map +1 -0
  47. package/dist/cjs/integration/services/nestjs-config-integration.service.js +316 -0
  48. package/dist/cjs/integration/services/nestjs-config-integration.service.js.map +1 -0
  49. package/dist/cjs/integration/services/precedence-handler.service.js +294 -0
  50. package/dist/cjs/integration/services/precedence-handler.service.js.map +1 -0
  51. package/dist/cjs/integration/services/validation-integration.service.js +591 -0
  52. package/dist/cjs/integration/services/validation-integration.service.js.map +1 -0
  53. package/dist/cjs/integration/utils/config-integration.util.js +283 -0
  54. package/dist/cjs/integration/utils/config-integration.util.js.map +1 -0
  55. package/dist/cjs/integration/utils/index.js +19 -0
  56. package/dist/cjs/integration/utils/index.js.map +1 -0
  57. package/dist/cjs/interfaces/config-loader.interface.js +3 -0
  58. package/dist/cjs/interfaces/config-loader.interface.js.map +1 -0
  59. package/dist/cjs/interfaces/config-service.interface.js +11 -0
  60. package/dist/cjs/interfaces/config-service.interface.js.map +1 -0
  61. package/dist/cjs/interfaces/default-schema.interface.js +63 -0
  62. package/dist/cjs/interfaces/default-schema.interface.js.map +1 -0
  63. package/dist/cjs/interfaces/errors.interface.js +77 -0
  64. package/dist/cjs/interfaces/errors.interface.js.map +1 -0
  65. package/dist/cjs/interfaces/index.js +25 -0
  66. package/dist/cjs/interfaces/index.js.map +1 -0
  67. package/dist/cjs/interfaces/module-options.interface.js +3 -0
  68. package/dist/cjs/interfaces/module-options.interface.js.map +1 -0
  69. package/dist/cjs/loaders/environment.loader.js +59 -0
  70. package/dist/cjs/loaders/environment.loader.js.map +1 -0
  71. package/dist/cjs/loaders/secrets-manager.loader.js +122 -0
  72. package/dist/cjs/loaders/secrets-manager.loader.js.map +1 -0
  73. package/dist/cjs/loaders/ssm-parameter-store.loader.js +146 -0
  74. package/dist/cjs/loaders/ssm-parameter-store.loader.js.map +1 -0
  75. package/dist/cjs/services/config.service.js +297 -0
  76. package/dist/cjs/services/config.service.js.map +1 -0
  77. package/dist/cjs/utils/validation.util.js +114 -0
  78. package/dist/cjs/utils/validation.util.js.map +1 -0
  79. package/dist/esm/config.module.js +175 -0
  80. package/dist/esm/config.module.js.map +1 -0
  81. package/dist/esm/index.js +18 -0
  82. package/dist/esm/index.js.map +1 -0
  83. package/dist/esm/integration/index.js +7 -0
  84. package/dist/esm/integration/index.js.map +1 -0
  85. package/dist/esm/integration/interfaces/configuration-factory.interface.js +2 -0
  86. package/dist/esm/integration/interfaces/configuration-factory.interface.js.map +1 -0
  87. package/dist/esm/integration/interfaces/configuration-source.interface.js +2 -0
  88. package/dist/esm/integration/interfaces/configuration-source.interface.js.map +1 -0
  89. package/dist/esm/integration/interfaces/index.js +10 -0
  90. package/dist/esm/integration/interfaces/index.js.map +1 -0
  91. package/dist/esm/integration/interfaces/integration-options.interface.js +2 -0
  92. package/dist/esm/integration/interfaces/integration-options.interface.js.map +1 -0
  93. package/dist/esm/integration/interfaces/integration-state.interface.js +2 -0
  94. package/dist/esm/integration/interfaces/integration-state.interface.js.map +1 -0
  95. package/dist/esm/integration/interfaces/nestjs-config-compatibility.interface.js +64 -0
  96. package/dist/esm/integration/interfaces/nestjs-config-compatibility.interface.js.map +1 -0
  97. package/dist/esm/integration/interfaces/nestjs-config-integration.interface.js +2 -0
  98. package/dist/esm/integration/interfaces/nestjs-config-integration.interface.js.map +1 -0
  99. package/dist/esm/integration/interfaces/typed-configuration.interface.js +3 -0
  100. package/dist/esm/integration/interfaces/typed-configuration.interface.js.map +1 -0
  101. package/dist/esm/integration/interfaces/utility-types.interface.js +44 -0
  102. package/dist/esm/integration/interfaces/utility-types.interface.js.map +1 -0
  103. package/dist/esm/integration/nestjs-config-integration.module.js +121 -0
  104. package/dist/esm/integration/nestjs-config-integration.module.js.map +1 -0
  105. package/dist/esm/integration/providers/aws-configuration-loader.service.js +588 -0
  106. package/dist/esm/integration/providers/aws-configuration-loader.service.js.map +1 -0
  107. package/dist/esm/integration/providers/configuration-factory.provider.js +380 -0
  108. package/dist/esm/integration/providers/configuration-factory.provider.js.map +1 -0
  109. package/dist/esm/integration/providers/index.js +4 -0
  110. package/dist/esm/integration/providers/index.js.map +1 -0
  111. package/dist/esm/integration/services/async-config-helper.service.js +353 -0
  112. package/dist/esm/integration/services/async-config-helper.service.js.map +1 -0
  113. package/dist/esm/integration/services/error-handler.service.js +262 -0
  114. package/dist/esm/integration/services/error-handler.service.js.map +1 -0
  115. package/dist/esm/integration/services/factory-registration.service.js +509 -0
  116. package/dist/esm/integration/services/factory-registration.service.js.map +1 -0
  117. package/dist/esm/integration/services/index.js +10 -0
  118. package/dist/esm/integration/services/index.js.map +1 -0
  119. package/dist/esm/integration/services/integration-state.service.js +80 -0
  120. package/dist/esm/integration/services/integration-state.service.js.map +1 -0
  121. package/dist/esm/integration/services/namespace-handler.service.js +464 -0
  122. package/dist/esm/integration/services/namespace-handler.service.js.map +1 -0
  123. package/dist/esm/integration/services/nestjs-config-integration.service.js +313 -0
  124. package/dist/esm/integration/services/nestjs-config-integration.service.js.map +1 -0
  125. package/dist/esm/integration/services/precedence-handler.service.js +291 -0
  126. package/dist/esm/integration/services/precedence-handler.service.js.map +1 -0
  127. package/dist/esm/integration/services/validation-integration.service.js +585 -0
  128. package/dist/esm/integration/services/validation-integration.service.js.map +1 -0
  129. package/dist/esm/integration/utils/config-integration.util.js +240 -0
  130. package/dist/esm/integration/utils/config-integration.util.js.map +1 -0
  131. package/dist/esm/integration/utils/index.js +3 -0
  132. package/dist/esm/integration/utils/index.js.map +1 -0
  133. package/dist/esm/interfaces/config-loader.interface.js +2 -0
  134. package/dist/esm/interfaces/config-loader.interface.js.map +1 -0
  135. package/dist/esm/interfaces/config-service.interface.js +7 -0
  136. package/dist/esm/interfaces/config-service.interface.js.map +1 -0
  137. package/dist/esm/interfaces/default-schema.interface.js +59 -0
  138. package/dist/esm/interfaces/default-schema.interface.js.map +1 -0
  139. package/dist/esm/interfaces/errors.interface.js +69 -0
  140. package/dist/esm/interfaces/errors.interface.js.map +1 -0
  141. package/dist/esm/interfaces/index.js +9 -0
  142. package/dist/esm/interfaces/index.js.map +1 -0
  143. package/dist/esm/interfaces/module-options.interface.js +2 -0
  144. package/dist/esm/interfaces/module-options.interface.js.map +1 -0
  145. package/dist/esm/loaders/environment.loader.js +55 -0
  146. package/dist/esm/loaders/environment.loader.js.map +1 -0
  147. package/dist/esm/loaders/secrets-manager.loader.js +118 -0
  148. package/dist/esm/loaders/secrets-manager.loader.js.map +1 -0
  149. package/dist/esm/loaders/ssm-parameter-store.loader.js +142 -0
  150. package/dist/esm/loaders/ssm-parameter-store.loader.js.map +1 -0
  151. package/dist/esm/services/config.service.js +261 -0
  152. package/dist/esm/services/config.service.js.map +1 -0
  153. package/dist/esm/utils/validation.util.js +110 -0
  154. package/dist/esm/utils/validation.util.js.map +1 -0
  155. package/dist/types/config.module.d.ts +46 -0
  156. package/dist/types/config.module.d.ts.map +1 -0
  157. package/dist/types/index.d.ts +13 -0
  158. package/dist/types/index.d.ts.map +1 -0
  159. package/dist/types/integration/index.d.ts +6 -0
  160. package/dist/types/integration/index.d.ts.map +1 -0
  161. package/dist/types/integration/interfaces/configuration-factory.interface.d.ts +71 -0
  162. package/dist/types/integration/interfaces/configuration-factory.interface.d.ts.map +1 -0
  163. package/dist/types/integration/interfaces/configuration-source.interface.d.ts +24 -0
  164. package/dist/types/integration/interfaces/configuration-source.interface.d.ts.map +1 -0
  165. package/dist/types/integration/interfaces/index.d.ts +9 -0
  166. package/dist/types/integration/interfaces/index.d.ts.map +1 -0
  167. package/dist/types/integration/interfaces/integration-options.interface.d.ts +66 -0
  168. package/dist/types/integration/interfaces/integration-options.interface.d.ts.map +1 -0
  169. package/dist/types/integration/interfaces/integration-state.interface.d.ts +17 -0
  170. package/dist/types/integration/interfaces/integration-state.interface.d.ts.map +1 -0
  171. package/dist/types/integration/interfaces/nestjs-config-compatibility.interface.d.ts +332 -0
  172. package/dist/types/integration/interfaces/nestjs-config-compatibility.interface.d.ts.map +1 -0
  173. package/dist/types/integration/interfaces/nestjs-config-integration.interface.d.ts +259 -0
  174. package/dist/types/integration/interfaces/nestjs-config-integration.interface.d.ts.map +1 -0
  175. package/dist/types/integration/interfaces/typed-configuration.interface.d.ts +209 -0
  176. package/dist/types/integration/interfaces/typed-configuration.interface.d.ts.map +1 -0
  177. package/dist/types/integration/interfaces/utility-types.interface.d.ts +249 -0
  178. package/dist/types/integration/interfaces/utility-types.interface.d.ts.map +1 -0
  179. package/dist/types/integration/nestjs-config-integration.module.d.ts +36 -0
  180. package/dist/types/integration/nestjs-config-integration.module.d.ts.map +1 -0
  181. package/dist/types/integration/providers/aws-configuration-loader.service.d.ts +134 -0
  182. package/dist/types/integration/providers/aws-configuration-loader.service.d.ts.map +1 -0
  183. package/dist/types/integration/providers/configuration-factory.provider.d.ts +119 -0
  184. package/dist/types/integration/providers/configuration-factory.provider.d.ts.map +1 -0
  185. package/dist/types/integration/providers/index.d.ts +3 -0
  186. package/dist/types/integration/providers/index.d.ts.map +1 -0
  187. package/dist/types/integration/services/async-config-helper.service.d.ts +84 -0
  188. package/dist/types/integration/services/async-config-helper.service.d.ts.map +1 -0
  189. package/dist/types/integration/services/error-handler.service.d.ts +84 -0
  190. package/dist/types/integration/services/error-handler.service.d.ts.map +1 -0
  191. package/dist/types/integration/services/factory-registration.service.d.ts +158 -0
  192. package/dist/types/integration/services/factory-registration.service.d.ts.map +1 -0
  193. package/dist/types/integration/services/index.d.ts +9 -0
  194. package/dist/types/integration/services/index.d.ts.map +1 -0
  195. package/dist/types/integration/services/integration-state.service.d.ts +41 -0
  196. package/dist/types/integration/services/integration-state.service.d.ts.map +1 -0
  197. package/dist/types/integration/services/namespace-handler.service.d.ts +192 -0
  198. package/dist/types/integration/services/namespace-handler.service.d.ts.map +1 -0
  199. package/dist/types/integration/services/nestjs-config-integration.service.d.ts +87 -0
  200. package/dist/types/integration/services/nestjs-config-integration.service.d.ts.map +1 -0
  201. package/dist/types/integration/services/precedence-handler.service.d.ts +103 -0
  202. package/dist/types/integration/services/precedence-handler.service.d.ts.map +1 -0
  203. package/dist/types/integration/services/validation-integration.service.d.ts +222 -0
  204. package/dist/types/integration/services/validation-integration.service.d.ts.map +1 -0
  205. package/dist/types/integration/utils/config-integration.util.d.ts +81 -0
  206. package/dist/types/integration/utils/config-integration.util.d.ts.map +1 -0
  207. package/dist/types/integration/utils/index.d.ts +2 -0
  208. package/dist/types/integration/utils/index.d.ts.map +1 -0
  209. package/dist/types/interfaces/config-loader.interface.d.ts +22 -0
  210. package/dist/types/interfaces/config-loader.interface.d.ts.map +1 -0
  211. package/dist/types/interfaces/config-service.interface.d.ts +23 -0
  212. package/dist/types/interfaces/config-service.interface.d.ts.map +1 -0
  213. package/dist/types/interfaces/default-schema.interface.d.ts +195 -0
  214. package/dist/types/interfaces/default-schema.interface.d.ts.map +1 -0
  215. package/dist/types/interfaces/errors.interface.d.ts +38 -0
  216. package/dist/types/interfaces/errors.interface.d.ts.map +1 -0
  217. package/dist/types/interfaces/index.d.ts +6 -0
  218. package/dist/types/interfaces/index.d.ts.map +1 -0
  219. package/dist/types/interfaces/module-options.interface.d.ts +64 -0
  220. package/dist/types/interfaces/module-options.interface.d.ts.map +1 -0
  221. package/dist/types/loaders/environment.loader.d.ts +26 -0
  222. package/dist/types/loaders/environment.loader.d.ts.map +1 -0
  223. package/dist/types/loaders/secrets-manager.loader.d.ts +52 -0
  224. package/dist/types/loaders/secrets-manager.loader.d.ts.map +1 -0
  225. package/dist/types/loaders/ssm-parameter-store.loader.d.ts +68 -0
  226. package/dist/types/loaders/ssm-parameter-store.loader.d.ts.map +1 -0
  227. package/dist/types/services/config.service.d.ts +94 -0
  228. package/dist/types/services/config.service.d.ts.map +1 -0
  229. package/dist/types/utils/validation.util.d.ts +53 -0
  230. package/dist/types/utils/validation.util.d.ts.map +1 -0
  231. package/package.json +102 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nestjs-config-integration.module.js","sourceRoot":"","sources":["../../../src/integration/nestjs-config-integration.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAiB,MAAM,EAAE,MAAM,EAAY,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AAEzF;;GAEG;AACH,MAAM,CAAC,MAAM,qCAAqC,GAAG,uCAAuC,CAAC;AAE7F;;;GAGG;AAGI,IAAM,8BAA8B,sCAApC,MAAM,8BAA8B;IACzC;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,UAA8B,EAAE;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAEhD,OAAO;YACL,MAAM,EAAE,gCAA8B;YACtC,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,qCAAqC;oBAC9C,QAAQ,EAAE,OAAO;iBAClB;gBACD,GAAG,SAAS;aACb;YACD,OAAO,EAAE;gBACP,gCAAgC;gBAChC,6BAA6B;gBAC7B,uBAAuB;gBACvB,0BAA0B;gBAC1B,8BAA8B;gBAC9B,wBAAwB;gBACxB,uBAAuB;gBACvB,4BAA4B;aAC7B;YACD,MAAM,EAAE,OAAO,CAAC,gBAAgB,KAAK,KAAK;SAC3C,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CAAC,OAAgC;QAClD,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEzC,OAAO;YACL,MAAM,EAAE,gCAA8B;YACtC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,SAAS,EAAE;gBACT,GAAG,cAAc;gBACjB,GAAG,SAAS;aACb;YACD,OAAO,EAAE;gBACP,gCAAgC;gBAChC,6BAA6B;gBAC7B,uBAAuB;gBACvB,0BAA0B;gBAC1B,8BAA8B;gBAC9B,wBAAwB;gBACxB,uBAAuB;gBACvB,4BAA4B;aAC7B;YACD,MAAM,EAAE,IAAI,EAAE,sCAAsC;SACrD,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,eAAe,CAAC,QAA6B;QAC1D,OAAO;YACL,gCAAgC;YAChC,6BAA6B;YAC7B,uBAAuB;YACvB,wBAAwB;YACxB,0BAA0B;YAC1B,8BAA8B;YAC9B,wBAAwB;YACxB,uBAAuB;YACvB,4BAA4B;SAC7B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,oBAAoB,CAAC,OAAgC;QAClE,OAAO;YACL;gBACE,OAAO,EAAE,qCAAqC;gBAC9C,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;aAC7B;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AA9FY,8BAA8B;IAF1C,MAAM,EAAE;IACR,MAAM,CAAC,EAAE,CAAC;GACE,8BAA8B,CA8F1C"}
@@ -0,0 +1,588 @@
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 AwsConfigurationLoaderService_1;
14
+ import { Injectable, Logger, Inject, Optional } from '@nestjs/common';
15
+ import { SecretsManagerLoader } from '../../loaders/secrets-manager.loader';
16
+ import { SSMParameterStoreLoader } from '../../loaders/ssm-parameter-store.loader';
17
+ import { EnvironmentLoader } from '../../loaders/environment.loader';
18
+ import { ErrorHandlerService } from '../services/error-handler.service';
19
+ /**
20
+ * Service for loading configuration from AWS sources for integration with @nestjs/config.
21
+ * Uses existing AWS loaders to fetch configuration and provides namespace-aware loading capabilities.
22
+ */
23
+ let AwsConfigurationLoaderService = AwsConfigurationLoaderService_1 = class AwsConfigurationLoaderService {
24
+ constructor(options) {
25
+ this.logger = new Logger(AwsConfigurationLoaderService_1.name);
26
+ this.options = options || {};
27
+ this.errorHandler = new ErrorHandlerService(this.options);
28
+ this.loaders = this.createLoaders();
29
+ }
30
+ /**
31
+ * Load configuration from AWS sources.
32
+ * @returns Promise resolving to configuration data
33
+ */
34
+ async loadConfiguration() {
35
+ const mergedConfig = {};
36
+ const sources = [];
37
+ for (const loader of this.loaders) {
38
+ try {
39
+ // Check if loader is available in current environment with timeout
40
+ const isAvailable = await this.checkAvailabilityWithTimeout(loader);
41
+ if (!isAvailable) {
42
+ if (this.options.enableLogging) {
43
+ this.logger.debug(`Skipping ${loader.getName()} - not available in current environment`);
44
+ }
45
+ continue;
46
+ }
47
+ if (this.options.enableLogging) {
48
+ this.logger.debug(`Loading configuration from ${loader.getName()}`);
49
+ }
50
+ // Load configuration from this source with retry logic for AWS services
51
+ const loaderConfig = loader instanceof EnvironmentLoader
52
+ ? await loader.load()
53
+ : await this.loadWithRetry(loader);
54
+ // Create configuration source metadata
55
+ const source = {
56
+ name: loader.getName(),
57
+ type: this.getSourceType(loader),
58
+ priority: this.getSourcePriority(loader),
59
+ data: loaderConfig,
60
+ loadedAt: new Date(),
61
+ };
62
+ sources.push(source);
63
+ // Merge with existing configuration based on precedence
64
+ Object.assign(mergedConfig, loaderConfig);
65
+ if (this.options.enableLogging) {
66
+ const keyCount = Object.keys(loaderConfig).length;
67
+ this.logger.debug(`Loaded ${keyCount} configuration values from ${loader.getName()}`);
68
+ }
69
+ }
70
+ catch (error) {
71
+ const loaderError = error instanceof Error ? error : new Error(String(error));
72
+ // Log detailed error information for troubleshooting
73
+ this.errorHandler.logDetailedError(`loadConfiguration - ${loader.getName()}`, loaderError, {
74
+ loaderName: loader.getName(),
75
+ loaderType: this.getSourceType(loader),
76
+ });
77
+ // Handle specific error types
78
+ if (this.isAwsServiceError(loaderError)) {
79
+ const shouldContinue = this.handleAwsSpecificError(loader, loaderError);
80
+ if (!shouldContinue) {
81
+ throw loaderError;
82
+ }
83
+ }
84
+ else {
85
+ // Handle general configuration errors
86
+ const shouldContinue = this.errorHandler.handleConfigurationError(loader.getName(), loaderError);
87
+ if (!shouldContinue) {
88
+ throw loaderError;
89
+ }
90
+ }
91
+ // Add error to source metadata
92
+ const errorSource = {
93
+ name: loader.getName(),
94
+ type: this.getSourceType(loader),
95
+ priority: this.getSourcePriority(loader),
96
+ data: {},
97
+ loadedAt: new Date(),
98
+ errors: [loaderError.message],
99
+ };
100
+ sources.push(errorSource);
101
+ }
102
+ }
103
+ return mergedConfig;
104
+ }
105
+ /**
106
+ * Load configuration for specific namespaces from AWS sources.
107
+ * @param namespaces - Array of namespace names to load
108
+ * @returns Promise resolving to namespaced configuration data
109
+ */
110
+ async loadNamespacedConfiguration(namespaces) {
111
+ const result = {};
112
+ // Initialize all namespaces
113
+ for (const namespace of namespaces) {
114
+ result[namespace] = {};
115
+ }
116
+ for (const loader of this.loaders) {
117
+ try {
118
+ // Check if loader is available in current environment with timeout
119
+ const isAvailable = await this.checkAvailabilityWithTimeout(loader);
120
+ if (!isAvailable) {
121
+ if (this.options.enableLogging) {
122
+ this.logger.debug(`Skipping ${loader.getName()} for namespace loading - not available`);
123
+ }
124
+ continue;
125
+ }
126
+ if (this.options.enableLogging) {
127
+ this.logger.debug(`Loading namespaced configuration from ${loader.getName()}`);
128
+ }
129
+ // Load configuration from this source with retry logic for AWS services
130
+ const loaderConfig = loader instanceof EnvironmentLoader
131
+ ? await loader.load()
132
+ : await this.loadWithRetry(loader);
133
+ // Distribute configuration to namespaces based on key prefixes or patterns
134
+ for (const namespace of namespaces) {
135
+ const namespacedConfig = this.extractNamespaceConfig(loaderConfig, namespace);
136
+ if (Object.keys(namespacedConfig).length > 0) {
137
+ Object.assign(result[namespace], namespacedConfig);
138
+ if (this.options.enableLogging) {
139
+ const keyCount = Object.keys(namespacedConfig).length;
140
+ this.logger.debug(`Loaded ${keyCount} values for namespace '${namespace}' from ${loader.getName()}`);
141
+ }
142
+ }
143
+ }
144
+ }
145
+ catch (error) {
146
+ const loaderError = error instanceof Error ? error : new Error(String(error));
147
+ // Log detailed error information for troubleshooting
148
+ this.errorHandler.logDetailedError(`loadNamespacedConfiguration - ${loader.getName()}`, loaderError, {
149
+ loaderName: loader.getName(),
150
+ loaderType: this.getSourceType(loader),
151
+ namespaces,
152
+ });
153
+ // Handle specific error types
154
+ if (this.isAwsServiceError(loaderError)) {
155
+ const shouldContinue = this.handleAwsSpecificError(loader, loaderError);
156
+ if (!shouldContinue) {
157
+ throw loaderError;
158
+ }
159
+ }
160
+ else {
161
+ // Handle general configuration errors
162
+ const shouldContinue = this.errorHandler.handleConfigurationError(loader.getName(), loaderError);
163
+ if (!shouldContinue) {
164
+ throw loaderError;
165
+ }
166
+ }
167
+ // Create fallback configuration for each namespace
168
+ if (this.options.fallbackToLocal) {
169
+ for (const namespace of namespaces) {
170
+ const fallbackConfig = this.errorHandler.createFallbackConfiguration(namespace);
171
+ Object.assign(result[namespace], fallbackConfig);
172
+ }
173
+ }
174
+ }
175
+ }
176
+ return result;
177
+ }
178
+ /**
179
+ * Check if AWS services are available.
180
+ * @returns Promise resolving to availability status
181
+ */
182
+ async isAvailable() {
183
+ try {
184
+ // Check if at least one AWS loader is available
185
+ const availabilityChecks = this.loaders
186
+ .filter(loader => !(loader instanceof EnvironmentLoader)) // Skip environment loader
187
+ .map(loader => this.checkAvailabilityWithTimeout(loader));
188
+ if (availabilityChecks.length === 0) {
189
+ // No AWS loaders configured
190
+ return false;
191
+ }
192
+ // Wait for all availability checks to complete
193
+ const results = await Promise.allSettled(availabilityChecks);
194
+ // Return true if at least one AWS service is available
195
+ return results.some(result => result.status === 'fulfilled' && result.value === true);
196
+ }
197
+ catch (error) {
198
+ const availabilityError = error instanceof Error ? error : new Error(String(error));
199
+ this.errorHandler.logDetailedError('isAvailable', availabilityError);
200
+ // Handle as AWS unavailable
201
+ this.errorHandler.handleAwsUnavailable('AWS Services', availabilityError);
202
+ return false;
203
+ }
204
+ }
205
+ /**
206
+ * Get all available configuration sources with their metadata.
207
+ * @returns Promise resolving to array of configuration sources
208
+ */
209
+ async getAvailableSources() {
210
+ const sources = [];
211
+ for (const loader of this.loaders) {
212
+ try {
213
+ const isAvailable = await loader.isAvailable();
214
+ if (isAvailable) {
215
+ const loaderConfig = await loader.load();
216
+ const source = {
217
+ name: loader.getName(),
218
+ type: this.getSourceType(loader),
219
+ priority: this.getSourcePriority(loader),
220
+ data: loaderConfig,
221
+ loadedAt: new Date(),
222
+ };
223
+ sources.push(source);
224
+ }
225
+ }
226
+ catch (error) {
227
+ // Add source with error information
228
+ const source = {
229
+ name: loader.getName(),
230
+ type: this.getSourceType(loader),
231
+ priority: this.getSourcePriority(loader),
232
+ data: {},
233
+ loadedAt: new Date(),
234
+ errors: [error instanceof Error ? error.message : String(error)],
235
+ };
236
+ sources.push(source);
237
+ }
238
+ }
239
+ return sources;
240
+ }
241
+ /**
242
+ * Create configuration loaders based on integration options.
243
+ * @returns Array of configuration loaders
244
+ */
245
+ createLoaders() {
246
+ const loaders = [];
247
+ // Always include environment loader
248
+ loaders.push(new EnvironmentLoader(this.options.envPrefix));
249
+ // Add AWS Secrets Manager loader if configured
250
+ if (this.options.secretsManagerConfig?.enabled !== false) {
251
+ const secretsConfig = {
252
+ region: this.options.secretsManagerConfig?.region,
253
+ // Convert paths to secretName format expected by SecretsManagerLoader
254
+ secretName: this.getSecretsManagerPath(),
255
+ };
256
+ loaders.push(new SecretsManagerLoader(secretsConfig));
257
+ }
258
+ // Add SSM Parameter Store loader if configured
259
+ if (this.options.ssmConfig?.enabled !== false) {
260
+ const ssmConfig = {
261
+ region: this.options.ssmConfig?.region,
262
+ // Convert paths to parameterPath format expected by SSMParameterStoreLoader
263
+ parameterPath: this.getSSMParameterPath(),
264
+ withDecryption: this.options.ssmConfig?.decrypt ?? true,
265
+ };
266
+ loaders.push(new SSMParameterStoreLoader(ssmConfig));
267
+ }
268
+ return loaders;
269
+ }
270
+ /**
271
+ * Get the source type for a given loader.
272
+ * @param loader - The configuration loader
273
+ * @returns The configuration source type
274
+ */
275
+ getSourceType(loader) {
276
+ if (loader instanceof EnvironmentLoader) {
277
+ return 'environment';
278
+ }
279
+ else if (loader instanceof SecretsManagerLoader) {
280
+ return 'secrets-manager';
281
+ }
282
+ else if (loader instanceof SSMParameterStoreLoader) {
283
+ return 'ssm';
284
+ }
285
+ else {
286
+ return 'local-file';
287
+ }
288
+ }
289
+ /**
290
+ * Get the priority for a given loader based on precedence rules.
291
+ * @param loader - The configuration loader
292
+ * @returns The priority number (higher = higher priority)
293
+ */
294
+ getSourcePriority(loader) {
295
+ const precedence = this.options.precedence || 'aws-first';
296
+ if (precedence === 'local-first') {
297
+ // Environment variables have highest priority
298
+ if (loader instanceof EnvironmentLoader)
299
+ return 100;
300
+ if (loader instanceof SecretsManagerLoader)
301
+ return 50;
302
+ if (loader instanceof SSMParameterStoreLoader)
303
+ return 40;
304
+ }
305
+ else if (precedence === 'aws-first') {
306
+ // AWS sources have higher priority
307
+ if (loader instanceof SecretsManagerLoader)
308
+ return 100;
309
+ if (loader instanceof SSMParameterStoreLoader)
310
+ return 90;
311
+ if (loader instanceof EnvironmentLoader)
312
+ return 50;
313
+ }
314
+ else {
315
+ // merge - equal priority, order matters
316
+ return 50;
317
+ }
318
+ return 50;
319
+ }
320
+ /**
321
+ * Extract configuration for a specific namespace from loaded configuration.
322
+ * @param config - The loaded configuration
323
+ * @param namespace - The namespace to extract
324
+ * @returns Configuration values for the namespace
325
+ */
326
+ extractNamespaceConfig(config, namespace) {
327
+ const namespaceConfig = {};
328
+ const namespacePrefix = namespace.toUpperCase();
329
+ // Strategy 1: Look for direct namespace key (e.g., config.database)
330
+ if (config[namespace]) {
331
+ Object.assign(namespaceConfig, config[namespace]);
332
+ }
333
+ // Strategy 2: Look for keys that start with the namespace prefix (e.g., DATABASE_HOST)
334
+ for (const [key, value] of Object.entries(config)) {
335
+ const upperKey = key.toUpperCase();
336
+ // Check if key starts with namespace prefix followed by underscore
337
+ if (upperKey.startsWith(`${namespacePrefix}_`)) {
338
+ // Remove namespace prefix and underscore, convert to camelCase
339
+ const namespacedKey = key.substring(namespace.length + 1);
340
+ const camelCaseKey = this.toCamelCase(namespacedKey);
341
+ if (camelCaseKey) {
342
+ namespaceConfig[camelCaseKey] = value;
343
+ }
344
+ }
345
+ }
346
+ // Strategy 3: Look for nested namespace paths (e.g., /app/database/host)
347
+ const nestedConfig = this.extractNestedNamespaceConfig(config, namespace);
348
+ Object.assign(namespaceConfig, nestedConfig);
349
+ return namespaceConfig;
350
+ }
351
+ /**
352
+ * Extract nested namespace configuration from hierarchical keys.
353
+ * @param config - The loaded configuration
354
+ * @param namespace - The namespace to extract
355
+ * @returns Configuration values for the namespace
356
+ */
357
+ extractNestedNamespaceConfig(config, namespace) {
358
+ const namespaceConfig = {};
359
+ const namespacePath = `/${namespace}/`;
360
+ for (const [key, value] of Object.entries(config)) {
361
+ // Check if key contains namespace path
362
+ if (key.includes(namespacePath)) {
363
+ // Extract the part after the namespace path
364
+ const pathIndex = key.indexOf(namespacePath);
365
+ const afterNamespace = key.substring(pathIndex + namespacePath.length);
366
+ if (afterNamespace) {
367
+ // Convert path segments to nested object structure
368
+ const nestedKey = this.pathToNestedKey(afterNamespace);
369
+ this.setNestedValue(namespaceConfig, nestedKey, value);
370
+ }
371
+ }
372
+ }
373
+ return namespaceConfig;
374
+ }
375
+ /**
376
+ * Convert snake_case or kebab-case to camelCase.
377
+ * @param str - String to convert
378
+ * @returns camelCase string
379
+ */
380
+ toCamelCase(str) {
381
+ return str
382
+ .toLowerCase()
383
+ .replace(/[_-](.)/g, (_, char) => char.toUpperCase());
384
+ }
385
+ /**
386
+ * Convert path segments to nested key structure.
387
+ * @param path - Path string (e.g., "host/port")
388
+ * @returns Nested key structure
389
+ */
390
+ pathToNestedKey(path) {
391
+ return path
392
+ .split('/')
393
+ .map(segment => this.toCamelCase(segment))
394
+ .join('.');
395
+ }
396
+ /**
397
+ * Set a nested value in an object using dot notation.
398
+ * @param obj - Target object
399
+ * @param path - Dot notation path
400
+ * @param value - Value to set
401
+ */
402
+ setNestedValue(obj, path, value) {
403
+ const keys = path.split('.');
404
+ let current = obj;
405
+ for (let i = 0; i < keys.length - 1; i++) {
406
+ const key = keys[i];
407
+ if (key && (!(key in current) || typeof current[key] !== 'object')) {
408
+ current[key] = {};
409
+ }
410
+ if (key) {
411
+ current = current[key];
412
+ }
413
+ }
414
+ const lastKey = keys[keys.length - 1];
415
+ if (lastKey) {
416
+ current[lastKey] = value;
417
+ }
418
+ }
419
+ /**
420
+ * Get the Secrets Manager path based on configuration.
421
+ * @returns The secrets manager path
422
+ */
423
+ getSecretsManagerPath() {
424
+ const paths = this.options.secretsManagerConfig?.paths;
425
+ if (!paths) {
426
+ return '/nestjs-config-aws';
427
+ }
428
+ // Use the first available path or default
429
+ return paths.production || paths.development || paths.test || '/nestjs-config-aws';
430
+ }
431
+ /**
432
+ * Get the SSM Parameter Store path based on configuration.
433
+ * @returns The SSM parameter path
434
+ */
435
+ getSSMParameterPath() {
436
+ const paths = this.options.ssmConfig?.paths;
437
+ if (!paths) {
438
+ return '/nestjs-config-aws';
439
+ }
440
+ // Use the first available path or default
441
+ return paths.production || paths.development || paths.test || '/nestjs-config-aws';
442
+ }
443
+ /**
444
+ * Check if an error is an AWS service error.
445
+ * @param error - The error to check
446
+ * @returns Whether the error is from an AWS service
447
+ */
448
+ isAwsServiceError(error) {
449
+ // AWS SDK errors typically have specific names
450
+ const awsErrorNames = [
451
+ 'AccessDeniedException',
452
+ 'ResourceNotFoundException',
453
+ 'InvalidRequestException',
454
+ 'ThrottlingException',
455
+ 'ServiceUnavailableException',
456
+ 'NetworkingError',
457
+ 'TimeoutError',
458
+ 'CredentialsError',
459
+ 'UnknownEndpoint',
460
+ ];
461
+ return awsErrorNames.includes(error.name) || error.message.includes('AWS');
462
+ }
463
+ /**
464
+ * Handle AWS-specific errors with appropriate strategies.
465
+ * @param loader - The loader that encountered the error
466
+ * @param error - The AWS error
467
+ * @returns Whether to continue processing
468
+ */
469
+ handleAwsSpecificError(loader, error) {
470
+ const serviceName = this.getServiceName(loader);
471
+ switch (error.name) {
472
+ case 'AccessDeniedException':
473
+ return this.errorHandler.handlePermissionError(serviceName, this.getResourceName(loader), error);
474
+ case 'ResourceNotFoundException':
475
+ return this.errorHandler.handleResourceNotFound(serviceName, this.getResourceName(loader), error);
476
+ case 'NetworkingError':
477
+ case 'TimeoutError':
478
+ const networkResult = this.errorHandler.handleNetworkError(serviceName, error);
479
+ return networkResult.shouldContinue;
480
+ case 'ThrottlingException':
481
+ case 'TooManyRequestsException':
482
+ this.logger.warn(`Rate limiting encountered for ${serviceName}, continuing with other sources`);
483
+ return true;
484
+ case 'ServiceUnavailableException':
485
+ return this.errorHandler.handleAwsUnavailable(serviceName, error);
486
+ case 'CredentialsError':
487
+ this.logger.error(`AWS credentials error for ${serviceName}: ${error.message}`);
488
+ this.logger.error('Please check AWS credentials configuration');
489
+ return this.errorHandler.handleAwsUnavailable(serviceName, error);
490
+ default:
491
+ // Handle as general configuration error
492
+ return this.errorHandler.handleConfigurationError(serviceName, error);
493
+ }
494
+ }
495
+ /**
496
+ * Get the service name for a loader.
497
+ * @param loader - The configuration loader
498
+ * @returns The service name
499
+ */
500
+ getServiceName(loader) {
501
+ if (loader instanceof SecretsManagerLoader) {
502
+ return 'AWS Secrets Manager';
503
+ }
504
+ else if (loader instanceof SSMParameterStoreLoader) {
505
+ return 'AWS Systems Manager Parameter Store';
506
+ }
507
+ else if (loader instanceof EnvironmentLoader) {
508
+ return 'Environment Variables';
509
+ }
510
+ else {
511
+ return 'Unknown Service';
512
+ }
513
+ }
514
+ /**
515
+ * Get the resource name for a loader.
516
+ * @param loader - The configuration loader
517
+ * @returns The resource name
518
+ */
519
+ getResourceName(loader) {
520
+ if (loader instanceof SecretsManagerLoader) {
521
+ return this.getSecretsManagerPath();
522
+ }
523
+ else if (loader instanceof SSMParameterStoreLoader) {
524
+ return this.getSSMParameterPath();
525
+ }
526
+ else {
527
+ return 'configuration';
528
+ }
529
+ }
530
+ /**
531
+ * Load configuration with retry logic for retryable errors.
532
+ * @param loader - The configuration loader
533
+ * @param maxRetries - Maximum number of retries
534
+ * @returns Promise resolving to configuration data
535
+ */
536
+ async loadWithRetry(loader, maxRetries = 3) {
537
+ let lastError = null;
538
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
539
+ try {
540
+ return await loader.load();
541
+ }
542
+ catch (error) {
543
+ const loaderError = error instanceof Error ? error : new Error(String(error));
544
+ lastError = loaderError;
545
+ // Check if error is retryable
546
+ if (!this.errorHandler.isRetryableError(loaderError) || attempt === maxRetries) {
547
+ throw loaderError;
548
+ }
549
+ // Wait before retrying
550
+ const delay = this.errorHandler.getRetryDelay(attempt);
551
+ this.logger.warn(`Retrying ${loader.getName()} in ${delay}ms (attempt ${attempt}/${maxRetries})`);
552
+ await new Promise(resolve => setTimeout(resolve, delay));
553
+ }
554
+ }
555
+ // This should never be reached, but just in case
556
+ throw lastError || new Error('Unknown error during retry');
557
+ }
558
+ /**
559
+ * Check availability with timeout and error handling.
560
+ * @param loader - The configuration loader
561
+ * @param timeoutMs - Timeout in milliseconds
562
+ * @returns Promise resolving to availability status
563
+ */
564
+ async checkAvailabilityWithTimeout(loader, timeoutMs = 5000) {
565
+ try {
566
+ const timeoutPromise = new Promise((_, reject) => {
567
+ setTimeout(() => reject(new Error('Availability check timeout')), timeoutMs);
568
+ });
569
+ const availabilityPromise = loader.isAvailable();
570
+ return await Promise.race([availabilityPromise, timeoutPromise]);
571
+ }
572
+ catch (error) {
573
+ const loaderError = error instanceof Error ? error : new Error(String(error));
574
+ if (this.options.enableLogging) {
575
+ this.logger.debug(`Availability check failed for ${loader.getName()}: ${loaderError.message}`);
576
+ }
577
+ return false;
578
+ }
579
+ }
580
+ };
581
+ AwsConfigurationLoaderService = AwsConfigurationLoaderService_1 = __decorate([
582
+ Injectable(),
583
+ __param(0, Optional()),
584
+ __param(0, Inject('INTEGRATION_OPTIONS')),
585
+ __metadata("design:paramtypes", [Object])
586
+ ], AwsConfigurationLoaderService);
587
+ export { AwsConfigurationLoaderService };
588
+ //# sourceMappingURL=aws-configuration-loader.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-configuration-loader.service.js","sourceRoot":"","sources":["../../../../src/integration/providers/aws-configuration-loader.service.ts"],"names":[],"mappings":"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"}