@bgord/bun 1.8.20 → 1.8.21

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 (352) hide show
  1. package/package.json +2 -3
  2. package/src/antivirus-clamav.adapter.ts +0 -34
  3. package/src/antivirus-noop.adapter.ts +0 -8
  4. package/src/antivirus.port.ts +0 -9
  5. package/src/api-version.middleware.ts +0 -31
  6. package/src/basic-auth-password.vo.ts +0 -17
  7. package/src/basic-auth-username.vo.ts +0 -17
  8. package/src/basic-auth.service.ts +0 -14
  9. package/src/better-auth-logger.service.ts +0 -45
  10. package/src/binary.vo.ts +0 -22
  11. package/src/bots.vo.ts +0 -132
  12. package/src/build-info-repository-file.strategy.ts +0 -23
  13. package/src/build-info-repository-noop.strategy.ts +0 -16
  14. package/src/build-info-repository-package-json.strategy.ts +0 -25
  15. package/src/build-info-repository.strategy.ts +0 -13
  16. package/src/cache-file.service.ts +0 -37
  17. package/src/cache-repository-lru-cache.adapter.ts +0 -58
  18. package/src/cache-repository-node-cache.adapter.ts +0 -32
  19. package/src/cache-repository-noop.adapter.ts +0 -15
  20. package/src/cache-repository.port.ts +0 -11
  21. package/src/cache-resolver-simple.strategy.ts +0 -33
  22. package/src/cache-resolver.strategy.ts +0 -17
  23. package/src/cache-response.middleware.ts +0 -51
  24. package/src/cache-subject-application-resolver.vo.ts +0 -34
  25. package/src/cache-subject-request-resolver.vo.ts +0 -37
  26. package/src/cache-subject-segment-application.strategy.ts +0 -7
  27. package/src/cache-subject-segment-build.strategy.ts +0 -14
  28. package/src/cache-subject-segment-cookie.strategy.ts +0 -14
  29. package/src/cache-subject-segment-env.strategy.ts +0 -10
  30. package/src/cache-subject-segment-fixed.strategy.ts +0 -12
  31. package/src/cache-subject-segment-header.strategy.ts +0 -13
  32. package/src/cache-subject-segment-ip.strategy.ts +0 -9
  33. package/src/cache-subject-segment-path.strategy.ts +0 -8
  34. package/src/cache-subject-segment-query.strategy.ts +0 -18
  35. package/src/cache-subject-segment-request.strategy.ts +0 -9
  36. package/src/cache-subject-segment-user.strategy.ts +0 -8
  37. package/src/certificate-inspector-noop.adapter.ts +0 -10
  38. package/src/certificate-inspector-tls.adapter.ts +0 -42
  39. package/src/certificate-inspector.port.ts +0 -7
  40. package/src/checksum.service.ts +0 -12
  41. package/src/client-from-hono.adapter.ts +0 -20
  42. package/src/client-ip.vo.ts +0 -17
  43. package/src/client-user-agent.vo.ts +0 -17
  44. package/src/client.vo.ts +0 -52
  45. package/src/clock-fixed.adapter.ts +0 -14
  46. package/src/clock-offset.adapter.ts +0 -15
  47. package/src/clock-system.adapter.ts +0 -8
  48. package/src/clock.port.ts +0 -5
  49. package/src/command-envelope.ts +0 -16
  50. package/src/command-logger.service.ts +0 -23
  51. package/src/command.types.ts +0 -13
  52. package/src/commit-sha-value.vo.ts +0 -18
  53. package/src/commit-sha.vo.ts +0 -29
  54. package/src/context.middleware.ts +0 -24
  55. package/src/correlation-id.vo.ts +0 -6
  56. package/src/correlation-storage.service.ts +0 -31
  57. package/src/crypto-aes-gcm.service.ts +0 -37
  58. package/src/crypto-key-provider-file.adapter.ts +0 -29
  59. package/src/crypto-key-provider-memory.adapter.ts +0 -17
  60. package/src/crypto-key-provider-noop.adapter.ts +0 -9
  61. package/src/crypto-key-provider-with-cache.adapter.ts +0 -28
  62. package/src/crypto-key-provider.port.ts +0 -3
  63. package/src/csv-stringifier.adapter.ts +0 -8
  64. package/src/csv-stringifier.port.ts +0 -8
  65. package/src/disk-space-checker-bun.adapter.ts +0 -18
  66. package/src/disk-space-checker-noop.adapter.ts +0 -10
  67. package/src/disk-space-checker.port.ts +0 -5
  68. package/src/dispatching-event-store.ts +0 -36
  69. package/src/encryption-aes-gcm.adapter.ts +0 -57
  70. package/src/encryption-iv.vo.ts +0 -9
  71. package/src/encryption-key-value.vo.ts +0 -18
  72. package/src/encryption-key.vo.ts +0 -41
  73. package/src/encryption-noop.adapter.ts +0 -18
  74. package/src/encryption.port.ts +0 -12
  75. package/src/environment-file-parser.service.ts +0 -35
  76. package/src/environment-loader-encrypted.adapter.ts +0 -31
  77. package/src/environment-loader-noop.adapter.ts +0 -16
  78. package/src/environment-loader-process-safe.adapter.ts +0 -35
  79. package/src/environment-loader-process.adapter.ts +0 -16
  80. package/src/environment-loader.port.ts +0 -8
  81. package/src/etag-extractor.middleware.ts +0 -18
  82. package/src/event-bus-like.types.ts +0 -10
  83. package/src/event-envelope.ts +0 -27
  84. package/src/event-handler-bare.strategy.ts +0 -9
  85. package/src/event-handler-noop.strategy.ts +0 -9
  86. package/src/event-handler-with-logger.strategy.ts +0 -31
  87. package/src/event-handler.strategy.ts +0 -8
  88. package/src/event-logger.service.ts +0 -23
  89. package/src/event-loop-lag.service.ts +0 -32
  90. package/src/event-loop-utilization.service.ts +0 -21
  91. package/src/event-publisher.types.ts +0 -3
  92. package/src/event-store-like.types.ts +0 -3
  93. package/src/event-store.ts +0 -64
  94. package/src/event-stream.vo.ts +0 -14
  95. package/src/event.types.ts +0 -16
  96. package/src/file-cleaner-bun-forgiving.adapter.ts +0 -10
  97. package/src/file-cleaner-bun.adapter.ts +0 -8
  98. package/src/file-cleaner-noop.adapter.ts +0 -6
  99. package/src/file-cleaner.port.ts +0 -5
  100. package/src/file-draft-zip.service.ts +0 -34
  101. package/src/file-draft.service.ts +0 -33
  102. package/src/file-reader-json-bun-forgiving.adapter.ts +0 -14
  103. package/src/file-reader-json-bun.adapter.ts +0 -10
  104. package/src/file-reader-json-noop.adapter.ts +0 -12
  105. package/src/file-reader-json-with-cache.adapter.ts +0 -34
  106. package/src/file-reader-json.port.ts +0 -7
  107. package/src/file-renamer-fs-forgiving.adapter.ts +0 -17
  108. package/src/file-renamer-fs.adapter.ts +0 -15
  109. package/src/file-renamer-noop.adapter.ts +0 -9
  110. package/src/file-renamer.port.ts +0 -8
  111. package/src/file-uploader.middleware.ts +0 -39
  112. package/src/graceful-shutdown.service.ts +0 -68
  113. package/src/gzip-bun.adapter.ts +0 -12
  114. package/src/gzip-noop.adapter.ts +0 -7
  115. package/src/gzip-stream.adapter.ts +0 -19
  116. package/src/gzip.port.ts +0 -10
  117. package/src/hash-content-noop.strategy.ts +0 -8
  118. package/src/hash-content-sha256-bun.strategy.ts +0 -11
  119. package/src/hash-content.strategy.ts +0 -5
  120. package/src/hash-file-noop.adapter.ts +0 -14
  121. package/src/hash-file-sha256-bun.adapter.ts +0 -23
  122. package/src/hash-file.port.ts +0 -13
  123. package/src/hash-value.vo.ts +0 -15
  124. package/src/hash.vo.ts +0 -29
  125. package/src/hcaptcha-secret-key.vo.ts +0 -15
  126. package/src/hcaptcha-site-key.vo.ts +0 -12
  127. package/src/healthcheck.service.ts +0 -138
  128. package/src/http-logger.middleware.ts +0 -100
  129. package/src/i18n.service.ts +0 -62
  130. package/src/id-provider-crypto.adapter.ts +0 -8
  131. package/src/id-provider-deterministic.adapter.ts +0 -21
  132. package/src/id-provider.port.ts +0 -5
  133. package/src/image-alpha-noop.adapter.ts +0 -7
  134. package/src/image-alpha-sharp.adapter.ts +0 -38
  135. package/src/image-alpha.port.ts +0 -19
  136. package/src/image-blur-noop.adapter.ts +0 -7
  137. package/src/image-blur-sharp.adapter.ts +0 -33
  138. package/src/image-blur.port.ts +0 -18
  139. package/src/image-compressor-noop.adapter.ts +0 -7
  140. package/src/image-compressor-sharp.adapter.ts +0 -36
  141. package/src/image-compressor.port.ts +0 -18
  142. package/src/image-exif-clear-noop.adapter.ts +0 -7
  143. package/src/image-exif-clear-sharp.adapter.ts +0 -30
  144. package/src/image-exif-clear.port.ts +0 -16
  145. package/src/image-formatter-noop.adapter.ts +0 -10
  146. package/src/image-formatter-sharp.adapter.ts +0 -40
  147. package/src/image-formatter.port.ts +0 -17
  148. package/src/image-info-noop.adapter.ts +0 -15
  149. package/src/image-info-sharp.adapter.ts +0 -27
  150. package/src/image-info.port.ts +0 -12
  151. package/src/image-processor-noop.adapter.ts +0 -10
  152. package/src/image-processor-sharp.adapter.ts +0 -60
  153. package/src/image-processor.port.ts +0 -25
  154. package/src/image-resizer-noop.adapter.ts +0 -7
  155. package/src/image-resizer-sharp.adapter.ts +0 -41
  156. package/src/image-resizer.port.ts +0 -18
  157. package/src/in-flight-requests-tracker.service.ts +0 -22
  158. package/src/in-flight-requests.middleware.ts +0 -15
  159. package/src/index.ts +0 -307
  160. package/src/instrumentation.service.ts +0 -39
  161. package/src/invariant-error-handler.service.ts +0 -22
  162. package/src/invariant.service.ts +0 -27
  163. package/src/job-handler-bare.strategy.ts +0 -15
  164. package/src/job-handler-noop.strategy.ts +0 -9
  165. package/src/job-handler-with-logger.strategy.ts +0 -44
  166. package/src/job-handler.strategy.ts +0 -10
  167. package/src/jobs.service.ts +0 -16
  168. package/src/logger-format-error.service.ts +0 -27
  169. package/src/logger-noop.adapter.ts +0 -17
  170. package/src/logger-winston-local.adapter.ts +0 -24
  171. package/src/logger-winston-production.adapter.ts +0 -38
  172. package/src/logger-winston.adapter.ts +0 -63
  173. package/src/logger.port.ts +0 -64
  174. package/src/mailer-content-html.vo.ts +0 -11
  175. package/src/mailer-noop.adapter.ts +0 -21
  176. package/src/mailer-smtp-with-logger.adapter.ts +0 -33
  177. package/src/mailer-smtp.adapter.ts +0 -33
  178. package/src/mailer-subject.vo.ts +0 -10
  179. package/src/mailer.port.ts +0 -6
  180. package/src/maintenance-mode.middleware.ts +0 -15
  181. package/src/memory-consumption.service.ts +0 -23
  182. package/src/modules/history/event-handlers/index.ts +0 -2
  183. package/src/modules/history/event-handlers/onHistoryClearedEvent.ts +0 -6
  184. package/src/modules/history/event-handlers/onHistoryPopulatedEvent.ts +0 -10
  185. package/src/modules/history/events/HISTORY_CLEARED_EVENT.ts +0 -13
  186. package/src/modules/history/events/HISTORY_POPULATED_EVENT.ts +0 -17
  187. package/src/modules/history/events/index.ts +0 -2
  188. package/src/modules/history/index.ts +0 -4
  189. package/src/modules/history/ports/history-projection.ts +0 -7
  190. package/src/modules/history/ports/history-reader.ts +0 -5
  191. package/src/modules/history/ports/history-writer.ts +0 -7
  192. package/src/modules/history/ports/index.ts +0 -3
  193. package/src/modules/history/value-objects/history-created-at.ts +0 -6
  194. package/src/modules/history/value-objects/history-id.ts +0 -3
  195. package/src/modules/history/value-objects/history-operation.ts +0 -12
  196. package/src/modules/history/value-objects/history-payload.ts +0 -15
  197. package/src/modules/history/value-objects/history-subject.ts +0 -14
  198. package/src/modules/history/value-objects/history.ts +0 -26
  199. package/src/modules/history/value-objects/index.ts +0 -6
  200. package/src/modules/preferences/command-handlers/handleSetUserLanguageCommand.ts +0 -36
  201. package/src/modules/preferences/command-handlers/index.ts +0 -1
  202. package/src/modules/preferences/commands/SET_USER_LANGUAGE_COMMAND.ts +0 -14
  203. package/src/modules/preferences/commands/index.ts +0 -1
  204. package/src/modules/preferences/events/USER_LANGUAGE_SET_EVENT.ts +0 -14
  205. package/src/modules/preferences/events/index.ts +0 -1
  206. package/src/modules/preferences/index.ts +0 -7
  207. package/src/modules/preferences/invariants/index.ts +0 -1
  208. package/src/modules/preferences/invariants/user-language-has-changed.ts +0 -26
  209. package/src/modules/preferences/open-host-queries/index.ts +0 -1
  210. package/src/modules/preferences/open-host-queries/user-language.ts +0 -23
  211. package/src/modules/preferences/ports/index.ts +0 -2
  212. package/src/modules/preferences/ports/user-language-query.ts +0 -5
  213. package/src/modules/preferences/ports/user-language-resolver.ts +0 -22
  214. package/src/modules/preferences/value-objects/index.ts +0 -1
  215. package/src/modules/preferences/value-objects/supported-languages-set.ts +0 -17
  216. package/src/modules/system/events/HOUR_HAS_PASSED_EVENT.ts +0 -13
  217. package/src/modules/system/events/MINUTE_HAS_PASSED_EVENT.ts +0 -13
  218. package/src/modules/system/events/SECURITY_VIOLATION_DETECTED_EVENT.ts +0 -23
  219. package/src/modules/system/events/index.ts +0 -3
  220. package/src/modules/system/index.ts +0 -2
  221. package/src/modules/system/services/index.ts +0 -2
  222. package/src/modules/system/services/passage-of-time-hourly.service.ts +0 -35
  223. package/src/modules/system/services/passage-of-time-minute.service.ts +0 -35
  224. package/src/node-env.vo.ts +0 -12
  225. package/src/nonce-provider-crypto.adapter.ts +0 -18
  226. package/src/nonce-provider-deterministic.adapter.ts +0 -21
  227. package/src/nonce-provider-noop.adapter.ts +0 -8
  228. package/src/nonce-provider.port.ts +0 -5
  229. package/src/nonce-value.vo.ts +0 -18
  230. package/src/pdf-generator-noop.adapter.ts +0 -23
  231. package/src/pdf-generator.port.ts +0 -5
  232. package/src/ping.service.ts +0 -7
  233. package/src/port.vo.ts +0 -14
  234. package/src/prerequisite-runner-startup.service.ts +0 -44
  235. package/src/prerequisite-verifier-binary.adapter.ts +0 -21
  236. package/src/prerequisite-verifier-bun.adapter.ts +0 -21
  237. package/src/prerequisite-verifier-clock-drift.adapter.ts +0 -32
  238. package/src/prerequisite-verifier-directory.adapter.ts +0 -48
  239. package/src/prerequisite-verifier-dns.adapter.ts +0 -20
  240. package/src/prerequisite-verifier-external-api.adapter.ts +0 -20
  241. package/src/prerequisite-verifier-file.adapter.ts +0 -49
  242. package/src/prerequisite-verifier-jobs.adapter.ts +0 -15
  243. package/src/prerequisite-verifier-log-file.adapter.ts +0 -29
  244. package/src/prerequisite-verifier-mailer.adapter.ts +0 -22
  245. package/src/prerequisite-verifier-memory.adapter.ts +0 -22
  246. package/src/prerequisite-verifier-node.adapter.ts +0 -21
  247. package/src/prerequisite-verifier-os.adapter.ts +0 -22
  248. package/src/prerequisite-verifier-outside-connectivity.adapter.ts +0 -23
  249. package/src/prerequisite-verifier-port.adapter.ts +0 -23
  250. package/src/prerequisite-verifier-ram.adapter.ts +0 -20
  251. package/src/prerequisite-verifier-running-user.adapter.ts +0 -17
  252. package/src/prerequisite-verifier-self.adapter.ts +0 -11
  253. package/src/prerequisite-verifier-space.adapter.ts +0 -32
  254. package/src/prerequisite-verifier-sqlite.adapter.ts +0 -25
  255. package/src/prerequisite-verifier-ssl-certificate-expiry.adapter.ts +0 -28
  256. package/src/prerequisite-verifier-timezone-utc.adapter.ts +0 -20
  257. package/src/prerequisite-verifier-translations.adapter.ts +0 -65
  258. package/src/prerequisite-verifier-with-cache.adapter.ts +0 -35
  259. package/src/prerequisite-verifier-with-fail-safe.adapter.ts +0 -37
  260. package/src/prerequisite-verifier-with-logger.adapter.ts +0 -51
  261. package/src/prerequisite-verifier-with-retry.adapter.ts +0 -35
  262. package/src/prerequisite-verifier-with-timeout.adapter.ts +0 -31
  263. package/src/prerequisite-verifier.decorator.ts +0 -49
  264. package/src/prerequisite-verifier.port.ts +0 -38
  265. package/src/prerequisite.vo.ts +0 -28
  266. package/src/recaptcha-secret-key.vo.ts +0 -15
  267. package/src/recaptcha-site-key.vo.ts +0 -12
  268. package/src/redactor-compact-array.strategy.ts +0 -10
  269. package/src/redactor-compact-object.strategy.ts +0 -25
  270. package/src/redactor-composite.strategy.ts +0 -9
  271. package/src/redactor-mask.strategy.ts +0 -38
  272. package/src/redactor-noop.strategy.ts +0 -7
  273. package/src/redactor.strategy.ts +0 -3
  274. package/src/remote-file-storage-disk.adapter.ts +0 -72
  275. package/src/remote-file-storage-noop.adapter.ts +0 -70
  276. package/src/remote-file-storage.port.ts +0 -17
  277. package/src/retry-backoff-exponential.strategy.ts +0 -10
  278. package/src/retry-backoff-fibonacci.strategy.ts +0 -16
  279. package/src/retry-backoff-linear.strategy.ts +0 -10
  280. package/src/retry-backoff-noop.strategy.ts +0 -8
  281. package/src/retry-backoff.strategy.ts +0 -5
  282. package/src/retry.service.ts +0 -37
  283. package/src/safe-parse-body.service.ts +0 -12
  284. package/src/sealer-aes-gcm.adapter.ts +0 -38
  285. package/src/sealer-noop.adapter.ts +0 -11
  286. package/src/sealer.port.ts +0 -4
  287. package/src/security-context.vo.ts +0 -13
  288. package/src/security-countermeasure-ban.strategy.ts +0 -63
  289. package/src/security-countermeasure-mirage.strategy.ts +0 -31
  290. package/src/security-countermeasure-name.vo.ts +0 -22
  291. package/src/security-countermeasure-noop.strategy.ts +0 -12
  292. package/src/security-countermeasure-report.strategy.ts +0 -27
  293. package/src/security-countermeasure-tarpit.strategy.ts +0 -31
  294. package/src/security-countermeasure.strategy.ts +0 -16
  295. package/src/security-policy.vo.ts +0 -9
  296. package/src/security-rule-and.strategy.ts +0 -25
  297. package/src/security-rule-bait-routes.strategy.ts +0 -15
  298. package/src/security-rule-fail.strategy.ts +0 -12
  299. package/src/security-rule-honey-pot-field.strategy.ts +0 -20
  300. package/src/security-rule-name.vo.ts +0 -22
  301. package/src/security-rule-or.strategy.ts +0 -25
  302. package/src/security-rule-pass.strategy.ts +0 -12
  303. package/src/security-rule-user-agent.strategy.ts +0 -20
  304. package/src/security-rule-violation-threshold.strategy.ts +0 -50
  305. package/src/security-rule.strategy.ts +0 -8
  306. package/src/setup.service.ts +0 -102
  307. package/src/shield-api-key.strategy.ts +0 -20
  308. package/src/shield-auth.strategy.ts +0 -38
  309. package/src/shield-basic-auth.strategy.ts +0 -17
  310. package/src/shield-csrf.strategy.ts +0 -23
  311. package/src/shield-hcaptcha-local.strategy.ts +0 -22
  312. package/src/shield-hcaptcha.strategy.ts +0 -24
  313. package/src/shield-noop.strategy.ts +0 -6
  314. package/src/shield-rate-limit.strategy.ts +0 -41
  315. package/src/shield-recaptcha.strategy.ts +0 -49
  316. package/src/shield-security.strategy.ts +0 -80
  317. package/src/shield-timeout.strategy.ts +0 -19
  318. package/src/shield.strategy.ts +0 -5
  319. package/src/simulated-error.middleware.ts +0 -8
  320. package/src/sleeper-noop.adapter.ts +0 -5
  321. package/src/sleeper-system.adapter.ts +0 -8
  322. package/src/sleeper.port.ts +0 -5
  323. package/src/slower.middleware.ts +0 -14
  324. package/src/smtp-host.vo.ts +0 -17
  325. package/src/smtp-pass.vo.ts +0 -17
  326. package/src/smtp-port.vo.ts +0 -5
  327. package/src/smtp-user.vo.ts +0 -17
  328. package/src/ssr.ts +0 -57
  329. package/src/static-files.service.ts +0 -85
  330. package/src/stopwatch.service.ts +0 -30
  331. package/src/temporary-file-absolute.adapter.ts +0 -31
  332. package/src/temporary-file-noop.adapter.ts +0 -16
  333. package/src/temporary-file.port.ts +0 -9
  334. package/src/time-zone-offset.middleware.ts +0 -24
  335. package/src/timekeeper-google.adapter.ts +0 -18
  336. package/src/timekeeper-noop.adapter.ts +0 -12
  337. package/src/timekeeper.port.ts +0 -5
  338. package/src/timeout-cancellable-runner-bare.adapter.ts +0 -35
  339. package/src/timeout-cancellable-runner-noop.adapter.ts +0 -9
  340. package/src/timeout-cancellable-runner.port.ts +0 -7
  341. package/src/timeout-runner-bare.adapter.ts +0 -23
  342. package/src/timeout-runner-error.adapter.ts +0 -8
  343. package/src/timeout-runner-monitor.adapter.ts +0 -24
  344. package/src/timeout-runner-noop.adapter.ts +0 -8
  345. package/src/timeout-runner.port.ts +0 -7
  346. package/src/to-event-map.types.ts +0 -3
  347. package/src/translations.service.ts +0 -20
  348. package/src/uptime.service.ts +0 -17
  349. package/src/uuid.vo.ts +0 -7
  350. package/src/visitor-id-client.strategy.ts +0 -20
  351. package/src/visitor-id.strategy.ts +0 -5
  352. package/src/weak-etag-extractor.middleware.ts +0 -17
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bgord/bun",
3
- "version": "1.8.20",
3
+ "version": "1.8.21",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "author": "Bartosz Gordon",
@@ -12,8 +12,7 @@
12
12
  "types": "./dist/index.d.ts"
