@bgord/bun 0.30.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (503) hide show
  1. package/dist/antivirus-clamav.adapter.d.ts.map +1 -1
  2. package/dist/antivirus-clamav.adapter.js +6 -6
  3. package/dist/antivirus-clamav.adapter.js.map +1 -1
  4. package/dist/antivirus.port.d.ts +3 -6
  5. package/dist/antivirus.port.d.ts.map +1 -1
  6. package/dist/antivirus.port.js +1 -12
  7. package/dist/antivirus.port.js.map +1 -1
  8. package/dist/api-version.middleware.d.ts +4 -2
  9. package/dist/api-version.middleware.d.ts.map +1 -1
  10. package/dist/api-version.middleware.js.map +1 -1
  11. package/dist/basic-auth-password.vo.d.ts +9 -0
  12. package/dist/basic-auth-password.vo.d.ts.map +1 -0
  13. package/dist/basic-auth-password.vo.js +12 -0
  14. package/dist/basic-auth-password.vo.js.map +1 -0
  15. package/dist/basic-auth-username.vo.d.ts +9 -0
  16. package/dist/basic-auth-username.vo.d.ts.map +1 -0
  17. package/dist/basic-auth-username.vo.js +12 -0
  18. package/dist/basic-auth-username.vo.js.map +1 -0
  19. package/dist/basic-auth.service.d.ts +5 -22
  20. package/dist/basic-auth.service.d.ts.map +1 -1
  21. package/dist/basic-auth.service.js +0 -15
  22. package/dist/basic-auth.service.js.map +1 -1
  23. package/dist/better-auth-logger.service.d.ts.map +1 -1
  24. package/dist/better-auth-logger.service.js +4 -2
  25. package/dist/better-auth-logger.service.js.map +1 -1
  26. package/dist/binary.vo.d.ts +10 -0
  27. package/dist/binary.vo.d.ts.map +1 -0
  28. package/dist/binary.vo.js +16 -0
  29. package/dist/binary.vo.js.map +1 -0
  30. package/dist/build-info-repository.service.d.ts +2 -1
  31. package/dist/build-info-repository.service.d.ts.map +1 -1
  32. package/dist/build-info-repository.service.js +2 -5
  33. package/dist/build-info-repository.service.js.map +1 -1
  34. package/dist/cache-file.service.d.ts.map +1 -1
  35. package/dist/cache-file.service.js +1 -1
  36. package/dist/cache-file.service.js.map +1 -1
  37. package/dist/cache-response.middleware.d.ts.map +1 -1
  38. package/dist/cache-response.middleware.js.map +1 -1
  39. package/dist/certificate-inspector-tls.adapter.d.ts +1 -1
  40. package/dist/certificate-inspector-tls.adapter.d.ts.map +1 -1
  41. package/dist/certificate-inspector-tls.adapter.js +2 -2
  42. package/dist/certificate-inspector-tls.adapter.js.map +1 -1
  43. package/dist/client-from-hono.adapter.d.ts +1 -1
  44. package/dist/client-from-hono.adapter.d.ts.map +1 -1
  45. package/dist/client-from-hono.adapter.js +1 -1
  46. package/dist/client-from-hono.adapter.js.map +1 -1
  47. package/dist/clock-system.adapter.d.ts.map +1 -1
  48. package/dist/clock-system.adapter.js +1 -2
  49. package/dist/clock-system.adapter.js.map +1 -1
  50. package/dist/clock.port.d.ts.map +1 -1
  51. package/dist/context.middleware.d.ts.map +1 -1
  52. package/dist/context.middleware.js.map +1 -1
  53. package/dist/correlation-id.vo.d.ts.map +1 -1
  54. package/dist/correlation-storage.service.d.ts +3 -0
  55. package/dist/correlation-storage.service.d.ts.map +1 -1
  56. package/dist/correlation-storage.service.js +2 -1
  57. package/dist/correlation-storage.service.js.map +1 -1
  58. package/dist/env-validator.service.d.ts +3 -1
  59. package/dist/env-validator.service.d.ts.map +1 -1
  60. package/dist/env-validator.service.js +2 -2
  61. package/dist/env-validator.service.js.map +1 -1
  62. package/dist/etag-extractor.middleware.js +2 -2
  63. package/dist/etag-extractor.middleware.js.map +1 -1
  64. package/dist/event-store-like.types.d.ts.map +1 -1
  65. package/dist/event-stream.vo.d.ts +4 -2
  66. package/dist/event-stream.vo.d.ts.map +1 -1
  67. package/dist/event-stream.vo.js +8 -4
  68. package/dist/event-stream.vo.js.map +1 -1
  69. package/dist/file-cleaner-bun-forgiving.adapter.d.ts +6 -0
  70. package/dist/file-cleaner-bun-forgiving.adapter.d.ts.map +1 -0
  71. package/dist/file-cleaner-bun-forgiving.adapter.js +9 -0
  72. package/dist/file-cleaner-bun-forgiving.adapter.js.map +1 -0
  73. package/dist/file-cleaner-bun.adapter.d.ts +6 -0
  74. package/dist/file-cleaner-bun.adapter.d.ts.map +1 -0
  75. package/dist/file-cleaner-bun.adapter.js +6 -0
  76. package/dist/file-cleaner-bun.adapter.js.map +1 -0
  77. package/dist/file-cleaner-noop.adapter.d.ts +6 -0
  78. package/dist/file-cleaner-noop.adapter.d.ts.map +1 -0
  79. package/dist/file-cleaner-noop.adapter.js +4 -0
  80. package/dist/file-cleaner-noop.adapter.js.map +1 -0
  81. package/dist/file-cleaner.port.d.ts +5 -0
  82. package/dist/file-cleaner.port.d.ts.map +1 -0
  83. package/dist/file-cleaner.port.js +2 -0
  84. package/dist/file-cleaner.port.js.map +1 -0
  85. package/dist/file-draft.service.js +2 -2
  86. package/dist/file-draft.service.js.map +1 -1
  87. package/dist/file-renamer-fs-forgiving.adapter.d.ts +6 -0
  88. package/dist/file-renamer-fs-forgiving.adapter.d.ts.map +1 -0
  89. package/dist/file-renamer-fs-forgiving.adapter.js +12 -0
  90. package/dist/file-renamer-fs-forgiving.adapter.js.map +1 -0
  91. package/dist/file-renamer-fs.adapter.d.ts +6 -0
  92. package/dist/file-renamer-fs.adapter.d.ts.map +1 -0
  93. package/dist/file-renamer-fs.adapter.js +9 -0
  94. package/dist/file-renamer-fs.adapter.js.map +1 -0
  95. package/dist/file-renamer-noop.adapter.d.ts +6 -0
  96. package/dist/file-renamer-noop.adapter.d.ts.map +1 -0
  97. package/dist/file-renamer-noop.adapter.js +4 -0
  98. package/dist/file-renamer-noop.adapter.js.map +1 -0
  99. package/dist/file-renamer.port.d.ts +5 -0
  100. package/dist/file-renamer.port.d.ts.map +1 -0
  101. package/dist/file-renamer.port.js +2 -0
  102. package/dist/file-renamer.port.js.map +1 -0
  103. package/dist/graceful-shutdown.service.d.ts.map +1 -1
  104. package/dist/graceful-shutdown.service.js +1 -3
  105. package/dist/graceful-shutdown.service.js.map +1 -1
  106. package/dist/hcaptcha-secret-key.vo.d.ts +8 -0
  107. package/dist/hcaptcha-secret-key.vo.d.ts.map +1 -0
  108. package/dist/hcaptcha-secret-key.vo.js +10 -0
  109. package/dist/hcaptcha-secret-key.vo.js.map +1 -0
  110. package/dist/hcaptcha-site-key.vo.d.ts +8 -0
  111. package/dist/hcaptcha-site-key.vo.d.ts.map +1 -0
  112. package/dist/hcaptcha-site-key.vo.js +10 -0
  113. package/dist/hcaptcha-site-key.vo.js.map +1 -0
  114. package/dist/healthcheck.service.d.ts +4 -0
  115. package/dist/healthcheck.service.d.ts.map +1 -1
  116. package/dist/healthcheck.service.js +3 -3
  117. package/dist/healthcheck.service.js.map +1 -1
  118. package/dist/http-logger.middleware.d.ts.map +1 -1
  119. package/dist/http-logger.middleware.js +9 -9
  120. package/dist/http-logger.middleware.js.map +1 -1
  121. package/dist/i18n.service.d.ts +10 -3
  122. package/dist/i18n.service.d.ts.map +1 -1
  123. package/dist/i18n.service.js +7 -11
  124. package/dist/i18n.service.js.map +1 -1
  125. package/dist/id-provider-deterministic.adapter.d.ts +3 -0
  126. package/dist/id-provider-deterministic.adapter.d.ts.map +1 -1
  127. package/dist/id-provider-deterministic.adapter.js +4 -1
  128. package/dist/id-provider-deterministic.adapter.js.map +1 -1
  129. package/dist/image-alpha-noop.adapter.d.ts +1 -1
  130. package/dist/image-alpha-sharp.adapter.d.ts +8 -1
  131. package/dist/image-alpha-sharp.adapter.d.ts.map +1 -1
  132. package/dist/image-alpha-sharp.adapter.js +6 -3
  133. package/dist/image-alpha-sharp.adapter.js.map +1 -1
  134. package/dist/image-blur-noop.adapter.d.ts +1 -1
  135. package/dist/image-blur-sharp.adapter.d.ts +8 -1
  136. package/dist/image-blur-sharp.adapter.d.ts.map +1 -1
  137. package/dist/image-blur-sharp.adapter.js +6 -3
  138. package/dist/image-blur-sharp.adapter.js.map +1 -1
  139. package/dist/image-compressor-noop.adapter.d.ts +1 -1
  140. package/dist/image-compressor-sharp.adapter.d.ts +8 -1
  141. package/dist/image-compressor-sharp.adapter.d.ts.map +1 -1
  142. package/dist/image-compressor-sharp.adapter.js +5 -2
  143. package/dist/image-compressor-sharp.adapter.js.map +1 -1
  144. package/dist/image-exif-clear-noop.adapter.d.ts +1 -1
  145. package/dist/image-exif-clear-sharp.adapter.d.ts +8 -1
  146. package/dist/image-exif-clear-sharp.adapter.d.ts.map +1 -1
  147. package/dist/image-exif-clear-sharp.adapter.js +5 -2
  148. package/dist/image-exif-clear-sharp.adapter.js.map +1 -1
  149. package/dist/image-formatter-sharp.adapter.d.ts +10 -1
  150. package/dist/image-formatter-sharp.adapter.d.ts.map +1 -1
  151. package/dist/image-formatter-sharp.adapter.js +8 -5
  152. package/dist/image-formatter-sharp.adapter.js.map +1 -1
  153. package/dist/image-info-noop.adapter.d.ts +2 -2
  154. package/dist/image-info-sharp.adapter.d.ts +2 -2
  155. package/dist/image-info-sharp.adapter.d.ts.map +1 -1
  156. package/dist/image-info-sharp.adapter.js +5 -9
  157. package/dist/image-info-sharp.adapter.js.map +1 -1
  158. package/dist/image-processor-sharp.adapter.d.ts +9 -0
  159. package/dist/image-processor-sharp.adapter.d.ts.map +1 -1
  160. package/dist/image-processor-sharp.adapter.js +8 -5
  161. package/dist/image-processor-sharp.adapter.js.map +1 -1
  162. package/dist/image-resizer-noop.adapter.d.ts +1 -1
  163. package/dist/image-resizer-sharp.adapter.d.ts +8 -1
  164. package/dist/image-resizer-sharp.adapter.d.ts.map +1 -1
  165. package/dist/image-resizer-sharp.adapter.js +5 -2
  166. package/dist/image-resizer-sharp.adapter.js.map +1 -1
  167. package/dist/index.d.ts +25 -5
  168. package/dist/index.d.ts.map +1 -1
  169. package/dist/index.js +25 -5
  170. package/dist/index.js.map +1 -1
  171. package/dist/json-file-reader-bun-forgiving.adapter.d.ts +6 -0
  172. package/dist/json-file-reader-bun-forgiving.adapter.d.ts.map +1 -0
  173. package/dist/json-file-reader-bun-forgiving.adapter.js +11 -0
  174. package/dist/json-file-reader-bun-forgiving.adapter.js.map +1 -0
  175. package/dist/json-file-reader-bun.adapter.d.ts +6 -0
  176. package/dist/json-file-reader-bun.adapter.d.ts.map +1 -0
  177. package/dist/json-file-reader-bun.adapter.js +6 -0
  178. package/dist/json-file-reader-bun.adapter.js.map +1 -0
  179. package/dist/json-file-reader-noop.adapter.d.ts +8 -0
  180. package/dist/json-file-reader-noop.adapter.d.ts.map +1 -0
  181. package/dist/json-file-reader-noop.adapter.js +10 -0
  182. package/dist/json-file-reader-noop.adapter.js.map +1 -0
  183. package/dist/json-file-reader.port.d.ts +5 -0
  184. package/dist/json-file-reader.port.d.ts.map +1 -0
  185. package/dist/json-file-reader.port.js +2 -0
  186. package/dist/json-file-reader.port.js.map +1 -0
  187. package/dist/logger-format-error.service.d.ts +1 -1
  188. package/dist/logger-format-error.service.d.ts.map +1 -1
  189. package/dist/logger-format-error.service.js +9 -9
  190. package/dist/logger-format-error.service.js.map +1 -1
  191. package/dist/logger.port.d.ts +0 -4
  192. package/dist/logger.port.d.ts.map +1 -1
  193. package/dist/mailer-smtp-with-logger.adapter.d.ts.map +1 -1
  194. package/dist/mailer-smtp-with-logger.adapter.js.map +1 -1
  195. package/dist/mailer-smtp.adapter.d.ts +2 -23
  196. package/dist/mailer-smtp.adapter.d.ts.map +1 -1
  197. package/dist/mailer-smtp.adapter.js +0 -10
  198. package/dist/mailer-smtp.adapter.js.map +1 -1
  199. package/dist/mailer.vo.d.ts +34 -0
  200. package/dist/mailer.vo.d.ts.map +1 -0
  201. package/dist/mailer.vo.js +21 -0
  202. package/dist/mailer.vo.js.map +1 -0
  203. package/dist/modules/history/event-handlers/onHistoryPopulatedEvent.d.ts.map +1 -1
  204. package/dist/modules/history/event-handlers/onHistoryPopulatedEvent.js.map +1 -1
  205. package/dist/modules/history/events/HISTORY_CLEARED_EVENT.d.ts +4 -4
  206. package/dist/modules/history/events/HISTORY_CLEARED_EVENT.d.ts.map +1 -1
  207. package/dist/modules/history/events/HISTORY_CLEARED_EVENT.js +2 -8
  208. package/dist/modules/history/events/HISTORY_CLEARED_EVENT.js.map +1 -1
  209. package/dist/modules/history/events/HISTORY_POPULATED_EVENT.d.ts +6 -6
  210. package/dist/modules/history/events/HISTORY_POPULATED_EVENT.d.ts.map +1 -1
  211. package/dist/modules/history/events/HISTORY_POPULATED_EVENT.js +2 -8
  212. package/dist/modules/history/events/HISTORY_POPULATED_EVENT.js.map +1 -1
  213. package/dist/modules/history/ports/history-writer.d.ts.map +1 -1
  214. package/dist/modules/history/value-objects/history-subject.d.ts.map +1 -1
  215. package/dist/modules/preferences/open-host-queries/user-language.d.ts.map +1 -1
  216. package/dist/modules/preferences/open-host-queries/user-language.js.map +1 -1
  217. package/dist/modules/preferences/ports/user-language-resolver.d.ts +3 -3
  218. package/dist/modules/preferences/ports/user-language-resolver.d.ts.map +1 -1
  219. package/dist/modules/preferences/ports/user-language-resolver.js +2 -7
  220. package/dist/modules/preferences/ports/user-language-resolver.js.map +1 -1
  221. package/dist/modules/preferences/value-objects/supported-languages-set.d.ts +3 -3
  222. package/dist/modules/preferences/value-objects/supported-languages-set.d.ts.map +1 -1
  223. package/dist/modules/preferences/value-objects/supported-languages-set.js +2 -7
  224. package/dist/modules/preferences/value-objects/supported-languages-set.js.map +1 -1
  225. package/dist/pdf-generator-noop.adapter.d.ts +1 -1
  226. package/dist/pdf-generator-noop.adapter.d.ts.map +1 -1
  227. package/dist/pdf-generator-noop.adapter.js +1 -1
  228. package/dist/pdf-generator-noop.adapter.js.map +1 -1
  229. package/dist/port.vo.d.ts +4 -0
  230. package/dist/port.vo.d.ts.map +1 -1
  231. package/dist/port.vo.js +7 -1
  232. package/dist/port.vo.js.map +1 -1
  233. package/dist/prerequisites/binary.d.ts +2 -5
  234. package/dist/prerequisites/binary.d.ts.map +1 -1
  235. package/dist/prerequisites/binary.js +1 -8
  236. package/dist/prerequisites/binary.js.map +1 -1
  237. package/dist/prerequisites/dependency-vulnerabilities.js +3 -3
  238. package/dist/prerequisites/dependency-vulnerabilities.js.map +1 -1
  239. package/dist/prerequisites/directory.d.ts.map +1 -1
  240. package/dist/prerequisites/directory.js.map +1 -1
  241. package/dist/prerequisites/jobs.d.ts.map +1 -1
  242. package/dist/prerequisites/jobs.js +1 -2
  243. package/dist/prerequisites/jobs.js.map +1 -1
  244. package/dist/prerequisites/log-file.d.ts.map +1 -1
  245. package/dist/prerequisites/log-file.js.map +1 -1
  246. package/dist/prerequisites/mailer.d.ts.map +1 -1
  247. package/dist/prerequisites/mailer.js.map +1 -1
  248. package/dist/prerequisites/memory.js +1 -1
  249. package/dist/prerequisites/memory.js.map +1 -1
  250. package/dist/prerequisites/node.d.ts.map +1 -1
  251. package/dist/prerequisites/node.js.map +1 -1
  252. package/dist/prerequisites/port.d.ts.map +1 -1
  253. package/dist/prerequisites/port.js.map +1 -1
  254. package/dist/prerequisites/ram.d.ts.map +1 -1
  255. package/dist/prerequisites/ram.js +1 -1
  256. package/dist/prerequisites/ram.js.map +1 -1
  257. package/dist/prerequisites/running-user.d.ts.map +1 -1
  258. package/dist/prerequisites/running-user.js.map +1 -1
  259. package/dist/prerequisites/space.d.ts.map +1 -1
  260. package/dist/prerequisites/space.js +1 -1
  261. package/dist/prerequisites/space.js.map +1 -1
  262. package/dist/prerequisites/sqlite.d.ts.map +1 -1
  263. package/dist/prerequisites/sqlite.js +1 -1
  264. package/dist/prerequisites/sqlite.js.map +1 -1
  265. package/dist/prerequisites/ssl-certificate-expiry.js +1 -1
  266. package/dist/prerequisites/ssl-certificate-expiry.js.map +1 -1
  267. package/dist/prerequisites/timezone-utc.d.ts.map +1 -1
  268. package/dist/prerequisites/timezone-utc.js.map +1 -1
  269. package/dist/prerequisites/translations.d.ts +10 -3
  270. package/dist/prerequisites/translations.d.ts.map +1 -1
  271. package/dist/prerequisites/translations.js +15 -10
  272. package/dist/prerequisites/translations.js.map +1 -1
  273. package/dist/prerequisites.service.d.ts +3 -0
  274. package/dist/prerequisites.service.d.ts.map +1 -1
  275. package/dist/prerequisites.service.js +3 -3
  276. package/dist/prerequisites.service.js.map +1 -1
  277. package/dist/rate-limit-store-node-cache.adapter.d.ts +2 -2
  278. package/dist/rate-limit-store-node-cache.adapter.d.ts.map +1 -1
  279. package/dist/rate-limit-store-node-cache.adapter.js +1 -1
  280. package/dist/rate-limit-store-node-cache.adapter.js.map +1 -1
  281. package/dist/rate-limit-store.port.d.ts +1 -1
  282. package/dist/rate-limit-store.port.d.ts.map +1 -1
  283. package/dist/recaptcha-secret-key.vo.d.ts +8 -0
  284. package/dist/recaptcha-secret-key.vo.d.ts.map +1 -0
  285. package/dist/recaptcha-secret-key.vo.js +10 -0
  286. package/dist/recaptcha-secret-key.vo.js.map +1 -0
  287. package/dist/recaptcha-site-key.vo.d.ts +8 -0
  288. package/dist/recaptcha-site-key.vo.d.ts.map +1 -0
  289. package/dist/recaptcha-site-key.vo.js +10 -0
  290. package/dist/recaptcha-site-key.vo.js.map +1 -0
  291. package/dist/redactor-encrypt.adapter.js +2 -2
  292. package/dist/redactor-encrypt.adapter.js.map +1 -1
  293. package/dist/redactor-mask.adapter.d.ts.map +1 -1
  294. package/dist/redactor-mask.adapter.js +0 -3
  295. package/dist/redactor-mask.adapter.js.map +1 -1
  296. package/dist/remote-file-storage-disk.adapter.d.ts +9 -2
  297. package/dist/remote-file-storage-disk.adapter.d.ts.map +1 -1
  298. package/dist/remote-file-storage-disk.adapter.js +7 -9
  299. package/dist/remote-file-storage-disk.adapter.js.map +1 -1
  300. package/dist/safe-parse-body.service.d.ts.map +1 -1
  301. package/dist/safe-parse-body.service.js +1 -1
  302. package/dist/safe-parse-body.service.js.map +1 -1
  303. package/dist/setup.service.d.ts +3 -1
  304. package/dist/setup.service.d.ts.map +1 -1
  305. package/dist/setup.service.js +1 -1
  306. package/dist/setup.service.js.map +1 -1
  307. package/dist/shield-api-key.middleware.d.ts.map +1 -1
  308. package/dist/shield-api-key.middleware.js +1 -2
  309. package/dist/shield-api-key.middleware.js.map +1 -1
  310. package/dist/shield-auth.middleware.d.ts.map +1 -1
  311. package/dist/shield-auth.middleware.js +1 -3
  312. package/dist/shield-auth.middleware.js.map +1 -1
  313. package/dist/shield-captcha-hcaptcha-local.adapter.d.ts +2 -2
  314. package/dist/shield-captcha-hcaptcha-local.adapter.d.ts.map +1 -1
  315. package/dist/shield-captcha-hcaptcha-local.adapter.js +2 -2
  316. package/dist/shield-captcha-hcaptcha-local.adapter.js.map +1 -1
  317. package/dist/shield-captcha-hcaptcha.adapter.d.ts +2 -8
  318. package/dist/shield-captcha-hcaptcha.adapter.d.ts.map +1 -1
  319. package/dist/shield-captcha-hcaptcha.adapter.js +2 -6
  320. package/dist/shield-captcha-hcaptcha.adapter.js.map +1 -1
  321. package/dist/shield-captcha-noop.adapter.d.ts +1 -1
  322. package/dist/shield-captcha-noop.adapter.d.ts.map +1 -1
  323. package/dist/shield-captcha-noop.adapter.js +1 -1
  324. package/dist/shield-captcha-noop.adapter.js.map +1 -1
  325. package/dist/shield-captcha-recaptcha.adapter.d.ts +3 -7
  326. package/dist/shield-captcha-recaptcha.adapter.d.ts.map +1 -1
  327. package/dist/shield-captcha-recaptcha.adapter.js +12 -17
  328. package/dist/shield-captcha-recaptcha.adapter.js.map +1 -1
  329. package/dist/shield-rate-limit.middleware.d.ts +2 -2
  330. package/dist/shield-rate-limit.middleware.d.ts.map +1 -1
  331. package/dist/slower.middleware.d.ts.map +1 -1
  332. package/dist/slower.middleware.js.map +1 -1
  333. package/dist/temporary-file-absolute.adapter.d.ts +11 -3
  334. package/dist/temporary-file-absolute.adapter.d.ts.map +1 -1
  335. package/dist/temporary-file-absolute.adapter.js +11 -14
  336. package/dist/temporary-file-absolute.adapter.js.map +1 -1
  337. package/dist/temporary-file-noop.adapter.d.ts +1 -1
  338. package/dist/temporary-file-noop.adapter.d.ts.map +1 -1
  339. package/dist/temporary-file-noop.adapter.js +1 -1
  340. package/dist/temporary-file-noop.adapter.js.map +1 -1
  341. package/dist/temporary-file.port.d.ts +1 -1
  342. package/dist/temporary-file.port.d.ts.map +1 -1
  343. package/dist/time-zone-offset.middleware.d.ts.map +1 -1
  344. package/dist/time-zone-offset.middleware.js +2 -2
  345. package/dist/time-zone-offset.middleware.js.map +1 -1
  346. package/dist/translations.service.d.ts +8 -1
  347. package/dist/translations.service.d.ts.map +1 -1
  348. package/dist/translations.service.js +2 -2
  349. package/dist/translations.service.js.map +1 -1
  350. package/dist/tsconfig.tsbuildinfo +1 -1
  351. package/dist/uptime.service.js +3 -3
  352. package/dist/uptime.service.js.map +1 -1
  353. package/dist/uuid.vo.d.ts +3 -0
  354. package/dist/uuid.vo.d.ts.map +1 -1
  355. package/dist/uuid.vo.js +2 -1
  356. package/dist/uuid.vo.js.map +1 -1
  357. package/dist/visitor-id-hash-hono.adapter.d.ts +1 -1
  358. package/dist/visitor-id-hash-hono.adapter.d.ts.map +1 -1
  359. package/dist/visitor-id-hash-hono.adapter.js +4 -4
  360. package/dist/visitor-id-hash-hono.adapter.js.map +1 -1
  361. package/dist/visitor-id-hash.adapter.d.ts +1 -1
  362. package/dist/visitor-id-hash.adapter.d.ts.map +1 -1
  363. package/dist/visitor-id-hash.adapter.js +3 -3
  364. package/dist/visitor-id-hash.adapter.js.map +1 -1
  365. package/dist/weak-etag-extractor.middleware.js +2 -2
  366. package/dist/weak-etag-extractor.middleware.js.map +1 -1
  367. package/package.json +7 -7
  368. package/readme.md +20 -5
  369. package/src/antivirus-clamav.adapter.ts +7 -12
  370. package/src/antivirus.port.ts +1 -13
  371. package/src/api-version.middleware.ts +4 -4
  372. package/src/basic-auth-password.vo.ts +15 -0
  373. package/src/basic-auth-username.vo.ts +15 -0
  374. package/src/basic-auth.service.ts +3 -22
  375. package/src/better-auth-logger.service.ts +4 -3
  376. package/src/binary.vo.ts +20 -0
  377. package/src/build-info-repository.service.ts +5 -7
  378. package/src/cache-file.service.ts +2 -1
  379. package/src/cache-response.middleware.ts +3 -0
  380. package/src/certificate-inspector-tls.adapter.ts +3 -2
  381. package/src/client-from-hono.adapter.ts +1 -1
  382. package/src/clock-system.adapter.ts +2 -2
  383. package/src/clock.port.ts +1 -0
  384. package/src/context.middleware.ts +1 -0
  385. package/src/correlation-id.vo.ts +1 -0
  386. package/src/correlation-storage.service.ts +4 -1
  387. package/src/env-validator.service.ts +2 -2
  388. package/src/etag-extractor.middleware.ts +2 -2
  389. package/src/event-store-like.types.ts +1 -0
  390. package/src/event-stream.vo.ts +9 -4
  391. package/src/file-cleaner-bun-forgiving.adapter.ts +10 -0
  392. package/src/file-cleaner-bun.adapter.ts +8 -0
  393. package/src/file-cleaner-noop.adapter.ts +6 -0
  394. package/src/file-cleaner.port.ts +5 -0
  395. package/src/file-draft.service.ts +2 -2
  396. package/src/file-renamer-fs-forgiving.adapter.ts +17 -0
  397. package/src/file-renamer-fs.adapter.ts +15 -0
  398. package/src/file-renamer-noop.adapter.ts +9 -0
  399. package/src/file-renamer.port.ts +8 -0
  400. package/src/graceful-shutdown.service.ts +1 -3
  401. package/src/hcaptcha-secret-key.vo.ts +13 -0
  402. package/src/hcaptcha-site-key.vo.ts +13 -0
  403. package/src/healthcheck.service.ts +6 -4
  404. package/src/http-logger.middleware.ts +9 -10
  405. package/src/i18n.service.ts +14 -11
  406. package/src/id-provider-deterministic.adapter.ts +5 -1
  407. package/src/image-alpha-sharp.adapter.ts +7 -4
  408. package/src/image-blur-sharp.adapter.ts +7 -4
  409. package/src/image-compressor-sharp.adapter.ts +6 -2
  410. package/src/image-exif-clear-sharp.adapter.ts +6 -2
  411. package/src/image-formatter-sharp.adapter.ts +10 -5
  412. package/src/image-info-sharp.adapter.ts +5 -11
  413. package/src/image-processor-sharp.adapter.ts +10 -5
  414. package/src/image-resizer-sharp.adapter.ts +6 -3
  415. package/src/index.ts +25 -5
  416. package/src/json-file-reader-bun-forgiving.adapter.ts +12 -0
  417. package/src/json-file-reader-bun.adapter.ts +8 -0
  418. package/src/json-file-reader-noop.adapter.ts +10 -0
  419. package/src/json-file-reader.port.ts +5 -0
  420. package/src/logger-format-error.service.ts +10 -9
  421. package/src/logger.port.ts +0 -4
  422. package/src/mailer-smtp-with-logger.adapter.ts +2 -0
  423. package/src/mailer-smtp.adapter.ts +2 -31
  424. package/src/mailer.vo.ts +38 -0
  425. package/src/modules/history/event-handlers/onHistoryPopulatedEvent.ts +1 -0
  426. package/src/modules/history/events/HISTORY_CLEARED_EVENT.ts +2 -8
  427. package/src/modules/history/events/HISTORY_POPULATED_EVENT.ts +2 -8
  428. package/src/modules/history/ports/history-writer.ts +1 -0
  429. package/src/modules/history/value-objects/history-subject.ts +1 -0
  430. package/src/modules/preferences/open-host-queries/user-language.ts +1 -0
  431. package/src/modules/preferences/ports/user-language-resolver.ts +2 -7
  432. package/src/modules/preferences/value-objects/supported-languages-set.ts +2 -8
  433. package/src/pdf-generator-noop.adapter.ts +1 -1
  434. package/src/port.vo.ts +9 -1
  435. package/src/prerequisites/binary.ts +4 -14
  436. package/src/prerequisites/dependency-vulnerabilities.ts +3 -3
  437. package/src/prerequisites/directory.ts +1 -0
  438. package/src/prerequisites/jobs.ts +2 -4
  439. package/src/prerequisites/log-file.ts +1 -0
  440. package/src/prerequisites/mailer.ts +1 -0
  441. package/src/prerequisites/memory.ts +1 -1
  442. package/src/prerequisites/node.ts +1 -0
  443. package/src/prerequisites/port.ts +1 -0
  444. package/src/prerequisites/ram.ts +2 -1
  445. package/src/prerequisites/running-user.ts +1 -0
  446. package/src/prerequisites/space.ts +2 -1
  447. package/src/prerequisites/sqlite.ts +1 -2
  448. package/src/prerequisites/ssl-certificate-expiry.ts +1 -1
  449. package/src/prerequisites/timezone-utc.ts +1 -0
  450. package/src/prerequisites/translations.ts +29 -17
  451. package/src/prerequisites.service.ts +4 -4
  452. package/src/rate-limit-store-node-cache.adapter.ts +2 -2
  453. package/src/rate-limit-store.port.ts +1 -1
  454. package/src/recaptcha-secret-key.vo.ts +13 -0
  455. package/src/recaptcha-site-key.vo.ts +13 -0
  456. package/src/redactor-encrypt.adapter.ts +2 -2
  457. package/src/redactor-mask.adapter.ts +0 -3
  458. package/src/remote-file-storage-disk.adapter.ts +13 -14
  459. package/src/safe-parse-body.service.ts +2 -1
  460. package/src/setup.service.ts +3 -1
  461. package/src/shield-api-key.middleware.ts +1 -3
  462. package/src/shield-auth.middleware.ts +5 -3
  463. package/src/shield-captcha-hcaptcha-local.adapter.ts +4 -3
  464. package/src/shield-captcha-hcaptcha.adapter.ts +5 -13
  465. package/src/shield-captcha-noop.adapter.ts +1 -1
  466. package/src/shield-captcha-recaptcha.adapter.ts +15 -25
  467. package/src/shield-rate-limit.middleware.ts +2 -2
  468. package/src/slower.middleware.ts +1 -0
  469. package/src/temporary-file-absolute.adapter.ts +16 -14
  470. package/src/temporary-file-noop.adapter.ts +1 -1
  471. package/src/temporary-file.port.ts +2 -1
  472. package/src/time-zone-offset.middleware.ts +2 -5
  473. package/src/translations.service.ts +7 -4
  474. package/src/uptime.service.ts +3 -3
  475. package/src/uuid.vo.ts +4 -1
  476. package/src/visitor-id-hash-hono.adapter.ts +5 -5
  477. package/src/visitor-id-hash.adapter.ts +3 -3
  478. package/src/weak-etag-extractor.middleware.ts +2 -2
  479. package/dist/encryption.service.d.ts +0 -25
  480. package/dist/encryption.service.d.ts.map +0 -1
  481. package/dist/encryption.service.js +0 -35
  482. package/dist/encryption.service.js.map +0 -1
  483. package/dist/gzip.service.d.ts +0 -13
  484. package/dist/gzip.service.d.ts.map +0 -1
  485. package/dist/gzip.service.js +0 -18
  486. package/dist/gzip.service.js.map +0 -1
  487. package/dist/open-graph.service.d.ts +0 -104
  488. package/dist/open-graph.service.d.ts.map +0 -1
  489. package/dist/open-graph.service.js +0 -159
  490. package/dist/open-graph.service.js.map +0 -1
  491. package/dist/sitemap.service.d.ts +0 -28
  492. package/dist/sitemap.service.d.ts.map +0 -1
  493. package/dist/sitemap.service.js +0 -57
  494. package/dist/sitemap.service.js.map +0 -1
  495. package/dist/url-wo-trailing-slash.vo.d.ts +0 -4
  496. package/dist/url-wo-trailing-slash.vo.d.ts.map +0 -1
  497. package/dist/url-wo-trailing-slash.vo.js +0 -8
  498. package/dist/url-wo-trailing-slash.vo.js.map +0 -1
  499. package/src/encryption.service.ts +0 -45
  500. package/src/gzip.service.ts +0 -23
  501. package/src/open-graph.service.ts +0 -242
  502. package/src/sitemap.service.ts +0 -91
  503. package/src/url-wo-trailing-slash.vo.ts +0 -9
