@bgord/bun 1.9.0 → 1.9.2

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 (546) hide show
  1. package/dist/basic-auth-password.vo.d.ts +1 -1
  2. package/dist/basic-auth-password.vo.d.ts.map +1 -1
  3. package/dist/basic-auth-password.vo.js +1 -1
  4. package/dist/basic-auth-password.vo.js.map +1 -1
  5. package/dist/basic-auth-username.vo.d.ts +1 -1
  6. package/dist/basic-auth-username.vo.d.ts.map +1 -1
  7. package/dist/basic-auth-username.vo.js +1 -1
  8. package/dist/basic-auth-username.vo.js.map +1 -1
  9. package/dist/binary.vo.d.ts +1 -1
  10. package/dist/binary.vo.d.ts.map +1 -1
  11. package/dist/binary.vo.js +1 -1
  12. package/dist/binary.vo.js.map +1 -1
  13. package/dist/cache-subject-segment-env.strategy.d.ts +3 -3
  14. package/dist/client-ip.vo.d.ts +1 -1
  15. package/dist/client-ip.vo.d.ts.map +1 -1
  16. package/dist/client-ip.vo.js +1 -1
  17. package/dist/client-ip.vo.js.map +1 -1
  18. package/dist/client-user-agent.vo.d.ts +1 -1
  19. package/dist/client-user-agent.vo.d.ts.map +1 -1
  20. package/dist/client-user-agent.vo.js +1 -1
  21. package/dist/client-user-agent.vo.js.map +1 -1
  22. package/dist/command.types.d.ts +1 -1
  23. package/dist/command.types.d.ts.map +1 -1
  24. package/dist/commit-sha-value.vo.d.ts +1 -1
  25. package/dist/commit-sha-value.vo.d.ts.map +1 -1
  26. package/dist/commit-sha-value.vo.js +1 -1
  27. package/dist/commit-sha-value.vo.js.map +1 -1
  28. package/dist/correlation-id.vo.d.ts +1 -1
  29. package/dist/correlation-id.vo.d.ts.map +1 -1
  30. package/dist/dispatching-event-store.d.ts +1 -1
  31. package/dist/dispatching-event-store.d.ts.map +1 -1
  32. package/dist/encryption-key-value.vo.d.ts +1 -1
  33. package/dist/encryption-key-value.vo.d.ts.map +1 -1
  34. package/dist/encryption-key-value.vo.js +1 -1
  35. package/dist/encryption-key-value.vo.js.map +1 -1
  36. package/dist/environment-loader-encrypted.adapter.d.ts +4 -4
  37. package/dist/environment-loader-encrypted.adapter.d.ts.map +1 -1
  38. package/dist/environment-loader-noop.adapter.d.ts +3 -3
  39. package/dist/environment-loader-noop.adapter.d.ts.map +1 -1
  40. package/dist/environment-loader-process-safe.adapter.d.ts +4 -4
  41. package/dist/environment-loader-process-safe.adapter.d.ts.map +1 -1
  42. package/dist/environment-loader-process.adapter.d.ts +4 -4
  43. package/dist/environment-loader-process.adapter.d.ts.map +1 -1
  44. package/dist/environment-loader.port.d.ts +3 -3
  45. package/dist/environment-loader.port.d.ts.map +1 -1
  46. package/dist/event-envelope.d.ts +1 -1
  47. package/dist/event-envelope.d.ts.map +1 -1
  48. package/dist/event-envelope.js +1 -1
  49. package/dist/event-envelope.js.map +1 -1
  50. package/dist/event-handler-bare.strategy.d.ts +1 -1
  51. package/dist/event-handler-bare.strategy.d.ts.map +1 -1
  52. package/dist/event-handler-noop.strategy.d.ts +1 -1
  53. package/dist/event-handler-noop.strategy.d.ts.map +1 -1
  54. package/dist/event-handler-with-logger.strategy.d.ts +1 -1
  55. package/dist/event-handler-with-logger.strategy.d.ts.map +1 -1
  56. package/dist/event-handler.strategy.d.ts +1 -1
  57. package/dist/event-handler.strategy.d.ts.map +1 -1
  58. package/dist/event-store.d.ts +1 -1
  59. package/dist/event-store.d.ts.map +1 -1
  60. package/dist/event-stream.vo.d.ts +1 -1
  61. package/dist/event-stream.vo.d.ts.map +1 -1
  62. package/dist/event-stream.vo.js +1 -1
  63. package/dist/event-stream.vo.js.map +1 -1
  64. package/dist/event.types.d.ts +1 -1
  65. package/dist/event.types.d.ts.map +1 -1
  66. package/dist/hash-value.vo.d.ts +1 -1
  67. package/dist/hash-value.vo.d.ts.map +1 -1
  68. package/dist/hash-value.vo.js +1 -1
  69. package/dist/hash-value.vo.js.map +1 -1
  70. package/dist/hcaptcha-secret-key.vo.d.ts +1 -1
  71. package/dist/hcaptcha-secret-key.vo.d.ts.map +1 -1
  72. package/dist/hcaptcha-secret-key.vo.js +1 -1
  73. package/dist/hcaptcha-secret-key.vo.js.map +1 -1
  74. package/dist/hcaptcha-site-key.vo.d.ts +1 -1
  75. package/dist/hcaptcha-site-key.vo.d.ts.map +1 -1
  76. package/dist/hcaptcha-site-key.vo.js +1 -1
  77. package/dist/hcaptcha-site-key.vo.js.map +1 -1
  78. package/dist/healthcheck.service.d.ts +3 -3
  79. package/dist/logger-winston-local.adapter.d.ts.map +1 -1
  80. package/dist/logger-winston-local.adapter.js +2 -1
  81. package/dist/logger-winston-local.adapter.js.map +1 -1
  82. package/dist/logger-winston-production.adapter.d.ts.map +1 -1
  83. package/dist/logger-winston-production.adapter.js +3 -2
  84. package/dist/logger-winston-production.adapter.js.map +1 -1
  85. package/dist/logger-winston.adapter.d.ts +2 -2
  86. package/dist/logger.port.d.ts +3 -3
  87. package/dist/logger.port.d.ts.map +1 -1
  88. package/dist/logger.port.js +1 -1
  89. package/dist/logger.port.js.map +1 -1
  90. package/dist/mailer-content-html.vo.d.ts +1 -1
  91. package/dist/mailer-content-html.vo.d.ts.map +1 -1
  92. package/dist/mailer-content-html.vo.js +1 -1
  93. package/dist/mailer-content-html.vo.js.map +1 -1
  94. package/dist/mailer-subject.vo.d.ts +1 -1
  95. package/dist/mailer-subject.vo.d.ts.map +1 -1
  96. package/dist/mailer-subject.vo.js +1 -1
  97. package/dist/mailer-subject.vo.js.map +1 -1
  98. package/dist/modules/history/events/HISTORY_CLEARED_EVENT.d.ts +1 -1
  99. package/dist/modules/history/events/HISTORY_CLEARED_EVENT.d.ts.map +1 -1
  100. package/dist/modules/history/events/HISTORY_CLEARED_EVENT.js +1 -1
  101. package/dist/modules/history/events/HISTORY_CLEARED_EVENT.js.map +1 -1
  102. package/dist/modules/history/events/HISTORY_POPULATED_EVENT.d.ts +1 -1
  103. package/dist/modules/history/events/HISTORY_POPULATED_EVENT.d.ts.map +1 -1
  104. package/dist/modules/history/events/HISTORY_POPULATED_EVENT.js +1 -1
  105. package/dist/modules/history/events/HISTORY_POPULATED_EVENT.js.map +1 -1
  106. package/dist/modules/history/value-objects/history-created-at.d.ts +1 -1
  107. package/dist/modules/history/value-objects/history-created-at.d.ts.map +1 -1
  108. package/dist/modules/history/value-objects/history-operation.d.ts +1 -1
  109. package/dist/modules/history/value-objects/history-operation.d.ts.map +1 -1
  110. package/dist/modules/history/value-objects/history-operation.js +1 -1
  111. package/dist/modules/history/value-objects/history-operation.js.map +1 -1
  112. package/dist/modules/history/value-objects/history-payload.d.ts +1 -1
  113. package/dist/modules/history/value-objects/history-payload.d.ts.map +1 -1
  114. package/dist/modules/history/value-objects/history-payload.js +1 -1
  115. package/dist/modules/history/value-objects/history-payload.js.map +1 -1
  116. package/dist/modules/history/value-objects/history-subject.d.ts +1 -1
  117. package/dist/modules/history/value-objects/history-subject.d.ts.map +1 -1
  118. package/dist/modules/history/value-objects/history-subject.js +1 -1
  119. package/dist/modules/history/value-objects/history-subject.js.map +1 -1
  120. package/dist/modules/history/value-objects/history.d.ts +1 -1
  121. package/dist/modules/history/value-objects/history.d.ts.map +1 -1
  122. package/dist/modules/history/value-objects/history.js +1 -1
  123. package/dist/modules/history/value-objects/history.js.map +1 -1
  124. package/dist/modules/preferences/commands/SET_USER_LANGUAGE_COMMAND.d.ts +1 -1
  125. package/dist/modules/preferences/commands/SET_USER_LANGUAGE_COMMAND.d.ts.map +1 -1
  126. package/dist/modules/preferences/commands/SET_USER_LANGUAGE_COMMAND.js +1 -1
  127. package/dist/modules/preferences/commands/SET_USER_LANGUAGE_COMMAND.js.map +1 -1
  128. package/dist/modules/preferences/events/USER_LANGUAGE_SET_EVENT.d.ts +1 -1
  129. package/dist/modules/preferences/events/USER_LANGUAGE_SET_EVENT.d.ts.map +1 -1
  130. package/dist/modules/preferences/events/USER_LANGUAGE_SET_EVENT.js +1 -1
  131. package/dist/modules/preferences/events/USER_LANGUAGE_SET_EVENT.js.map +1 -1
  132. package/dist/modules/system/events/HOUR_HAS_PASSED_EVENT.d.ts +1 -1
  133. package/dist/modules/system/events/HOUR_HAS_PASSED_EVENT.d.ts.map +1 -1
  134. package/dist/modules/system/events/HOUR_HAS_PASSED_EVENT.js +1 -1
  135. package/dist/modules/system/events/HOUR_HAS_PASSED_EVENT.js.map +1 -1
  136. package/dist/modules/system/events/MINUTE_HAS_PASSED_EVENT.d.ts +1 -1
  137. package/dist/modules/system/events/MINUTE_HAS_PASSED_EVENT.d.ts.map +1 -1
  138. package/dist/modules/system/events/MINUTE_HAS_PASSED_EVENT.js +1 -1
  139. package/dist/modules/system/events/MINUTE_HAS_PASSED_EVENT.js.map +1 -1
  140. package/dist/modules/system/events/SECURITY_VIOLATION_DETECTED_EVENT.d.ts +1 -1
  141. package/dist/modules/system/events/SECURITY_VIOLATION_DETECTED_EVENT.d.ts.map +1 -1
  142. package/dist/modules/system/events/SECURITY_VIOLATION_DETECTED_EVENT.js +1 -1
  143. package/dist/modules/system/events/SECURITY_VIOLATION_DETECTED_EVENT.js.map +1 -1
  144. package/dist/node-env.vo.d.ts +11 -9
  145. package/dist/node-env.vo.d.ts.map +1 -1
  146. package/dist/node-env.vo.js +10 -3
  147. package/dist/node-env.vo.js.map +1 -1
  148. package/dist/nonce-value.vo.d.ts +1 -1
  149. package/dist/nonce-value.vo.d.ts.map +1 -1
  150. package/dist/nonce-value.vo.js +1 -1
  151. package/dist/nonce-value.vo.js.map +1 -1
  152. package/dist/port.vo.d.ts +1 -1
  153. package/dist/port.vo.d.ts.map +1 -1
  154. package/dist/port.vo.js +1 -1
  155. package/dist/port.vo.js.map +1 -1
  156. package/dist/prerequisite-verifier-timezone-utc.adapter.d.ts +1 -1
  157. package/dist/prerequisite-verifier-timezone-utc.adapter.d.ts.map +1 -1
  158. package/dist/prerequisite-verifier-timezone-utc.adapter.js +1 -1
  159. package/dist/prerequisite-verifier-timezone-utc.adapter.js.map +1 -1
  160. package/dist/recaptcha-secret-key.vo.d.ts +1 -1
  161. package/dist/recaptcha-secret-key.vo.d.ts.map +1 -1
  162. package/dist/recaptcha-secret-key.vo.js +1 -1
  163. package/dist/recaptcha-secret-key.vo.js.map +1 -1
  164. package/dist/recaptcha-site-key.vo.d.ts +1 -1
  165. package/dist/recaptcha-site-key.vo.d.ts.map +1 -1
  166. package/dist/recaptcha-site-key.vo.js +1 -1
  167. package/dist/recaptcha-site-key.vo.js.map +1 -1
  168. package/dist/security-countermeasure-name.vo.d.ts +1 -1
  169. package/dist/security-countermeasure-name.vo.d.ts.map +1 -1
  170. package/dist/security-countermeasure-name.vo.js +1 -1
  171. package/dist/security-countermeasure-name.vo.js.map +1 -1
  172. package/dist/security-rule-name.vo.d.ts +1 -1
  173. package/dist/security-rule-name.vo.d.ts.map +1 -1
  174. package/dist/security-rule-name.vo.js +1 -1
  175. package/dist/security-rule-name.vo.js.map +1 -1
  176. package/dist/smtp-host.vo.d.ts +1 -1
  177. package/dist/smtp-host.vo.d.ts.map +1 -1
  178. package/dist/smtp-host.vo.js +1 -1
  179. package/dist/smtp-host.vo.js.map +1 -1
  180. package/dist/smtp-pass.vo.d.ts +1 -1
  181. package/dist/smtp-pass.vo.d.ts.map +1 -1
  182. package/dist/smtp-pass.vo.js +1 -1
  183. package/dist/smtp-pass.vo.js.map +1 -1
  184. package/dist/smtp-port.vo.d.ts +1 -1
  185. package/dist/smtp-port.vo.d.ts.map +1 -1
  186. package/dist/smtp-user.vo.d.ts +1 -1
  187. package/dist/smtp-user.vo.d.ts.map +1 -1
  188. package/dist/smtp-user.vo.js +1 -1
  189. package/dist/smtp-user.vo.js.map +1 -1
  190. package/dist/tsconfig.tsbuildinfo +1 -1
  191. package/dist/uuid.vo.d.ts +1 -1
  192. package/dist/uuid.vo.d.ts.map +1 -1
  193. package/dist/uuid.vo.js +1 -1
  194. package/dist/uuid.vo.js.map +1 -1
  195. package/package.json +4 -3
  196. package/src/antivirus-clamav.adapter.ts +34 -0
  197. package/src/antivirus-noop.adapter.ts +8 -0
  198. package/src/antivirus.port.ts +9 -0
  199. package/src/api-version.middleware.ts +31 -0
  200. package/src/basic-auth-password.vo.ts +17 -0
  201. package/src/basic-auth-username.vo.ts +17 -0
  202. package/src/basic-auth.service.ts +14 -0
  203. package/src/better-auth-logger.service.ts +45 -0
  204. package/src/binary.vo.ts +22 -0
  205. package/src/bots.vo.ts +132 -0
  206. package/src/build-info-repository-file.strategy.ts +23 -0
  207. package/src/build-info-repository-noop.strategy.ts +16 -0
  208. package/src/build-info-repository-package-json.strategy.ts +25 -0
  209. package/src/build-info-repository.strategy.ts +13 -0
  210. package/src/cache-file.service.ts +37 -0
  211. package/src/cache-repository-lru-cache.adapter.ts +58 -0
  212. package/src/cache-repository-node-cache.adapter.ts +32 -0
  213. package/src/cache-repository-noop.adapter.ts +15 -0
  214. package/src/cache-repository.port.ts +11 -0
  215. package/src/cache-resolver-simple.strategy.ts +33 -0
  216. package/src/cache-resolver.strategy.ts +17 -0
  217. package/src/cache-response.middleware.ts +51 -0
  218. package/src/cache-subject-application-resolver.vo.ts +34 -0
  219. package/src/cache-subject-request-resolver.vo.ts +37 -0
  220. package/src/cache-subject-segment-application.strategy.ts +7 -0
  221. package/src/cache-subject-segment-build.strategy.ts +14 -0
  222. package/src/cache-subject-segment-cookie.strategy.ts +14 -0
  223. package/src/cache-subject-segment-env.strategy.ts +10 -0
  224. package/src/cache-subject-segment-fixed.strategy.ts +12 -0
  225. package/src/cache-subject-segment-header.strategy.ts +13 -0
  226. package/src/cache-subject-segment-ip.strategy.ts +9 -0
  227. package/src/cache-subject-segment-path.strategy.ts +8 -0
  228. package/src/cache-subject-segment-query.strategy.ts +18 -0
  229. package/src/cache-subject-segment-request.strategy.ts +9 -0
  230. package/src/cache-subject-segment-user.strategy.ts +8 -0
  231. package/src/certificate-inspector-noop.adapter.ts +10 -0
  232. package/src/certificate-inspector-tls.adapter.ts +42 -0
  233. package/src/certificate-inspector.port.ts +7 -0
  234. package/src/checksum.service.ts +12 -0
  235. package/src/client-from-hono.adapter.ts +20 -0
  236. package/src/client-ip.vo.ts +17 -0
  237. package/src/client-user-agent.vo.ts +17 -0
  238. package/src/client.vo.ts +52 -0
  239. package/src/clock-fixed.adapter.ts +14 -0
  240. package/src/clock-offset.adapter.ts +15 -0
  241. package/src/clock-system.adapter.ts +8 -0
  242. package/src/clock.port.ts +5 -0
  243. package/src/command-envelope.ts +16 -0
  244. package/src/command-logger.service.ts +23 -0
  245. package/src/command.types.ts +13 -0
  246. package/src/commit-sha-value.vo.ts +18 -0
  247. package/src/commit-sha.vo.ts +29 -0
  248. package/src/context.middleware.ts +24 -0
  249. package/src/correlation-id.vo.ts +6 -0
  250. package/src/correlation-storage.service.ts +31 -0
  251. package/src/crypto-aes-gcm.service.ts +37 -0
  252. package/src/crypto-key-provider-file.adapter.ts +29 -0
  253. package/src/crypto-key-provider-memory.adapter.ts +17 -0
  254. package/src/crypto-key-provider-noop.adapter.ts +9 -0
  255. package/src/crypto-key-provider-with-cache.adapter.ts +28 -0
  256. package/src/crypto-key-provider.port.ts +3 -0
  257. package/src/csv-stringifier.adapter.ts +8 -0
  258. package/src/csv-stringifier.port.ts +8 -0
  259. package/src/disk-space-checker-bun.adapter.ts +18 -0
  260. package/src/disk-space-checker-noop.adapter.ts +10 -0
  261. package/src/disk-space-checker.port.ts +5 -0
  262. package/src/dispatching-event-store.ts +36 -0
  263. package/src/encryption-aes-gcm.adapter.ts +57 -0
  264. package/src/encryption-iv.vo.ts +9 -0
  265. package/src/encryption-key-value.vo.ts +18 -0
  266. package/src/encryption-key.vo.ts +41 -0
  267. package/src/encryption-noop.adapter.ts +18 -0
  268. package/src/encryption.port.ts +12 -0
  269. package/src/environment-file-parser.service.ts +35 -0
  270. package/src/environment-loader-encrypted.adapter.ts +31 -0
  271. package/src/environment-loader-noop.adapter.ts +16 -0
  272. package/src/environment-loader-process-safe.adapter.ts +35 -0
  273. package/src/environment-loader-process.adapter.ts +16 -0
  274. package/src/environment-loader.port.ts +8 -0
  275. package/src/etag-extractor.middleware.ts +18 -0
  276. package/src/event-bus-like.types.ts +10 -0
  277. package/src/event-envelope.ts +27 -0
  278. package/src/event-handler-bare.strategy.ts +9 -0
  279. package/src/event-handler-noop.strategy.ts +9 -0
  280. package/src/event-handler-with-logger.strategy.ts +31 -0
  281. package/src/event-handler.strategy.ts +8 -0
  282. package/src/event-logger.service.ts +23 -0
  283. package/src/event-loop-lag.service.ts +32 -0
  284. package/src/event-loop-utilization.service.ts +21 -0
  285. package/src/event-publisher.types.ts +3 -0
  286. package/src/event-store-like.types.ts +3 -0
  287. package/src/event-store.ts +64 -0
  288. package/src/event-stream.vo.ts +14 -0
  289. package/src/event.types.ts +16 -0
  290. package/src/file-cleaner-bun-forgiving.adapter.ts +10 -0
  291. package/src/file-cleaner-bun.adapter.ts +8 -0
  292. package/src/file-cleaner-noop.adapter.ts +6 -0
  293. package/src/file-cleaner.port.ts +5 -0
  294. package/src/file-draft-zip.service.ts +34 -0
  295. package/src/file-draft.service.ts +33 -0
  296. package/src/file-reader-json-bun-forgiving.adapter.ts +14 -0
  297. package/src/file-reader-json-bun.adapter.ts +10 -0
  298. package/src/file-reader-json-noop.adapter.ts +12 -0
  299. package/src/file-reader-json-with-cache.adapter.ts +34 -0
  300. package/src/file-reader-json.port.ts +7 -0
  301. package/src/file-renamer-fs-forgiving.adapter.ts +17 -0
  302. package/src/file-renamer-fs.adapter.ts +15 -0
  303. package/src/file-renamer-noop.adapter.ts +9 -0
  304. package/src/file-renamer.port.ts +8 -0
  305. package/src/file-uploader.middleware.ts +39 -0
  306. package/src/graceful-shutdown.service.ts +68 -0
  307. package/src/gzip-bun.adapter.ts +12 -0
  308. package/src/gzip-noop.adapter.ts +7 -0
  309. package/src/gzip-stream.adapter.ts +19 -0
  310. package/src/gzip.port.ts +10 -0
  311. package/src/hash-content-noop.strategy.ts +8 -0
  312. package/src/hash-content-sha256-bun.strategy.ts +11 -0
  313. package/src/hash-content.strategy.ts +5 -0
  314. package/src/hash-file-noop.adapter.ts +14 -0
  315. package/src/hash-file-sha256-bun.adapter.ts +23 -0
  316. package/src/hash-file.port.ts +13 -0
  317. package/src/hash-value.vo.ts +15 -0
  318. package/src/hash.vo.ts +29 -0
  319. package/src/hcaptcha-secret-key.vo.ts +15 -0
  320. package/src/hcaptcha-site-key.vo.ts +12 -0
  321. package/src/healthcheck.service.ts +138 -0
  322. package/src/http-logger.middleware.ts +100 -0
  323. package/src/i18n.service.ts +62 -0
  324. package/src/id-provider-crypto.adapter.ts +8 -0
  325. package/src/id-provider-deterministic.adapter.ts +21 -0
  326. package/src/id-provider.port.ts +5 -0
  327. package/src/image-alpha-noop.adapter.ts +7 -0
  328. package/src/image-alpha-sharp.adapter.ts +38 -0
  329. package/src/image-alpha.port.ts +19 -0
  330. package/src/image-blur-noop.adapter.ts +7 -0
  331. package/src/image-blur-sharp.adapter.ts +33 -0
  332. package/src/image-blur.port.ts +18 -0
  333. package/src/image-compressor-noop.adapter.ts +7 -0
  334. package/src/image-compressor-sharp.adapter.ts +36 -0
  335. package/src/image-compressor.port.ts +18 -0
  336. package/src/image-exif-clear-noop.adapter.ts +7 -0
  337. package/src/image-exif-clear-sharp.adapter.ts +30 -0
  338. package/src/image-exif-clear.port.ts +16 -0
  339. package/src/image-formatter-noop.adapter.ts +10 -0
  340. package/src/image-formatter-sharp.adapter.ts +40 -0
  341. package/src/image-formatter.port.ts +17 -0
  342. package/src/image-info-noop.adapter.ts +15 -0
  343. package/src/image-info-sharp.adapter.ts +27 -0
  344. package/src/image-info.port.ts +12 -0
  345. package/src/image-processor-noop.adapter.ts +10 -0
  346. package/src/image-processor-sharp.adapter.ts +60 -0
  347. package/src/image-processor.port.ts +25 -0
  348. package/src/image-resizer-noop.adapter.ts +7 -0
  349. package/src/image-resizer-sharp.adapter.ts +41 -0
  350. package/src/image-resizer.port.ts +18 -0
  351. package/src/in-flight-requests-tracker.service.ts +22 -0
  352. package/src/in-flight-requests.middleware.ts +15 -0
  353. package/src/index.ts +307 -0
  354. package/src/instrumentation.service.ts +39 -0
  355. package/src/invariant-error-handler.service.ts +22 -0
  356. package/src/invariant.service.ts +27 -0
  357. package/src/job-handler-bare.strategy.ts +15 -0
  358. package/src/job-handler-noop.strategy.ts +9 -0
  359. package/src/job-handler-with-logger.strategy.ts +44 -0
  360. package/src/job-handler.strategy.ts +10 -0
  361. package/src/jobs.service.ts +16 -0
  362. package/src/logger-format-error.service.ts +27 -0
  363. package/src/logger-noop.adapter.ts +17 -0
  364. package/src/logger-winston-local.adapter.ts +24 -0
  365. package/src/logger-winston-production.adapter.ts +38 -0
  366. package/src/logger-winston.adapter.ts +63 -0
  367. package/src/logger.port.ts +64 -0
  368. package/src/mailer-content-html.vo.ts +11 -0
  369. package/src/mailer-noop.adapter.ts +21 -0
  370. package/src/mailer-smtp-with-logger.adapter.ts +33 -0
  371. package/src/mailer-smtp.adapter.ts +33 -0
  372. package/src/mailer-subject.vo.ts +10 -0
  373. package/src/mailer.port.ts +6 -0
  374. package/src/maintenance-mode.middleware.ts +15 -0
  375. package/src/memory-consumption.service.ts +23 -0
  376. package/src/modules/history/event-handlers/index.ts +2 -0
  377. package/src/modules/history/event-handlers/onHistoryClearedEvent.ts +6 -0
  378. package/src/modules/history/event-handlers/onHistoryPopulatedEvent.ts +10 -0
  379. package/src/modules/history/events/HISTORY_CLEARED_EVENT.ts +13 -0
  380. package/src/modules/history/events/HISTORY_POPULATED_EVENT.ts +17 -0
  381. package/src/modules/history/events/index.ts +2 -0
  382. package/src/modules/history/index.ts +4 -0
  383. package/src/modules/history/ports/history-projection.ts +7 -0
  384. package/src/modules/history/ports/history-reader.ts +5 -0
  385. package/src/modules/history/ports/history-writer.ts +7 -0
  386. package/src/modules/history/ports/index.ts +3 -0
  387. package/src/modules/history/value-objects/history-created-at.ts +6 -0
  388. package/src/modules/history/value-objects/history-id.ts +3 -0
  389. package/src/modules/history/value-objects/history-operation.ts +12 -0
  390. package/src/modules/history/value-objects/history-payload.ts +15 -0
  391. package/src/modules/history/value-objects/history-subject.ts +14 -0
  392. package/src/modules/history/value-objects/history.ts +26 -0
  393. package/src/modules/history/value-objects/index.ts +6 -0
  394. package/src/modules/preferences/command-handlers/handleSetUserLanguageCommand.ts +36 -0
  395. package/src/modules/preferences/command-handlers/index.ts +1 -0
  396. package/src/modules/preferences/commands/SET_USER_LANGUAGE_COMMAND.ts +14 -0
  397. package/src/modules/preferences/commands/index.ts +1 -0
  398. package/src/modules/preferences/events/USER_LANGUAGE_SET_EVENT.ts +14 -0
  399. package/src/modules/preferences/events/index.ts +1 -0
  400. package/src/modules/preferences/index.ts +7 -0
  401. package/src/modules/preferences/invariants/index.ts +1 -0
  402. package/src/modules/preferences/invariants/user-language-has-changed.ts +26 -0
  403. package/src/modules/preferences/open-host-queries/index.ts +1 -0
  404. package/src/modules/preferences/open-host-queries/user-language.ts +23 -0
  405. package/src/modules/preferences/ports/index.ts +2 -0
  406. package/src/modules/preferences/ports/user-language-query.ts +5 -0
  407. package/src/modules/preferences/ports/user-language-resolver.ts +22 -0
  408. package/src/modules/preferences/value-objects/index.ts +1 -0
  409. package/src/modules/preferences/value-objects/supported-languages-set.ts +17 -0
  410. package/src/modules/system/events/HOUR_HAS_PASSED_EVENT.ts +13 -0
  411. package/src/modules/system/events/MINUTE_HAS_PASSED_EVENT.ts +13 -0
  412. package/src/modules/system/events/SECURITY_VIOLATION_DETECTED_EVENT.ts +23 -0
  413. package/src/modules/system/events/index.ts +3 -0
  414. package/src/modules/system/index.ts +2 -0
  415. package/src/modules/system/services/index.ts +2 -0
  416. package/src/modules/system/services/passage-of-time-hourly.service.ts +35 -0
  417. package/src/modules/system/services/passage-of-time-minute.service.ts +35 -0
  418. package/src/node-env.vo.ts +12 -0
  419. package/src/nonce-provider-crypto.adapter.ts +18 -0
  420. package/src/nonce-provider-deterministic.adapter.ts +21 -0
  421. package/src/nonce-provider-noop.adapter.ts +8 -0
  422. package/src/nonce-provider.port.ts +5 -0
  423. package/src/nonce-value.vo.ts +18 -0
  424. package/src/pdf-generator-noop.adapter.ts +23 -0
  425. package/src/pdf-generator.port.ts +5 -0
  426. package/src/ping.service.ts +7 -0
  427. package/src/port.vo.ts +14 -0
  428. package/src/prerequisite-runner-startup.service.ts +44 -0
  429. package/src/prerequisite-verifier-binary.adapter.ts +21 -0
  430. package/src/prerequisite-verifier-bun.adapter.ts +21 -0
  431. package/src/prerequisite-verifier-clock-drift.adapter.ts +32 -0
  432. package/src/prerequisite-verifier-directory.adapter.ts +48 -0
  433. package/src/prerequisite-verifier-dns.adapter.ts +20 -0
  434. package/src/prerequisite-verifier-external-api.adapter.ts +20 -0
  435. package/src/prerequisite-verifier-file.adapter.ts +49 -0
  436. package/src/prerequisite-verifier-jobs.adapter.ts +15 -0
  437. package/src/prerequisite-verifier-log-file.adapter.ts +29 -0
  438. package/src/prerequisite-verifier-mailer.adapter.ts +22 -0
  439. package/src/prerequisite-verifier-memory.adapter.ts +22 -0
  440. package/src/prerequisite-verifier-node.adapter.ts +21 -0
  441. package/src/prerequisite-verifier-os.adapter.ts +22 -0
  442. package/src/prerequisite-verifier-outside-connectivity.adapter.ts +23 -0
  443. package/src/prerequisite-verifier-port.adapter.ts +23 -0
  444. package/src/prerequisite-verifier-ram.adapter.ts +20 -0
  445. package/src/prerequisite-verifier-running-user.adapter.ts +17 -0
  446. package/src/prerequisite-verifier-self.adapter.ts +11 -0
  447. package/src/prerequisite-verifier-space.adapter.ts +32 -0
  448. package/src/prerequisite-verifier-sqlite.adapter.ts +25 -0
  449. package/src/prerequisite-verifier-ssl-certificate-expiry.adapter.ts +28 -0
  450. package/src/prerequisite-verifier-timezone-utc.adapter.ts +20 -0
  451. package/src/prerequisite-verifier-translations.adapter.ts +65 -0
  452. package/src/prerequisite-verifier-with-cache.adapter.ts +35 -0
  453. package/src/prerequisite-verifier-with-fail-safe.adapter.ts +37 -0
  454. package/src/prerequisite-verifier-with-logger.adapter.ts +51 -0
  455. package/src/prerequisite-verifier-with-retry.adapter.ts +35 -0
  456. package/src/prerequisite-verifier-with-timeout.adapter.ts +31 -0
  457. package/src/prerequisite-verifier.decorator.ts +49 -0
  458. package/src/prerequisite-verifier.port.ts +38 -0
  459. package/src/prerequisite.vo.ts +28 -0
  460. package/src/recaptcha-secret-key.vo.ts +15 -0
  461. package/src/recaptcha-site-key.vo.ts +12 -0
  462. package/src/redactor-compact-array.strategy.ts +10 -0
  463. package/src/redactor-compact-object.strategy.ts +25 -0
  464. package/src/redactor-composite.strategy.ts +9 -0
  465. package/src/redactor-mask.strategy.ts +38 -0
  466. package/src/redactor-noop.strategy.ts +7 -0
  467. package/src/redactor.strategy.ts +3 -0
  468. package/src/remote-file-storage-disk.adapter.ts +72 -0
  469. package/src/remote-file-storage-noop.adapter.ts +70 -0
  470. package/src/remote-file-storage.port.ts +17 -0
  471. package/src/retry-backoff-exponential.strategy.ts +10 -0
  472. package/src/retry-backoff-fibonacci.strategy.ts +16 -0
  473. package/src/retry-backoff-linear.strategy.ts +10 -0
  474. package/src/retry-backoff-noop.strategy.ts +8 -0
  475. package/src/retry-backoff.strategy.ts +5 -0
  476. package/src/retry.service.ts +37 -0
  477. package/src/safe-parse-body.service.ts +12 -0
  478. package/src/sealer-aes-gcm.adapter.ts +38 -0
  479. package/src/sealer-noop.adapter.ts +11 -0
  480. package/src/sealer.port.ts +4 -0
  481. package/src/security-context.vo.ts +13 -0
  482. package/src/security-countermeasure-ban.strategy.ts +63 -0
  483. package/src/security-countermeasure-mirage.strategy.ts +31 -0
  484. package/src/security-countermeasure-name.vo.ts +22 -0
  485. package/src/security-countermeasure-noop.strategy.ts +12 -0
  486. package/src/security-countermeasure-report.strategy.ts +27 -0
  487. package/src/security-countermeasure-tarpit.strategy.ts +31 -0
  488. package/src/security-countermeasure.strategy.ts +16 -0
  489. package/src/security-policy.vo.ts +9 -0
  490. package/src/security-rule-and.strategy.ts +25 -0
  491. package/src/security-rule-bait-routes.strategy.ts +15 -0
  492. package/src/security-rule-fail.strategy.ts +12 -0
  493. package/src/security-rule-honey-pot-field.strategy.ts +20 -0
  494. package/src/security-rule-name.vo.ts +22 -0
  495. package/src/security-rule-or.strategy.ts +25 -0
  496. package/src/security-rule-pass.strategy.ts +12 -0
  497. package/src/security-rule-user-agent.strategy.ts +20 -0
  498. package/src/security-rule-violation-threshold.strategy.ts +50 -0
  499. package/src/security-rule.strategy.ts +8 -0
  500. package/src/setup.service.ts +102 -0
  501. package/src/shield-api-key.strategy.ts +20 -0
  502. package/src/shield-auth.strategy.ts +38 -0
  503. package/src/shield-basic-auth.strategy.ts +17 -0
  504. package/src/shield-csrf.strategy.ts +23 -0
  505. package/src/shield-hcaptcha-local.strategy.ts +22 -0
  506. package/src/shield-hcaptcha.strategy.ts +24 -0
  507. package/src/shield-noop.strategy.ts +6 -0
  508. package/src/shield-rate-limit.strategy.ts +41 -0
  509. package/src/shield-recaptcha.strategy.ts +49 -0
  510. package/src/shield-security.strategy.ts +80 -0
  511. package/src/shield-timeout.strategy.ts +19 -0
  512. package/src/shield.strategy.ts +5 -0
  513. package/src/simulated-error.middleware.ts +8 -0
  514. package/src/sleeper-noop.adapter.ts +5 -0
  515. package/src/sleeper-system.adapter.ts +8 -0
  516. package/src/sleeper.port.ts +5 -0
  517. package/src/slower.middleware.ts +14 -0
  518. package/src/smtp-host.vo.ts +17 -0
  519. package/src/smtp-pass.vo.ts +17 -0
  520. package/src/smtp-port.vo.ts +5 -0
  521. package/src/smtp-user.vo.ts +17 -0
  522. package/src/ssr.ts +57 -0
  523. package/src/static-files.service.ts +85 -0
  524. package/src/stopwatch.service.ts +30 -0
  525. package/src/temporary-file-absolute.adapter.ts +31 -0
  526. package/src/temporary-file-noop.adapter.ts +16 -0
  527. package/src/temporary-file.port.ts +9 -0
  528. package/src/time-zone-offset.middleware.ts +24 -0
  529. package/src/timekeeper-google.adapter.ts +18 -0
  530. package/src/timekeeper-noop.adapter.ts +12 -0
  531. package/src/timekeeper.port.ts +5 -0
  532. package/src/timeout-cancellable-runner-bare.adapter.ts +35 -0
  533. package/src/timeout-cancellable-runner-noop.adapter.ts +9 -0
  534. package/src/timeout-cancellable-runner.port.ts +7 -0
  535. package/src/timeout-runner-bare.adapter.ts +23 -0
  536. package/src/timeout-runner-error.adapter.ts +8 -0
  537. package/src/timeout-runner-monitor.adapter.ts +24 -0
  538. package/src/timeout-runner-noop.adapter.ts +8 -0
  539. package/src/timeout-runner.port.ts +7 -0
  540. package/src/to-event-map.types.ts +3 -0
  541. package/src/translations.service.ts +20 -0
  542. package/src/uptime.service.ts +17 -0
  543. package/src/uuid.vo.ts +7 -0
  544. package/src/visitor-id-client.strategy.ts +20 -0
  545. package/src/visitor-id.strategy.ts +5 -0
  546. package/src/weak-etag-extractor.middleware.ts +17 -0
