@nest-omni/core 4.1.3-3 → 4.1.3-31

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 (370) hide show
  1. package/audit/audit.module.d.ts +1 -0
  2. package/audit/audit.module.js +51 -2
  3. package/audit/controllers/audit.controller.d.ts +57 -1
  4. package/audit/controllers/audit.controller.js +43 -0
  5. package/audit/decorators/audit-action.decorator.d.ts +74 -0
  6. package/audit/decorators/audit-action.decorator.js +42 -0
  7. package/audit/decorators/audit-controller.decorator.d.ts +1 -1
  8. package/audit/decorators/audit-controller.decorator.js +2 -2
  9. package/audit/decorators/audit-operation.decorator.d.ts +0 -7
  10. package/audit/decorators/audit-operation.decorator.js +0 -7
  11. package/audit/decorators/entity-audit.decorator.d.ts +78 -2
  12. package/audit/decorators/entity-audit.decorator.js +145 -4
  13. package/audit/decorators/index.d.ts +2 -0
  14. package/audit/decorators/index.js +2 -0
  15. package/audit/dto/audit-action-query.dto.d.ts +13 -0
  16. package/audit/dto/audit-action-query.dto.js +77 -0
  17. package/audit/dto/index.d.ts +1 -0
  18. package/audit/dto/index.js +1 -0
  19. package/audit/entities/audit-action-summary.entity.d.ts +23 -0
  20. package/audit/entities/audit-action-summary.entity.js +101 -0
  21. package/audit/entities/entity-audit-log.entity.d.ts +7 -2
  22. package/audit/entities/entity-audit-log.entity.js +45 -9
  23. package/audit/entities/entity-transaction.entity.d.ts +8 -2
  24. package/audit/entities/entity-transaction.entity.js +39 -3
  25. package/audit/entities/index.d.ts +3 -0
  26. package/audit/entities/index.js +3 -0
  27. package/audit/entities/manual-operation-log.entity.d.ts +0 -2
  28. package/audit/entities/manual-operation-log.entity.js +8 -9
  29. package/audit/enums/audit.enums.d.ts +14 -6
  30. package/audit/enums/audit.enums.js +18 -9
  31. package/audit/examples/decorator-value-mapping.example.d.ts +70 -0
  32. package/audit/examples/decorator-value-mapping.example.js +414 -0
  33. package/audit/index.d.ts +5 -1
  34. package/audit/index.js +29 -2
  35. package/audit/interceptors/audit-action.interceptor.d.ts +39 -0
  36. package/audit/interceptors/audit-action.interceptor.js +217 -0
  37. package/audit/interceptors/audit.interceptor.d.ts +1 -0
  38. package/audit/interceptors/audit.interceptor.js +19 -11
  39. package/audit/interceptors/index.d.ts +1 -0
  40. package/audit/interceptors/index.js +1 -0
  41. package/audit/interfaces/audit.interfaces.d.ts +132 -4
  42. package/audit/services/audit-action.service.d.ts +142 -0
  43. package/audit/services/audit-action.service.js +246 -0
  44. package/audit/services/audit-context.service.d.ts +91 -0
  45. package/audit/services/audit-context.service.js +170 -0
  46. package/audit/services/entity-audit.service.d.ts +220 -9
  47. package/audit/services/entity-audit.service.js +761 -72
  48. package/audit/services/index.d.ts +3 -0
  49. package/audit/services/index.js +3 -0
  50. package/audit/services/manual-audit-log.service.d.ts +23 -23
  51. package/audit/services/manual-audit-log.service.js +34 -57
  52. package/audit/services/multi-database.service.d.ts +0 -5
  53. package/audit/services/multi-database.service.js +0 -24
  54. package/audit/services/operation-description.service.d.ts +14 -3
  55. package/audit/services/operation-description.service.js +165 -26
  56. package/audit/services/transaction-audit.service.d.ts +1 -0
  57. package/audit/services/transaction-audit.service.js +12 -9
  58. package/audit/subscribers/entity-audit.subscriber.d.ts +5 -0
  59. package/audit/subscribers/entity-audit.subscriber.js +69 -5
  60. package/cache/cache.module.d.ts +7 -8
  61. package/cache/cache.module.js +15 -13
  62. package/cache/cache.service.d.ts +6 -4
  63. package/cache/cache.service.js +24 -12
  64. package/cache/decorators/cache-put.decorator.js +5 -4
  65. package/cache/dependencies/callback.dependency.js +9 -0
  66. package/cache/dependencies/db.dependency.d.ts +43 -12
  67. package/cache/dependencies/db.dependency.js +46 -18
  68. package/cache/dependencies/tag.dependency.d.ts +31 -4
  69. package/cache/dependencies/tag.dependency.js +100 -11
  70. package/cache/entities/index.d.ts +1 -0
  71. package/cache/entities/index.js +17 -0
  72. package/cache/entities/typeorm-cache.entity.d.ts +71 -0
  73. package/cache/entities/typeorm-cache.entity.js +110 -0
  74. package/cache/index.d.ts +2 -1
  75. package/cache/index.js +19 -2
  76. package/cache/interfaces/cache-options.interface.d.ts +8 -0
  77. package/cache/providers/index.d.ts +2 -1
  78. package/cache/providers/index.js +2 -1
  79. package/cache/providers/lrucache.provider.d.ts +77 -0
  80. package/cache/providers/lrucache.provider.js +228 -0
  81. package/cache/providers/redis-cache.provider.d.ts +1 -0
  82. package/cache/providers/redis-cache.provider.js +8 -6
  83. package/cache/providers/typeorm-cache.provider.d.ts +211 -0
  84. package/cache/providers/typeorm-cache.provider.js +483 -0
  85. package/common/boilerplate.polyfill.d.ts +1 -0
  86. package/common/boilerplate.polyfill.js +18 -1
  87. package/common/helpers/validation-metadata-helper.d.ts +112 -0
  88. package/common/helpers/validation-metadata-helper.js +164 -0
  89. package/common/index.d.ts +1 -0
  90. package/common/index.js +4 -0
  91. package/decorators/examples/field-i18n.example.d.ts +294 -0
  92. package/decorators/examples/field-i18n.example.js +478 -0
  93. package/decorators/field.decorators.d.ts +95 -3
  94. package/decorators/field.decorators.js +152 -18
  95. package/decorators/transform.decorators.d.ts +0 -2
  96. package/decorators/transform.decorators.js +0 -23
  97. package/decorators/translate.decorator.d.ts +26 -0
  98. package/decorators/translate.decorator.js +26 -1
  99. package/email-log/email-log.constants.d.ts +8 -0
  100. package/email-log/email-log.constants.js +11 -0
  101. package/email-log/email-log.module.d.ts +47 -0
  102. package/email-log/email-log.module.js +140 -0
  103. package/email-log/index.d.ts +11 -0
  104. package/email-log/index.js +48 -0
  105. package/email-log/interfaces/email-log-options.interface.d.ts +61 -0
  106. package/email-log/interfaces/email-log-options.interface.js +134 -0
  107. package/email-log/interfaces/email-log-transport.interface.d.ts +20 -0
  108. package/email-log/interfaces/email-log-transport.interface.js +2 -0
  109. package/email-log/interfaces/index.d.ts +2 -0
  110. package/email-log/interfaces/index.js +18 -0
  111. package/email-log/providers/email-provider.d.ts +42 -0
  112. package/email-log/providers/email-provider.js +127 -0
  113. package/email-log/providers/index.d.ts +1 -0
  114. package/email-log/providers/index.js +17 -0
  115. package/email-log/services/email-log-alert.service.d.ts +46 -0
  116. package/email-log/services/email-log-alert.service.js +162 -0
  117. package/email-log/services/email-log-formatter.service.d.ts +78 -0
  118. package/email-log/services/email-log-formatter.service.js +442 -0
  119. package/email-log/services/email-log-logger.service.d.ts +85 -0
  120. package/email-log/services/email-log-logger.service.js +168 -0
  121. package/email-log/services/email-log-rate-limiter.service.d.ts +42 -0
  122. package/email-log/services/email-log-rate-limiter.service.js +110 -0
  123. package/email-log/services/email-log-transport.service.d.ts +80 -0
  124. package/email-log/services/email-log-transport.service.js +271 -0
  125. package/email-log/services/index.d.ts +5 -0
  126. package/email-log/services/index.js +21 -0
  127. package/email-log/transports/index.d.ts +1 -0
  128. package/email-log/transports/index.js +17 -0
  129. package/email-log/transports/pino-email.transport.d.ts +56 -0
  130. package/email-log/transports/pino-email.transport.js +188 -0
  131. package/email-log/utils/index.d.ts +2 -0
  132. package/email-log/utils/index.js +18 -0
  133. package/email-log/utils/log-level.helper.d.ts +46 -0
  134. package/email-log/utils/log-level.helper.js +74 -0
  135. package/email-log/utils/pino-transport.utils.d.ts +135 -0
  136. package/email-log/utils/pino-transport.utils.js +238 -0
  137. package/file-upload/controllers/file-access.controller.d.ts +23 -0
  138. package/file-upload/controllers/file-access.controller.js +128 -0
  139. package/file-upload/decorators/column.decorator.d.ts +151 -0
  140. package/file-upload/decorators/column.decorator.js +273 -0
  141. package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
  142. package/file-upload/decorators/csv-data.decorator.js +85 -0
  143. package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
  144. package/file-upload/decorators/csv-import.decorator.js +24 -0
  145. package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
  146. package/file-upload/decorators/examples/column-mapping.example.js +122 -0
  147. package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
  148. package/file-upload/decorators/excel-data.decorator.js +85 -0
  149. package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
  150. package/file-upload/decorators/file-upload.decorator.js +172 -0
  151. package/file-upload/decorators/index.d.ts +5 -0
  152. package/file-upload/decorators/index.js +38 -0
  153. package/file-upload/decorators/process.decorator.d.ts +40 -0
  154. package/file-upload/decorators/process.decorator.js +52 -0
  155. package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
  156. package/file-upload/decorators/validate-data.decorator.js +39 -0
  157. package/file-upload/dto/create-file.dto.d.ts +24 -0
  158. package/file-upload/dto/create-file.dto.js +112 -0
  159. package/file-upload/dto/find-files.dto.d.ts +15 -0
  160. package/file-upload/dto/find-files.dto.js +76 -0
  161. package/file-upload/dto/index.d.ts +4 -0
  162. package/file-upload/dto/index.js +20 -0
  163. package/file-upload/dto/pagination.dto.d.ts +7 -0
  164. package/file-upload/dto/pagination.dto.js +39 -0
  165. package/file-upload/dto/update-file.dto.d.ts +15 -0
  166. package/file-upload/dto/update-file.dto.js +67 -0
  167. package/file-upload/entities/file-metadata.entity.d.ts +25 -0
  168. package/file-upload/entities/file-metadata.entity.js +76 -0
  169. package/file-upload/entities/file.entity.d.ts +114 -0
  170. package/file-upload/entities/file.entity.js +350 -0
  171. package/file-upload/entities/index.d.ts +2 -0
  172. package/file-upload/entities/index.js +18 -0
  173. package/file-upload/enums/file-type.enum.d.ts +72 -0
  174. package/file-upload/enums/file-type.enum.js +212 -0
  175. package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
  176. package/file-upload/exceptions/file-upload.exception.js +120 -0
  177. package/file-upload/exceptions/index.d.ts +1 -0
  178. package/file-upload/exceptions/index.js +17 -0
  179. package/file-upload/file-upload.module.d.ts +89 -0
  180. package/file-upload/file-upload.module.js +292 -0
  181. package/file-upload/index.d.ts +37 -0
  182. package/file-upload/index.js +77 -0
  183. package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
  184. package/file-upload/interceptors/file-upload.interceptor.js +594 -0
  185. package/file-upload/interceptors/index.d.ts +1 -0
  186. package/file-upload/interceptors/index.js +17 -0
  187. package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
  188. package/file-upload/interfaces/custom-file-type.interface.js +2 -0
  189. package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
  190. package/file-upload/interfaces/file-buffer.interface.js +2 -0
  191. package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
  192. package/file-upload/interfaces/file-entity.interface.js +28 -0
  193. package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
  194. package/file-upload/interfaces/file-metadata.interface.js +2 -0
  195. package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
  196. package/file-upload/interfaces/file-processor.interface.js +2 -0
  197. package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
  198. package/file-upload/interfaces/file-upload-options.interface.js +5 -0
  199. package/file-upload/interfaces/index.d.ts +7 -0
  200. package/file-upload/interfaces/index.js +24 -0
  201. package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
  202. package/file-upload/interfaces/processor-options.interface.js +2 -0
  203. package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
  204. package/file-upload/interfaces/storage-provider.interface.js +2 -0
  205. package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
  206. package/file-upload/interfaces/upload-options.interface.js +2 -0
  207. package/file-upload/processors/csv.processor.d.ts +98 -0
  208. package/file-upload/processors/csv.processor.js +391 -0
  209. package/file-upload/processors/excel.processor.d.ts +130 -0
  210. package/file-upload/processors/excel.processor.js +547 -0
  211. package/file-upload/processors/image.processor.d.ts +199 -0
  212. package/file-upload/processors/image.processor.js +377 -0
  213. package/file-upload/providers/index.d.ts +2 -0
  214. package/file-upload/providers/index.js +18 -0
  215. package/file-upload/providers/local-storage.provider.d.ts +98 -0
  216. package/file-upload/providers/local-storage.provider.js +484 -0
  217. package/file-upload/providers/s3-storage.provider.d.ts +87 -0
  218. package/file-upload/providers/s3-storage.provider.js +455 -0
  219. package/file-upload/services/file-signature-validator.service.d.ts +118 -0
  220. package/file-upload/services/file-signature-validator.service.js +376 -0
  221. package/file-upload/services/file.service.d.ts +193 -0
  222. package/file-upload/services/file.service.js +638 -0
  223. package/file-upload/services/index.d.ts +4 -0
  224. package/file-upload/services/index.js +20 -0
  225. package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
  226. package/file-upload/services/malicious-file-detector.service.js +1234 -0
  227. package/file-upload/services/mime-registry.service.d.ts +47 -0
  228. package/file-upload/services/mime-registry.service.js +167 -0
  229. package/file-upload/utils/checksum.util.d.ts +28 -0
  230. package/file-upload/utils/checksum.util.js +65 -0
  231. package/file-upload/utils/dynamic-import.util.d.ts +54 -0
  232. package/file-upload/utils/dynamic-import.util.js +156 -0
  233. package/file-upload/utils/filename.util.d.ts +59 -0
  234. package/file-upload/utils/filename.util.js +184 -0
  235. package/file-upload/utils/filepath.util.d.ts +70 -0
  236. package/file-upload/utils/filepath.util.js +152 -0
  237. package/file-upload/utils/index.d.ts +4 -0
  238. package/file-upload/utils/index.js +20 -0
  239. package/filters/bad-request.filter.d.ts +9 -0
  240. package/filters/bad-request.filter.js +57 -16
  241. package/http-client/config/http-client.config.d.ts +5 -0
  242. package/http-client/config/http-client.config.js +27 -14
  243. package/http-client/decorators/http-client.decorators.d.ts +7 -28
  244. package/http-client/decorators/http-client.decorators.js +124 -99
  245. package/http-client/entities/http-log.entity.d.ts +0 -20
  246. package/http-client/entities/http-log.entity.js +1 -21
  247. package/http-client/examples/advanced-usage.example.d.ts +4 -5
  248. package/http-client/examples/advanced-usage.example.js +7 -59
  249. package/http-client/examples/axios-config-extended.example.d.ts +17 -0
  250. package/http-client/examples/axios-config-extended.example.js +311 -0
  251. package/http-client/examples/flexible-response-example.d.ts +28 -0
  252. package/http-client/examples/flexible-response-example.js +120 -0
  253. package/http-client/examples/index.d.ts +2 -0
  254. package/http-client/examples/index.js +2 -0
  255. package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
  256. package/http-client/examples/proxy-from-environment.example.js +409 -0
  257. package/http-client/examples/ssl-certificate.example.d.ts +47 -0
  258. package/http-client/examples/ssl-certificate.example.js +432 -0
  259. package/http-client/http-client.module.d.ts +43 -2
  260. package/http-client/http-client.module.js +150 -90
  261. package/http-client/index.d.ts +1 -1
  262. package/http-client/interfaces/api-client-config.interface.d.ts +24 -103
  263. package/http-client/interfaces/http-client-config.interface.d.ts +137 -62
  264. package/http-client/services/api-client-registry.service.d.ts +8 -21
  265. package/http-client/services/api-client-registry.service.js +31 -282
  266. package/http-client/services/circuit-breaker.service.d.ts +69 -2
  267. package/http-client/services/circuit-breaker.service.js +185 -7
  268. package/http-client/services/http-client.service.d.ts +85 -23
  269. package/http-client/services/http-client.service.js +512 -168
  270. package/http-client/services/http-log-query.service.js +0 -13
  271. package/http-client/services/index.d.ts +0 -1
  272. package/http-client/services/index.js +0 -1
  273. package/http-client/services/logging.service.d.ts +69 -16
  274. package/http-client/services/logging.service.js +290 -170
  275. package/http-client/utils/call-stack-extractor.util.d.ts +26 -0
  276. package/http-client/utils/call-stack-extractor.util.js +35 -0
  277. package/http-client/utils/context-extractor.util.d.ts +2 -0
  278. package/http-client/utils/context-extractor.util.js +17 -3
  279. package/http-client/utils/curl-generator.util.js +2 -5
  280. package/http-client/utils/index.d.ts +2 -0
  281. package/http-client/utils/index.js +2 -0
  282. package/http-client/utils/proxy-environment.util.d.ts +42 -0
  283. package/http-client/utils/proxy-environment.util.js +154 -0
  284. package/http-client/utils/retry-recorder.util.d.ts +0 -4
  285. package/http-client/utils/retry-recorder.util.js +2 -27
  286. package/http-client/utils/sanitize.util.d.ts +58 -0
  287. package/http-client/utils/sanitize.util.js +188 -0
  288. package/http-client/utils/security-validator.util.d.ts +118 -0
  289. package/http-client/utils/security-validator.util.js +354 -0
  290. package/index.d.ts +4 -1
  291. package/index.js +6 -1
  292. package/interceptors/translation-interceptor.service.d.ts +7 -0
  293. package/interceptors/translation-interceptor.service.js +40 -8
  294. package/ip-filter/constants.d.ts +21 -0
  295. package/ip-filter/constants.js +24 -0
  296. package/ip-filter/decorators/index.d.ts +1 -0
  297. package/ip-filter/decorators/index.js +17 -0
  298. package/ip-filter/decorators/ip-filter.decorator.d.ts +58 -0
  299. package/ip-filter/decorators/ip-filter.decorator.js +79 -0
  300. package/ip-filter/guards/index.d.ts +1 -0
  301. package/ip-filter/guards/index.js +17 -0
  302. package/ip-filter/guards/ip-filter.guard.d.ts +62 -0
  303. package/ip-filter/guards/ip-filter.guard.js +174 -0
  304. package/ip-filter/index.d.ts +7 -0
  305. package/ip-filter/index.js +23 -0
  306. package/ip-filter/interfaces/index.d.ts +4 -0
  307. package/ip-filter/interfaces/index.js +20 -0
  308. package/ip-filter/interfaces/ip-filter-async-options.interface.d.ts +15 -0
  309. package/ip-filter/interfaces/ip-filter-async-options.interface.js +2 -0
  310. package/ip-filter/interfaces/ip-filter-metadata.interface.d.ts +26 -0
  311. package/ip-filter/interfaces/ip-filter-metadata.interface.js +2 -0
  312. package/ip-filter/interfaces/ip-filter-options.interface.d.ts +34 -0
  313. package/ip-filter/interfaces/ip-filter-options.interface.js +2 -0
  314. package/ip-filter/interfaces/ip-rule.interface.d.ts +36 -0
  315. package/ip-filter/interfaces/ip-rule.interface.js +2 -0
  316. package/ip-filter/ip-filter.module.d.ts +55 -0
  317. package/ip-filter/ip-filter.module.js +105 -0
  318. package/ip-filter/services/index.d.ts +1 -0
  319. package/ip-filter/services/index.js +17 -0
  320. package/ip-filter/services/ip-filter.service.d.ts +92 -0
  321. package/ip-filter/services/ip-filter.service.js +238 -0
  322. package/ip-filter/utils/index.d.ts +1 -0
  323. package/ip-filter/utils/index.js +17 -0
  324. package/ip-filter/utils/ip-utils.d.ts +61 -0
  325. package/ip-filter/utils/ip-utils.js +162 -0
  326. package/package.json +34 -29
  327. package/providers/context.provider.d.ts +9 -0
  328. package/providers/context.provider.js +13 -0
  329. package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
  330. package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
  331. package/redis-lock/index.d.ts +2 -0
  332. package/redis-lock/index.js +5 -1
  333. package/redis-lock/lock-heartbeat.service.d.ts +80 -0
  334. package/redis-lock/lock-heartbeat.service.js +232 -0
  335. package/redis-lock/redis-lock.module.d.ts +6 -0
  336. package/redis-lock/redis-lock.module.js +136 -77
  337. package/redis-lock/redis-lock.service.d.ts +31 -0
  338. package/redis-lock/redis-lock.service.js +124 -17
  339. package/setup/bootstrap.setup.d.ts +2 -1
  340. package/setup/bootstrap.setup.js +3 -2
  341. package/setup/index.d.ts +1 -0
  342. package/setup/index.js +1 -0
  343. package/setup/run-in-mode.decorator.d.ts +56 -0
  344. package/setup/run-in-mode.decorator.js +92 -0
  345. package/setup/schedule.decorator.d.ts +1 -0
  346. package/setup/schedule.decorator.js +28 -13
  347. package/setup/worker.decorator.js +10 -1
  348. package/shared/index.d.ts +1 -1
  349. package/shared/index.js +1 -1
  350. package/shared/{serviceRegistryModule.js → service-registry.module.js} +28 -17
  351. package/shared/services/api-config.service.d.ts +41 -0
  352. package/shared/services/api-config.service.js +175 -8
  353. package/shared/services/index.d.ts +0 -1
  354. package/shared/services/index.js +0 -1
  355. package/validators/custom-validate.validator.d.ts +1 -0
  356. package/validators/custom-validate.validator.js +1 -0
  357. package/validators/file-mimetype.validator.d.ts +0 -2
  358. package/validators/file-mimetype.validator.js +4 -6
  359. package/validators/is-exists.validator.d.ts +15 -6
  360. package/validators/is-exists.validator.js +8 -7
  361. package/validators/is-unique.validator.d.ts +22 -7
  362. package/validators/is-unique.validator.js +41 -17
  363. package/vault/vault-config.service.js +1 -1
  364. package/cache/providers/memory-cache.provider.d.ts +0 -49
  365. package/cache/providers/memory-cache.provider.js +0 -197
  366. package/http-client/services/cache.service.d.ts +0 -76
  367. package/http-client/services/cache.service.js +0 -333
  368. package/shared/services/validator.service.d.ts +0 -3
  369. package/shared/services/validator.service.js +0 -20
  370. /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