package/src/index.ts CHANGED
@@ -4,7 +4,10 @@ export * from "./antivirus-clamav.adapter";
4
4
  export * from "./antivirus-noop.adapter";
5
5
  export * from "./api-version.middleware";
6
6
  export * from "./basic-auth.service";
7
+ export * from "./basic-auth-password.vo";
8
+ export * from "./basic-auth-username.vo";
7
9
  export * from "./better-auth-logger.service";
10
+ export * from "./binary.vo";
8
11
  export * from "./build-info-repository.service";
9
12
  export * from "./cache-file.service";
10
13
  export * from "./cache-resolver.service";
@@ -27,7 +30,6 @@ export * from "./csv-stringifier.adapter";
27
30
  export * from "./csv-stringifier.port";
28
31
  export * from "./decorators.service";
29
32
  export * from "./dispatching-event-store";
30
- export * from "./encryption.service";
31
33
  export * from "./env-validator.service";
32
34
  export * from "./etag-extractor.middleware";
33
35
  export * from "./event.types";
@@ -38,14 +40,27 @@ export * from "./event-logger.service";
38
40
  export * from "./event-store";
39
41
  export * from "./event-store-like.types";
40
42
  export * from "./event-stream.vo";
43
+ export * from "./file-cleaner.port";
44
+ export * from "./file-cleaner-bun.adapter";
45
+ export * from "./file-cleaner-bun-forgiving.adapter";
46
+ export * from "./file-cleaner-noop.adapter";
41
47
  export * from "./file-draft.service";