13
13
  },
14
14
  "files": [
15
- "dist",
16
- "src"
15
+ "dist"
17
16
  ],
18
17
  "scripts": {
19
18
  "build": "bash scripts/package-build.sh",
@@ -1,34 +0,0 @@
1
- import { type AntivirusPort, AntivirusPortError, type AntivirusScanResult } from "./antivirus.port";
2
-
3
- // Stryker disable all
4
- export class AntivirusClamavAdapter implements AntivirusPort {
5
- async scanBytes(bytes: Uint8Array): Promise<AntivirusScanResult> {
6
- const SIGNATURE_REGEX = /:\s+(?<signature>.+)\s+FOUND\s*$/m;
7
-
8
- const antivirus = Bun.spawn({
9
- cmd: ["clamscan", "--infected", "--no-summary", "--stdout", "-"],
10
- stdin: "pipe",
11
- stdout: "pipe",
12
- stderr: "pipe",
13
- });
14
-
15
- if (!antivirus.stdin) throw new Error(AntivirusPortError.ScanFailed);
16
- antivirus.stdin.write(bytes);
17
- await antivirus.stdin.end();
18
- await antivirus.exited;
19
-
20
- const stdout = await new Response(antivirus.stdout).text();
21
- const stderr = await new Response(antivirus.stderr).text();
22
-
23
- if (antivirus.exitCode === 0) return { clean: true };
24
-
25
- if (antivirus.exitCode === 1) {
26
- const signature = stdout.match(SIGNATURE_REGEX) ?? stderr.match(SIGNATURE_REGEX);
27
-
28
- return { clean: false, signature: signature?.groups?.signature?.trim() ?? "unknown" };
29
- }
30
-
31
- throw new Error(AntivirusPortError.ScanFailed);
32
- }
33
- }
34
- // Stryker restore all
@@ -1,8 +0,0 @@
1
- import type * as tools from "@bgord/tools";
2
- import type { AntivirusPort, AntivirusScanResult } from "./antivirus.port";
3
-
4
- export class AntivirusNoopAdapter implements AntivirusPort {
5
- async scanBytes(_bytes: Uint8Array, _filename?: tools.Filename): Promise<AntivirusScanResult> {
6
- return { clean: true };
7
- }
8
- }
@@ -1,9 +0,0 @@
1
- import type * as tools from "@bgord/tools";
2
-
3
- export type AntivirusScanResult = { clean: true } | { clean: false; signature: string };
4
-
5
- export const AntivirusPortError = { ScanFailed: "antivirus.scan.failed" } as const;
6
-
7
- export interface AntivirusPort {
8
- scanBytes(bytes: Uint8Array, filename?: tools.Filename): Promise<AntivirusScanResult>;
9
- }
@@ -1,31 +0,0 @@
1
- import { createMiddleware } from "hono/factory";
2
- import type { BuildInfoRepositoryStrategy } from "./build-info-repository.strategy";
3
- import type { CacheResolverStrategy } from "./cache-resolver.strategy";
4
- import { CacheSubjectApplicationResolver } from "./cache-subject-application-resolver.vo";
5
- import { CacheSubjectSegmentFixedStrategy } from "./cache-subject-segment-fixed.strategy";
6
- import type { HashContentStrategy } from "./hash-content.strategy";
7
-
8
- type Dependencies = {
9
- CacheResolver: CacheResolverStrategy;
10
- HashContent: HashContentStrategy;
11
- BuildInfoRepository: BuildInfoRepositoryStrategy;
12
- };
13
-
14
- export class ApiVersion {
15
- static readonly HEADER_NAME = "api-version";
16
-
17
- static build = (deps: Dependencies) =>
18
- createMiddleware(async (context, next) => {
19
- const resolver = new CacheSubjectApplicationResolver(
20
- [new CacheSubjectSegmentFixedStrategy("api-version")],
21
- deps,
22
- );
23
- const subject = await resolver.resolve();
24
-
25
- const build = await deps.CacheResolver.resolve(subject.hex, async () =>
26
- deps.BuildInfoRepository.extract(),
27
- );
28
- context.res.headers.set(ApiVersion.HEADER_NAME, build.version.toString());
29
- await next();
30
- });
31
- }
@@ -1,17 +0,0 @@
1
- import { z } from "zod/v4";
2
-
3
- export const BasicAuthPasswordError = {
4
- Type: "basic.auth.password.type",
5
- Empty: "basic.auth.password.empty",
6
- TooLong: "basic.auth.password.too.long",
7
- };
8
-
9
- // Stryker disable all
10
- export const BasicAuthPassword = z
11
- // Stryker restore all
12
- .string(BasicAuthPasswordError.Type)
13
- .min(1, BasicAuthPasswordError.Empty)
14
- .max(128, BasicAuthPasswordError.TooLong)
15
- .brand("BasicAuthPassword");
16
-
17
- export type BasicAuthPasswordType = z.infer<typeof BasicAuthPassword>;
@@ -1,17 +0,0 @@
1
- import { z } from "zod/v4";
2
-
3
- export const BasicAuthUsernameError = {
4
- Type: "basic.auth.username.type",
5
- Empty: "basic.auth.username.empty",
6
- TooLong: "basic.auth.username.too.long",
7
- };
8
-
9
- // Stryker disable all
10
- export const BasicAuthUsername = z
11
- // Stryker restore all
12
- .string(BasicAuthUsernameError.Type)
13
- .min(1, BasicAuthUsernameError.Empty)
14
- .max(128, BasicAuthUsernameError.TooLong)
15
- .brand("BasicAuthUsername");
16
-
17
- export type BasicAuthUsernameType = z.infer<typeof BasicAuthUsername>;
@@ -1,14 +0,0 @@
1
- import type { BasicAuthPasswordType } from "./basic-auth-password.vo";
2
- import type { BasicAuthUsernameType } from "./basic-auth-username.vo";
3
-
4
- type BasicAuthConfigType = { username: BasicAuthUsernameType; password: BasicAuthPasswordType };
5
-
6
- export class BasicAuth {
7
- static toHeaderValue(config: BasicAuthConfigType): { authorization: string } {
8
- return { authorization: `Basic ${btoa(`${config.username}:${config.password}`)}` };
9
- }
10
-
11
- static toHeader(config: BasicAuthConfigType): Headers {
12
- return new Headers(BasicAuth.toHeaderValue(config));
13
- }
14
- }
@@ -1,45 +0,0 @@
1
- import { type LoggerPort, LogLevelEnum } from "./logger.port";
2
- import { formatError } from "./logger-format-error.service";
3
-
4
- type LogLevel = "info" | "success" | "warn" | "error" | "debug";
5
-
6
- type Dependencies = { Logger: LoggerPort };
7
-
8
- export class BetterAuthLogger {
9
- constructor(private readonly deps: Dependencies) {}
10
-
11
- attach() {
12
- return {
13
- disabled: false,
14
- level: "debug",
15
- log: (lvl: LogLevel | undefined, message: string, ...args: unknown[]) => {
16
- const level = this.mapLevel(lvl);
17
- const base = { component: "infra", operation: "better-auth", message, metadata: { args } } as const;
18
-
19
- switch (level) {
20
- case LogLevelEnum.error: {
21
- this.deps.Logger.error({
22
- ...base,
23
- error: formatError(args.find((arg) => arg instanceof Error) ?? new Error(message)),
24
- });
25
- break;
26
- }
27
- case LogLevelEnum.warn: {
28
- this.deps.Logger.warn(base);
29
- break;
30
- }
31
- default: {
32
- this.deps.Logger.info(base);
33
- break;
34
- }
35
- }
36
- },
37
- } as const;
38
- }
39
-
40
- private mapLevel(level: LogLevel | undefined) {
41
- if (level === "warn") return LogLevelEnum.warn;
42
- if (level === "error") return LogLevelEnum.error;
43
- return LogLevelEnum.info;
44
- }
45
- }
package/src/binary.vo.ts DELETED
@@ -1,22 +0,0 @@
1
- import { z } from "zod/v4";
2
-
3
- export const BinaryError = {
4
- Type: "binary.type",
5
- Empty: "binary.empty",
6
- TooLong: "binary.too.long",
7
- BadChars: "binary.bad.chars",
8
- };
9
-
10
- // One to sixty four letters, digits, hyphens, or underscores
11
- const CHARS_WHITELIST = /^[a-zA-Z0-9-_]{1,64}$/;
12
-
13
- // Stryker disable all
14
- export const Binary = z
15
- // Stryker restore all
16
- .string(BinaryError.Type)
17
- .min(1, BinaryError.Empty)
18
- .max(64, BinaryError.TooLong)
19
- .regex(CHARS_WHITELIST, BinaryError.BadChars)
20
- .brand("Binary");
21
-
22
- export type BinaryType = z.infer<typeof Binary>;
package/src/bots.vo.ts DELETED
@@ -1,132 +0,0 @@
1
- // Source: https://github.com/honojs/middleware/blob/main/packages/ua-blocker/src/generated.ts
2
- export const ALL_BOTS = [
3
- "AddSearchBot",
4
- "AI2Bot",
5
- "AI2Bot-DeepResearchEval",
6
- "Ai2Bot-Dolma",
7
- "aiHitBot",
8
- "amazon-kendra",
9
- "Amazonbot",
10
- "AmazonBuyForMe",
11
- "Andibot",
12
- "Anomura",
13
- "anthropic-ai",
14
- "Applebot",
15
- "Applebot-Extended",
16
- "atlassian-bot",
17
- "Awario",
18
- "bedrockbot",
19
- "bigsur.ai",
20
- "Bravebot",
21
- "Brightbot 1.0",
22
- "BuddyBot",
23
- "Bytespider",
24
- "CCBot",
25
- "Channel3Bot",
26
- "ChatGLM-Spider",
27
- "ChatGPT Agent",
28
- "ChatGPT-User",
29
- "Claude-SearchBot",
30
- "Claude-User",
31
- "Claude-Web",
32
- "ClaudeBot",
33
- "Cloudflare-AutoRAG",
34
- "CloudVertexBot",
35
- "cohere-ai",
36
- "cohere-training-data-crawler",
37
- "Cotoyogi",
38
- "Crawl4AI",
39
- "Crawlspace",
40
- "Datenbank Crawler",
41
- "DeepSeekBot",
42
- "Devin",
43
- "Diffbot",
44
- "DuckAssistBot",
45
- "Echobot Bot",
46
- "EchoboxBot",
47
- "FacebookBot",
48
- "facebookexternalhit",
49
- "Factset_spyderbot",
50
- "FirecrawlAgent",
51
- "FriendlyCrawler",
52
- "Gemini-Deep-Research",
53
- "Google-CloudVertexBot",
54
- "Google-Extended",
55
- "Google-Firebase",
56
- "Google-NotebookLM",
57
- "GoogleAgent-Mariner",
58
- "GoogleOther",
59
- "GoogleOther-Image",
60
- "GoogleOther-Video",
61
- "GPTBot",
62
- "iAskBot",
63
- "iaskspider",
64
- "iaskspider/2.0",
65
- "IbouBot",
66
- "ICC-Crawler",
67
- "ImagesiftBot",
68
- "imageSpider",
69
- "img2dataset",
70
- "ISSCyberRiskCrawler",
71
- "Kangaroo Bot",
72
- "KlaviyoAIBot",
73
- "KunatoCrawler",
74
- "laion-huggingface-processor",
75
- "LAIONDownloader",
76
- "LCC",
77
- "LinerBot",
78
- "Linguee Bot",
79
- "LinkupBot",
80
- "Manus-User",
81
- "meta-externalagent",
82
- "Meta-ExternalAgent",
83
- "meta-externalfetcher",
84
- "Meta-ExternalFetcher",
85
- "meta-webindexer",
86
- "MistralAI-User",
87
- "MistralAI-User/1.0",
88
- "MyCentralAIScraperBot",
89
- "netEstate Imprint Crawler",
90
- "NotebookLM",
91
- "NovaAct",
92
- "OAI-SearchBot",
93
- "omgili",
94
- "omgilibot",
95
- "OpenAI",
96
- "Operator",
97
- "PanguBot",
98
- "Panscient",
99
- "panscient.com",
100
- "Perplexity-User",
101
- "PerplexityBot",
102
- "PetalBot",
103
- "PhindBot",
104
- "Poggio-Citations",
105
- "Poseidon Research Crawler",
106
- "QualifiedBot",
107
- "QuillBot",
108
- "quillbot.com",
109
- "SBIntuitionsBot",
110
- "Scrapy",
111
- "SemrushBot-OCOB",
112
- "SemrushBot-SWA",
113
- "ShapBot",
114
- "Sidetrade indexer bot",
115
- "Spider",
116
- "TerraCotta",
117
- "Thinkbot",
118
- "TikTokSpider",
119
- "Timpibot",
120
- "TwinAgent",
121
- "VelenPublicWebCrawler",
122
- "WARDBot",
123
- "Webzio-Extended",
124
- "webzio-extended",
125
- "wpbot",
126
- "WRTNBot",
127
- "YaK",
128
- "YandexAdditional",
129
- "YandexAdditionalBot",
130
- "YouBot",
131
- "ZanistaBot",
132
- ];
@@ -1,23 +0,0 @@
1
- import * as tools from "@bgord/tools";
2
- import type { BuildInfoRepositoryStrategy } from "./build-info-repository.strategy";
3
- import { CommitSha } from "./commit-sha.vo";
4
- import type { FileReaderJsonPort } from "./file-reader-json.port";
5
-
6
- type Dependencies = { FileReaderJson: FileReaderJsonPort };
7
-
8
- export const BUILD_INFO_REPOSITORY_FILE_PATH = tools.FilePathRelative.fromString("infra/build-info.json");
9
-
10
- export class BuildInfoRepositoryFileStrategy implements BuildInfoRepositoryStrategy {
11
- constructor(private readonly deps: Dependencies) {}
12
-
13
- async extract() {
14
- const file = await this.deps.FileReaderJson.read(BUILD_INFO_REPOSITORY_FILE_PATH.get());
15
-
16
- const version = tools.PackageVersion.fromString(file.version);
17
- const timestamp = tools.Timestamp.fromNumber(file.timestamp);
18
- const sha = CommitSha.fromString(file.sha);
19
- const size = tools.Size.fromBytes(file.size);
20
-
21
- return { version, timestamp, sha, size };
22
- }
23
- }
@@ -1,16 +0,0 @@
1
- import type * as tools from "@bgord/tools";
2
- import type { BuildInfoRepositoryStrategy } from "./build-info-repository.strategy";
3
- import type { CommitSha } from "./commit-sha.vo";
4
-
5
- export class BuildInfoRepositoryNoopStrategy implements BuildInfoRepositoryStrategy {
6
- constructor(
7
- private readonly timestamp: tools.Timestamp,
8
- private readonly version: tools.PackageVersion,
9
- private readonly sha: CommitSha,
10
- private readonly size: tools.Size,
11
- ) {}
12
-
13
- async extract() {
14
- return { timestamp: this.timestamp, version: this.version, sha: this.sha, size: this.size };
15
- }
16
- }
@@ -1,25 +0,0 @@
1
- import * as tools from "@bgord/tools";
2
- import type { BuildInfoRepositoryStrategy } from "./build-info-repository.strategy";
3
- import type { ClockPort } from "./clock.port";
4
- import { CommitSha } from "./commit-sha.vo";
5
- import type { FileReaderJsonPort } from "./file-reader-json.port";
6
-
7
- type Dependencies = { Clock: ClockPort; FileReaderJson: FileReaderJsonPort };
8
-
9
- export class BuildInfoRepositoryPackageJsonStrategy implements BuildInfoRepositoryStrategy {
10
- constructor(private readonly deps: Dependencies) {}
11
-
12
- async extract() {
13
- const timestamp = this.deps.Clock.now();
14
- const sha = CommitSha.fromString("a".repeat(40));
15
- const size = tools.Size.fromBytes(0);
16
-
17
- try {
18
- const packageJson = await this.deps.FileReaderJson.read("package.json");
19
-
20
- return { timestamp, version: tools.PackageVersion.fromString(packageJson.version), sha, size };
21
- } catch {
22
- return { timestamp, version: tools.PackageVersion.fromString("0.0.0"), sha, size };
23
- }
24
- }
25
- }
@@ -1,13 +0,0 @@
1
- import type * as tools from "@bgord/tools";
2
- import type { CommitSha } from "./commit-sha.vo";
3
-
4
- export type BuildInfoType = {
5
- timestamp: tools.Timestamp;
6
- version: tools.PackageVersion;
7
- sha: CommitSha;
8
- size: tools.Size;
9
- };
10
-
11
- export interface BuildInfoRepositoryStrategy {
12
- extract(): Promise<BuildInfoType>;
13
- }
@@ -1,37 +0,0 @@
1
- import type { HashFileResult } from "./hash-file.port";
2
-
3
- type CacheFileOverridesType = Record<string, string>;
4
-
5
- interface CacheFileHandler {
6
- notModified(options: HashFileResult, overrides?: CacheFileOverridesType): Response;
7
-
8
- fresh(options: HashFileResult, overrides?: CacheFileOverridesType): Headers;
9
- }
10
-
11
- export const CacheFileMustRevalidate: CacheFileHandler = {
12
- notModified(options: HashFileResult, overrides: CacheFileOverridesType = {}) {
13
- return new Response(null, {
14
- status: 304,
15
- headers: new Headers({
16
- ETag: options.etag.get(),
17
- "Cache-Control": "private, max-age=0, must-revalidate",
18
- "Last-Modified": new Date(options.lastModified.ms).toUTCString(),
19
- Vary: "Authorization, Cookie",
20
- ...overrides,
21
- }),
22
- });
23
- },
24
-
25
- fresh(options: HashFileResult, overrides: CacheFileOverridesType = {}) {
26
- return new Headers({
27
- "Content-Type": options.mime.toString(),
28
- "Cache-Control": "private, max-age=0, must-revalidate",
29
- ETag: options.etag.get(),
30
- "Content-Length": options.size.toBytes().toString(),
31
- "Last-Modified": new Date(options.lastModified.ms).toUTCString(),
32
- "Accept-Ranges": "bytes",
33
- Vary: "Authorization, Cookie",
34
- ...overrides,
35
- });
36
- },
37
- };
@@ -1,58 +0,0 @@
1
- import type { LRUCache } from "lru-cache";
2
- import type { CacheRepositoryPort, CacheRepositoryTtlType } from "./cache-repository.port";
3
- import type { Hash } from "./hash.vo";
4
- import type { HashValueType } from "./hash-value.vo";
5
-
6
- export const CacheRepositoryLruCacheAdapterError = {
7
- MissingDependency: "cache.repository.lru.cache.adapter.error.missing.dependency",
8
- };
9
-
10
- export class CacheRepositoryLruCacheAdapter implements CacheRepositoryPort {
11
- private readonly store: LRUCache<HashValueType, any>;
12
-
13
- private constructor(store: LRUCache<HashValueType, any>) {
14
- this.store = store;
15
- }
16
-
17
- static async build(config: CacheRepositoryTtlType): Promise<CacheRepositoryLruCacheAdapter> {
18
- const library = await CacheRepositoryLruCacheAdapter.resolve();
19
-
20
- const store = new library<HashValueType, any>({
21
- max: 100_000,
22
- ttl: config.type === "finite" ? config.ttl.ms : undefined,
23
- ttlAutopurge: true,
24
- });
25
-
26
- return new CacheRepositoryLruCacheAdapter(store);
27
- }
28
-
29
- private static async resolve() {
30
- try {
31
- const library = await CacheRepositoryLruCacheAdapter.import();
32
-
33
- return library.LRUCache;
34
- } catch {
35
- throw new Error(CacheRepositoryLruCacheAdapterError.MissingDependency);
36
- }
37
- }
38
-
39
- static async import() {
40
- return import("lru-cache");
41
- }
42
-
43
- async get<T>(subject: Hash): Promise<T | null> {
44
- return (this.store.get(subject.get()) as T) ?? null;
45
- }
46
-
47
- async set<T>(subject: Hash, value: T): Promise<void> {
48
- this.store.set(subject.get(), value);
49
- }
50
-
51
- async delete(subject: Hash): Promise<void> {
52
- this.store.delete(subject.get());
53
- }
54
-
55
- async flush(): Promise<void> {
56
- this.store.clear();
57
- }
58
- }
@@ -1,32 +0,0 @@
1
- import NodeCache from "node-cache";
2
- import type { CacheRepositoryPort, CacheRepositoryTtlType } from "./cache-repository.port";
3
- import type { Hash } from "./hash.vo";
4
-
5
- export class CacheRepositoryNodeCacheAdapter implements CacheRepositoryPort {
6
- private readonly store: NodeCache;
7
-
8
- constructor(config: CacheRepositoryTtlType) {
9
- this.store = new NodeCache({
10
- stdTTL: config.type === "finite" ? config.ttl.seconds : 0,
11
- deleteOnExpire: true,
12
- maxKeys: 100_000,
13
- useClones: false,
14
- });
15
- }
16
-
17
- async get<T>(subject: Hash): Promise<T | null> {
18
- return this.store.get(subject.get()) ?? null;
19
- }
20
-
21
- async set<T>(subject: Hash, value: T) {
22
- this.store.set(subject.get(), value);
23
- }
24
-
25
- async delete(subject: Hash) {
26
- this.store.del(subject.get());
27
- }
28
-
29
- async flush() {
30
- this.store.flushAll();
31
- }
32
- }
@@ -1,15 +0,0 @@
1
- import type { CacheRepositoryPort, CacheRepositoryTtlType } from "./cache-repository.port";
2
-
3
- export class CacheRepositoryNoopAdapter implements CacheRepositoryPort {
4
- constructor(_config: CacheRepositoryTtlType) {}
5
-
6
- async get<T>(): Promise<T | null> {
7
- return null;
8
- }
9
-
10
- async set() {}
11
-
12
- async delete() {}
13
-
14
- async flush() {}
15
- }
@@ -1,11 +0,0 @@
1
- import type * as tools from "@bgord/tools";
2
- import type { Hash } from "./hash.vo";
3
-
4
- export type CacheRepositoryTtlType = { type: "finite"; ttl: tools.Duration } | { type: "infinite" };
5
-
6
- export interface CacheRepositoryPort {
7
- get<T>(subject: Hash): Promise<T | null>;
8
- set<T>(subject: Hash, value: T): Promise<void>;
9
- delete(subject: Hash): Promise<void>;
10
- flush(): Promise<void>;
11
- }
@@ -1,33 +0,0 @@
1
- import type { CacheRepositoryPort } from "./cache-repository.port";
2
- import { type CacheResolverStrategy, CacheSourceEnum } from "./cache-resolver.strategy";
3
- import type { Hash } from "./hash.vo";
4
-
5
- type Dependencies = { CacheRepository: CacheRepositoryPort };
6
-
7
- export class CacheResolverSimpleStrategy implements CacheResolverStrategy {
8
- constructor(private readonly deps: Dependencies) {}
9
-
10
- async resolve<T>(subject: Hash, producer: () => Promise<T>): Promise<T> {
11
- const result = await this.resolveWithContext(subject, producer);
12
-
13
- return result.value;
14
- }
15
-
16
- async resolveWithContext<T>(
17
- subject: Hash,
18
- producer: () => Promise<T>,
19
- ): Promise<{ value: T; source: CacheSourceEnum }> {
20
- const cached = await this.deps.CacheRepository.get<T>(subject);
21
-
22
- if (cached !== null) return { value: cached, source: CacheSourceEnum.hit };
23
-
24
- const value = await producer();
25
- await this.deps.CacheRepository.set(subject, value);
26
-
27
- return { value, source: CacheSourceEnum.miss };
28
- }
29
-
30
- async flush() {
31
- await this.deps.CacheRepository.flush();
32
- }
33
- }
@@ -1,17 +0,0 @@
1
- import type { Hash } from "./hash.vo";
2
-
3
- export enum CacheSourceEnum {
4
- hit = "hit",
5
- miss = "miss",
6
- }
7
-
8
- export interface CacheResolverStrategy {
9
- resolve<T>(subject: Hash, producer: () => Promise<T>): Promise<T>;
10
-
11
- resolveWithContext<T>(
12
- subject: Hash,
13
- producer: () => Promise<T>,
14
- ): Promise<{ value: T; source: CacheSourceEnum }>;
15
-
16
- flush(): Promise<void>;
17
- }