@@ -0,0 +1,168 @@
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.EmailLogLogger = void 0;
22
+ exports.createEmailLogger = createEmailLogger;
23
+ const common_1 = require("@nestjs/common");
24
+ const log_level_helper_1 = require("../utils/log-level.helper");
25
+ /**
26
+ * Enhanced Logger service with email alert support
27
+ * This service wraps the standard NestJS Logger and adds email alert functionality
28
+ * for error and fatal level logs.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * import { EmailLogLogger } from '@nest-omni/core';
33
+ *
34
+ * @Injectable()
35
+ * export class MyService {
36
+ * private readonly logger = new EmailLogLogger(MyService.name);
37
+ *
38
+ * handleError() {
39
+ * this.logger.error('Something went wrong!', error.stack);
40
+ * // This will both log to console and send an email alert
41
+ * }
42
+ * }
43
+ * ```
44
+ */
45
+ let EmailLogLogger = class EmailLogLogger extends common_1.Logger {
46
+ constructor(context, emailTransportService) {
47
+ super(context);
48
+ this.emailTransportService = emailTransportService;
49
+ this.minLevel = 50; // Default to error level
50
+ }
51
+ /**
52
+ * Initialize with email transport from DI
53
+ */
54
+ onModuleInit() {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ // This will be called if the service is injected with dependencies
57
+ if (this.emailTransportService) {
58
+ this.emailTransport = this.emailTransportService;
59
+ }
60
+ });
61
+ }
62
+ /**
63
+ * Set email transport manually (alternative to DI)
64
+ */
65
+ setEmailTransport(transport, options) {
66
+ this.emailTransport = transport;
67
+ this.emailOptions = options;
68
+ this.minLevel = (0, log_level_helper_1.getLevelValue)(options.level);
69
+ }
70
+ /**
71
+ * Log message
72
+ */
73
+ log(message, context) {
74
+ super.log(message, context);
75
+ this.sendEmailIfNeeded('log', message, context);
76
+ }
77
+ /**
78
+ * Log error message
79
+ */
80
+ error(message, stack, context) {
81
+ super.error(message, stack, context);
82
+ this.sendEmailIfNeeded('error', message, context, stack);
83
+ }
84
+ /**
85
+ * Log warn message
86
+ */
87
+ warn(message, context) {
88
+ super.warn(message, context);
89
+ this.sendEmailIfNeeded('warn', message, context);
90
+ }
91
+ /**
92
+ * Log debug message
93
+ */
94
+ debug(message, context) {
95
+ super.debug(message, context);
96
+ // Don't send email for debug level
97
+ }
98
+ /**
99
+ * Log verbose message
100
+ */
101
+ verbose(message, context) {
102
+ super.verbose(message, context);
103
+ // Don't send email for verbose level
104
+ }
105
+ /**
106
+ * Log fatal error message
107
+ */
108
+ fatal(message, stack, context) {
109
+ super.error(message, stack, context);
110
+ this.sendEmailIfNeeded('fatal', message, context, stack);
111
+ }
112
+ /**
113
+ * Send email alert if needed based on log level
114
+ */
115
+ sendEmailIfNeeded(level, message, context, stack) {
116
+ if (!this.emailTransport || !this.shouldSendEmail(level)) {
117
+ return;
118
+ }
119
+ try {
120
+ this.emailTransport.write({
121
+ level,
122
+ message: typeof message === 'string' ? message : String(message),
123
+ context,
124
+ stack,
125
+ timestamp: Date.now(),
126
+ });
127
+ }
128
+ catch (err) {
129
+ // Don't let email errors break the application
130
+ console.error('Failed to send log email:', err);
131
+ }
132
+ }
133
+ /**
134
+ * Check if email should be sent for the given log level
135
+ */
136
+ shouldSendEmail(level) {
137
+ if (!this.emailTransport || !this.emailOptions) {
138
+ return false;
139
+ }
140
+ return (0, log_level_helper_1.getLevelValue)(level) >= this.minLevel;
141
+ }
142
+ };
143
+ exports.EmailLogLogger = EmailLogLogger;
144
+ exports.EmailLogLogger = EmailLogLogger = __decorate([
145
+ (0, common_1.Injectable)(),
146
+ __metadata("design:paramtypes", [String, Function])
147
+ ], EmailLogLogger);
148
+ /**
149
+ * Factory function to create an EmailLogLogger with email transport
150
+ * Use this in your services to get a logger with email alert support
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * import { createEmailLogger } from '@nest-omni/core';
155
+ *
156
+ * @Injectable()
157
+ * export class MyService {
158
+ * private readonly logger = createEmailLogger(MyService.name);
159
+ * }
160
+ * ```
161
+ */
162
+ function createEmailLogger(context, emailTransport, options) {
163
+ const logger = new EmailLogLogger(context, emailTransport);
164
+ if (emailTransport && options) {
165
+ logger.setEmailTransport(emailTransport, options);
166
+ }
167
+ return logger;
168
+ }
@@ -0,0 +1,42 @@
1
+ import { OnModuleDestroy } from '@nestjs/common';
2
+ /**
3
+ * Token bucket rate limiter for email logs
4
+ * Prevents email spam during error storms
5
+ *
6
+ * Similar pattern to CacheModule's LRUCacheProvider
7
+ */
8
+ export declare class EmailLogRateLimiterService implements OnModuleDestroy {
9
+ private readonly maxEmails;
10
+ private readonly windowMs;
11
+ private readonly burstSize;
12
+ private readonly logger;
13
+ private tokenBucket;
14
+ private refillTimer;
15
+ constructor(maxEmails: number, windowMs: number, burstSize: number);
16
+ /**
17
+ * Check if email should be sent based on rate limit
18
+ * @param key - Rate limit key (e.g., 'error:global' or 'error:appname')
19
+ * @returns true if allowed, false if rate limited
20
+ */
21
+ canSend(key: string): boolean;
22
+ /**
23
+ * Get current state for monitoring/debugging
24
+ */
25
+ getState(key: string): {
26
+ tokens: number;
27
+ lastRefill: number;
28
+ } | undefined;
29
+ /**
30
+ * Reset rate limit for a key (admin function)
31
+ */
32
+ reset(key: string): void;
33
+ /**
34
+ * Start periodic token refill
35
+ * Refills all buckets every second to prevent token starvation
36
+ */
37
+ private startRefillTimer;
38
+ /**
39
+ * Cleanup on module destroy
40
+ */
41
+ onModuleDestroy(): void;
42
+ }
@@ -0,0 +1,110 @@
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 EmailLogRateLimiterService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.EmailLogRateLimiterService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ /**
16
+ * Token bucket rate limiter for email logs
17
+ * Prevents email spam during error storms
18
+ *
19
+ * Similar pattern to CacheModule's LRUCacheProvider
20
+ */
21
+ let EmailLogRateLimiterService = EmailLogRateLimiterService_1 = class EmailLogRateLimiterService {
22
+ constructor(maxEmails, windowMs, burstSize) {
23
+ this.maxEmails = maxEmails;
24
+ this.windowMs = windowMs;
25
+ this.burstSize = burstSize;
26
+ this.logger = new common_1.Logger(EmailLogRateLimiterService_1.name);
27
+ this.tokenBucket = new Map();
28
+ this.refillTimer = null;
29
+ // Start periodic refill timer (every second)
30
+ this.startRefillTimer();
31
+ }
32
+ /**
33
+ * Check if email should be sent based on rate limit
34
+ * @param key - Rate limit key (e.g., 'error:global' or 'error:appname')
35
+ * @returns true if allowed, false if rate limited
36
+ */
37
+ canSend(key) {
38
+ const now = Date.now();
39
+ let state = this.tokenBucket.get(key);
40
+ if (!state) {
41
+ // First request - initialize with burst capacity
42
+ state = {
43
+ tokens: this.burstSize,
44
+ lastRefill: now,
45
+ };
46
+ this.tokenBucket.set(key, state);
47
+ }
48
+ // Refill tokens based on time elapsed
49
+ const elapsed = now - state.lastRefill;
50
+ const tokensToAdd = (elapsed / this.windowMs) * this.maxEmails;
51
+ state.tokens = Math.min(this.maxEmails, state.tokens + tokensToAdd);
52
+ state.lastRefill = now;
53
+ // Check if we have tokens available
54
+ if (state.tokens >= 1) {
55
+ state.tokens -= 1;
56
+ this.tokenBucket.set(key, state);
57
+ this.logger.debug(`Rate limit check passed for key: ${key}, remaining tokens: ${state.tokens.toFixed(2)}`);
58
+ return true;
59
+ }
60
+ this.logger.warn(`Rate limit exceeded for key: ${key}, tokens: ${state.tokens.toFixed(2)}`);
61
+ return false;
62
+ }
63
+ /**
64
+ * Get current state for monitoring/debugging
65
+ */
66
+ getState(key) {
67
+ const state = this.tokenBucket.get(key);
68
+ return state ? Object.assign({}, state) : undefined;
69
+ }
70
+ /**
71
+ * Reset rate limit for a key (admin function)
72
+ */
73
+ reset(key) {
74
+ this.tokenBucket.delete(key);
75
+ this.logger.debug(`Rate limit reset for key: ${key}`);
76
+ }
77
+ /**
78
+ * Start periodic token refill
79
+ * Refills all buckets every second to prevent token starvation
80
+ */
81
+ startRefillTimer() {
82
+ this.refillTimer = setInterval(() => {
83
+ const now = Date.now();
84
+ for (const [key, state] of this.tokenBucket.entries()) {
85
+ const elapsed = now - state.lastRefill;
86
+ if (elapsed > 0) {
87
+ const tokensToAdd = (elapsed / this.windowMs) * this.maxEmails;
88
+ state.tokens = Math.min(this.maxEmails, state.tokens + tokensToAdd);
89
+ state.lastRefill = now;
90
+ this.tokenBucket.set(key, state);
91
+ }
92
+ }
93
+ }, 1000); // Refill every second
94
+ }
95
+ /**
96
+ * Cleanup on module destroy
97
+ */
98
+ onModuleDestroy() {
99
+ if (this.refillTimer) {
100
+ clearInterval(this.refillTimer);
101
+ this.refillTimer = null;
102
+ }
103
+ this.tokenBucket.clear();
104
+ }
105
+ };
106
+ exports.EmailLogRateLimiterService = EmailLogRateLimiterService;
107
+ exports.EmailLogRateLimiterService = EmailLogRateLimiterService = EmailLogRateLimiterService_1 = __decorate([
108
+ (0, common_1.Injectable)(),
109
+ __metadata("design:paramtypes", [Number, Number, Number])
110
+ ], EmailLogRateLimiterService);
@@ -0,0 +1,80 @@
1
+ import { LogDescriptor } from 'pino';
2
+ import { Writable } from 'stream';
3
+ import { EmailLogRateLimiterService } from './email-log-rate-limiter.service';
4
+ import { EmailLogFormatterService } from './email-log-formatter.service';
5
+ import { EmailLogOptions } from '../interfaces';
6
+ import type { IEmailLogTransport } from '../interfaces';
7
+ /**
8
+ * Pino email transport service
9
+ * Implements Writable stream interface for Pino compatibility
10
+ *
11
+ * Follows the pattern of RedisLock and Cache decorators:
12
+ * - Global service holder pattern
13
+ * - Graceful error handling
14
+ * - Configurable via environment variables
15
+ */
16
+ export declare class EmailLogTransportService extends Writable implements IEmailLogTransport, NodeJS.WritableStream {
17
+ private readonly options;
18
+ private readonly rateLimiter;
19
+ private readonly formatter;
20
+ private readonly logger;
21
+ private readonly appName;
22
+ private emailProvider;
23
+ private isClosing;
24
+ constructor(options: EmailLogOptions, rateLimiter: EmailLogRateLimiterService, formatter: EmailLogFormatterService);
25
+ /**
26
+ * Write method - implements Writable stream interface
27
+ * Called by Pino for each log entry
28
+ */
29
+ _write(data: LogDescriptor, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void;
30
+ /**
31
+ * Writev method - handles batch writes
32
+ */
33
+ _writev(chunks: {
34
+ chunk: LogDescriptor;
35
+ encoding: BufferEncoding;
36
+ }[], callback: (error?: Error | null) => void): void;
37
+ /**
38
+ * Final method - cleanup before stream closes
39
+ */
40
+ _final(callback: (error?: Error | null) => void): void;
41
+ /**
42
+ * Process a single log entry
43
+ */
44
+ private processLog;
45
+ /**
46
+ * Check if log should trigger email based on configuration
47
+ */
48
+ private shouldSendLog;
49
+ /**
50
+ * Get rate limit key for this log entry
51
+ * Uses 'email-log:appName:level' by default
52
+ */
53
+ private getRateLimitKey;
54
+ /**
55
+ * Get level label from numeric level
56
+ */
57
+ private getLevelLabel;
58
+ /**
59
+ * Get level value from level name
60
+ */
61
+ private getLevelValueFromName;
62
+ /**
63
+ * Format and send email
64
+ */
65
+ private sendEmail;
66
+ /**
67
+ * Check if transport is enabled for given log level
68
+ * Part of IEmailLogTransport interface
69
+ */
70
+ shouldSend(level: string): boolean;
71
+ /**
72
+ * Flush any pending writes
73
+ * Part of IEmailLogTransport interface
74
+ */
75
+ flush(): Promise<void>;
76
+ /**
77
+ * Cleanup on module destroy
78
+ */
79
+ onModuleDestroy(): Promise<void>;
80
+ }
@@ -0,0 +1,271 @@
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var EmailLogTransportService_1;
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.EmailLogTransportService = void 0;
26
+ const common_1 = require("@nestjs/common");
27
+ const pino_1 = require("pino");
28
+ const stream_1 = require("stream");
29
+ const email_log_rate_limiter_service_1 = require("./email-log-rate-limiter.service");
30
+ const email_log_formatter_service_1 = require("./email-log-formatter.service");
31
+ const email_provider_1 = require("../providers/email-provider");
32
+ const email_log_constants_1 = require("../email-log.constants");
33
+ const interfaces_1 = require("../interfaces");
34
+ /**
35
+ * Pino email transport service
36
+ * Implements Writable stream interface for Pino compatibility
37
+ *
38
+ * Follows the pattern of RedisLock and Cache decorators:
39
+ * - Global service holder pattern
40
+ * - Graceful error handling
41
+ * - Configurable via environment variables
42
+ */
43
+ let EmailLogTransportService = EmailLogTransportService_1 = class EmailLogTransportService extends stream_1.Writable {
44
+ constructor(options, rateLimiter, formatter) {
45
+ super({ objectMode: true }); // Enable object mode for Pino logs
46
+ this.options = options;
47
+ this.rateLimiter = rateLimiter;
48
+ this.formatter = formatter;
49
+ this.logger = new common_1.Logger(EmailLogTransportService_1.name);
50
+ this.isClosing = false;
51
+ this.appName = process.env.NAME || process.env.APP_NAME || 'omni-app';
52
+ this.emailProvider = new email_provider_1.EmailLogProvider({
53
+ smtpHost: options.smtpHost,
54
+ smtpPort: options.smtpPort || 587,
55
+ smtpUsername: options.smtpUsername,
56
+ smtpPassword: options.smtpPassword,
57
+ smtpSecure: options.smtpSecure || false,
58
+ smtpIgnoreTLSError: options.smtpIgnoreTLSError || false,
59
+ });
60
+ this.logger.log(`Email log transport initialized for app: ${this.appName}, level: ${this.options.level}`);
61
+ }
62
+ /**
63
+ * Write method - implements Writable stream interface
64
+ * Called by Pino for each log entry
65
+ */
66
+ _write(data, _encoding, callback) {
67
+ if (this.isClosing) {
68
+ callback();
69
+ return;
70
+ }
71
+ this.processLog(data)
72
+ .then(() => callback())
73
+ .catch((error) => {
74
+ this.logger.error(`Error processing log entry: ${error.message}`, error.stack);
75
+ callback(); // Don't fail the stream, just log the error
76
+ });
77
+ }
78
+ /**
79
+ * Writev method - handles batch writes
80
+ */
81
+ _writev(chunks, callback) {
82
+ if (this.isClosing) {
83
+ callback();
84
+ return;
85
+ }
86
+ Promise.all(chunks.map(({ chunk }) => this.processLog(chunk)))
87
+ .then(() => callback())
88
+ .catch((error) => {
89
+ this.logger.error(`Error processing log batch: ${error.message}`, error.stack);
90
+ callback();
91
+ });
92
+ }
93
+ /**
94
+ * Final method - cleanup before stream closes
95
+ */
96
+ _final(callback) {
97
+ this.isClosing = true;
98
+ this.emailProvider
99
+ .close()
100
+ .then(() => callback())
101
+ .catch((error) => {
102
+ this.logger.error(`Error closing email provider: ${error.message}`);
103
+ callback();
104
+ });
105
+ }
106
+ /**
107
+ * Process a single log entry
108
+ */
109
+ processLog(log) {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ try {
112
+ // Check if transport is enabled for this log level
113
+ if (!this.shouldSendLog(log)) {
114
+ return;
115
+ }
116
+ // Check rate limiting
117
+ const rateLimitKey = this.getRateLimitKey(log);
118
+ if (!this.rateLimiter.canSend(rateLimitKey)) {
119
+ this.logger.debug(`Rate limited email for log: ${log.msg}`);
120
+ return;
121
+ }
122
+ // Format and send email
123
+ yield this.sendEmail(log);
124
+ }
125
+ catch (error) {
126
+ this.logger.error(`Failed to send log email: ${error.message}`, error.stack);
127
+ // Don't throw - we don't want to break logging
128
+ }
129
+ });
130
+ }
131
+ /**
132
+ * Check if log should trigger email based on configuration
133
+ */
134
+ shouldSendLog(log) {
135
+ var _a;
136
+ const { level } = log;
137
+ const levelValue = typeof level === 'string'
138
+ ? ((_a = pino_1.levels[level]) !== null && _a !== void 0 ? _a : 0)
139
+ : level;
140
+ const thresholdValue = this.getLevelValueFromName(this.options.level);
141
+ // Check log level threshold
142
+ if (levelValue < thresholdValue) {
143
+ return false;
144
+ }
145
+ // Check app filters
146
+ if (this.options.includeApps && this.options.includeApps.length > 0) {
147
+ if (!this.options.includeApps.includes(this.appName)) {
148
+ return false;
149
+ }
150
+ }
151
+ if (this.options.excludeApps && this.options.excludeApps.includes(this.appName)) {
152
+ return false;
153
+ }
154
+ // Check error type filters
155
+ if (log.err) {
156
+ const errorType = log.err.type || log.err.name;
157
+ if (this.options.includeErrors &&
158
+ this.options.includeErrors.length > 0) {
159
+ if (!this.options.includeErrors.includes(errorType)) {
160
+ return false;
161
+ }
162
+ }
163
+ if (this.options.excludeErrors &&
164
+ this.options.excludeErrors.includes(errorType)) {
165
+ return false;
166
+ }
167
+ }
168
+ return true;
169
+ }
170
+ /**
171
+ * Get rate limit key for this log entry
172
+ * Uses 'email-log:appName:level' by default
173
+ */
174
+ getRateLimitKey(log) {
175
+ const levelLabel = typeof log.level === 'string' ? log.level : this.getLevelLabel(log.level);
176
+ return `email-log:${this.appName}:${levelLabel}`;
177
+ }
178
+ /**
179
+ * Get level label from numeric level
180
+ */
181
+ getLevelLabel(level) {
182
+ const labels = {
183
+ 10: 'trace',
184
+ 20: 'debug',
185
+ 30: 'info',
186
+ 40: 'warn',
187
+ 50: 'error',
188
+ 60: 'fatal',
189
+ };
190
+ return labels[level] || 'unknown';
191
+ }
192
+ /**
193
+ * Get level value from level name
194
+ */
195
+ getLevelValueFromName(levelName) {
196
+ var _a;
197
+ const nameToValue = {
198
+ trace: 10,
199
+ debug: 20,
200
+ info: 30,
201
+ warn: 40,
202
+ error: 50,
203
+ fatal: 60,
204
+ };
205
+ return (_a = nameToValue[levelName]) !== null && _a !== void 0 ? _a : 50;
206
+ }
207
+ /**
208
+ * Format and send email
209
+ */
210
+ sendEmail(log) {
211
+ return __awaiter(this, void 0, void 0, function* () {
212
+ const subjectPrefix = this.options.subjectPrefix || '[Log Alert]';
213
+ const emailContent = this.options.useHtmlFormat
214
+ ? this.formatter.formatHtml(log, this.appName, subjectPrefix)
215
+ : this.formatter.formatText(log, this.appName, subjectPrefix);
216
+ yield this.emailProvider.sendLogEmail({
217
+ to: this.options.to,
218
+ cc: this.options.cc,
219
+ from: this.options.from,
220
+ subject: emailContent.subject,
221
+ html: 'html' in emailContent ? emailContent.html : undefined,
222
+ text: 'text' in emailContent ? emailContent.text : undefined,
223
+ });
224
+ this.logger.debug(`Log email sent for ${this.appName}: ${log.msg}`);
225
+ });
226
+ }
227
+ /**
228
+ * Check if transport is enabled for given log level
229
+ * Part of IEmailLogTransport interface
230
+ */
231
+ shouldSend(level) {
232
+ const levelValue = this.getLevelValueFromName(level);
233
+ const thresholdValue = this.getLevelValueFromName(this.options.level);
234
+ return levelValue >= thresholdValue;
235
+ }
236
+ /**
237
+ * Flush any pending writes
238
+ * Part of IEmailLogTransport interface
239
+ */
240
+ flush() {
241
+ return __awaiter(this, void 0, void 0, function* () {
242
+ return new Promise((resolve, reject) => {
243
+ this.end((error) => {
244
+ if (error)
245
+ reject(error);
246
+ else
247
+ resolve();
248
+ });
249
+ });
250
+ });
251
+ }
252
+ /**
253
+ * Cleanup on module destroy
254
+ */
255
+ onModuleDestroy() {
256
+ return __awaiter(this, void 0, void 0, function* () {
257
+ this.isClosing = true;
258
+ yield this.emailProvider.close();
259
+ });
260
+ }
261
+ };
262
+ exports.EmailLogTransportService = EmailLogTransportService;
263
+ exports.EmailLogTransportService = EmailLogTransportService = EmailLogTransportService_1 = __decorate([
264
+ (0, common_1.Injectable)(),
265
+ __param(0, (0, common_1.Inject)(email_log_constants_1.EMAIL_LOG_OPTIONS)),
266
+ __param(1, (0, common_1.Inject)(email_log_constants_1.EMAIL_LOG_RATE_LIMITER)),
267
+ __param(2, (0, common_1.Inject)(email_log_constants_1.EMAIL_LOG_FORMATTER)),
268
+ __metadata("design:paramtypes", [interfaces_1.EmailLogOptions,
269
+ email_log_rate_limiter_service_1.EmailLogRateLimiterService,
270
+ email_log_formatter_service_1.EmailLogFormatterService])
271
+ ], EmailLogTransportService);
@@ -0,0 +1,5 @@
1
+ export * from './email-log-transport.service';
2
+ export * from './email-log-formatter.service';
3
+ export * from './email-log-rate-limiter.service';
4
+ export * from './email-log-alert.service';
5
+ export * from './email-log-logger.service';