42
48
  export * from "./file-draft-zip.service";
43
49
  export * from "./file-hash.port";
44
50
  export * from "./file-hash-noop.adapter";
45
51
  export * from "./file-hash-sha256-bun.adapter";
52
+ export * from "./file-renamer.port";
53
+ export * from "./file-renamer.port";
54
+ export * from "./file-renamer-fs.adapter";
55
+ export * from "./file-renamer-fs.adapter";
56
+ export * from "./file-renamer-fs-forgiving.adapter";
57
+ export * from "./file-renamer-fs-forgiving.adapter";
58
+ export * from "./file-renamer-noop.adapter";
59
+ export * from "./file-renamer-noop.adapter";
46
60
  export * from "./file-uploader.middleware";
47
61
  export * from "./graceful-shutdown.service";
48
- export * from "./gzip.service";
62
+ export * from "./hcaptcha-secret-key.vo";
63
+ export * from "./hcaptcha-site-key.vo";
49
64
  export * from "./healthcheck.service";
50
65
  export * from "./http-logger.middleware";
51
66
  export * from "./i18n.service";
@@ -79,6 +94,10 @@ export * from "./image-resizer-sharp.adapter";
79
94
  export * from "./invariant.service";
80
95
  export * from "./invariant-error-handler.service";
81
96
  export * from "./jobs.service";
