@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,61 @@
1
+ /**
2
+ * Email logging transport configuration options
3
+ * Follows libs/core pattern from CacheModuleOptions
4
+ */
5
+ export declare class EmailLogOptions {
6
+ /**
7
+ * Enable email log transport
8
+ * @default false
9
+ */
10
+ enabled: boolean;
11
+ /**
12
+ * Minimum log level to trigger email
13
+ * Uses Pino log levels: 'trace', 'debug', 'info', 'warn', 'error', 'fatal'
14
+ * @default 'error'
15
+ */
16
+ level: string;
17
+ /**
18
+ * Recipient email addresses
19
+ */
20
+ to: string[];
21
+ /**
22
+ * CC recipient email addresses (optional)
23
+ */
24
+ cc?: string[];
25
+ /**
26
+ * Sender email address
27
+ */
28
+ from: string;
29
+ /**
30
+ * Email subject prefix
31
+ * Final subject: "[prefix] appName - log level"
32
+ * @default '[Log Alert]'
33
+ */
34
+ subjectPrefix?: string;
35
+ /**
36
+ * SMTP configuration
37
+ */
38
+ smtpHost: string;
39
+ smtpPort?: number;
40
+ smtpUsername?: string;
41
+ smtpPassword?: string;
42
+ smtpSecure?: boolean;
43
+ smtpIgnoreTLSError?: boolean;
44
+ /**
45
+ * Rate limiting configuration
46
+ */
47
+ rateLimitMaxEmails?: number;
48
+ rateLimitWindowMs?: number;
49
+ rateLimitBurstSize?: number;
50
+ /**
51
+ * Email formatting options
52
+ */
53
+ useHtmlFormat?: boolean;
54
+ /**
55
+ * Filtering options
56
+ */
57
+ includeApps?: string[];
58
+ excludeApps?: string[];
59
+ includeErrors?: string[];
60
+ excludeErrors?: string[];
61
+ }
@@ -0,0 +1,134 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EmailLogOptions = void 0;
13
+ const decorators_1 = require("../../decorators");
14
+ /**
15
+ * Email logging transport configuration options
16
+ * Follows libs/core pattern from CacheModuleOptions
17
+ */
18
+ class EmailLogOptions {
19
+ }
20
+ exports.EmailLogOptions = EmailLogOptions;
21
+ __decorate([
22
+ (0, decorators_1.StringField)({ fieldLabel: { zh: '启用邮件日志', en: 'Enable Email Log' } }),
23
+ __metadata("design:type", Boolean)
24
+ ], EmailLogOptions.prototype, "enabled", void 0);
25
+ __decorate([
26
+ (0, decorators_1.StringField)({ fieldLabel: { zh: '日志级别', en: 'Log Level' } }),
27
+ __metadata("design:type", String)
28
+ ], EmailLogOptions.prototype, "level", void 0);
29
+ __decorate([
30
+ (0, decorators_1.EmailField)({ each: true, fieldLabel: { zh: '收件人', en: 'Recipients' } }),
31
+ __metadata("design:type", Array)
32
+ ], EmailLogOptions.prototype, "to", void 0);
33
+ __decorate([
34
+ (0, decorators_1.EmailFieldOptional)({
35
+ each: true,
36
+ fieldLabel: { zh: '抄送', en: 'CC Recipients' },
37
+ }),
38
+ __metadata("design:type", Array)
39
+ ], EmailLogOptions.prototype, "cc", void 0);
40
+ __decorate([
41
+ (0, decorators_1.EmailField)({ fieldLabel: { zh: '发件人', en: 'Sender Email' } }),
42
+ __metadata("design:type", String)
43
+ ], EmailLogOptions.prototype, "from", void 0);
44
+ __decorate([
45
+ (0, decorators_1.StringFieldOptional)({
46
+ fieldLabel: { zh: '邮件主题前缀', en: 'Subject Prefix' },
47
+ }),
48
+ __metadata("design:type", String)
49
+ ], EmailLogOptions.prototype, "subjectPrefix", void 0);
50
+ __decorate([
51
+ (0, decorators_1.StringField)({ fieldLabel: { zh: 'SMTP主机', en: 'SMTP Host' } }),
52
+ __metadata("design:type", String)
53
+ ], EmailLogOptions.prototype, "smtpHost", void 0);
54
+ __decorate([
55
+ (0, decorators_1.NumberFieldOptional)({ fieldLabel: { zh: 'SMTP端口', en: 'SMTP Port' } }),
56
+ __metadata("design:type", Number)
57
+ ], EmailLogOptions.prototype, "smtpPort", void 0);
58
+ __decorate([
59
+ (0, decorators_1.StringFieldOptional)({
60
+ fieldLabel: { zh: 'SMTP用户名', en: 'SMTP Username' },
61
+ }),
62
+ __metadata("design:type", String)
63
+ ], EmailLogOptions.prototype, "smtpUsername", void 0);
64
+ __decorate([
65
+ (0, decorators_1.StringFieldOptional)({
66
+ fieldLabel: { zh: 'SMTP密码', en: 'SMTP Password' },
67
+ sensitive: true,
68
+ }),
69
+ __metadata("design:type", String)
70
+ ], EmailLogOptions.prototype, "smtpPassword", void 0);
71
+ __decorate([
72
+ (0, decorators_1.BooleanFieldOptional)({
73
+ fieldLabel: { zh: 'SSL/TLS加密', en: 'SMTP Secure' },
74
+ }),
75
+ __metadata("design:type", Boolean)
76
+ ], EmailLogOptions.prototype, "smtpSecure", void 0);
77
+ __decorate([
78
+ (0, decorators_1.BooleanFieldOptional)({
79
+ fieldLabel: { zh: '忽略TLS错误', en: 'Ignore TLS Error' },
80
+ }),
81
+ __metadata("design:type", Boolean)
82
+ ], EmailLogOptions.prototype, "smtpIgnoreTLSError", void 0);
83
+ __decorate([
84
+ (0, decorators_1.NumberFieldOptional)({
85
+ fieldLabel: { zh: '速率限制最大邮件数', en: 'Rate Limit Max Emails' },
86
+ }),
87
+ __metadata("design:type", Number)
88
+ ], EmailLogOptions.prototype, "rateLimitMaxEmails", void 0);
89
+ __decorate([
90
+ (0, decorators_1.NumberFieldOptional)({
91
+ fieldLabel: { zh: '速率限制时间窗口(毫秒)', en: 'Rate Limit Window MS' },
92
+ }),
93
+ __metadata("design:type", Number)
94
+ ], EmailLogOptions.prototype, "rateLimitWindowMs", void 0);
95
+ __decorate([
96
+ (0, decorators_1.NumberFieldOptional)({
97
+ fieldLabel: { zh: '突发大小', en: 'Rate Limit Burst Size' },
98
+ }),
99
+ __metadata("design:type", Number)
100
+ ], EmailLogOptions.prototype, "rateLimitBurstSize", void 0);
101
+ __decorate([
102
+ (0, decorators_1.BooleanFieldOptional)({
103
+ fieldLabel: { zh: 'HTML格式', en: 'Use HTML Format' },
104
+ }),
105
+ __metadata("design:type", Boolean)
106
+ ], EmailLogOptions.prototype, "useHtmlFormat", void 0);
107
+ __decorate([
108
+ (0, decorators_1.StringFieldOptional)({
109
+ each: true,
110
+ fieldLabel: { zh: '包含应用', en: 'Include Apps' },
111
+ }),
112
+ __metadata("design:type", Array)
113
+ ], EmailLogOptions.prototype, "includeApps", void 0);
114
+ __decorate([
115
+ (0, decorators_1.StringFieldOptional)({
116
+ each: true,
117
+ fieldLabel: { zh: '排除应用', en: 'Exclude Apps' },
118
+ }),
119
+ __metadata("design:type", Array)
120
+ ], EmailLogOptions.prototype, "excludeApps", void 0);
121
+ __decorate([
122
+ (0, decorators_1.StringFieldOptional)({
123
+ each: true,
124
+ fieldLabel: { zh: '包含错误类型', en: 'Include Errors' },
125
+ }),
126
+ __metadata("design:type", Array)
127
+ ], EmailLogOptions.prototype, "includeErrors", void 0);
128
+ __decorate([
129
+ (0, decorators_1.StringFieldOptional)({
130
+ each: true,
131
+ fieldLabel: { zh: '排除错误类型', en: 'Exclude Errors' },
132
+ }),
133
+ __metadata("design:type", Array)
134
+ ], EmailLogOptions.prototype, "excludeErrors", void 0);
@@ -0,0 +1,20 @@
1
+ import { LogDescriptor } from 'pino';
2
+ /**
3
+ * Email log transport contract
4
+ * Defines the interface for Pino email transport
5
+ */
6
+ export interface IEmailLogTransport {
7
+ /**
8
+ * Write log entry to email transport
9
+ * Implements Writable stream interface for Pino
10
+ */
11
+ write(data: LogDescriptor): void;
12
+ /**
13
+ * Flush any pending emails
14
+ */
15
+ flush?(): Promise<void>;
16
+ /**
17
+ * Check if transport is enabled for given log level
18
+ */
19
+ shouldSend(level: string): boolean;
20
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ export * from './email-log-options.interface';
2
+ export * from './email-log-transport.interface';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./email-log-options.interface"), exports);
18
+ __exportStar(require("./email-log-transport.interface"), exports);
@@ -0,0 +1,42 @@
1
+ interface EmailLogProviderOptions {
2
+ smtpHost: string;
3
+ smtpPort?: number;
4
+ smtpUsername?: string;
5
+ smtpPassword?: string;
6
+ smtpSecure?: boolean;
7
+ smtpIgnoreTLSError?: boolean;
8
+ }
9
+ /**
10
+ * Email provider for log alerts
11
+ * Wraps nodemailer for SMTP email sending
12
+ */
13
+ export declare class EmailLogProvider {
14
+ private readonly options;
15
+ private readonly logger;
16
+ private transporter;
17
+ constructor(options: EmailLogProviderOptions);
18
+ /**
19
+ * Initialize nodemailer transporter
20
+ */
21
+ private initializeTransporter;
22
+ /**
23
+ * Verify SMTP connection (useful for health checks)
24
+ */
25
+ verifyConnection(): Promise<boolean>;
26
+ /**
27
+ * Send log email
28
+ */
29
+ sendLogEmail(params: {
30
+ to: string[];
31
+ cc?: string[];
32
+ from: string;
33
+ subject: string;
34
+ html?: string;
35
+ text?: string;
36
+ }): Promise<void>;
37
+ /**
38
+ * Close the transporter connection
39
+ */
40
+ close(): Promise<void>;
41
+ }
42
+ export {};
@@ -0,0 +1,127 @@
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
+ var EmailLogProvider_1;
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.EmailLogProvider = void 0;
23
+ const common_1 = require("@nestjs/common");
24
+ const nodemailer = require("nodemailer");
25
+ /**
26
+ * Email provider for log alerts
27
+ * Wraps nodemailer for SMTP email sending
28
+ */
29
+ let EmailLogProvider = EmailLogProvider_1 = class EmailLogProvider {
30
+ constructor(options) {
31
+ this.options = options;
32
+ this.logger = new common_1.Logger(EmailLogProvider_1.name);
33
+ this.transporter = null;
34
+ this.initializeTransporter();
35
+ }
36
+ /**
37
+ * Initialize nodemailer transporter
38
+ */
39
+ initializeTransporter() {
40
+ const config = {
41
+ host: this.options.smtpHost,
42
+ port: this.options.smtpPort || 587,
43
+ secure: this.options.smtpSecure || false,
44
+ tls: {
45
+ rejectUnauthorized: this.options.smtpIgnoreTLSError !== undefined
46
+ ? !this.options.smtpIgnoreTLSError
47
+ : true,
48
+ },
49
+ };
50
+ if (this.options.smtpUsername || this.options.smtpPassword) {
51
+ config.auth = {
52
+ user: this.options.smtpUsername,
53
+ pass: this.options.smtpPassword,
54
+ };
55
+ }
56
+ this.transporter = nodemailer.createTransport(config);
57
+ this.logger.log(`Email transporter initialized: ${this.options.smtpHost}:${this.options.smtpPort || 587}`);
58
+ }
59
+ /**
60
+ * Verify SMTP connection (useful for health checks)
61
+ */
62
+ verifyConnection() {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ if (!this.transporter) {
65
+ return false;
66
+ }
67
+ try {
68
+ yield this.transporter.verify();
69
+ this.logger.debug('SMTP connection verified successfully');
70
+ return true;
71
+ }
72
+ catch (error) {
73
+ this.logger.error(`SMTP connection verification failed: ${error.message}`);
74
+ return false;
75
+ }
76
+ });
77
+ }
78
+ /**
79
+ * Send log email
80
+ */
81
+ sendLogEmail(params) {
82
+ return __awaiter(this, void 0, void 0, function* () {
83
+ if (!this.transporter) {
84
+ throw new Error('Email transporter not initialized');
85
+ }
86
+ try {
87
+ const mailOptions = {
88
+ from: params.from,
89
+ to: params.to.join(', '),
90
+ subject: params.subject,
91
+ };
92
+ if (params.cc && params.cc.length > 0) {
93
+ mailOptions.cc = params.cc.join(', ');
94
+ }
95
+ if (params.html) {
96
+ mailOptions.html = params.html;
97
+ }
98
+ else if (params.text) {
99
+ mailOptions.text = params.text;
100
+ }
101
+ const info = yield this.transporter.sendMail(mailOptions);
102
+ this.logger.debug(`Log email sent to ${params.to.join(', ')} - Message ID: ${info.messageId}`);
103
+ }
104
+ catch (error) {
105
+ this.logger.error(`Failed to send log email: ${error.message}`, error.stack);
106
+ throw error;
107
+ }
108
+ });
109
+ }
110
+ /**
111
+ * Close the transporter connection
112
+ */
113
+ close() {
114
+ return __awaiter(this, void 0, void 0, function* () {
115
+ if (this.transporter) {
116
+ this.transporter.close();
117
+ this.transporter = null;
118
+ this.logger.debug('Email transporter closed');
119
+ }
120
+ });
121
+ }
122
+ };
123
+ exports.EmailLogProvider = EmailLogProvider;
124
+ exports.EmailLogProvider = EmailLogProvider = EmailLogProvider_1 = __decorate([
125
+ (0, common_1.Injectable)(),
126
+ __metadata("design:paramtypes", [Object])
127
+ ], EmailLogProvider);
@@ -0,0 +1 @@
1
+ export * from './email-provider';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./email-provider"), exports);
@@ -0,0 +1,46 @@
1
+ import type { EmailLogOptions } from '../interfaces';
2
+ import { EmailLogRateLimiterService } from './email-log-rate-limiter.service';
3
+ import { EmailLogFormatterService } from './email-log-formatter.service';
4
+ /**
5
+ * Email log alert service
6
+ * Sends email notifications for critical log entries
7
+ *
8
+ * This service can be used directly to send email alerts
9
+ * without requiring Pino transport integration
10
+ *
11
+ * Note: Manual email alerts don't include HTTP context.
12
+ * For HTTP context, use Pino logger which automatically includes it via customProps.
13
+ */
14
+ export declare class EmailLogAlertService {
15
+ private readonly options;
16
+ private readonly rateLimiter;
17
+ private readonly formatter;
18
+ private readonly logger;
19
+ private readonly appName;
20
+ private emailProvider;
21
+ constructor(options: EmailLogOptions, rateLimiter: EmailLogRateLimiterService, formatter: EmailLogFormatterService);
22
+ /**
23
+ * Send a log alert via email
24
+ * @param level Log level (error, fatal, etc.)
25
+ * @param message Log message
26
+ * @param error Optional error object
27
+ * @param context Optional additional context
28
+ */
29
+ sendAlert(level: string, message: string, error?: Error, context?: Record<string, any>): Promise<void>;
30
+ /**
31
+ * Send error alert
32
+ */
33
+ error(message: string, error?: Error, context?: Record<string, any>): Promise<void>;
34
+ /**
35
+ * Send fatal alert
36
+ */
37
+ fatal(message: string, error?: Error, context?: Record<string, any>): Promise<void>;
38
+ /**
39
+ * Format and send email
40
+ */
41
+ private sendEmail;
42
+ /**
43
+ * Cleanup on module destroy
44
+ */
45
+ onModuleDestroy(): Promise<void>;
46
+ }
@@ -0,0 +1,162 @@
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 EmailLogAlertService_1;
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.EmailLogAlertService = void 0;
26
+ const common_1 = require("@nestjs/common");
27
+ const email_log_constants_1 = require("../email-log.constants");
28
+ const email_log_rate_limiter_service_1 = require("./email-log-rate-limiter.service");
29
+ const email_log_formatter_service_1 = require("./email-log-formatter.service");
30
+ const email_provider_1 = require("../providers/email-provider");
31
+ const log_level_helper_1 = require("../utils/log-level.helper");
32
+ /**
33
+ * Email log alert service
34
+ * Sends email notifications for critical log entries
35
+ *
36
+ * This service can be used directly to send email alerts
37
+ * without requiring Pino transport integration
38
+ *
39
+ * Note: Manual email alerts don't include HTTP context.
40
+ * For HTTP context, use Pino logger which automatically includes it via customProps.
41
+ */
42
+ let EmailLogAlertService = EmailLogAlertService_1 = class EmailLogAlertService {
43
+ constructor(options, rateLimiter, formatter) {
44
+ this.options = options;
45
+ this.rateLimiter = rateLimiter;
46
+ this.formatter = formatter;
47
+ this.logger = new common_1.Logger(EmailLogAlertService_1.name);
48
+ this.appName = process.env.NAME || process.env.APP_NAME || 'omni-app';
49
+ this.emailProvider = new email_provider_1.EmailLogProvider({
50
+ smtpHost: options.smtpHost,
51
+ smtpPort: options.smtpPort || 587,
52
+ smtpUsername: options.smtpUsername,
53
+ smtpPassword: options.smtpPassword,
54
+ smtpSecure: options.smtpSecure || false,
55
+ smtpIgnoreTLSError: options.smtpIgnoreTLSError || false,
56
+ });
57
+ }
58
+ /**
59
+ * Send a log alert via email
60
+ * @param level Log level (error, fatal, etc.)
61
+ * @param message Log message
62
+ * @param error Optional error object
63
+ * @param context Optional additional context
64
+ */
65
+ sendAlert(level, message, error, context) {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ // Check if enabled
68
+ if (!this.options.enabled) {
69
+ return;
70
+ }
71
+ // Check log level threshold
72
+ const levelValue = (0, log_level_helper_1.getLevelValue)(level);
73
+ const thresholdValue = (0, log_level_helper_1.getLevelValue)(this.options.level);
74
+ if (levelValue < thresholdValue) {
75
+ return;
76
+ }
77
+ // Check rate limiting
78
+ const rateLimitKey = `email-log:${this.appName}:${level}`;
79
+ if (!this.rateLimiter.canSend(rateLimitKey)) {
80
+ this.logger.debug(`Rate limited email for log: ${message}`);
81
+ return;
82
+ }
83
+ // Create log entry
84
+ const logEntry = {
85
+ level,
86
+ message,
87
+ timestamp: Date.now(),
88
+ };
89
+ if (error) {
90
+ logEntry.error = error;
91
+ }
92
+ if (context) {
93
+ logEntry.context = context;
94
+ }
95
+ // Send email
96
+ yield this.sendEmail(logEntry);
97
+ });
98
+ }
99
+ /**
100
+ * Send error alert
101
+ */
102
+ error(message, error, context) {
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ return this.sendAlert('error', message, error, context);
105
+ });
106
+ }
107
+ /**
108
+ * Send fatal alert
109
+ */
110
+ fatal(message, error, context) {
111
+ return __awaiter(this, void 0, void 0, function* () {
112
+ return this.sendAlert('fatal', message, error, context);
113
+ });
114
+ }
115
+ /**
116
+ * Format and send email
117
+ */
118
+ sendEmail(logEntry) {
119
+ return __awaiter(this, void 0, void 0, function* () {
120
+ const subjectPrefix = this.options.subjectPrefix || '[Log Alert]';
121
+ // Convert log entry to Pino format for formatter
122
+ const pinoLog = Object.assign(Object.assign({ level: (0, log_level_helper_1.getLevelValue)(logEntry.level), time: logEntry.timestamp || Date.now(), msg: logEntry.message }, (logEntry.error
123
+ ? {
124
+ err: {
125
+ type: logEntry.error.name,
126
+ message: logEntry.error.message,
127
+ stack: logEntry.error.stack,
128
+ },
129
+ }
130
+ : {})), (logEntry.context || {}));
131
+ const emailContent = this.options.useHtmlFormat
132
+ ? this.formatter.formatHtml(pinoLog, this.appName, subjectPrefix)
133
+ : this.formatter.formatText(pinoLog, this.appName, subjectPrefix);
134
+ yield this.emailProvider.sendLogEmail({
135
+ to: this.options.to,
136
+ cc: this.options.cc,
137
+ from: this.options.from,
138
+ subject: emailContent.subject,
139
+ html: 'html' in emailContent ? emailContent.html : undefined,
140
+ text: 'text' in emailContent ? emailContent.text : undefined,
141
+ });
142
+ this.logger.debug(`Log email sent for ${this.appName}: ${logEntry.message}`);
143
+ });
144
+ }
145
+ /**
146
+ * Cleanup on module destroy
147
+ */
148
+ onModuleDestroy() {
149
+ return __awaiter(this, void 0, void 0, function* () {
150
+ yield this.emailProvider.close();
151
+ });
152
+ }
153
+ };
154
+ exports.EmailLogAlertService = EmailLogAlertService;
155
+ exports.EmailLogAlertService = EmailLogAlertService = EmailLogAlertService_1 = __decorate([
156
+ (0, common_1.Injectable)(),
157
+ __param(0, (0, common_1.Inject)(email_log_constants_1.EMAIL_LOG_OPTIONS)),
158
+ __param(1, (0, common_1.Inject)(email_log_constants_1.EMAIL_LOG_RATE_LIMITER)),
159
+ __param(2, (0, common_1.Inject)(email_log_constants_1.EMAIL_LOG_FORMATTER)),
160
+ __metadata("design:paramtypes", [Function, email_log_rate_limiter_service_1.EmailLogRateLimiterService,
161
+ email_log_formatter_service_1.EmailLogFormatterService])
162
+ ], EmailLogAlertService);