package/src/index.ts ADDED
@@ -0,0 +1,307 @@
1
+ export * from "./antivirus.port";
2
+ export * from "./antivirus-clamav.adapter";
3
+ export * from "./antivirus-noop.adapter";
4
+ export * from "./api-version.middleware";
5
+ export * from "./basic-auth.service";
6
+ export * from "./basic-auth-password.vo";
7
+ export * from "./basic-auth-username.vo";
8
+ export * from "./better-auth-logger.service";
9
+ export * from "./binary.vo";
10
+ export * from "./bots.vo";
11
+ export * from "./build-info-repository.strategy";
12
+ export * from "./build-info-repository-file.strategy";
13
+ export * from "./build-info-repository-noop.strategy";
14
+ export * from "./build-info-repository-package-json.strategy";
15
+ export * from "./cache-file.service";
16
+ export * from "./cache-repository.port";
17
+ export * from "./cache-repository-lru-cache.adapter";
18
+ export * from "./cache-repository-node-cache.adapter";
19
+ export * from "./cache-repository-noop.adapter";
20
+ export * from "./cache-resolver.strategy";
21
+ export * from "./cache-resolver-simple.strategy";
22
+ export * from "./cache-response.middleware";
23
+ export * from "./cache-subject-application-resolver.vo";
24
+ export * from "./cache-subject-request-resolver.vo";
25
+ export * from "./cache-subject-segment-application.strategy";
26
+ export * from "./cache-subject-segment-build.strategy";
27
+ export * from "./cache-subject-segment-cookie.strategy";
28
+ export * from "./cache-subject-segment-env.strategy";
29
+ export * from "./cache-subject-segment-fixed.strategy";
30
+ export * from "./cache-subject-segment-header.strategy";
31
+ export * from "./cache-subject-segment-ip.strategy";
32
+ export * from "./cache-subject-segment-path.strategy";
33
+ export * from "./cache-subject-segment-query.strategy";
34
+ export * from "./cache-subject-segment-request.strategy";
35
+ export * from "./cache-subject-segment-user.strategy";
36
+ export * from "./certificate-inspector.port";
37
+ export * from "./certificate-inspector-noop.adapter";
38
+ export * from "./certificate-inspector-tls.adapter";
39
+ export * from "./checksum.service";
40
+ export * from "./client.vo";
41
+ export * from "./client-from-hono.adapter";
42
+ export * from "./client-ip.vo";
43
+ export * from "./client-user-agent.vo";
44
+ export * from "./clock.port";
45
+ export * from "./clock-fixed.adapter";
46
+ export * from "./clock-offset.adapter";
47
+ export * from "./clock-system.adapter";
48
+ export * from "./command.types";
49
+ export * from "./command-envelope";
50
+ export * from "./command-logger.service";
51
+ export * from "./commit-sha.vo";
52
+ export * from "./commit-sha-value.vo";
53
+ export * from "./context.middleware";
54
+ export * from "./correlation-id.vo";
55
+ export * from "./correlation-storage.service";
56
+ export * from "./crypto-key-provider.port";
57
+ export * from "./crypto-key-provider-file.adapter";
58
+ export * from "./crypto-key-provider-memory.adapter";
59
+ export * from "./crypto-key-provider-noop.adapter";
60
+ export * from "./crypto-key-provider-with-cache.adapter";
61
+ export * from "./csv-stringifier.adapter";
62
+ export * from "./csv-stringifier.port";
63
+ export * from "./disk-space-checker.port";
64
+ export * from "./disk-space-checker-bun.adapter";
65
+ export * from "./disk-space-checker-noop.adapter";
66
+ export * from "./dispatching-event-store";
67
+ export * from "./encryption.port";
68
+ export * from "./encryption-aes-gcm.adapter";
69
+ export * from "./encryption-key.vo";
70
+ export * from "./encryption-key-value.vo";
71
+ export * from "./encryption-noop.adapter";
72
+ export * from "./environment-file-parser.service";
73
+ export * from "./environment-loader.port";
74
+ export * from "./environment-loader-encrypted.adapter";
75
+ export * from "./environment-loader-noop.adapter";
76
+ export * from "./environment-loader-process.adapter";
77
+ export * from "./environment-loader-process-safe.adapter";
78
+ export * from "./etag-extractor.middleware";
79
+ export * from "./event.types";
80
+ export * from "./event-bus-like.types";
81
+ export * from "./event-envelope";
82
+ export * from "./event-handler.strategy";
83
+ export * from "./event-handler-bare.strategy";
84
+ export * from "./event-handler-noop.strategy";
85
+ export * from "./event-handler-with-logger.strategy";
86
+ export * from "./event-logger.service";
87
+ export * from "./event-loop-lag.service";
88
+ export * from "./event-loop-utilization.service";
89
+ export * from "./event-store";
90
+ export * from "./event-store-like.types";
91
+ export * from "./event-stream.vo";
92
+ export * from "./file-cleaner.port";
93
+ export * from "./file-cleaner-bun.adapter";
94
+ export * from "./file-cleaner-bun-forgiving.adapter";
95
+ export * from "./file-cleaner-noop.adapter";
96
+ export * from "./file-draft.service";
97
+ export * from "./file-draft-zip.service";
98
+ export * from "./file-reader-json.port";
99
+ export * from "./file-reader-json-bun.adapter";
100
+ export * from "./file-reader-json-bun-forgiving.adapter";
101
+ export * from "./file-reader-json-noop.adapter";
102
+ export * from "./file-reader-json-with-cache.adapter";
103
+ export * from "./file-renamer.port";
104
+ export * from "./file-renamer.port";
105
+ export * from "./file-renamer-fs.adapter";
106
+ export * from "./file-renamer-fs.adapter";
107
+ export * from "./file-renamer-fs-forgiving.adapter";
108
+ export * from "./file-renamer-fs-forgiving.adapter";
109
+ export * from "./file-renamer-noop.adapter";
110
+ export * from "./file-renamer-noop.adapter";
111
+ export * from "./file-uploader.middleware";
112
+ export * from "./graceful-shutdown.service";
113
+ export * from "./gzip.port";
114
+ export * from "./gzip-bun.adapter";
115
+ export * from "./gzip-noop.adapter";
116
+ export * from "./gzip-stream.adapter";
117
+ export * from "./hash.vo";
118
+ export * from "./hash-content.strategy";
119
+ export * from "./hash-content-noop.strategy";
120
+ export * from "./hash-content-sha256-bun.strategy";
121
+ export * from "./hash-file.port";
122
+ export * from "./hash-file-noop.adapter";
123
+ export * from "./hash-file-sha256-bun.adapter";
124
+ export * from "./hash-value.vo";
125
+ export * from "./hcaptcha-secret-key.vo";
126
+ export * from "./hcaptcha-site-key.vo";
127
+ export * from "./healthcheck.service";
128
+ export * from "./http-logger.middleware";
129
+ export * from "./i18n.service";
130
+ export * from "./id-provider.port";
131
+ export * from "./id-provider-crypto.adapter";
132
+ export * from "./id-provider-deterministic.adapter";
133
+ export * from "./image-alpha.port";
134
+ export * from "./image-alpha-noop.adapter";
135
+ export * from "./image-alpha-sharp.adapter";
136
+ export * from "./image-blur.port";
137
+ export * from "./image-blur-noop.adapter";
138
+ export * from "./image-blur-sharp.adapter";
139
+ export * from "./image-compressor.port";
140
+ export * from "./image-compressor-noop.adapter";
141
+ export * from "./image-compressor-sharp.adapter";
142
+ export * from "./image-exif-clear.port";
143
+ export * from "./image-exif-clear-noop.adapter";
144
+ export * from "./image-exif-clear-sharp.adapter";
145
+ export * from "./image-formatter.port";
146
+ export * from "./image-formatter-noop.adapter";
147
+ export * from "./image-formatter-sharp.adapter";
148
+ export * from "./image-info.port";
149
+ export * from "./image-info-noop.adapter";
150
+ export * from "./image-info-sharp.adapter";
151
+ export * from "./image-processor.port";
152
+ export * from "./image-processor-noop.adapter";
153
+ export * from "./image-processor-sharp.adapter";
154
+ export * from "./image-resizer.port";
155
+ export * from "./image-resizer-noop.adapter";
156
+ export * from "./image-resizer-sharp.adapter";
157
+ export * from "./in-flight-requests.middleware";
158
+ export * from "./instrumentation.service";
159
+ export * from "./invariant.service";
160
+ export * from "./invariant-error-handler.service";
161
+ export * from "./job-handler.strategy";
162
+ export * from "./job-handler-bare.strategy";
163
+ export * from "./job-handler-noop.strategy";
164
+ export * from "./job-handler-with-logger.strategy";
165
+ export * from "./jobs.service";
166
+ export * from "./logger.port";
167
+ export * from "./logger-format-error.service";
168
+ export * from "./logger-noop.adapter";
169
+ export * from "./logger-winston.adapter";
170
+ export * from "./logger-winston-local.adapter";
171
+ export * from "./logger-winston-production.adapter";
172
+ export * from "./mailer.port";
173
+ export * from "./mailer-content-html.vo";
174
+ export * from "./mailer-noop.adapter";
175
+ export * from "./mailer-smtp.adapter";
176
+ export * from "./mailer-smtp-with-logger.adapter";
177
+ export * from "./mailer-subject.vo";
178
+ export * from "./maintenance-mode.middleware";
179
+ export * from "./memory-consumption.service";
180
+ export * as History from "./modules/history";
181
+ export * as Preferences from "./modules/preferences";
182
+ export * as System from "./modules/system";
183
+ export * from "./node-env.vo";
184
+ export * from "./nonce-provider.port";
185
+ export * from "./nonce-provider-crypto.adapter";
186
+ export * from "./nonce-provider-deterministic.adapter";
187
+ export * from "./nonce-provider-noop.adapter";
188
+ export * from "./nonce-value.vo";
189
+ export * from "./pdf-generator.port";
190
+ export * from "./pdf-generator-noop.adapter";
191
+ export * from "./ping.service";
192
+ export * from "./port.vo";
193
+ export * from "./prerequisite.vo";
194
+ export * from "./prerequisite-runner-startup.service";
195
+ export * from "./prerequisite-verifier.decorator";
196
+ export * from "./prerequisite-verifier.port";
197
+ export * from "./prerequisite-verifier-binary.adapter";
198
+ export * from "./prerequisite-verifier-bun.adapter";
199
+ export * from "./prerequisite-verifier-clock-drift.adapter";
200
+ export * from "./prerequisite-verifier-directory.adapter";
201
+ export * from "./prerequisite-verifier-dns.adapter";
202
+ export * from "./prerequisite-verifier-external-api.adapter";
203
+ export * from "./prerequisite-verifier-file.adapter";
204
+ export * from "./prerequisite-verifier-jobs.adapter";
205
+ export * from "./prerequisite-verifier-log-file.adapter";
206
+ export * from "./prerequisite-verifier-mailer.adapter";
207
+ export * from "./prerequisite-verifier-memory.adapter";
208
+ export * from "./prerequisite-verifier-node.adapter";
209
+ export * from "./prerequisite-verifier-os.adapter";
210
+ export * from "./prerequisite-verifier-outside-connectivity.adapter";
211
+ export * from "./prerequisite-verifier-port.adapter";
212
+ export * from "./prerequisite-verifier-ram.adapter";
213
+ export * from "./prerequisite-verifier-running-user.adapter";
214
+ export * from "./prerequisite-verifier-self.adapter";
215
+ export * from "./prerequisite-verifier-space.adapter";
216
+ export * from "./prerequisite-verifier-sqlite.adapter";
217
+ export * from "./prerequisite-verifier-ssl-certificate-expiry.adapter";
218
+ export * from "./prerequisite-verifier-timezone-utc.adapter";
219
+ export * from "./prerequisite-verifier-translations.adapter";
220
+ export * from "./recaptcha-secret-key.vo";
221
+ export * from "./recaptcha-site-key.vo";
222
+ export * from "./redactor.strategy";
223
+ export * from "./redactor-compact-array.strategy";
224
+ export * from "./redactor-compact-object.strategy";
225
+ export * from "./redactor-composite.strategy";
226
+ // export * from "./redactor-encrypt.strategy";
227
+ export * from "./redactor-mask.strategy";
228
+ export * from "./redactor-noop.strategy";
229
+ export * from "./remote-file-storage.port";
230
+ export * from "./remote-file-storage-disk.adapter";
231
+ export * from "./remote-file-storage-noop.adapter";
232
+ export * from "./retry.service";
233
+ export * from "./retry-backoff.strategy";
234
+ export * from "./retry-backoff-exponential.strategy";
235
+ export * from "./retry-backoff-fibonacci.strategy";
236
+ export * from "./retry-backoff-linear.strategy";
237
+ export * from "./retry-backoff-noop.strategy";
238
+ export * from "./safe-parse-body.service";
239
+ export * from "./sealer.port";
240
+ export * from "./sealer-aes-gcm.adapter";
241
+ export * from "./sealer-noop.adapter";
242
+ export * from "./security-context.vo";
243
+ export * from "./security-countermeasure.strategy";
244
+ export * from "./security-countermeasure-ban.strategy";
245
+ export * from "./security-countermeasure-mirage.strategy";
246
+ export * from "./security-countermeasure-name.vo";
247
+ export * from "./security-countermeasure-noop.strategy";
248
+ export * from "./security-countermeasure-report.strategy";
249
+ export * from "./security-countermeasure-tarpit.strategy";
250
+ export * from "./security-policy.vo";
251
+ export * from "./security-rule.strategy";
252
+ export * from "./security-rule-and.strategy";
253
+ export * from "./security-rule-bait-routes.strategy";
254
+ export * from "./security-rule-fail.strategy";
255
+ export * from "./security-rule-honey-pot-field.strategy";
256
+ export * from "./security-rule-name.vo";
257
+ export * from "./security-rule-or.strategy";
258
+ export * from "./security-rule-pass.strategy";
259
+ export * from "./security-rule-user-agent.strategy";
260
+ export * from "./security-rule-violation-threshold.strategy";
261
+ export * from "./setup.service";
262
+ export * from "./shield.strategy";
263
+ export * from "./shield-api-key.strategy";
264
+ export * from "./shield-auth.strategy";
265
+ export * from "./shield-basic-auth.strategy";
266
+ export * from "./shield-csrf.strategy";
267
+ export * from "./shield-hcaptcha.strategy";
268
+ export * from "./shield-hcaptcha-local.strategy";
269
+ export * from "./shield-noop.strategy";
270
+ export * from "./shield-rate-limit.strategy";
271
+ export * from "./shield-recaptcha.strategy";
272
+ export * from "./shield-security.strategy";
273
+ export * from "./shield-timeout.strategy";
274
+ export * from "./simulated-error.middleware";
275
+ export * from "./sleeper.port";
276
+ export * from "./sleeper-noop.adapter";
277
+ export * from "./sleeper-system.adapter";
278
+ export * from "./slower.middleware";
279
+ export * from "./smtp-host.vo";
280
+ export * from "./smtp-pass.vo";
281
+ export * from "./smtp-port.vo";
282
+ export * from "./smtp-user.vo";
283
+ export * from "./ssr";
284
+ export * from "./static-files.service";
285
+ export * from "./stopwatch.service";
286
+ export * from "./temporary-file.port";
287
+ export * from "./temporary-file-absolute.adapter";
288
+ export * from "./temporary-file-noop.adapter";
289
+ export * from "./time-zone-offset.middleware";
290
+ export * from "./timekeeper.port";
291
+ export * from "./timekeeper-google.adapter";
292
+ export * from "./timekeeper-noop.adapter";
293
+ export * from "./timeout-cancellable-runner.port";
294
+ export * from "./timeout-cancellable-runner-bare.adapter";
295
+ export * from "./timeout-cancellable-runner-noop.adapter";
296
+ export * from "./timeout-runner.port";
297
+ export * from "./timeout-runner-bare.adapter";
298
+ export * from "./timeout-runner-error.adapter";
299
+ export * from "./timeout-runner-monitor.adapter";
300
+ export * from "./timeout-runner-noop.adapter";
301
+ export * from "./to-event-map.types";
302
+ export * from "./translations.service";
303
+ export * from "./uptime.service";
304
+ export * from "./uuid.vo";
305
+ export * from "./visitor-id.strategy";
306
+ export * from "./visitor-id-client.strategy";
307
+ export * from "./weak-etag-extractor.middleware";
@@ -0,0 +1,39 @@
1
+ import type { ClockPort } from "./clock.port";
2
+ import type { LoggerPort } from "./logger.port";
3
+ import { Stopwatch } from "./stopwatch.service";
4
+
5
+ type Dependencies = { Logger: LoggerPort; Clock: ClockPort };
6
+
7
+ export class Instrumentation {
8
+ constructor(private readonly deps: Dependencies) {}
9
+
10
+ measure<T>(label: string, action: () => T): T {
11
+ const stopwatch = new Stopwatch(this.deps);
12
+
13
+ const result = action();
14
+
15
+ this.deps.Logger.info({
16
+ message: `${label} measurement`,
17
+ component: "infra",
18
+ operation: "instrumentation_measure",
19
+ metadata: { durationMs: stopwatch.stop().ms },
20
+ });
21
+
22
+ return result;
23
+ }
24
+
25
+ async measureAsync<T>(label: string, action: () => T): Promise<T> {
26
+ const stopwatch = new Stopwatch(this.deps);
27
+
28
+ const result = await action();
29
+
30
+ this.deps.Logger.info({
31
+ message: `${label} measurement`,
32
+ component: "infra",
33
+ operation: "instrumentation_measure",
34
+ metadata: { durationMs: stopwatch.stop().ms },
35
+ });
36
+
37
+ return result;
38
+ }
39
+ }
@@ -0,0 +1,22 @@
1
+ import type { ContentfulStatusCode } from "hono/utils/http-status";
2
+ import { type Invariant, InvariantFailureKind } from "./invariant.service";
3
+
4
+ type BaseInvariantType = Invariant<any>;
5
+ type InvariantMessageType = BaseInvariantType["message"];
6
+ type ErrorResponseTupleType = [{ message: InvariantMessageType; _known: true }, ContentfulStatusCode];
7
+
8
+ export class InvariantErrorHandler {
9
+ static detect(invariants: BaseInvariantType[], error: unknown): BaseInvariantType | undefined {
10
+ return invariants.find((invariant) => error instanceof invariant.error);
11
+ }
12
+
13
+ static respond(error: BaseInvariantType): ErrorResponseTupleType {
14
+ const code: Record<InvariantFailureKind, ContentfulStatusCode> = {
15
+ [InvariantFailureKind.forbidden]: 403,
16
+ [InvariantFailureKind.not_found]: 404,
17
+ [InvariantFailureKind.precondition]: 400,
18
+ };
19
+
20
+ return [{ message: error.message, _known: true }, code[error.kind]];
21
+ }
22
+ }
@@ -0,0 +1,27 @@
1
+ import type { Constructor } from "@bgord/tools";
2
+
3
+ type BaseInvariantConfig = Record<string, unknown>;
4
+
5
+ export enum InvariantFailureKind {
6
+ forbidden = "forbidden",
7
+ precondition = "precondition",
8
+ not_found = "not_found",
9
+ }
10
+
11
+ export abstract class Invariant<T extends BaseInvariantConfig> {
12
+ abstract passes(config: T): boolean;
13
+
14
+ abstract error: Constructor<Error>;
15
+
16
+ abstract message: string;
17
+
18
+ abstract kind: InvariantFailureKind;
19
+
20
+ throw() {
21
+ throw new this.error();
22
+ }
23
+
24
+ enforce(config: T) {
25
+ if (!this.passes(config)) this.throw();
26
+ }
27
+ }
@@ -0,0 +1,15 @@
1
+ import { CorrelationStorage } from "./correlation-storage.service";
2
+ import type { IdProviderPort } from "./id-provider.port";
3
+ import type { JobHandlerStrategy, UnitOfWork } from "./job-handler.strategy";
4
+
5
+ type Dependencies = { IdProvider: IdProviderPort };
6
+
7
+ export class JobHandlerBareStrategy implements JobHandlerStrategy {
8
+ constructor(private readonly deps: Dependencies) {}
9
+
10
+ handle(uow: UnitOfWork) {
11
+ const correlationId = this.deps.IdProvider.generate();
12
+
13
+ return async () => CorrelationStorage.run(correlationId, async () => uow.process());
14
+ }
15
+ }
@@ -0,0 +1,9 @@
1
+ import type { JobHandlerStrategy, UnitOfWork } from "./job-handler.strategy";
2
+
3
+ export class JobHandlerNoopStrategy implements JobHandlerStrategy {
4
+ constructor() {}
5
+
6
+ handle(_uow: UnitOfWork) {
7
+ return async () => {};
8
+ }
9
+ }
@@ -0,0 +1,44 @@
1
+ import type { ClockPort } from "./clock.port";
2
+ import { CorrelationStorage } from "./correlation-storage.service";
3
+ import type { IdProviderPort } from "./id-provider.port";
4
+ import type { JobHandlerStrategy, UnitOfWork } from "./job-handler.strategy";
5
+ import type { LoggerPort } from "./logger.port";
6
+ import { formatError } from "./logger-format-error.service";
7
+ import { Stopwatch } from "./stopwatch.service";
8
+
9
+ type Dependencies = { Logger: LoggerPort; IdProvider: IdProviderPort; Clock: ClockPort };
10
+
11
+ export class JobHandlerWithLoggerStrategy implements JobHandlerStrategy {
12
+ private readonly base = { component: "infra", operation: "job_handler" };
13
+
14
+ constructor(private readonly deps: Dependencies) {}
15
+
16
+ handle(uow: UnitOfWork) {
17
+ const correlationId = this.deps.IdProvider.generate();
18
+
19
+ return async () => {
20
+ const stopwatch = new Stopwatch(this.deps);
21
+
22
+ try {
23
+ this.deps.Logger.info({ message: `${uow.label} start`, correlationId, ...this.base });
24
+
25
+ await CorrelationStorage.run(correlationId, async () => uow.process());
26
+
27
+ this.deps.Logger.info({
28
+ message: `${uow.label} success`,
29
+ correlationId,
30
+ metadata: stopwatch.stop(),
31
+ ...this.base,
32
+ });
33
+ } catch (error) {
34
+ this.deps.Logger.error({
35
+ message: `${uow.label} error`,
36
+ correlationId,
37
+ error: formatError(error),
38
+ metadata: stopwatch.stop(),
39
+ ...this.base,
40
+ });
41
+ }
42
+ };
43
+ }
44
+ }
@@ -0,0 +1,10 @@
1
+ import type { JobNameType } from "./jobs.service";
2
+
3
+ export interface UnitOfWork {
4
+ label: JobNameType;
5
+ process: () => Promise<void>;
6
+ }
7
+
8
+ export interface JobHandlerStrategy {
9
+ handle(uow: UnitOfWork): () => Promise<void>;
10
+ }
@@ -0,0 +1,16 @@
1
+ import type { Cron } from "croner";
2
+
3
+ export type JobNameType = string;
4
+ export type MultipleJobsType = Record<JobNameType, Cron>;
5
+
6
+ export class Jobs {
7
+ static SCHEDULES = { EVERY_MINUTE: "* * * * *", EVERY_HOUR: "0 * * * *" };
8
+
9
+ static stopAll(jobs: MultipleJobsType) {
10
+ Object.values(jobs).forEach((job) => job.stop());
11
+ }
12
+
13
+ static areAllRunning(jobs: MultipleJobsType): boolean {
14
+ return Object.values(jobs).every((job) => job.isRunning());
15
+ }
16
+ }
@@ -0,0 +1,27 @@
1
+ // Stryker disable all
2
+ import type { ErrorInfo } from "./logger.port";
3
+
4
+ export function formatError(error: unknown): ErrorInfo {
5
+ if (error instanceof Error) {
6
+ const code = (error as any)?.code;
7
+ const cause = error?.cause;
8
+
9
+ return {
10
+ name: error.name ?? "Error",
11
+ message: error.message ?? "Unknown error",
12
+ stack: error.stack,
13
+ code: code ?? undefined,
14
+ cause:
15
+ cause instanceof Error
16
+ ? { name: cause.name, message: cause.message }
17
+ : typeof cause === "string"
18
+ ? { message: cause }
19
+ : undefined,
20
+ };
21
+ }
22
+ return {
23
+ name: "NonErrorThrown",
24
+ message: typeof error === "string" ? error : String(error),
25
+ };
26
+ }
27
+ // Stryker restore all
@@ -0,0 +1,17 @@
1
+ import type { LoggerPort } from "./logger.port";
2
+
3
+ export class LoggerNoopAdapter implements LoggerPort {
4
+ warn: LoggerPort["warn"] = (_log) => {};
5
+ error: LoggerPort["error"] = (_log) => {};
6
+ info: LoggerPort["info"] = (_log) => {};
7
+ http: LoggerPort["http"] = (_log) => {};
8
+ verbose: LoggerPort["verbose"] = (_log) => {};
9
+ debug: LoggerPort["debug"] = (_log) => {};
10
+ silly: LoggerPort["silly"] = (_log) => {};
11
+
12
+ setSilent: LoggerPort["setSilent"] = (_silent) => {};
13
+
14
+ getFilePath() {
15
+ return null;
16
+ }
17
+ }
@@ -0,0 +1,24 @@
1
+ import * as winston from "winston";
2
+ import type { LogAppType, LoggerPort, LogLevelEnum } from "./logger.port";
3
+ import { LoggerWinstonAdapter } from "./logger-winston.adapter";
4
+ import { NodeEnvironmentEnum } from "./node-env.vo";
5
+ import type { RedactorStrategy } from "./redactor.strategy";
6
+
7
+ type LoggerWinstonLocalAdapterConfigType = { app: LogAppType; redactor: RedactorStrategy };
8
+
9
+ export class LoggerWinstonLocalAdapter {
10
+ constructor(private readonly config: LoggerWinstonLocalAdapterConfigType) {}
11
+
12
+ // Stryker disable all
13
+ create(level: LogLevelEnum): LoggerPort {
14
+ return new LoggerWinstonAdapter({
15
+ app: this.config.app,
16
+ environment: NodeEnvironmentEnum.local,
17
+ level,
18
+ formats: [winston.format.prettyPrint()],
19
+ redactor: this.config.redactor,
20
+ filePath: null,
21
+ });
22
+ // Stryker restore all
23
+ }
24
+ }
@@ -0,0 +1,38 @@
1
+ import * as tools from "@bgord/tools";
2
+ import * as winston from "winston";
3
+ import type { LogAppType, LoggerPort, LogLevelEnum } from "./logger.port";
4
+ import { LoggerWinstonAdapter } from "./logger-winston.adapter";
5
+ import { NodeEnvironmentEnum } from "./node-env.vo";
6
+ import type { RedactorStrategy } from "./redactor.strategy";
7
+
8
+ type LoggerWinstonProductionAdapterConfigType = { app: LogAppType; redactor: RedactorStrategy };
9
+
10
+ export class LoggerWinstonProductionAdapter {
11
+ constructor(private readonly config: LoggerWinstonProductionAdapterConfigType) {}
12
+
13
+ create(level: LogLevelEnum): LoggerPort {
14
+ const filePath = tools.FilePathAbsolute.fromString(
15
+ `/var/log/${this.config.app}-${NodeEnvironmentEnum.production}.log`,
16
+ );
17
+
18
+ const file = new winston.transports.File({
19
+ filename: filePath.get(),
20
+ maxsize: tools.Size.fromMB(100).toBytes(),
21
+ maxFiles: 3,
22
+ // Stryker disable all
23
+ tailable: true,
24
+ // Stryker restore all
25
+ });
26
+
27
+ return new LoggerWinstonAdapter({
28
+ app: this.config.app,
29
+ environment: NodeEnvironmentEnum.production,
30
+ level,
31
+ // Stryker disable all
32
+ transports: [file],
33
+ // Stryker restore all
34
+ redactor: this.config.redactor,
35
+ filePath,
36
+ });
37
+ }
38
+ }
@@ -0,0 +1,63 @@
1
+ import type * as tools from "@bgord/tools";
2
+ import * as winston from "winston";
3
+ import { type LogAppType, type LoggerPort, LogLevelEnum } from "./logger.port";
4
+ import type { NodeEnvironmentEnum } from "./node-env.vo";
5
+ import type { RedactorStrategy } from "./redactor.strategy";
6
+
7
+ type WinstonLoggerOptions = {
8
+ app: LogAppType;
9
+ environment: NodeEnvironmentEnum;
10
+ level: LogLevelEnum;
11
+ formats?: winston.Logform.Format[];
12
+ transports?: winston.transport[];
13
+ redactor: RedactorStrategy;
14
+ filePath: tools.FilePathAbsolute | null;
15
+ };
16
+
17
+ export class LoggerWinstonAdapter implements LoggerPort {
18
+ private readonly logger: winston.Logger;
19
+
20
+ private readonly filePath: tools.FilePathAbsolute | null;
21
+
22
+ constructor(options: WinstonLoggerOptions) {
23
+ const format = winston.format.combine(
24
+ winston.format((info) => options.redactor.redact(info))(),
25
+ // Stryker disable all
26
+ winston.format.errors({ stack: true }),
27
+ // Stryker restore all
28
+ winston.format.timestamp(),
29
+ winston.format.json(),
30
+ ...(options.formats ?? []),
31
+ );
32
+
33
+ this.logger = winston.createLogger({
34
+ levels: winston.config.npm.levels,
35
+ level: options.level,
36
+ defaultMeta: { app: options.app, environment: options.environment },
37
+ // Stryker disable all
38
+ handleExceptions: true,
39
+ handleRejections: true,
40
+ format,
41
+ transports: [new winston.transports.Console(), ...(options.transports ?? [])],
42
+ // Stryker restore all
43
+ });
44
+
45
+ this.filePath = options.filePath;
46
+ }
47
+
48
+ warn: LoggerPort["warn"] = (log) => this.logger.log({ level: LogLevelEnum.warn, ...log });
49
+ error: LoggerPort["error"] = (log) => this.logger.log({ level: LogLevelEnum.error, ...log });
50
+ info: LoggerPort["info"] = (log) => this.logger.log({ level: LogLevelEnum.info, ...log });
51
+ http: LoggerPort["http"] = (log) => this.logger.log({ level: LogLevelEnum.http, ...log });
52
+ verbose: LoggerPort["verbose"] = (log) => this.logger.log({ level: LogLevelEnum.verbose, ...log });
53
+ debug: LoggerPort["debug"] = (log) => this.logger.log({ level: LogLevelEnum.debug, ...log });
54
+ silly: LoggerPort["silly"] = (log) => this.logger.log({ level: LogLevelEnum.silly, ...log });
55
+
56
+ setSilent: LoggerPort["setSilent"] = (silent) => {
57
+ this.logger.silent = silent;
58
+ };
59
+
60
+ getFilePath() {
61
+ return this.filePath;
62
+ }
63
+ }