97
+ export * from "./json-file-reader.port";
98
+ export * from "./json-file-reader-bun.adapter";
99
+ export * from "./json-file-reader-bun-forgiving.adapter";
100
+ export * from "./json-file-reader-noop.adapter";
82
101
  export * from "./logger.port";
83
102
  export * from "./logger-format-error.service";
84
103
  export * from "./logger-noop.adapter";
@@ -86,6 +105,8 @@ export * from "./logger-winston.adapter";
86
105
  export * from "./logger-winston-local.adapter";
87
106
  export * from "./logger-winston-production.adapter";
88
107
  export * from "./mailer.port";
108
+ export * from "./mailer.vo";
109
+ export * from "./mailer.vo";
89
110
  export * from "./mailer-noop.adapter";
90
111
  export * from "./mailer-smtp.adapter";
91
112
  export * from "./mailer-smtp-with-logger.adapter";
@@ -93,7 +114,6 @@ export * from "./memory-consumption.service";
93
114
  export * as History from "./modules/history";
94
115
  export * as Preferences from "./modules/preferences";
95
116
  export * from "./node-env.vo";
96
- export * from "./open-graph.service";
97
117
  export * from "./pdf-generator.port";
98
118
  export * from "./pdf-generator-noop.adapter";
99
119
  export * from "./port.vo";
@@ -101,6 +121,8 @@ export * from "./prerequisites/index";
101
121
  export * from "./prerequisites.service";
102
122
  export * from "./rate-limit-store.port";
103
123
  export * from "./rate-limit-store-node-cache.adapter";
124
+ export * from "./recaptcha-secret-key.vo";
125
+ export * from "./recaptcha-site-key.vo";
104
126
  export * from "./redactor.port";
105
127
  export * from "./redactor-compact-array.adapter";
106
128
  export * from "./redactor-compact-object.adapter";
@@ -122,7 +144,6 @@ export * from "./shield-captcha-noop.adapter";
122
144
  export * from "./shield-captcha-recaptcha.adapter";
123
145
  export * from "./shield-rate-limit.middleware";
124
146
  export * from "./simulated-error.middleware";
125
- export * from "./sitemap.service";
126
147
  export * from "./slower.middleware";
127
148
  export * from "./temporary-file.port";
128
149
  export * from "./temporary-file-absolute.adapter";
@@ -131,7 +152,6 @@ export * from "./time-zone-offset.middleware";
131
152
  export * from "./to-event-map.types";
132
153
  export * from "./translations.service";
133
154
  export * from "./uptime.service";
134
- export * from "./url-wo-trailing-slash.vo";
135
155
  export * from "./uuid.vo";
136
156
  export * from "./visitor-id.port";
137
157
  export * from "./visitor-id-hash.adapter";
@@ -0,0 +1,12 @@
1
+ import type * as tools from "@bgord/tools";
2
+ import type { JsonFileReaderPort } from "./json-file-reader.port";
3
+
4
+ export class JsonFileReaderBunForgivingAdapter implements JsonFileReaderPort {
5
+ async read(path: tools.FilePathRelative | tools.FilePathAbsolute | string): Promise<Record<string, any>> {
6
+ try {
7
+ return Bun.file(typeof path === "string" ? path : path.get()).json();
8
+ } catch {
9
+ return {};
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,8 @@
1
+ import type * as tools from "@bgord/tools";
2
+ import type { JsonFileReaderPort } from "./json-file-reader.port";
3
+
4
+ export class JsonFileReaderBunAdapter implements JsonFileReaderPort {
5
+ async read(path: tools.FilePathRelative | tools.FilePathAbsolute | string): Promise<Record<string, any>> {
6
+ return Bun.file(typeof path === "string" ? path : path.get()).json();
7
+ }
8
+ }
@@ -0,0 +1,10 @@
1
+ import type * as tools from "@bgord/tools";
2
+ import type { JsonFileReaderPort } from "./json-file-reader.port";
3
+
4
+ export class JsonFileReaderNoopAdapter implements JsonFileReaderPort {
5
+ constructor(private readonly json: Record<string, any>) {}
6
+
7
+ async read(_path: tools.FilePathRelative | tools.FilePathAbsolute | string): Promise<Record<string, any>> {
8
+ return this.json;
9
+ }
10
+ }
@@ -0,0 +1,5 @@
1
+ import type * as tools from "@bgord/tools";
2
+
3
+ export interface JsonFileReaderPort {
4
+ read(path: tools.FilePathRelative | tools.FilePathAbsolute | string): Promise<Record<string, any>>;
5
+ }
@@ -1,14 +1,15 @@
1
1
  import type { ErrorInfo } from "./logger.port";
2
2
 
3
- export function formatError(err: unknown): ErrorInfo {
4
- if (err instanceof Error) {
5
- const code = (err as any)?.code;
6
- const cause = (err as any)?.cause;
3
+ export function formatError(error: unknown): ErrorInfo {
4
+ if (error instanceof Error) {
5
+ const code = (error as any)?.code;
6
+ const cause = error?.cause;
7
+
7
8
  return {
8
- name: err.name ?? "Error",
9
- message: err.message ?? "Unknown error",
10
- stack: err.stack, // always include if present
11
- code: code != null ? String(code) : undefined,
9
+ name: error.name ?? "Error",
10
+ message: error.message ?? "Unknown error",
11
+ stack: error.stack,
12
+ code: code ?? undefined,
12
13
  cause:
13
14
  cause instanceof Error
14
15
  ? { name: cause.name, message: cause.message }
@@ -19,6 +20,6 @@ export function formatError(err: unknown): ErrorInfo {
19
20
  }
20
21
  return {
21
22
  name: "NonErrorThrown",
22
- message: typeof err === "string" ? err : String(err),
23
+ message: typeof error === "string" ? error : String(error),
23
24
  };
24
25
  }
@@ -24,16 +24,12 @@ export enum LogLevelEnum {
24
24
  export const LogLevel = z.enum(LogLevelEnum);
25
25
 
26
26
  export type LogCoreType = {
27
- /** ISO-8601 UTC string with milliseconds, e.g. 2025-08-23T18:42:31.123Z */
28
27
  timestamp: string;
29
28
  level: LogLevelEnum;
30
29
  app: LogAppType;
31
30
  environment: NodeEnvironmentEnum;
32
- /** Bounded context / subsystem, e.g., "http" | "emotions" | "publishing" | "infra" */
33
31
  component: string;
34
- /** Machine-friendly operation name, e.g., "weekly_review_generate" */
35
32
  operation: string;
36
- /** Short human-readable sentence */
37
33
  message: string;
38
34
  correlationId?: CorrelationIdType;
39
35
  metadata?: Record<string, any>;
@@ -17,9 +17,11 @@ export class MailerSmtpWithLoggerAdapter implements MailerPort {
17
17
  this.config.logger.info({ message: "Mailer attempt", metadata: message, ...this.base });
18
18
  const result = await this.config.smtpMailer.send(message);
19
19
  this.config.logger.info({ message: "Mailer success", metadata: { message, result }, ...this.base });
20
+
20
21
  return result;
21
22
  } catch (error) {
22
23
  this.config.logger.error({ message: "Mailer error", error: formatError(error), ...this.base });
24
+
23
25
  throw error;
24
26
  }
25
27
  }
@@ -1,19 +1,6 @@
1
1
  import nodemailer, { type SendMailOptions } from "nodemailer";
2
- import { z } from "zod/v4";
3
2
  import type { MailerPort } from "./mailer.port";
4
- import { Port } from "./port.vo";
5
-
6
- export const SmtpHost = z.string().trim().min(1);
7
- export type SmtpHostType = z.infer<typeof SmtpHost>;
8
-
9
- export const SmtpPort = Port;
10
- export type SmtpPortType = z.infer<typeof SmtpPort>;
11
-
12
- export const SmtpUser = z.string().trim().min(1);
13
- export type SmtpUserType = z.infer<typeof SmtpUser>;
14
-
15
- export const SmtpPass = z.string().trim().min(1);
16
- export type SmtpPassType = z.infer<typeof SmtpPass>;
3
+ import type { SmtpHostType, SmtpPassType, SmtpPortType, SmtpUserType } from "./mailer.vo";
17
4
 
18
5
  type MailerConfigType = {
19
6
  SMTP_HOST: SmtpHostType;
@@ -22,22 +9,6 @@ type MailerConfigType = {
22
9
  SMTP_PASS: SmtpPassType;
23
10
  };
24
11
 
25
- type MailerSendOptionsType = SendMailOptions;
26
-
27
- export const EmailSubject = z.string().min(1).max(128);
28
- export type EmailSubjectType = z.infer<typeof EmailSubject>;
29
-
30
- export const EmailContentHtml = z.string().min(1).max(10_000);
31
- export type EmailContentHtmlType = z.infer<typeof EmailContentHtml>;
32
-
33
- export const EmailFrom = z.email();
34
- export type EmailFromType = z.infer<typeof EmailFrom>;
35
-
36
- export const EmailTo = z.email();
37
- export type EmailToType = z.infer<typeof EmailTo>;
38
-
39
- export type EmailAttachmentType = { filename: string; path: string };
40
-
41
12
  export class MailerSmtpAdapter implements MailerPort {
42
13
  private readonly transport: nodemailer.Transporter;
43
14
 
@@ -49,7 +20,7 @@ export class MailerSmtpAdapter implements MailerPort {
49
20
  });
50
21
  }
51
22
 
52
- async send(message: MailerSendOptionsType): Promise<unknown> {
23
+ async send(message: SendMailOptions): Promise<unknown> {
53
24
  return this.transport.sendMail(message);
54
25
  }
55
26
 
@@ -0,0 +1,38 @@
1
+ import { z } from "zod/v4";
2
+ import { Port } from "./port.vo";
3
+
4
+ export const SmtpHost = z.string().min(1);
5
+ export type SmtpHostType = z.infer<typeof SmtpHost>;
6
+
7
+ export const SmtpPort = Port;
8
+ export type SmtpPortType = z.infer<typeof SmtpPort>;
9
+
10
+ export const SmtpUser = z.string().min(1);
11
+ export type SmtpUserType = z.infer<typeof SmtpUser>;
12
+
13
+ export const SmtpPass = z.string().min(1);
14
+ export type SmtpPassType = z.infer<typeof SmtpPass>;
15
+
16
+ export const EmailSubjectError = { Invalid: "email.subject.invalid" } as const;
17
+ export const EmailSubject = z
18
+ .string(EmailSubjectError.Invalid)
19
+ .min(1, EmailSubjectError.Invalid)
20
+ .max(128, EmailSubjectError.Invalid);
21
+ export type EmailSubjectType = z.infer<typeof EmailSubject>;
22
+
23
+ export const EmailContentHtmlError = { Invalid: "email.content.html.invalid" } as const;
24
+ export const EmailContentHtml = z
25
+ .string(EmailContentHtmlError.Invalid)
26
+ .min(1, EmailContentHtmlError.Invalid)
27
+ .max(10_000, EmailContentHtmlError.Invalid);
28
+ export type EmailContentHtmlType = z.infer<typeof EmailContentHtml>;
29
+
30
+ export const EmailFromError = { Invalid: "email.from.invalid" } as const;
31
+ export const EmailFrom = z.email(EmailFromError.Invalid);
32
+ export type EmailFromType = z.infer<typeof EmailFrom>;
33
+
34
+ export const EmailToError = { Invalid: "email.to.invalid" } as const;
35
+ export const EmailTo = z.email(EmailToError.Invalid);
36
+ export type EmailToType = z.infer<typeof EmailTo>;
37
+
38
+ export type EmailAttachmentType = { filename: string; path: string };
@@ -5,5 +5,6 @@ import * as VO from "../value-objects";
5
5
  export const onHistoryPopulatedEvent =
6
6
  (projection: Ports.HistoryProjectionPort) => async (event: Events.HistoryPopulatedEventType) => {
7
7
  const data = VO.HistoryParsed.parse(event.payload);
8
+
8
9
  await projection.append(data, event.createdAt);
9
10
  };
@@ -1,18 +1,12 @@
1
- import * as tools from "@bgord/tools";
2
1
  import { z } from "zod/v4";
3
- import { UUID } from "../../../uuid.vo";
2
+ import { EventEnvelopeSchema } from "../../../event-envelope";
4
3
  import * as VO from "../value-objects";
5
4
 
6
5
  export const HISTORY_CLEARED_EVENT = "HISTORY_CLEARED_EVENT";
7
6
 
8
7
  export const HistoryClearedEvent = z.object({
9
- id: UUID,
10
- correlationId: UUID,
11
- createdAt: tools.Timestamp,
12
- stream: z.string().min(1),
8
+ ...EventEnvelopeSchema,
13
9
  name: z.literal(HISTORY_CLEARED_EVENT),
14
- version: z.literal(1),
15
- revision: tools.RevisionValue.optional(),
16
10
  payload: z.object({ subject: VO.HistorySubject }),
17
11
  });
18
12
 
@@ -1,18 +1,12 @@
1
- import * as tools from "@bgord/tools";
2
1
  import { z } from "zod/v4";
3
- import { UUID } from "../../../uuid.vo";
2
+ import { EventEnvelopeSchema } from "../../../event-envelope";
4
3
  import * as VO from "../value-objects";
5
4
 
6
5
  export const HISTORY_POPULATED_EVENT = "HISTORY_POPULATED_EVENT";
7
6
 
8
7
  export const HistoryPopulatedEvent = z.object({
9
- id: UUID,
10
- correlationId: UUID,
11
- createdAt: tools.Timestamp,
12
- stream: z.string().min(1),
8
+ ...EventEnvelopeSchema,
13
9
  name: z.literal(HISTORY_POPULATED_EVENT),
14
- version: z.literal(1),
15
- revision: tools.RevisionValue.optional(),
16
10
  payload: z.object({
17
11
  id: VO.HistoryId,
18
12
  operation: VO.HistoryOperation,
@@ -2,5 +2,6 @@ import type * as VO from "../value-objects";
2
2
 
3
3
  export interface HistoryWriterPort {
4
4
  populate(history: Omit<VO.HistoryType, "id">): Promise<void>;
5
+
5
6
  clear(subject: VO.HistorySubjectType): Promise<void>;
6
7
  }
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod/v4";
2
2
 
3
3
  export const HistorySubject = z.string().min(1).max(128).trim();
4
+
4
5
  export type HistorySubjectType = z.infer<typeof HistorySubject>;
@@ -17,6 +17,7 @@ export class UserLanguageAdapter<L extends readonly tools.LanguageType[]> implem
17
17
  async get(userId: UUIDType): Promise<L[number]> {
18
18
  const stored = await this.query.get(userId);
19
19
  const candidate = await this.resolver.resolve(stored);
20
+
20
21
  return this.validator.ensure(candidate);
21
22
  }
22
23
  }
@@ -4,16 +4,11 @@ export interface UserLanguageResolverPort {
4
4
  resolve(input: tools.LanguageType | null): tools.LanguageType | Promise<tools.LanguageType>;
5
5
  }
6
6
 
7
- export class UserLanguagePreferenceMissingError extends Error {
8
- constructor() {
9
- super();
10
- Object.setPrototypeOf(this, UserLanguagePreferenceMissingError.prototype);
11
- }
12
- }
7
+ export const UserLanguagePreferenceError = { Missing: "user.language.preference.missing" } as const;
13
8
 
14
9
  export class UserLanguageResolverThrowIfMissing implements UserLanguageResolverPort {
15
10
  resolve(stored: tools.LanguageType | null) {
16
- if (stored == null) throw new UserLanguagePreferenceMissingError();
11
+ if (stored == null) throw new Error(UserLanguagePreferenceError.Missing);
17
12
  return stored;
18
13
  }
19
14
  }
@@ -1,11 +1,6 @@
1
1
  import type * as tools from "@bgord/tools";
2
2
 
3
- export class UnsupportedLanguageError extends Error {
4
- constructor() {
5
- super();
6
- Object.setPrototypeOf(this, UnsupportedLanguageError.prototype);
7
- }
8
- }
3
+ export const SupportedLanguagesSetError = { Missing: "supported.languages.set.error.missing" } as const;
9
4
 
10
5
  export class SupportedLanguagesSet<L extends readonly tools.LanguageType[]> {
11
6
  private readonly index: Set<tools.LanguageType>;
@@ -16,8 +11,7 @@ export class SupportedLanguagesSet<L extends readonly tools.LanguageType[]> {
16
11
  }
17
12
 
18
13
  ensure(language: tools.LanguageType): L[number] {
19
- if (!this.index.has(language)) throw new UnsupportedLanguageError();
20
-
14
+ if (!this.index.has(language)) throw new Error(SupportedLanguagesSetError.Missing);
21
15
  return language as L[number];
22
16
  }
23
17
  }
@@ -4,7 +4,7 @@ import type { PdfGeneratorPort, PdfGeneratorTemplateType } from "./pdf-generator
4
4
  export const PLACEHOLDER_PDF_BASE64 =
5
5
  "JVBERi0xLjQKMSAwIG9iago8PC9UeXBlIC9DYXRhbG9nCi9QYWdlcyAyIDAgUgo+PgplbmRvYmoK MiAwIG9iago8PC9UeXBlIC9QYWdlcwovS2lkcyBbMyAwIFJdCi9Db3VudCAxCj4+CmVuZG9iagoz IDAgb2JqCjw8L1R5cGUgL1BhZ2UKL1BhcmVudCAyIDAgUgovTWVkaWFCb3ggWzAgMCA1OTUgODQy XQovQ29udGVudHMgNSAwIFIKL1Jlc291cmNlcyA8PC9Qcm9jU2V0IFsvUERGIC9UZXh0XQovRm9u dCA8PC9GMSA0IDAgUj4+Cj4+Cj4+CmVuZG9iago0IDAgb2JqCjw8L1R5cGUgL0ZvbnQKL1N1YnR5 cGUgL1R5cGUxCi9OYW1lIC9GMQovQmFzZUZvbnQgL0hlbHZldGljYQovRW5jb2RpbmcgL01hY1Jv bWFuRW5jb2RpbmcKPj4KZW5kb2JqCjUgMCBvYmoKPDwvTGVuZ3RoIDUzCj4+CnN0cmVhbQpCVAov RjEgMjAgVGYKMjIwIDQwMCBUZAooRHVtbXkgUERGKSBUagpFVAplbmRzdHJlYW0KZW5kb2JqCnhy ZWYKMCA2CjAwMDAwMDAwMDAgNjU1MzUgZgowMDAwMDAwMDA5IDAwMDAwIG4KMDAwMDAwMDA2MyAw MDAwMCBuCjAwMDAwMDAxMjQgMDAwMDAgbgowMDAwMDAwMjc3IDAwMDAwIG4KMDAwMDAwMDM5MiAw MDAwMCBuCnRyYWlsZXIKPDwvU2l6ZSA2Ci9Sb290IDEgMCBSCj4+CnN0YXJ0eHJlZgo0OTUKJSVF T0YK";
6
6
 
7
- export class PdfGeneratorNoop implements PdfGeneratorPort {
7
+ export class PdfGeneratorNoopAdapter implements PdfGeneratorPort {
8
8
  private readonly base = { component: "infra", operation: "pdf_generator" };
9
9
 
10
10
  constructor(private readonly logger: LoggerPort) {}
package/src/port.vo.ts CHANGED
@@ -1,4 +1,12 @@
1
1
  import { z } from "zod/v4";
2
2
 
3
- export const Port = z.coerce.number().min(0).max(99999).brand("Port");
3
+ export const PortError = { Type: "port.type", Invalid: "port.invalid" } as const;
4
+
5
+ export const Port = z.coerce
6
+ .number(PortError.Type)
7
+ .int(PortError.Type)
8
+ .min(0, PortError.Invalid)
9
+ .max(99999, PortError.Invalid)
10
+ .brand("Port");
11
+
4
12
  export type PortType = z.infer<typeof Port>;
@@ -1,23 +1,15 @@
1
1
  import bun from "bun";
2
- import { z } from "zod/v4";
2
+ import type { BinaryType } from "../binary.vo";
3
3
  import * as prereqs from "../prerequisites.service";
4
4
 
5
- const PrerequisiteBinaryValue = z
6
- .string({ error: "binary_invalid" })
7
- .min(1, { error: "binary_invalid" })
8
- .max(64, { error: "binary_invalid" })
9
- .refine((value) => !value.includes(" "), { error: "binary_invalid" });
10
-
11
- type PrerequisiteBinaryValueType = z.infer<typeof PrerequisiteBinaryValue>;
12
-
13
5
  export class PrerequisiteBinary implements prereqs.Prerequisite {
14
6
  readonly kind = "binary";
15
7
  readonly label: prereqs.PrerequisiteLabelType;
16
8
  readonly enabled?: boolean = true;
17
9
 
18
- private readonly binary: PrerequisiteBinaryValueType;
10
+ private readonly binary: BinaryType;
19
11
 
20
- constructor(config: prereqs.PrerequisiteConfigType & { binary: PrerequisiteBinaryValueType }) {
12
+ constructor(config: prereqs.PrerequisiteConfigType & { binary: BinaryType }) {
21
13
  this.label = config.label;
22
14
  this.enabled = config.enabled === undefined ? true : config.enabled;
23
15
  this.binary = config.binary;
@@ -27,9 +19,7 @@ export class PrerequisiteBinary implements prereqs.Prerequisite {
27
19
  try {
28
20
  if (!this.enabled) return prereqs.Verification.undetermined();
29
21
 
30
- const binary = PrerequisiteBinaryValue.parse(this.binary);
31
-
32
- const result = await bun.$`which ${binary}`.quiet();
22
+ const result = await bun.$`which ${this.binary}`.quiet();
33
23
 
34
24
  if (result.exitCode === 0) return prereqs.Verification.success();
35
25
  return prereqs.Verification.failure({ message: `Exit code ${result.exitCode}` });
@@ -17,11 +17,11 @@ export class PrerequisiteDependencyVulnerabilities implements prereqs.Prerequisi
17
17
  if (!this.enabled) return prereqs.Verification.undetermined();
18
18
 
19
19
  try {
20
- const result = await bun.$`bun audit --json`.quiet();
20
+ const command = await bun.$`bun audit --json`.quiet();
21
21
 
22
- if (result.exitCode !== 0) return prereqs.Verification.failure({ message: "Audit failure" });
22
+ if (command.exitCode !== 0) return prereqs.Verification.failure({ message: "Audit failure" });
23
23
 
24
- const audit = JSON.parse(result.stdout.toString()) as BunAuditOutput;
24
+ const audit = JSON.parse(command.stdout.toString()) as BunAuditOutput;
25
25
 
26
26
  const criticalVulnerabilitiesCount = Object.values(audit).filter((name) =>
27
27
  name.some((vulnerability) => vulnerability.severity === "critical"),
@@ -34,6 +34,7 @@ export class PrerequisiteDirectory implements prereqs.Prerequisite {
34
34
 
35
35
  try {
36
36
  await fsp.access(this.directory, flags);
37
+
37
38
  return prereqs.Verification.success();
38
39
  } catch (error) {
39
40
  return prereqs.Verification.failure(error as Error);
@@ -11,15 +11,13 @@ export class PrerequisiteJobs implements prereqs.Prerequisite {
11
11
  constructor(config: prereqs.PrerequisiteConfigType & { jobs: MultipleJobsType }) {
12
12
  this.label = config.label;
13
13
  this.enabled = config.enabled === undefined ? true : config.enabled;
14
+
14
15
  this.jobs = config.jobs;
15
16
  }
16
17
 
17
18
  async verify(): Promise<prereqs.VerifyOutcome> {
18
19
  if (!this.enabled) return prereqs.Verification.undetermined();
19
-
20
- const areAllJobsRunning = Jobs.areAllRunning(this.jobs);
21
-
22
- if (areAllJobsRunning) return prereqs.Verification.success();
20
+ if (Jobs.areAllRunning(this.jobs)) return prereqs.Verification.success();
23
21
  return prereqs.Verification.failure();
24
22
  }
25
23
  }
@@ -11,6 +11,7 @@ export class PrerequisiteLogFile implements prereqs.Prerequisite {
11
11
  constructor(config: prereqs.PrerequisiteConfigType & { logger: LoggerWinstonProductionAdapter }) {
12
12
  this.label = config.label;
13
13
  this.enabled = config.enabled === undefined ? true : config.enabled;
14
+
14
15
  this.logger = config.logger;
15
16
  }
16
17
 
@@ -11,6 +11,7 @@ export class PrerequisiteMailer implements prereqs.Prerequisite {
11
11
  constructor(config: prereqs.PrerequisiteConfigType & { mailer: MailerPort }) {
12
12
  this.label = config.label;
13
13
  this.enabled = config.enabled === undefined ? true : config.enabled;
14
+
14
15
  this.mailer = config.mailer;
15
16
  }
16
17
 
@@ -23,7 +23,7 @@ export class PrerequisiteMemory implements prereqs.Prerequisite {
23
23
 
24
24
  if (memoryConsumption.isGreaterThan(this.maximum)) {
25
25
  return prereqs.Verification.failure({
26
- message: `Memory consumption: ${memoryConsumption.format(tools.SizeUnit.MB)}`,
26
+ message: `Memory consumption: ${memoryConsumption.format(tools.Size.unit.MB)}`,
27
27
  });
28
28
  }
29
29
  return prereqs.Verification.success();
@@ -12,6 +12,7 @@ export class PrerequisiteNode implements prereqs.Prerequisite {
12
12
  constructor(config: prereqs.PrerequisiteConfigType & { version: tools.PackageVersion; current: string }) {
13
13
  this.label = config.label;
14
14
  this.enabled = config.enabled === undefined ? true : config.enabled;
15
+
15
16
  this.version = config.version;
16
17
  this.current = config.current;
17
18
  }
@@ -12,6 +12,7 @@ export class PrerequisitePort implements prereqs.Prerequisite {
12
12
  constructor(config: prereqs.PrerequisiteConfigType & { port: PortType }) {
13
13
  this.label = config.label;
14
14
  this.enabled = config.enabled === undefined ? true : config.enabled;
15
+
15
16
  this.port = config.port;
16
17
  }
17
18
 
@@ -12,6 +12,7 @@ export class PrerequisiteRAM implements prereqs.Prerequisite {
12
12
  constructor(config: prereqs.PrerequisiteConfigType & { minimum: tools.Size }) {
13
13
  this.label = config.label;
14
14
  this.enabled = config.enabled === undefined ? true : config.enabled;
15
+
15
16
  this.minimum = config.minimum;
16
17
  }
17
18
 
@@ -21,6 +22,6 @@ export class PrerequisiteRAM implements prereqs.Prerequisite {
21
22
  const freeRAM = tools.Size.fromBytes(os.freemem());
22
23
 
23
24
  if (freeRAM.isGreaterThan(this.minimum)) return prereqs.Verification.success();
24
- return prereqs.Verification.failure({ message: `Free RAM: ${freeRAM.format(tools.SizeUnit.MB)}` });
25
+ return prereqs.Verification.failure({ message: `Free RAM: ${freeRAM.format(tools.Size.unit.MB)}` });
25
26
  }
26
27
  }
@@ -11,6 +11,7 @@ export class PrerequisiteRunningUser implements prereqs.Prerequisite {
11
11
  constructor(config: prereqs.PrerequisiteConfigType & { username: string }) {
12
12
  this.label = config.label;
13
13
  this.enabled = config.enabled === undefined ? true : config.enabled;
14
+
14
15
  this.username = config.username;
15
16
  }
16
17
 
@@ -12,6 +12,7 @@ export class PrerequisiteSpace implements prereqs.Prerequisite {
12
12
  constructor(config: prereqs.PrerequisiteConfigType & { minimum: tools.Size }) {
13
13
  this.label = config.label;
14
14
  this.enabled = config.enabled === undefined ? true : config.enabled;
15
+
15
16
  this.minimum = config.minimum;
16
17
  }
17
18
 
@@ -25,7 +26,7 @@ export class PrerequisiteSpace implements prereqs.Prerequisite {
25
26
 
26
27
  if (freeDiskSpace.isGreaterThan(this.minimum)) return prereqs.Verification.success();
27
28
  return prereqs.Verification.failure({
28
- message: `Free disk space: ${freeDiskSpace.format(tools.SizeUnit.MB)}`,
29
+ message: `Free disk space: ${freeDiskSpace.format(tools.Size.unit.MB)}`,
29
30
  });
30
31
  } catch (error) {
31
32
  return prereqs.Verification.failure(error as Error);
@@ -24,9 +24,8 @@ export class PrerequisiteSQLite implements prereqs.Prerequisite {
24
24
  | undefined;
25
25
 
26
26
  if (!integrity || (integrity.integrity_check ?? "").toLowerCase() !== "ok") {
27
- return prereqs.Verification.failure({ message: "Integrity_check failed" });
27
+ return prereqs.Verification.failure({ message: "Integrity check failed" });
28
28
  }
29
-
30
29
  return prereqs.Verification.success();
31
30
  } catch (error) {
32
31
  return prereqs.Verification.failure(error as Error);
@@ -30,7 +30,7 @@ export class PrerequisiteSSLCertificateExpiry implements prereqs.Prerequisite {
30
30
 
31
31
  const result = await this.inspector.inspect(this.host);
32
32
 
33
- if (!result.success) return prereqs.Verification.failure({ message: "Unavailable" });
33
+ if (!result.success) return prereqs.Verification.failure({ message: "Certificate unavailable" });
34
34
  if (result.daysRemaining <= this.days) {
35
35
  return prereqs.Verification.failure({ message: `${result.daysRemaining} days remaining` });
36
36
  }
@@ -14,6 +14,7 @@ export class PrerequisiteTimezoneUTC implements prereqs.Prerequisite {
14
14
  constructor(config: prereqs.PrerequisiteConfigType & { timezone: tools.TimezoneType }) {
15
15
  this.label = config.label;
16
16
  this.enabled = config.enabled === undefined ? true : config.enabled;
17
+
17
18
  this.timezone = config.timezone;
18
19
  }
19
20