@bgord/bun 1.10.23 → 1.11.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 (792) hide show
  1. package/dist/ab-assignment-composite.strategy.d.ts +10 -0
  2. package/dist/ab-assignment-composite.strategy.d.ts.map +1 -0
  3. package/dist/ab-assignment-composite.strategy.js +15 -0
  4. package/dist/ab-assignment-composite.strategy.js.map +1 -0
  5. package/dist/ab-assignment-fixed.strategy.d.ts +10 -0
  6. package/dist/ab-assignment-fixed.strategy.d.ts.map +1 -0
  7. package/dist/ab-assignment-fixed.strategy.js +10 -0
  8. package/dist/ab-assignment-fixed.strategy.js.map +1 -0
  9. package/dist/ab-assignment-hash.strategy.d.ts +12 -0
  10. package/dist/ab-assignment-hash.strategy.d.ts.map +1 -0
  11. package/dist/ab-assignment-hash.strategy.js +14 -0
  12. package/dist/ab-assignment-hash.strategy.js.map +1 -0
  13. package/dist/ab-assignment-query.strategy.d.ts +10 -0
  14. package/dist/ab-assignment-query.strategy.d.ts.map +1 -0
  15. package/dist/ab-assignment-query.strategy.js +11 -0
  16. package/dist/ab-assignment-query.strategy.js.map +1 -0
  17. package/dist/ab-assignment.strategy.d.ts +7 -0
  18. package/dist/ab-assignment.strategy.d.ts.map +1 -0
  19. package/dist/ab-assignment.strategy.js +2 -0
  20. package/dist/ab-assignment.strategy.js.map +1 -0
  21. package/dist/ab-hono-noop.middleware.d.ts +10 -0
  22. package/dist/ab-hono-noop.middleware.d.ts.map +1 -0
  23. package/dist/ab-hono-noop.middleware.js +18 -0
  24. package/dist/ab-hono-noop.middleware.js.map +1 -0
  25. package/dist/ab-hono.middleware.d.ts +14 -0
  26. package/dist/ab-hono.middleware.d.ts.map +1 -0
  27. package/dist/ab-hono.middleware.js +17 -0
  28. package/dist/ab-hono.middleware.js.map +1 -0
  29. package/dist/ab-variant-selector.service.d.ts +12 -0
  30. package/dist/ab-variant-selector.service.d.ts.map +1 -0
  31. package/dist/ab-variant-selector.service.js +22 -0
  32. package/dist/ab-variant-selector.service.js.map +1 -0
  33. package/dist/ab-variant-weight.vo.d.ts +7 -0
  34. package/dist/ab-variant-weight.vo.d.ts.map +1 -0
  35. package/dist/ab-variant-weight.vo.js +10 -0
  36. package/dist/ab-variant-weight.vo.js.map +1 -0
  37. package/dist/ab-variant.vo.d.ts +11 -0
  38. package/dist/ab-variant.vo.d.ts.map +1 -0
  39. package/dist/ab-variant.vo.js +7 -0
  40. package/dist/ab-variant.vo.js.map +1 -0
  41. package/dist/ab-variants.vo.d.ts +12 -0
  42. package/dist/ab-variants.vo.d.ts.map +1 -0
  43. package/dist/ab-variants.vo.js +24 -0
  44. package/dist/ab-variants.vo.js.map +1 -0
  45. package/dist/ab.middleware.d.ts +11 -0
  46. package/dist/ab.middleware.d.ts.map +1 -0
  47. package/dist/ab.middleware.js +12 -0
  48. package/dist/ab.middleware.js.map +1 -0
  49. package/dist/api-version-hono.middleware.d.ts +17 -0
  50. package/dist/api-version-hono.middleware.d.ts.map +1 -0
  51. package/dist/api-version-hono.middleware.js +15 -0
  52. package/dist/api-version-hono.middleware.js.map +1 -0
  53. package/dist/api-version.middleware.d.ts +5 -2
  54. package/dist/api-version.middleware.d.ts.map +1 -1
  55. package/dist/api-version.middleware.js +12 -10
  56. package/dist/api-version.middleware.js.map +1 -1
  57. package/dist/auth-session-reader.port.d.ts +8 -7
  58. package/dist/auth-session-reader.port.d.ts.map +1 -1
  59. package/dist/basic-auth.service.d.ts +3 -3
  60. package/dist/basic-auth.service.d.ts.map +1 -1
  61. package/dist/basic-auth.service.js.map +1 -1
  62. package/dist/cache-response-hono.middleware.d.ts +14 -0
  63. package/dist/cache-response-hono.middleware.d.ts.map +1 -0
  64. package/dist/cache-response-hono.middleware.js +34 -0
  65. package/dist/cache-response-hono.middleware.js.map +1 -0
  66. package/dist/cache-response.middleware.d.ts +18 -8
  67. package/dist/cache-response.middleware.d.ts.map +1 -1
  68. package/dist/cache-response.middleware.js +8 -21
  69. package/dist/cache-response.middleware.js.map +1 -1
  70. package/dist/correlation-hono.middleware.d.ts +16 -0
  71. package/dist/correlation-hono.middleware.d.ts.map +1 -0
  72. package/dist/correlation-hono.middleware.js +20 -0
  73. package/dist/correlation-hono.middleware.js.map +1 -0
  74. package/dist/correlation-id.middleware.d.ts +14 -0
  75. package/dist/correlation-id.middleware.d.ts.map +1 -0
  76. package/dist/correlation-id.middleware.js +16 -0
  77. package/dist/correlation-id.middleware.js.map +1 -0
  78. package/dist/correlation-storage.service.d.ts +0 -1
  79. package/dist/correlation-storage.service.d.ts.map +1 -1
  80. package/dist/correlation-storage.service.js +0 -2
  81. package/dist/correlation-storage.service.js.map +1 -1
  82. package/dist/crypto-key-provider-with-cache.adapter.d.ts +5 -4
  83. package/dist/crypto-key-provider-with-cache.adapter.d.ts.map +1 -1
  84. package/dist/crypto-key-provider-with-cache.adapter.js +5 -5
  85. package/dist/crypto-key-provider-with-cache.adapter.js.map +1 -1
  86. package/dist/environment-loader-process-safe.adapter.d.ts.map +1 -1
  87. package/dist/environment-loader-process-safe.adapter.js +3 -3
  88. package/dist/environment-loader-process-safe.adapter.js.map +1 -1
  89. package/dist/etag-extractor-hono.middleware.d.ts +13 -0
  90. package/dist/etag-extractor-hono.middleware.d.ts.map +1 -0
  91. package/dist/etag-extractor-hono.middleware.js +17 -0
  92. package/dist/etag-extractor-hono.middleware.js.map +1 -0
  93. package/dist/etag-extractor.middleware.d.ts +3 -8
  94. package/dist/etag-extractor.middleware.d.ts.map +1 -1
  95. package/dist/etag-extractor.middleware.js +5 -9
  96. package/dist/etag-extractor.middleware.js.map +1 -1
  97. package/dist/event-store.d.ts +2 -2
  98. package/dist/event-store.d.ts.map +1 -1
  99. package/dist/event-store.js.map +1 -1
  100. package/dist/file-inspection-noop.adapter.d.ts +2 -2
  101. package/dist/file-inspection-noop.adapter.d.ts.map +1 -1
  102. package/dist/file-inspection-noop.adapter.js.map +1 -1
  103. package/dist/file-reader-json-with-cache.adapter.d.ts +5 -4
  104. package/dist/file-reader-json-with-cache.adapter.d.ts.map +1 -1
  105. package/dist/file-reader-json-with-cache.adapter.js +6 -6
  106. package/dist/file-reader-json-with-cache.adapter.js.map +1 -1
  107. package/dist/file-reader-raw-with-cache.adapter.d.ts +5 -4
  108. package/dist/file-reader-raw-with-cache.adapter.d.ts.map +1 -1
  109. package/dist/file-reader-raw-with-cache.adapter.js +6 -6
  110. package/dist/file-reader-raw-with-cache.adapter.js.map +1 -1
  111. package/dist/file-reader-text-with-cache.adapter.d.ts +5 -4
  112. package/dist/file-reader-text-with-cache.adapter.d.ts.map +1 -1
  113. package/dist/file-reader-text-with-cache.adapter.js +6 -6
  114. package/dist/file-reader-text-with-cache.adapter.js.map +1 -1
  115. package/dist/file-uploader-hono.middleware.d.ts +13 -0
  116. package/dist/file-uploader-hono.middleware.d.ts.map +1 -0
  117. package/dist/file-uploader-hono.middleware.js +37 -0
  118. package/dist/file-uploader-hono.middleware.js.map +1 -0
  119. package/dist/file-uploader.middleware.d.ts +19 -8
  120. package/dist/file-uploader.middleware.d.ts.map +1 -1
  121. package/dist/file-uploader.middleware.js +24 -26
  122. package/dist/file-uploader.middleware.js.map +1 -1
  123. package/dist/handler-hono.port.d.ts +5 -0
  124. package/dist/handler-hono.port.d.ts.map +1 -0
  125. package/dist/handler-hono.port.js +2 -0
  126. package/dist/handler-hono.port.js.map +1 -0
  127. package/dist/hash-bucket.vo.d.ts +9 -0
  128. package/dist/hash-bucket.vo.d.ts.map +1 -0
  129. package/dist/hash-bucket.vo.js +17 -0
  130. package/dist/hash-bucket.vo.js.map +1 -0
  131. package/dist/healthcheck-hono.handler.d.ts +87 -0
  132. package/dist/healthcheck-hono.handler.d.ts.map +1 -0
  133. package/dist/healthcheck-hono.handler.js +17 -0
  134. package/dist/healthcheck-hono.handler.js.map +1 -0
  135. package/dist/healthcheck.handler.d.ts +83 -0
  136. package/dist/healthcheck.handler.d.ts.map +1 -0
  137. package/dist/{healthcheck.service.js → healthcheck.handler.js} +21 -19
  138. package/dist/healthcheck.handler.js.map +1 -0
  139. package/dist/http-logger-hono.middleware.d.ts +17 -0
  140. package/dist/http-logger-hono.middleware.d.ts.map +1 -0
  141. package/dist/http-logger-hono.middleware.js +37 -0
  142. package/dist/http-logger-hono.middleware.js.map +1 -0
  143. package/dist/http-logger.middleware.d.ts +19 -4
  144. package/dist/http-logger.middleware.d.ts.map +1 -1
  145. package/dist/http-logger.middleware.js +31 -41
  146. package/dist/http-logger.middleware.js.map +1 -1
  147. package/dist/i18n.service.d.ts +1 -1
  148. package/dist/i18n.service.d.ts.map +1 -1
  149. package/dist/image-info-noop.adapter.d.ts +1 -1
  150. package/dist/image-info-noop.adapter.d.ts.map +1 -1
  151. package/dist/image-info-noop.adapter.js +1 -1
  152. package/dist/image-info-noop.adapter.js.map +1 -1
  153. package/dist/image-info-sharp.adapter.d.ts +1 -1
  154. package/dist/image-info-sharp.adapter.d.ts.map +1 -1
  155. package/dist/image-info-sharp.adapter.js +3 -3
  156. package/dist/image-info-sharp.adapter.js.map +1 -1
  157. package/dist/image-info.port.d.ts +1 -1
  158. package/dist/image-info.port.d.ts.map +1 -1
  159. package/dist/in-flight-requests-hono.middleware.d.ts +7 -0
  160. package/dist/in-flight-requests-hono.middleware.d.ts.map +1 -0
  161. package/dist/in-flight-requests-hono.middleware.js +16 -0
  162. package/dist/in-flight-requests-hono.middleware.js.map +1 -0
  163. package/dist/in-flight-requests-tracker.service.d.ts.map +1 -1
  164. package/dist/in-flight-requests-tracker.service.js +0 -1
  165. package/dist/in-flight-requests-tracker.service.js.map +1 -1
  166. package/dist/in-flight-requests.middleware.d.ts +3 -2
  167. package/dist/in-flight-requests.middleware.d.ts.map +1 -1
  168. package/dist/in-flight-requests.middleware.js +6 -10
  169. package/dist/in-flight-requests.middleware.js.map +1 -1
  170. package/dist/index.d.ts +70 -25
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +70 -25
  173. package/dist/index.js.map +1 -1
  174. package/dist/invariant-error-handler.service.d.ts +1 -2
  175. package/dist/invariant-error-handler.service.d.ts.map +1 -1
  176. package/dist/invariant-error-handler.service.js.map +1 -1
  177. package/dist/invariant.service.d.ts +2 -2
  178. package/dist/invariant.service.d.ts.map +1 -1
  179. package/dist/mailer-resend.adapter.d.ts +2 -2
  180. package/dist/mailer-resend.adapter.d.ts.map +1 -1
  181. package/dist/mailer-resend.adapter.js.map +1 -1
  182. package/dist/mailer-smtp.adapter.d.ts +2 -2
  183. package/dist/mailer-smtp.adapter.d.ts.map +1 -1
  184. package/dist/mailer-smtp.adapter.js.map +1 -1
  185. package/dist/middleware-hono-noop.adapter.d.ts +6 -0
  186. package/dist/middleware-hono-noop.adapter.d.ts.map +1 -0
  187. package/dist/middleware-hono-noop.adapter.js +6 -0
  188. package/dist/middleware-hono-noop.adapter.js.map +1 -0
  189. package/dist/middleware-hono.port.d.ts +5 -0
  190. package/dist/middleware-hono.port.d.ts.map +1 -0
  191. package/dist/middleware-hono.port.js +2 -0
  192. package/dist/middleware-hono.port.js.map +1 -0
  193. package/dist/modules/preferences/invariants/user-language-has-changed.d.ts +6 -6
  194. package/dist/modules/preferences/invariants/user-language-has-changed.d.ts.map +1 -1
  195. package/dist/modules/preferences/invariants/user-language-has-changed.js.map +1 -1
  196. package/dist/ping-hono.handler.d.ts +6 -0
  197. package/dist/ping-hono.handler.d.ts.map +1 -0
  198. package/dist/ping-hono.handler.js +13 -0
  199. package/dist/ping-hono.handler.js.map +1 -0
  200. package/dist/ping.handler.d.ts +4 -0
  201. package/dist/ping.handler.d.ts.map +1 -0
  202. package/dist/ping.handler.js +6 -0
  203. package/dist/ping.handler.js.map +1 -0
  204. package/dist/prerequisite-verifier-binary.adapter.d.ts +5 -3
  205. package/dist/prerequisite-verifier-binary.adapter.d.ts.map +1 -1
  206. package/dist/prerequisite-verifier-binary.adapter.js.map +1 -1
  207. package/dist/prerequisite-verifier-bun.adapter.d.ts +6 -4
  208. package/dist/prerequisite-verifier-bun.adapter.d.ts.map +1 -1
  209. package/dist/prerequisite-verifier-bun.adapter.js.map +1 -1
  210. package/dist/prerequisite-verifier-clock-drift.adapter.d.ts +4 -3
  211. package/dist/prerequisite-verifier-clock-drift.adapter.d.ts.map +1 -1
  212. package/dist/prerequisite-verifier-clock-drift.adapter.js.map +1 -1
  213. package/dist/prerequisite-verifier-directory.adapter.d.ts +5 -4
  214. package/dist/prerequisite-verifier-directory.adapter.d.ts.map +1 -1
  215. package/dist/prerequisite-verifier-directory.adapter.js.map +1 -1
  216. package/dist/prerequisite-verifier-dns.adapter.d.ts +5 -3
  217. package/dist/prerequisite-verifier-dns.adapter.d.ts.map +1 -1
  218. package/dist/prerequisite-verifier-dns.adapter.js.map +1 -1
  219. package/dist/prerequisite-verifier-external-api.adapter.d.ts +5 -3
  220. package/dist/prerequisite-verifier-external-api.adapter.d.ts.map +1 -1
  221. package/dist/prerequisite-verifier-external-api.adapter.js.map +1 -1
  222. package/dist/prerequisite-verifier-file.adapter.d.ts +5 -4
  223. package/dist/prerequisite-verifier-file.adapter.d.ts.map +1 -1
  224. package/dist/prerequisite-verifier-file.adapter.js.map +1 -1
  225. package/dist/prerequisite-verifier-jobs.adapter.d.ts +5 -3
  226. package/dist/prerequisite-verifier-jobs.adapter.d.ts.map +1 -1
  227. package/dist/prerequisite-verifier-jobs.adapter.js.map +1 -1
  228. package/dist/prerequisite-verifier-memory.adapter.d.ts +5 -3
  229. package/dist/prerequisite-verifier-memory.adapter.d.ts.map +1 -1
  230. package/dist/prerequisite-verifier-memory.adapter.js.map +1 -1
  231. package/dist/prerequisite-verifier-node.adapter.d.ts +6 -4
  232. package/dist/prerequisite-verifier-node.adapter.d.ts.map +1 -1
  233. package/dist/prerequisite-verifier-node.adapter.js.map +1 -1
  234. package/dist/prerequisite-verifier-os.adapter.d.ts +5 -3
  235. package/dist/prerequisite-verifier-os.adapter.d.ts.map +1 -1
  236. package/dist/prerequisite-verifier-os.adapter.js.map +1 -1
  237. package/dist/prerequisite-verifier-port.adapter.d.ts +5 -3
  238. package/dist/prerequisite-verifier-port.adapter.d.ts.map +1 -1
  239. package/dist/prerequisite-verifier-port.adapter.js.map +1 -1
  240. package/dist/prerequisite-verifier-ram.adapter.d.ts +5 -3
  241. package/dist/prerequisite-verifier-ram.adapter.d.ts.map +1 -1
  242. package/dist/prerequisite-verifier-ram.adapter.js.map +1 -1
  243. package/dist/prerequisite-verifier-running-user.adapter.d.ts +5 -3
  244. package/dist/prerequisite-verifier-running-user.adapter.d.ts.map +1 -1
  245. package/dist/prerequisite-verifier-running-user.adapter.js.map +1 -1
  246. package/dist/prerequisite-verifier-space.adapter.d.ts +4 -3
  247. package/dist/prerequisite-verifier-space.adapter.d.ts.map +1 -1
  248. package/dist/prerequisite-verifier-space.adapter.js.map +1 -1
  249. package/dist/prerequisite-verifier-sqlite.adapter.d.ts +5 -3
  250. package/dist/prerequisite-verifier-sqlite.adapter.d.ts.map +1 -1
  251. package/dist/prerequisite-verifier-sqlite.adapter.js.map +1 -1
  252. package/dist/prerequisite-verifier-ssl-certificate-expiry.adapter.d.ts +5 -4
  253. package/dist/prerequisite-verifier-ssl-certificate-expiry.adapter.d.ts.map +1 -1
  254. package/dist/prerequisite-verifier-ssl-certificate-expiry.adapter.js.map +1 -1
  255. package/dist/prerequisite-verifier-timezone-utc.adapter.d.ts +5 -3
  256. package/dist/prerequisite-verifier-timezone-utc.adapter.d.ts.map +1 -1
  257. package/dist/prerequisite-verifier-timezone-utc.adapter.js.map +1 -1
  258. package/dist/prerequisite-verifier-translations.adapter.d.ts +1 -1
  259. package/dist/prerequisite-verifier-translations.adapter.d.ts.map +1 -1
  260. package/dist/prerequisite-verifier-translations.adapter.js.map +1 -1
  261. package/dist/prerequisite-verifier-with-cache.adapter.d.ts +5 -4
  262. package/dist/prerequisite-verifier-with-cache.adapter.d.ts.map +1 -1
  263. package/dist/prerequisite-verifier-with-cache.adapter.js +6 -6
  264. package/dist/prerequisite-verifier-with-cache.adapter.js.map +1 -1
  265. package/dist/prerequisite-verifier-with-fail-safe.adapter.d.ts +2 -2
  266. package/dist/prerequisite-verifier-with-fail-safe.adapter.d.ts.map +1 -1
  267. package/dist/prerequisite-verifier-with-fail-safe.adapter.js.map +1 -1
  268. package/dist/prerequisite-verifier-with-logger.adapter.d.ts +4 -3
  269. package/dist/prerequisite-verifier-with-logger.adapter.d.ts.map +1 -1
  270. package/dist/prerequisite-verifier-with-logger.adapter.js.map +1 -1
  271. package/dist/prerequisite-verifier-with-retry.adapter.d.ts +6 -5
  272. package/dist/prerequisite-verifier-with-retry.adapter.d.ts.map +1 -1
  273. package/dist/prerequisite-verifier-with-retry.adapter.js.map +1 -1
  274. package/dist/prerequisite-verifier-with-timeout.adapter.d.ts +5 -4
  275. package/dist/prerequisite-verifier-with-timeout.adapter.d.ts.map +1 -1
  276. package/dist/prerequisite-verifier-with-timeout.adapter.js.map +1 -1
  277. package/dist/prerequisite-verifier.decorator.d.ts +4 -4
  278. package/dist/prerequisite-verifier.decorator.d.ts.map +1 -1
  279. package/dist/prerequisite-verifier.decorator.js.map +1 -1
  280. package/dist/prerequisite.vo.d.ts +2 -2
  281. package/dist/prerequisite.vo.d.ts.map +1 -1
  282. package/dist/prerequisite.vo.js.map +1 -1
  283. package/dist/remote-file-storage-disk.adapter.d.ts +4 -4
  284. package/dist/remote-file-storage-disk.adapter.d.ts.map +1 -1
  285. package/dist/remote-file-storage-disk.adapter.js.map +1 -1
  286. package/dist/request-context-hono.adapter.d.ts +1 -1
  287. package/dist/request-context-hono.adapter.d.ts.map +1 -1
  288. package/dist/request-context-hono.adapter.js +10 -1
  289. package/dist/request-context-hono.adapter.js.map +1 -1
  290. package/dist/request-context.port.d.ts +18 -0
  291. package/dist/request-context.port.d.ts.map +1 -1
  292. package/dist/retry.service.d.ts +5 -5
  293. package/dist/retry.service.d.ts.map +1 -1
  294. package/dist/retry.service.js.map +1 -1
  295. package/dist/security-countermeasure-ban.strategy.d.ts +8 -7
  296. package/dist/security-countermeasure-ban.strategy.d.ts.map +1 -1
  297. package/dist/security-countermeasure-ban.strategy.js.map +1 -1
  298. package/dist/security-countermeasure-mirage.strategy.d.ts +6 -5
  299. package/dist/security-countermeasure-mirage.strategy.d.ts.map +1 -1
  300. package/dist/security-countermeasure-mirage.strategy.js.map +1 -1
  301. package/dist/security-countermeasure-tarpit.strategy.d.ts +5 -4
  302. package/dist/security-countermeasure-tarpit.strategy.d.ts.map +1 -1
  303. package/dist/security-countermeasure-tarpit.strategy.js.map +1 -1
  304. package/dist/security-rule-violation-threshold.strategy.d.ts +4 -3
  305. package/dist/security-rule-violation-threshold.strategy.d.ts.map +1 -1
  306. package/dist/security-rule-violation-threshold.strategy.js +4 -4
  307. package/dist/security-rule-violation-threshold.strategy.js.map +1 -1
  308. package/dist/setup-hono.service.d.ts +31 -0
  309. package/dist/setup-hono.service.d.ts.map +1 -0
  310. package/dist/{setup.service.js → setup-hono.service.js} +25 -33
  311. package/dist/setup-hono.service.js.map +1 -0
  312. package/dist/shield-api-key-hono.strategy.d.ts +11 -0
  313. package/dist/shield-api-key-hono.strategy.d.ts.map +1 -0
  314. package/dist/shield-api-key-hono.strategy.js +19 -0
  315. package/dist/shield-api-key-hono.strategy.js.map +1 -0
  316. package/dist/shield-api-key.strategy.d.ts +9 -9
  317. package/dist/shield-api-key.strategy.d.ts.map +1 -1
  318. package/dist/shield-api-key.strategy.js +5 -11
  319. package/dist/shield-api-key.strategy.js.map +1 -1
  320. package/dist/shield-auth-hono.strategy.d.ts +16 -0
  321. package/dist/shield-auth-hono.strategy.d.ts.map +1 -0
  322. package/dist/shield-auth-hono.strategy.js +31 -0
  323. package/dist/shield-auth-hono.strategy.js.map +1 -0
  324. package/dist/shield-auth.strategy.d.ts +8 -7
  325. package/dist/shield-auth.strategy.d.ts.map +1 -1
  326. package/dist/shield-auth.strategy.js +10 -23
  327. package/dist/shield-auth.strategy.js.map +1 -1
  328. package/dist/shield-basic-auth-hono.strategy.d.ts +11 -0
  329. package/dist/shield-basic-auth-hono.strategy.d.ts.map +1 -0
  330. package/dist/shield-basic-auth-hono.strategy.js +21 -0
  331. package/dist/shield-basic-auth-hono.strategy.js.map +1 -0
  332. package/dist/shield-basic-auth.strategy.d.ts +9 -7
  333. package/dist/shield-basic-auth.strategy.d.ts.map +1 -1
  334. package/dist/shield-basic-auth.strategy.js +18 -5
  335. package/dist/shield-basic-auth.strategy.js.map +1 -1
  336. package/dist/shield-body-limit-hono.strategy.d.ts +10 -0
  337. package/dist/shield-body-limit-hono.strategy.d.ts.map +1 -0
  338. package/dist/shield-body-limit-hono.strategy.js +21 -0
  339. package/dist/shield-body-limit-hono.strategy.js.map +1 -0
  340. package/dist/shield-body-limit.strategy.d.ts +14 -0
  341. package/dist/shield-body-limit.strategy.d.ts.map +1 -0
  342. package/dist/shield-body-limit.strategy.js +19 -0
  343. package/dist/shield-body-limit.strategy.js.map +1 -0
  344. package/dist/shield-csrf-hono.strategy.d.ts +11 -0
  345. package/dist/shield-csrf-hono.strategy.d.ts.map +1 -0
  346. package/dist/shield-csrf-hono.strategy.js +19 -0
  347. package/dist/shield-csrf-hono.strategy.js.map +1 -0
  348. package/dist/shield-csrf.strategy.d.ts +8 -7
  349. package/dist/shield-csrf.strategy.d.ts.map +1 -1
  350. package/dist/shield-csrf.strategy.js +7 -11
  351. package/dist/shield-csrf.strategy.js.map +1 -1
  352. package/dist/shield-hcaptcha-hono-local.strategy.d.ts +14 -0
  353. package/dist/shield-hcaptcha-hono-local.strategy.d.ts.map +1 -0
  354. package/dist/shield-hcaptcha-hono-local.strategy.js +20 -0
  355. package/dist/shield-hcaptcha-hono-local.strategy.js.map +1 -0
  356. package/dist/shield-hcaptcha-hono.strategy.d.ts +11 -0
  357. package/dist/shield-hcaptcha-hono.strategy.d.ts.map +1 -0
  358. package/dist/shield-hcaptcha-hono.strategy.js +19 -0
  359. package/dist/shield-hcaptcha-hono.strategy.js.map +1 -0
  360. package/dist/shield-hcaptcha.strategy.d.ts +5 -5
  361. package/dist/shield-hcaptcha.strategy.d.ts.map +1 -1
  362. package/dist/shield-hcaptcha.strategy.js +6 -12
  363. package/dist/shield-hcaptcha.strategy.js.map +1 -1
  364. package/dist/shield-maintenance-hono.strategy.d.ts +9 -0
  365. package/dist/shield-maintenance-hono.strategy.d.ts.map +1 -0
  366. package/dist/shield-maintenance-hono.strategy.js +18 -0
  367. package/dist/shield-maintenance-hono.strategy.js.map +1 -0
  368. package/dist/shield-maintenance.strategy.d.ts +15 -0
  369. package/dist/shield-maintenance.strategy.d.ts.map +1 -0
  370. package/dist/shield-maintenance.strategy.js +13 -0
  371. package/dist/shield-maintenance.strategy.js.map +1 -0
  372. package/dist/shield-rate-limit-hono.strategy.d.ts +18 -0
  373. package/dist/shield-rate-limit-hono.strategy.d.ts.map +1 -0
  374. package/dist/shield-rate-limit-hono.strategy.js +21 -0
  375. package/dist/shield-rate-limit-hono.strategy.js.map +1 -0
  376. package/dist/shield-rate-limit.strategy.d.ts +11 -10
  377. package/dist/shield-rate-limit.strategy.d.ts.map +1 -1
  378. package/dist/shield-rate-limit.strategy.js +9 -16
  379. package/dist/shield-rate-limit.strategy.js.map +1 -1
  380. package/dist/shield-recaptcha-hono.strategy.d.ts +11 -0
  381. package/dist/shield-recaptcha-hono.strategy.d.ts.map +1 -0
  382. package/dist/shield-recaptcha-hono.strategy.js +22 -0
  383. package/dist/shield-recaptcha-hono.strategy.js.map +1 -0
  384. package/dist/shield-recaptcha.strategy.d.ts +9 -8
  385. package/dist/shield-recaptcha.strategy.d.ts.map +1 -1
  386. package/dist/shield-recaptcha.strategy.js +8 -13
  387. package/dist/shield-recaptcha.strategy.js.map +1 -1
  388. package/dist/shield-security-hono.strategy.d.ts +18 -0
  389. package/dist/shield-security-hono.strategy.d.ts.map +1 -0
  390. package/dist/shield-security-hono.strategy.js +43 -0
  391. package/dist/shield-security-hono.strategy.js.map +1 -0
  392. package/dist/shield-security.strategy.d.ts +6 -12
  393. package/dist/shield-security.strategy.d.ts.map +1 -1
  394. package/dist/shield-security.strategy.js +12 -43
  395. package/dist/shield-security.strategy.js.map +1 -1
  396. package/dist/shield-timeout-hono.strategy.d.ts +11 -0
  397. package/dist/shield-timeout-hono.strategy.d.ts.map +1 -0
  398. package/dist/shield-timeout-hono.strategy.js +15 -0
  399. package/dist/shield-timeout-hono.strategy.js.map +1 -0
  400. package/dist/shield-timeout.strategy.d.ts +7 -9
  401. package/dist/shield-timeout.strategy.d.ts.map +1 -1
  402. package/dist/shield-timeout.strategy.js +3 -7
  403. package/dist/shield-timeout.strategy.js.map +1 -1
  404. package/dist/simulated-error-hono.middleware.d.ts +8 -0
  405. package/dist/simulated-error-hono.middleware.d.ts.map +1 -0
  406. package/dist/simulated-error-hono.middleware.js +13 -0
  407. package/dist/simulated-error-hono.middleware.js.map +1 -0
  408. package/dist/simulated-error.middleware.d.ts +2 -2
  409. package/dist/simulated-error.middleware.d.ts.map +1 -1
  410. package/dist/simulated-error.middleware.js +3 -4
  411. package/dist/simulated-error.middleware.js.map +1 -1
  412. package/dist/slower-hono.middleware.d.ts +14 -0
  413. package/dist/slower-hono.middleware.d.ts.map +1 -0
  414. package/dist/slower-hono.middleware.js +14 -0
  415. package/dist/slower-hono.middleware.js.map +1 -0
  416. package/dist/slower.middleware.d.ts +5 -2
  417. package/dist/slower.middleware.d.ts.map +1 -1
  418. package/dist/slower.middleware.js +10 -6
  419. package/dist/slower.middleware.js.map +1 -1
  420. package/dist/{ssr.d.ts → ssr-bun.service.d.ts} +2 -2
  421. package/dist/ssr-bun.service.d.ts.map +1 -0
  422. package/dist/ssr-bun.service.js +14 -0
  423. package/dist/ssr-bun.service.js.map +1 -0
  424. package/dist/ssr.service.d.ts +26 -0
  425. package/dist/ssr.service.d.ts.map +1 -0
  426. package/dist/ssr.service.js +49 -0
  427. package/dist/ssr.service.js.map +1 -0
  428. package/dist/{static-files.service.d.ts → static-files-hono.service.d.ts} +2 -2
  429. package/dist/static-files-hono.service.d.ts.map +1 -0
  430. package/dist/{static-files.service.js → static-files-hono.service.js} +2 -2
  431. package/dist/static-files-hono.service.js.map +1 -0
  432. package/dist/subject-application-resolver.vo.d.ts +23 -0
  433. package/dist/subject-application-resolver.vo.d.ts.map +1 -0
  434. package/dist/{cache-subject-application-resolver.vo.js → subject-application-resolver.vo.js} +7 -7
  435. package/dist/subject-application-resolver.vo.js.map +1 -0
  436. package/dist/{cache-subject-request-resolver.vo.d.ts → subject-request-resolver.vo.d.ts} +6 -6
  437. package/dist/subject-request-resolver.vo.d.ts.map +1 -0
  438. package/dist/{cache-subject-request-resolver.vo.js → subject-request-resolver.vo.js} +7 -7
  439. package/dist/subject-request-resolver.vo.js.map +1 -0
  440. package/dist/subject-segment-application.strategy.d.ts +6 -0
  441. package/dist/subject-segment-application.strategy.d.ts.map +1 -0
  442. package/dist/subject-segment-application.strategy.js +2 -0
  443. package/dist/subject-segment-application.strategy.js.map +1 -0
  444. package/dist/subject-segment-build.strategy.d.ts +9 -0
  445. package/dist/subject-segment-build.strategy.d.ts.map +1 -0
  446. package/dist/subject-segment-build.strategy.js +13 -0
  447. package/dist/subject-segment-build.strategy.js.map +1 -0
  448. package/dist/subject-segment-cookie.strategy.d.ts +9 -0
  449. package/dist/subject-segment-cookie.strategy.d.ts.map +1 -0
  450. package/dist/subject-segment-cookie.strategy.js +11 -0
  451. package/dist/subject-segment-cookie.strategy.js.map +1 -0
  452. package/dist/subject-segment-env.strategy.d.ts +9 -0
  453. package/dist/subject-segment-env.strategy.d.ts.map +1 -0
  454. package/dist/{cache-subject-segment-env.strategy.js → subject-segment-env.strategy.js} +2 -2
  455. package/dist/subject-segment-env.strategy.js.map +1 -0
  456. package/dist/subject-segment-fixed.strategy.d.ts +8 -0
  457. package/dist/subject-segment-fixed.strategy.d.ts.map +1 -0
  458. package/dist/{cache-subject-segment-fixed.strategy.js → subject-segment-fixed.strategy.js} +2 -2
  459. package/dist/subject-segment-fixed.strategy.js.map +1 -0
  460. package/dist/subject-segment-header.strategy.d.ts +9 -0
  461. package/dist/subject-segment-header.strategy.d.ts.map +1 -0
  462. package/dist/subject-segment-header.strategy.js +11 -0
  463. package/dist/subject-segment-header.strategy.js.map +1 -0
  464. package/dist/subject-segment-ip.strategy.d.ts +6 -0
  465. package/dist/subject-segment-ip.strategy.d.ts.map +1 -0
  466. package/dist/subject-segment-ip.strategy.js +7 -0
  467. package/dist/subject-segment-ip.strategy.js.map +1 -0
  468. package/dist/subject-segment-path.strategy.d.ts +6 -0
  469. package/dist/subject-segment-path.strategy.d.ts.map +1 -0
  470. package/dist/subject-segment-path.strategy.js +6 -0
  471. package/dist/subject-segment-path.strategy.js.map +1 -0
  472. package/dist/subject-segment-query.strategy.d.ts +7 -0
  473. package/dist/subject-segment-query.strategy.d.ts.map +1 -0
  474. package/dist/subject-segment-query.strategy.js +12 -0
  475. package/dist/subject-segment-query.strategy.js.map +1 -0
  476. package/dist/subject-segment-request.strategy.d.ts +9 -0
  477. package/dist/subject-segment-request.strategy.d.ts.map +1 -0
  478. package/dist/subject-segment-request.strategy.js +2 -0
  479. package/dist/subject-segment-request.strategy.js.map +1 -0
  480. package/dist/subject-segment-user.strategy.d.ts +6 -0
  481. package/dist/subject-segment-user.strategy.d.ts.map +1 -0
  482. package/dist/subject-segment-user.strategy.js +7 -0
  483. package/dist/subject-segment-user.strategy.js.map +1 -0
  484. package/dist/time-zone-offset-hono.middleware.d.ts +12 -0
  485. package/dist/time-zone-offset-hono.middleware.d.ts.map +1 -0
  486. package/dist/time-zone-offset-hono.middleware.js +17 -0
  487. package/dist/time-zone-offset-hono.middleware.js.map +1 -0
  488. package/dist/time-zone-offset.middleware.d.ts +3 -6
  489. package/dist/time-zone-offset.middleware.d.ts.map +1 -1
  490. package/dist/time-zone-offset.middleware.js +5 -13
  491. package/dist/time-zone-offset.middleware.js.map +1 -1
  492. package/dist/timing-hono.middleware.d.ts +12 -0
  493. package/dist/timing-hono.middleware.d.ts.map +1 -0
  494. package/dist/timing-hono.middleware.js +15 -0
  495. package/dist/timing-hono.middleware.js.map +1 -0
  496. package/dist/timing.middleware.d.ts +12 -0
  497. package/dist/timing.middleware.d.ts.map +1 -0
  498. package/dist/timing.middleware.js +14 -0
  499. package/dist/timing.middleware.js.map +1 -0
  500. package/dist/trailing-slash-hono.middleware.d.ts +7 -0
  501. package/dist/trailing-slash-hono.middleware.d.ts.map +1 -0
  502. package/dist/trailing-slash-hono.middleware.js +21 -0
  503. package/dist/trailing-slash-hono.middleware.js.map +1 -0
  504. package/dist/trailing-slash.middleware.d.ts +11 -0
  505. package/dist/trailing-slash.middleware.d.ts.map +1 -0
  506. package/dist/trailing-slash.middleware.js +10 -0
  507. package/dist/trailing-slash.middleware.js.map +1 -0
  508. package/dist/translations-hono.handler.d.ts +23 -0
  509. package/dist/translations-hono.handler.d.ts.map +1 -0
  510. package/dist/translations-hono.handler.js +17 -0
  511. package/dist/translations-hono.handler.js.map +1 -0
  512. package/dist/translations.handler.d.ts +22 -0
  513. package/dist/translations.handler.d.ts.map +1 -0
  514. package/dist/translations.handler.js +18 -0
  515. package/dist/translations.handler.js.map +1 -0
  516. package/dist/tsconfig.tsbuildinfo +1 -1
  517. package/dist/weak-etag-extractor-hono.middleware.d.ts +12 -0
  518. package/dist/weak-etag-extractor-hono.middleware.d.ts.map +1 -0
  519. package/dist/weak-etag-extractor-hono.middleware.js +17 -0
  520. package/dist/weak-etag-extractor-hono.middleware.js.map +1 -0
  521. package/dist/weak-etag-extractor.middleware.d.ts +4 -5
  522. package/dist/weak-etag-extractor.middleware.d.ts.map +1 -1
  523. package/dist/weak-etag-extractor.middleware.js +5 -9
  524. package/dist/weak-etag-extractor.middleware.js.map +1 -1
  525. package/dist/woodchopper-dispatcher-async.strategy.d.ts.map +1 -1
  526. package/dist/woodchopper-dispatcher-async.strategy.js +2 -0
  527. package/dist/woodchopper-dispatcher-async.strategy.js.map +1 -1
  528. package/dist/woodchopper-sampling-correlation-id.strategy.d.ts +2 -2
  529. package/dist/woodchopper-sampling-correlation-id.strategy.d.ts.map +1 -1
  530. package/dist/woodchopper-sampling-correlation-id.strategy.js.map +1 -1
  531. package/dist/woodchopper-sampling-every-nth.strategy.d.ts +3 -2
  532. package/dist/woodchopper-sampling-every-nth.strategy.d.ts.map +1 -1
  533. package/dist/woodchopper-sampling-every-nth.strategy.js.map +1 -1
  534. package/dist/woodchopper.d.ts +2 -2
  535. package/dist/woodchopper.d.ts.map +1 -1
  536. package/dist/woodchopper.js.map +1 -1
  537. package/package.json +9 -9
  538. package/readme.md +69 -24
  539. package/src/ab-assignment-composite.strategy.ts +17 -0
  540. package/src/ab-assignment-fixed.strategy.ts +12 -0
  541. package/src/ab-assignment-hash.strategy.ts +23 -0
  542. package/src/ab-assignment-query.strategy.ts +14 -0
  543. package/src/ab-assignment.strategy.ts +7 -0
  544. package/src/ab-hono-noop.middleware.ts +26 -0
  545. package/src/ab-hono.middleware.ts +28 -0
  546. package/src/ab-variant-selector.service.ts +27 -0
  547. package/src/ab-variant-weight.vo.ts +13 -0
  548. package/src/ab-variant.vo.ts +7 -0
  549. package/src/ab-variants.vo.ts +24 -0
  550. package/src/ab.middleware.ts +15 -0
  551. package/src/api-version-hono.middleware.ts +30 -0
  552. package/src/api-version.middleware.ts +18 -17
  553. package/src/auth-session-reader.port.ts +3 -3
  554. package/src/basic-auth.service.ts +3 -3
  555. package/src/cache-response-hono.middleware.ts +53 -0
  556. package/src/cache-response.middleware.ts +27 -33
  557. package/src/correlation-hono.middleware.ts +32 -0
  558. package/src/correlation-id.middleware.ts +20 -0
  559. package/src/correlation-storage.service.ts +0 -3
  560. package/src/crypto-key-provider-with-cache.adapter.ts +8 -6
  561. package/src/environment-loader-process-safe.adapter.ts +3 -6
  562. package/src/etag-extractor-hono.middleware.ts +27 -0
  563. package/src/etag-extractor.middleware.ts +6 -12
  564. package/src/event-store.ts +2 -2
  565. package/src/file-inspection-noop.adapter.ts +2 -2
  566. package/src/file-reader-json-with-cache.adapter.ts +8 -7
  567. package/src/file-reader-raw-with-cache.adapter.ts +8 -7
  568. package/src/file-reader-text-with-cache.adapter.ts +8 -7
  569. package/src/file-uploader-hono.middleware.ts +47 -0
  570. package/src/file-uploader.middleware.ts +21 -25
  571. package/src/handler-hono.port.ts +5 -0
  572. package/src/hash-bucket.vo.ts +19 -0
  573. package/src/healthcheck-hono.handler.ts +31 -0
  574. package/src/healthcheck.handler.ts +150 -0
  575. package/src/http-logger-hono.middleware.ts +50 -0
  576. package/src/http-logger.middleware.ts +56 -63
  577. package/src/i18n.service.ts +1 -1
  578. package/src/image-info-noop.adapter.ts +1 -1
  579. package/src/image-info-sharp.adapter.ts +3 -3
  580. package/src/image-info.port.ts +1 -1
  581. package/src/in-flight-requests-hono.middleware.ts +19 -0
  582. package/src/in-flight-requests-tracker.service.ts +0 -2
  583. package/src/in-flight-requests.middleware.ts +7 -11
  584. package/src/index.ts +70 -25
  585. package/src/invariant-error-handler.service.ts +2 -3
  586. package/src/invariant.service.ts +2 -2
  587. package/src/mailer-resend.adapter.ts +2 -2
  588. package/src/mailer-smtp.adapter.ts +2 -2
  589. package/src/middleware-hono-noop.adapter.ts +8 -0
  590. package/src/middleware-hono.port.ts +5 -0
  591. package/src/modules/preferences/invariants/user-language-has-changed.ts +4 -7
  592. package/src/ping-hono.handler.ts +17 -0
  593. package/src/ping.handler.ts +5 -0
  594. package/src/prerequisite-verifier-binary.adapter.ts +3 -1
  595. package/src/prerequisite-verifier-bun.adapter.ts +3 -1
  596. package/src/prerequisite-verifier-clock-drift.adapter.ts +2 -1
  597. package/src/prerequisite-verifier-directory.adapter.ts +6 -4
  598. package/src/prerequisite-verifier-dns.adapter.ts +3 -1
  599. package/src/prerequisite-verifier-external-api.adapter.ts +3 -1
  600. package/src/prerequisite-verifier-file.adapter.ts +6 -4
  601. package/src/prerequisite-verifier-jobs.adapter.ts +3 -1
  602. package/src/prerequisite-verifier-memory.adapter.ts +3 -1
  603. package/src/prerequisite-verifier-node.adapter.ts +3 -1
  604. package/src/prerequisite-verifier-os.adapter.ts +3 -1
  605. package/src/prerequisite-verifier-port.adapter.ts +3 -1
  606. package/src/prerequisite-verifier-ram.adapter.ts +3 -1
  607. package/src/prerequisite-verifier-running-user.adapter.ts +3 -1
  608. package/src/prerequisite-verifier-space.adapter.ts +2 -1
  609. package/src/prerequisite-verifier-sqlite.adapter.ts +3 -1
  610. package/src/prerequisite-verifier-ssl-certificate-expiry.adapter.ts +3 -1
  611. package/src/prerequisite-verifier-timezone-utc.adapter.ts +3 -1
  612. package/src/prerequisite-verifier-translations.adapter.ts +1 -2
  613. package/src/prerequisite-verifier-with-cache.adapter.ts +8 -7
  614. package/src/prerequisite-verifier-with-fail-safe.adapter.ts +4 -4
  615. package/src/prerequisite-verifier-with-logger.adapter.ts +3 -1
  616. package/src/prerequisite-verifier-with-retry.adapter.ts +3 -2
  617. package/src/prerequisite-verifier-with-timeout.adapter.ts +2 -1
  618. package/src/prerequisite-verifier.decorator.ts +4 -4
  619. package/src/prerequisite.vo.ts +2 -5
  620. package/src/remote-file-storage-disk.adapter.ts +3 -3
  621. package/src/request-context-hono.adapter.ts +12 -1
  622. package/src/request-context.port.ts +15 -0
  623. package/src/retry.service.ts +4 -4
  624. package/src/security-countermeasure-ban.strategy.ts +6 -4
  625. package/src/security-countermeasure-mirage.strategy.ts +2 -1
  626. package/src/security-countermeasure-tarpit.strategy.ts +2 -1
  627. package/src/security-rule-violation-threshold.strategy.ts +7 -6
  628. package/src/{setup.service.ts → setup-hono.service.ts} +36 -43
  629. package/src/shield-api-key-hono.strategy.ts +28 -0
  630. package/src/shield-api-key.strategy.ts +9 -15
  631. package/src/shield-auth-hono.strategy.ts +41 -0
  632. package/src/shield-auth.strategy.ts +12 -26
  633. package/src/shield-basic-auth-hono.strategy.ts +30 -0
  634. package/src/shield-basic-auth.strategy.ts +21 -10
  635. package/src/shield-body-limit-hono.strategy.ts +30 -0
  636. package/src/shield-body-limit.strategy.ts +23 -0
  637. package/src/shield-csrf-hono.strategy.ts +24 -0
  638. package/src/shield-csrf.strategy.ts +11 -16
  639. package/src/shield-hcaptcha-hono-local.strategy.ts +26 -0
  640. package/src/shield-hcaptcha-hono.strategy.ts +25 -0
  641. package/src/shield-hcaptcha.strategy.ts +7 -13
  642. package/src/shield-maintenance-hono.strategy.ts +23 -0
  643. package/src/shield-maintenance.strategy.ts +17 -0
  644. package/src/shield-rate-limit-hono.strategy.ts +34 -0
  645. package/src/shield-rate-limit.strategy.ts +11 -19
  646. package/src/shield-recaptcha-hono.strategy.ts +31 -0
  647. package/src/shield-recaptcha.strategy.ts +14 -20
  648. package/src/shield-security-hono.strategy.ts +62 -0
  649. package/src/shield-security.strategy.ts +19 -62
  650. package/src/shield-timeout-hono.strategy.ts +25 -0
  651. package/src/shield-timeout.strategy.ts +4 -14
  652. package/src/simulated-error-hono.middleware.ts +17 -0
  653. package/src/simulated-error.middleware.ts +4 -7
  654. package/src/slower-hono.middleware.ts +23 -0
  655. package/src/slower.middleware.ts +8 -7
  656. package/src/ssr-bun.service.ts +25 -0
  657. package/src/ssr.service.ts +66 -0
  658. package/src/{static-files.service.ts → static-files-hono.service.ts} +1 -1
  659. package/src/subject-application-resolver.vo.ts +34 -0
  660. package/src/subject-request-resolver.vo.ts +34 -0
  661. package/src/subject-segment-application.strategy.ts +7 -0
  662. package/src/subject-segment-build.strategy.ts +15 -0
  663. package/src/subject-segment-cookie.strategy.ts +14 -0
  664. package/src/subject-segment-env.strategy.ts +11 -0
  665. package/src/subject-segment-fixed.strategy.ts +12 -0
  666. package/src/subject-segment-header.strategy.ts +14 -0
  667. package/src/subject-segment-ip.strategy.ts +12 -0
  668. package/src/subject-segment-path.strategy.ts +8 -0
  669. package/src/subject-segment-query.strategy.ts +19 -0
  670. package/src/{cache-subject-segment-request.strategy.ts → subject-segment-request.strategy.ts} +4 -4
  671. package/src/subject-segment-user.strategy.ts +12 -0
  672. package/src/time-zone-offset-hono.middleware.ts +26 -0
  673. package/src/time-zone-offset.middleware.ts +6 -18
  674. package/src/timing-hono.middleware.ts +22 -0
  675. package/src/timing.middleware.ts +18 -0
  676. package/src/trailing-slash-hono.middleware.ts +27 -0
  677. package/src/trailing-slash.middleware.ts +11 -0
  678. package/src/translations-hono.handler.ts +26 -0
  679. package/src/translations.handler.ts +31 -0
  680. package/src/weak-etag-extractor-hono.middleware.ts +26 -0
  681. package/src/weak-etag-extractor.middleware.ts +6 -11
  682. package/src/woodchopper-dispatcher-async.strategy.ts +2 -0
  683. package/src/woodchopper-sampling-correlation-id.strategy.ts +2 -2
  684. package/src/woodchopper-sampling-every-nth.strategy.ts +2 -2
  685. package/src/woodchopper.ts +2 -2
  686. package/dist/cache-subject-application-resolver.vo.d.ts +0 -23
  687. package/dist/cache-subject-application-resolver.vo.d.ts.map +0 -1
  688. package/dist/cache-subject-application-resolver.vo.js.map +0 -1
  689. package/dist/cache-subject-request-resolver.vo.d.ts.map +0 -1
  690. package/dist/cache-subject-request-resolver.vo.js.map +0 -1
  691. package/dist/cache-subject-segment-application.strategy.d.ts +0 -6
  692. package/dist/cache-subject-segment-application.strategy.d.ts.map +0 -1
  693. package/dist/cache-subject-segment-application.strategy.js +0 -2
  694. package/dist/cache-subject-segment-application.strategy.js.map +0 -1
  695. package/dist/cache-subject-segment-build.strategy.d.ts +0 -9
  696. package/dist/cache-subject-segment-build.strategy.d.ts.map +0 -1
  697. package/dist/cache-subject-segment-build.strategy.js +0 -13
  698. package/dist/cache-subject-segment-build.strategy.js.map +0 -1
  699. package/dist/cache-subject-segment-cookie.strategy.d.ts +0 -9
  700. package/dist/cache-subject-segment-cookie.strategy.d.ts.map +0 -1
  701. package/dist/cache-subject-segment-cookie.strategy.js +0 -11
  702. package/dist/cache-subject-segment-cookie.strategy.js.map +0 -1
  703. package/dist/cache-subject-segment-env.strategy.d.ts +0 -9
  704. package/dist/cache-subject-segment-env.strategy.d.ts.map +0 -1
  705. package/dist/cache-subject-segment-env.strategy.js.map +0 -1
  706. package/dist/cache-subject-segment-fixed.strategy.d.ts +0 -8
  707. package/dist/cache-subject-segment-fixed.strategy.d.ts.map +0 -1
  708. package/dist/cache-subject-segment-fixed.strategy.js.map +0 -1
  709. package/dist/cache-subject-segment-header.strategy.d.ts +0 -9
  710. package/dist/cache-subject-segment-header.strategy.d.ts.map +0 -1
  711. package/dist/cache-subject-segment-header.strategy.js +0 -11
  712. package/dist/cache-subject-segment-header.strategy.js.map +0 -1
  713. package/dist/cache-subject-segment-ip.strategy.d.ts +0 -6
  714. package/dist/cache-subject-segment-ip.strategy.d.ts.map +0 -1
  715. package/dist/cache-subject-segment-ip.strategy.js +0 -7
  716. package/dist/cache-subject-segment-ip.strategy.js.map +0 -1
  717. package/dist/cache-subject-segment-path.strategy.d.ts +0 -6
  718. package/dist/cache-subject-segment-path.strategy.d.ts.map +0 -1
  719. package/dist/cache-subject-segment-path.strategy.js +0 -6
  720. package/dist/cache-subject-segment-path.strategy.js.map +0 -1
  721. package/dist/cache-subject-segment-query.strategy.d.ts +0 -7
  722. package/dist/cache-subject-segment-query.strategy.d.ts.map +0 -1
  723. package/dist/cache-subject-segment-query.strategy.js +0 -12
  724. package/dist/cache-subject-segment-query.strategy.js.map +0 -1
  725. package/dist/cache-subject-segment-request.strategy.d.ts +0 -9
  726. package/dist/cache-subject-segment-request.strategy.d.ts.map +0 -1
  727. package/dist/cache-subject-segment-request.strategy.js +0 -2
  728. package/dist/cache-subject-segment-request.strategy.js.map +0 -1
  729. package/dist/cache-subject-segment-user.strategy.d.ts +0 -6
  730. package/dist/cache-subject-segment-user.strategy.d.ts.map +0 -1
  731. package/dist/cache-subject-segment-user.strategy.js +0 -7
  732. package/dist/cache-subject-segment-user.strategy.js.map +0 -1
  733. package/dist/context.middleware.d.ts +0 -14
  734. package/dist/context.middleware.d.ts.map +0 -1
  735. package/dist/context.middleware.js +0 -11
  736. package/dist/context.middleware.js.map +0 -1
  737. package/dist/healthcheck.service.d.ts +0 -96
  738. package/dist/healthcheck.service.d.ts.map +0 -1
  739. package/dist/healthcheck.service.js.map +0 -1
  740. package/dist/maintenance-mode.middleware.d.ts +0 -11
  741. package/dist/maintenance-mode.middleware.d.ts.map +0 -1
  742. package/dist/maintenance-mode.middleware.js +0 -12
  743. package/dist/maintenance-mode.middleware.js.map +0 -1
  744. package/dist/ping.service.d.ts +0 -4
  745. package/dist/ping.service.d.ts.map +0 -1
  746. package/dist/ping.service.js +0 -6
  747. package/dist/ping.service.js.map +0 -1
  748. package/dist/setup.service.d.ts +0 -35
  749. package/dist/setup.service.d.ts.map +0 -1
  750. package/dist/setup.service.js.map +0 -1
  751. package/dist/shield-hcaptcha-local.strategy.d.ts +0 -11
  752. package/dist/shield-hcaptcha-local.strategy.d.ts.map +0 -1
  753. package/dist/shield-hcaptcha-local.strategy.js +0 -23
  754. package/dist/shield-hcaptcha-local.strategy.js.map +0 -1
  755. package/dist/shield-noop.strategy.d.ts +0 -5
  756. package/dist/shield-noop.strategy.d.ts.map +0 -1
  757. package/dist/shield-noop.strategy.js +0 -5
  758. package/dist/shield-noop.strategy.js.map +0 -1
  759. package/dist/shield.strategy.d.ts +0 -5
  760. package/dist/shield.strategy.d.ts.map +0 -1
  761. package/dist/shield.strategy.js +0 -2
  762. package/dist/shield.strategy.js.map +0 -1
  763. package/dist/ssr.d.ts.map +0 -1
  764. package/dist/ssr.js +0 -43
  765. package/dist/ssr.js.map +0 -1
  766. package/dist/static-files.service.d.ts.map +0 -1
  767. package/dist/static-files.service.js.map +0 -1
  768. package/dist/translations.service.d.ts +0 -21
  769. package/dist/translations.service.d.ts.map +0 -1
  770. package/dist/translations.service.js +0 -11
  771. package/dist/translations.service.js.map +0 -1
  772. package/src/cache-subject-application-resolver.vo.ts +0 -34
  773. package/src/cache-subject-request-resolver.vo.ts +0 -39
  774. package/src/cache-subject-segment-application.strategy.ts +0 -7
  775. package/src/cache-subject-segment-build.strategy.ts +0 -15
  776. package/src/cache-subject-segment-cookie.strategy.ts +0 -14
  777. package/src/cache-subject-segment-env.strategy.ts +0 -11
  778. package/src/cache-subject-segment-fixed.strategy.ts +0 -15
  779. package/src/cache-subject-segment-header.strategy.ts +0 -14
  780. package/src/cache-subject-segment-ip.strategy.ts +0 -12
  781. package/src/cache-subject-segment-path.strategy.ts +0 -11
  782. package/src/cache-subject-segment-query.strategy.ts +0 -19
  783. package/src/cache-subject-segment-user.strategy.ts +0 -12
  784. package/src/context.middleware.ts +0 -24
  785. package/src/healthcheck.service.ts +0 -154
  786. package/src/maintenance-mode.middleware.ts +0 -15
  787. package/src/ping.service.ts +0 -7
  788. package/src/shield-hcaptcha-local.strategy.ts +0 -24
  789. package/src/shield-noop.strategy.ts +0 -6
  790. package/src/shield.strategy.ts +0 -5
  791. package/src/ssr.ts +0 -57
  792. package/src/translations.service.ts +0 -20
@@ -5,20 +5,20 @@ import {
5
5
  type PrerequisiteVerifierPort,
6
6
  } from "./prerequisite-verifier.port";
7
7
 
8
- export type PrerequisiteVerifierWithFailSafeAdapterConfigType = (
8
+ export type PrerequisiteVerifierWithFailSafeAdapterConfig = (
9
9
  result: PrerequisiteVerificationResult,
10
10
  ) => boolean;
11
11
 
12
- const AnyErrorFailSafe: PrerequisiteVerifierWithFailSafeAdapterConfigType = (result) =>
12
+ const AnyErrorFailSafe: PrerequisiteVerifierWithFailSafeAdapterConfig = (result) =>
13
13
  result.outcome === PrerequisiteVerificationOutcome.failure;
14
14
 
15
15
  export class PrerequisiteVerifierWithFailSafeAdapter implements PrerequisiteVerifierPort {
16
- private readonly when: PrerequisiteVerifierWithFailSafeAdapterConfigType;
16
+ private readonly when: PrerequisiteVerifierWithFailSafeAdapterConfig;
17
17
 
18
18
  constructor(
19
19
  private readonly config: {
20
20
  inner: PrerequisiteVerifierPort;
21
- when?: PrerequisiteVerifierWithFailSafeAdapterConfigType;
21
+ when?: PrerequisiteVerifierWithFailSafeAdapterConfig;
22
22
  },
23
23
  ) {
24
24
  this.when = config.when ?? AnyErrorFailSafe;
@@ -10,6 +10,8 @@ import { Stopwatch } from "./stopwatch.service";
10
10
 
11
11
  type Dependencies = { Logger: LoggerPort; Clock: ClockPort };
12
12
 
13
+ type Config = { inner: PrerequisiteVerifierPort };
14
+
13
15
  export class PrerequisiteVerifierWithLoggerAdapter implements PrerequisiteVerifierPort {
14
16
  private readonly base = (duration: tools.Duration) => ({
15
17
  component: "infra",
@@ -18,7 +20,7 @@ export class PrerequisiteVerifierWithLoggerAdapter implements PrerequisiteVerifi
18
20
  });
19
21
 
20
22
  constructor(
21
- private readonly config: { inner: PrerequisiteVerifierPort },
23
+ private readonly config: Config,
22
24
  private readonly deps: Dependencies,
23
25
  ) {}
24
26
 
@@ -4,14 +4,15 @@ import {
4
4
  type PrerequisiteVerificationResult,
5
5
  type PrerequisiteVerifierPort,
6
6
  } from "./prerequisite-verifier.port";
7
- import { Retry, type RetryConfigType } from "./retry.service";
7
+ import { Retry, type RetryConfig } from "./retry.service";
8
8
  import type { SleeperPort } from "./sleeper.port";
9
9
 
10
10
  type Dependencies = { Sleeper: SleeperPort };
11
+ type Config = { inner: PrerequisiteVerifierPort; retry: RetryConfig };
11
12
 
12
13
  export class PrerequisiteVerifierWithRetryAdapter implements PrerequisiteVerifierPort {
13
14
  constructor(
14
- private readonly config: { inner: PrerequisiteVerifierPort; retry: RetryConfigType },
15
+ private readonly config: Config,
15
16
  private readonly deps: Dependencies,
16
17
  ) {}
17
18
 
@@ -7,10 +7,11 @@ import {
7
7
  import type { TimeoutRunnerPort } from "./timeout-runner.port";
8
8
 
9
9
  type Dependencies = { TimeoutRunner: TimeoutRunnerPort };
10
+ type Config = { inner: PrerequisiteVerifierPort; timeout: tools.Duration };
10
11
 
11
12
  export class PrerequisiteVerifierWithTimeoutAdapter implements PrerequisiteVerifierPort {
12
13
  constructor(
13
- private readonly config: { inner: PrerequisiteVerifierPort; timeout: tools.Duration },
14
+ private readonly config: Config,
14
15
  private readonly deps: Dependencies,
15
16
  ) {}
16
17
 
@@ -7,12 +7,12 @@ import type { PrerequisiteVerifierPort } from "./prerequisite-verifier.port";
7
7
  import { PrerequisiteVerifierWithCacheAdapter } from "./prerequisite-verifier-with-cache.adapter";
8
8
  import {
9
9
  PrerequisiteVerifierWithFailSafeAdapter,
10
- type PrerequisiteVerifierWithFailSafeAdapterConfigType,
10
+ type PrerequisiteVerifierWithFailSafeAdapterConfig,
11
11
  } from "./prerequisite-verifier-with-fail-safe.adapter";
12
12
  import { PrerequisiteVerifierWithLoggerAdapter } from "./prerequisite-verifier-with-logger.adapter";
13
13
  import { PrerequisiteVerifierWithRetryAdapter } from "./prerequisite-verifier-with-retry.adapter";
14
14
  import { PrerequisiteVerifierWithTimeoutAdapter } from "./prerequisite-verifier-with-timeout.adapter";
15
- import type { RetryConfigType } from "./retry.service";
15
+ import type { RetryConfig } from "./retry.service";
16
16
  import type { SleeperPort } from "./sleeper.port";
17
17
  import type { TimeoutRunnerPort } from "./timeout-runner.port";
18
18
 
@@ -37,12 +37,12 @@ const withLogger =
37
37
  new PrerequisiteVerifierWithLoggerAdapter({ inner }, deps);
38
38
 
39
39
  const withRetry =
40
- (retry: RetryConfigType, deps: { Sleeper: SleeperPort }): PrerequisiteVerifierDecorator =>
40
+ (retry: RetryConfig, deps: { Sleeper: SleeperPort }): PrerequisiteVerifierDecorator =>
41
41
  (inner) =>
42
42
  new PrerequisiteVerifierWithRetryAdapter({ inner, retry }, deps);
43
43
 
44
44
  const withFailSafe =
45
- (when: PrerequisiteVerifierWithFailSafeAdapterConfigType): PrerequisiteVerifierDecorator =>
45
+ (when: PrerequisiteVerifierWithFailSafeAdapterConfig): PrerequisiteVerifierDecorator =>
46
46
  (inner) =>
47
47
  new PrerequisiteVerifierWithFailSafeAdapter({ inner, when });
48
48
 
@@ -3,10 +3,7 @@ import type { PrerequisiteVerifierPort } from "./prerequisite-verifier.port";
3
3
 
4
4
  export type PrerequisiteLabelType = string;
5
5
 
6
- type PrerequisiteConfigType = {
7
- decorators?: ReadonlyArray<PrerequisiteVerifierDecorator>;
8
- enabled?: boolean;
9
- };
6
+ type Config = { decorators?: ReadonlyArray<PrerequisiteVerifierDecorator>; enabled?: boolean };
10
7
 
11
8
  export class Prerequisite {
12
9
  private readonly decorators: ReadonlyArray<PrerequisiteVerifierDecorator>;
@@ -15,7 +12,7 @@ export class Prerequisite {
15
12
  constructor(
16
13
  readonly label: PrerequisiteLabelType,
17
14
  private readonly verifier: PrerequisiteVerifierPort,
18
- config?: PrerequisiteConfigType,
15
+ config?: Config,
19
16
  ) {
20
17
  this.decorators = config?.decorators ?? [];
21
18
  this.enabled = config?.enabled ?? true;
@@ -11,8 +11,6 @@ import type {
11
11
  RemotePutFromPathResult,
12
12
  } from "./remote-file-storage.port";
13
13
 
14
- type RemoteFileStorageDiskConfig = { root: tools.DirectoryPathAbsoluteType };
15
-
16
14
  type Dependencies = {
17
15
  HashFile: HashFilePort;
18
16
  FileCleaner: FileCleanerPort;
@@ -21,9 +19,11 @@ type Dependencies = {
21
19
  DirectoryEnsurer: DirectoryEnsurerPort;
22
20
  };
23
21
 
22
+ type Config = { root: tools.DirectoryPathAbsoluteType };
23
+
24
24
  export class RemoteFileStorageDiskAdapter implements RemoteFileStoragePort {
25
25
  constructor(
26
- private readonly config: RemoteFileStorageDiskConfig,
26
+ private readonly config: Config,
27
27
  private readonly deps: Dependencies,
28
28
  ) {}
29
29
 
@@ -3,7 +3,7 @@ import { getConnInfo } from "hono/bun";
3
3
  import { getCookie } from "hono/cookie";
4
4
  import type { RequestContext } from "./request-context.port";
5
5
 
6
- export class RequestContextAdapterHono implements RequestContext {
6
+ export class RequestContextHonoAdapter implements RequestContext {
7
7
  readonly request: RequestContext["request"];
8
8
  readonly identity: RequestContext["identity"];
9
9
 
@@ -11,9 +11,20 @@ export class RequestContextAdapterHono implements RequestContext {
11
11
  this.request = {
12
12
  path: context.req.path,
13
13
  method: context.req.method,
14
+ url: () => context.req.url,
14
15
  header: (name) => context.req.header(name),
15
16
  headers: () => context.req.raw.headers,
17
+ headersObject: () => {
18
+ const headers: Record<string, string> = {};
19
+
20
+ context.req.raw.headers.forEach((value, key) => {
21
+ headers[key] = value;
22
+ });
23
+
24
+ return headers;
25
+ },
16
26
  query: () => context.req.query(),
27
+ params: () => context.req.param(),
17
28
  cookie: (name) => getCookie(context)[name],
18
29
  json: async () => {
19
30
  try {
@@ -4,11 +4,14 @@ export interface RequestContext {
4
4
  readonly request: {
5
5
  readonly path: string;
6
6
  readonly method: string;
7
+ url(): string;
7
8
  header(name: string): string | undefined;
8
9
  query(): Record<string, string>;
10
+ params(): Record<string, string>;
9
11
  cookie(name: string): string | undefined;
10
12
  json(): Promise<Record<string, unknown>>;
11
13
  headers: () => Headers;
14
+ headersObject: () => Record<string, string>;
12
15
  };
13
16
 
14
17
  readonly identity: {
@@ -18,6 +21,10 @@ export interface RequestContext {
18
21
  };
19
22
  }
20
23
 
24
+ export interface HasRequestUrl {
25
+ readonly request: { url(): string };
26
+ }
27
+
21
28
  export interface HasRequestPath {
22
29
  readonly request: { readonly path: string };
23
30
  }
@@ -34,10 +41,18 @@ export interface HasRequestHeaders {
34
41
  readonly request: { headers: () => Headers };
35
42
  }
36
43
 
44
+ export interface HasRequestHeadersObject {
45
+ readonly request: { headers: () => Record<string, string> };
46
+ }
47
+
37
48
  export interface HasRequestQuery {
38
49
  readonly request: { query(): Record<string, string> };
39
50
  }
40
51
 
52
+ export interface HasRequestParams {
53
+ readonly request: { params(): Record<string, string> };
54
+ }
55
+
41
56
  export interface HasRequestCookie {
42
57
  readonly request: { cookie(name: string): string | undefined };
43
58
  }
@@ -2,20 +2,20 @@ import * as tools from "@bgord/tools";
2
2
  import type { RetryBackoffStrategy } from "./retry-backoff.strategy";
3
3
  import type { SleeperPort } from "./sleeper.port";
4
4
 
5
+ export const RetryError = { InvalidMax: "retry.invalid.max" };
6
+
5
7
  type Dependencies = { Sleeper: SleeperPort };
6
8
 
7
- export type RetryConfigType = {
9
+ export type RetryConfig = {
8
10
  max: tools.IntegerPositiveType;
9
11
  backoff: RetryBackoffStrategy;
10
12
  when?: (error: unknown) => boolean;
11
13
  };
12
14
 
13
- export const RetryError = { InvalidMax: "retry.invalid.max" };
14
-
15
15
  export class Retry {
16
16
  constructor(private readonly deps: Dependencies) {}
17
17
 
18
- async run<T>(action: () => Promise<T>, config: RetryConfigType): Promise<T> {
18
+ async run<T>(action: () => Promise<T>, config: RetryConfig): Promise<T> {
19
19
  if (config.max < 1) throw new Error(RetryError.InvalidMax);
20
20
 
21
21
  let lastError: unknown;
@@ -16,6 +16,10 @@ import {
16
16
  type SecurityCountermeasureNameType,
17
17
  } from "./security-countermeasure-name.vo";
18
18
 
19
+ export const SecurityCountermeasureBanStrategyError = {
20
+ Executed: "security.countermeasure.ban.strategy.executed",
21
+ };
22
+
19
23
  type Dependencies = {
20
24
  IdProvider: IdProviderPort;
21
25
  Clock: ClockPort;
@@ -23,14 +27,12 @@ type Dependencies = {
23
27
  EventStore: EventStoreLike<SecurityViolationDetectedEventType>;
24
28
  };
25
29
 
26
- export const SecurityCountermeasureBanStrategyError = {
27
- Executed: "security.countermeasure.ban.strategy.executed",
28
- };
30
+ type Config = { response: { status: number } };
29
31
 
30
32
  export class SecurityCountermeasureBanStrategy implements SecurityCountermeasureStrategy {
31
33
  constructor(
32
34
  private readonly deps: Dependencies,
33
- private readonly config: { response: { status: number } } = { response: { status: 403 } },
35
+ private readonly config: Config = { response: { status: 403 } },
34
36
  ) {}
35
37
 
36
38
  async execute(context: SecurityContext): Promise<SecurityAction> {
@@ -8,11 +8,12 @@ import {
8
8
  } from "./security-countermeasure-name.vo";
9
9
 
10
10
  type Dependencies = { Logger: LoggerPort };
11
+ type Config = { response: { status: number } };
11
12
 
12
13
  export class SecurityCountermeasureMirageStrategy implements SecurityCountermeasureStrategy {
13
14
  constructor(
14
15
  private readonly deps: Dependencies,
15
- private readonly config: { response: { status: number } } = { response: { status: 200 } },
16
+ private readonly config: Config = { response: { status: 200 } },
16
17
  ) {}
17
18
 
18
19
  async execute(context: SecurityContext): Promise<SecurityAction> {
@@ -9,11 +9,12 @@ import {
9
9
  } from "./security-countermeasure-name.vo";
10
10
 
11
11
  type Dependencies = { Logger: LoggerPort };
12
+ type Config = { duration: tools.Duration; after: SecurityAction };
12
13
 
13
14
  export class SecurityCountermeasureTarpitStrategy implements SecurityCountermeasureStrategy {
14
15
  constructor(
15
16
  private readonly deps: Dependencies,
16
- private readonly config: { duration: tools.Duration; after: SecurityAction },
17
+ private readonly config: Config,
17
18
  ) {}
18
19
 
19
20
  async execute(context: SecurityContext): Promise<SecurityAction> {
@@ -1,26 +1,27 @@
1
1
  import * as tools from "@bgord/tools";
2
2
  import type { CacheRepositoryPort } from "./cache-repository.port";
3
- import { CacheSubjectRequestResolver } from "./cache-subject-request-resolver.vo";
4
- import { CacheSubjectSegmentFixedStrategy } from "./cache-subject-segment-fixed.strategy";
5
- import { CacheSubjectSegmentIpStrategy } from "./cache-subject-segment-ip.strategy";
6
3
  import type { HashContentStrategy } from "./hash-content.strategy";
7
4
  import type { RequestContext } from "./request-context.port";
8
5
  import type { SecurityRuleStrategy } from "./security-rule.strategy";
9
6
  import { SecurityRuleName, type SecurityRuleNameType } from "./security-rule-name.vo";
7
+ import { SubjectRequestResolver } from "./subject-request-resolver.vo";
8
+ import { SubjectSegmentFixedStrategy } from "./subject-segment-fixed.strategy";
9
+ import { SubjectSegmentIpStrategy } from "./subject-segment-ip.strategy";
10
10
 
11
11
  type Dependencies = { CacheRepository: CacheRepositoryPort; HashContent: HashContentStrategy };
12
+ type Config = { threshold: tools.IntegerPositiveType };
12
13
 
13
14
  export class SecurityRuleViolationThresholdStrategy implements SecurityRuleStrategy {
14
15
  constructor(
15
16
  private readonly rule: SecurityRuleStrategy,
16
- private readonly config: { threshold: tools.IntegerPositiveType },
17
+ private readonly config: Config,
17
18
  private readonly deps: Dependencies,
18
19
  ) {}
19
20
 
20
21
  // Best-effort increment, occasional lost increments are acceptable for concurrent requests.
21
22
  async isViolated(context: RequestContext): Promise<boolean> {
22
- const resolver = new CacheSubjectRequestResolver(
23
- [new CacheSubjectSegmentFixedStrategy(this.name), new CacheSubjectSegmentIpStrategy()],
23
+ const resolver = new SubjectRequestResolver(
24
+ [new SubjectSegmentFixedStrategy(this.name), new SubjectSegmentIpStrategy()],
24
25
  this.deps,
25
26
  );
26
27
  const subject = await resolver.resolve(context);
@@ -1,60 +1,56 @@
1
1
  import * as tools from "@bgord/tools";
2
- import { bodyLimit } from "hono/body-limit";
3
2
  import { cors } from "hono/cors";
4
3
  import { languageDetector } from "hono/language";
5
- import { requestId } from "hono/request-id";
6
4
  import { secureHeaders } from "hono/secure-headers";
7
- import { timing } from "hono/timing";
8
- import { trimTrailingSlash } from "hono/trailing-slash";
9
- import { ApiVersion } from "./api-version.middleware";
5
+ import { ApiVersionHonoMiddleware } from "./api-version-hono.middleware";
10
6
  import type { BuildInfoRepositoryStrategy } from "./build-info-repository.strategy";
11
7
  import type { CacheResolverStrategy } from "./cache-resolver.strategy";
12
8
  import type { ClockPort } from "./clock.port";
13
- import { Context } from "./context.middleware";
14
- import { CorrelationStorage } from "./correlation-storage.service";
15
- import { ETagExtractor } from "./etag-extractor.middleware";
9
+ import { CorrelationHonoMiddleware } from "./correlation-hono.middleware";
10
+ import { ETagExtractorHonoMiddleware } from "./etag-extractor-hono.middleware";
16
11
  import type { HashContentStrategy } from "./hash-content.strategy";
17
- import { HttpLogger, type HttpLoggerOptions } from "./http-logger.middleware";
18
- import type { I18nConfigType } from "./i18n.service";
12
+ import type { HttpLoggerConfig } from "./http-logger.middleware";
13
+ import { HttpLoggerHonoMiddleware } from "./http-logger-hono.middleware";
14
+ import type { I18nConfig } from "./i18n.service";
19
15
  import type { IdProviderPort } from "./id-provider.port";
20
16
  import type { LoggerPort } from "./logger.port";
21
- import { MaintenanceMode, type MaintenanceModeConfigType } from "./maintenance-mode.middleware";
22
- import { type ShieldCsrfConfigType, ShieldCsrfStrategy } from "./shield-csrf.strategy";
23
- import { TimeZoneOffset } from "./time-zone-offset.middleware";
24
- import { WeakETagExtractor } from "./weak-etag-extractor.middleware";
25
-
26
- type SetupConfigType = {
27
- csrf: ShieldCsrfConfigType;
28
- cors?: Parameters<typeof cors>[0];
29
- httpLogger?: HttpLoggerOptions;
30
- maintenanceMode?: MaintenanceModeConfigType;
31
- BODY_LIMIT_MAX_SIZE?: tools.Size;
32
- };
17
+ import type { ShieldCsrfConfig } from "./shield-csrf.strategy";
18
+ import { ShieldCsrfHonoStrategy } from "./shield-csrf-hono.strategy";
19
+ import type { ShieldMaintenanceConfig } from "./shield-maintenance.strategy";
20
+ import { ShieldMaintenanceHonoStrategy } from "./shield-maintenance-hono.strategy";
21
+ import { TimeZoneOffsetHonoMiddleware } from "./time-zone-offset-hono.middleware";
22
+ import { TimingHonoMiddleware } from "./timing-hono.middleware";
23
+ import { TrailingSlashHonoMiddleware } from "./trailing-slash-hono.middleware";
24
+ import { WeakETagExtractorHonoMiddleware } from "./weak-etag-extractor-hono.middleware";
33
25
 
34
26
  type Dependencies = {
35
27
  Logger: LoggerPort;
36
28
  IdProvider: IdProviderPort;
37
- I18n: I18nConfigType;
29
+ I18n: I18nConfig;
38
30
  Clock: ClockPort;
39
31
  CacheResolver: CacheResolverStrategy;
40
32
  HashContent: HashContentStrategy;
41
33
  BuildInfoRepository: BuildInfoRepositoryStrategy;
42
34
  };
43
35
 
44
- export class Setup {
45
- static essentials(config: SetupConfigType, deps: Dependencies) {
46
- const BODY_LIMIT_MAX_SIZE = config.BODY_LIMIT_MAX_SIZE ?? tools.Size.fromKb(128);
36
+ type Config = {
37
+ csrf: ShieldCsrfConfig;
38
+ cors?: Parameters<typeof cors>[0];
39
+ httpLogger?: HttpLoggerConfig;
40
+ maintenanceMode?: ShieldMaintenanceConfig;
41
+ };
47
42
 
43
+ export class SetupHono {
44
+ // Configure body size limit at the framework level
45
+ // - Bun: maxRequestBodySize in Bun.serve()
46
+ // - Express: limit in express.json()
47
+ static essentials(config: Config, deps: Dependencies) {
48
48
  return [
49
- MaintenanceMode.build(config.maintenanceMode),
50
- trimTrailingSlash({ alwaysRedirect: true }),
51
- requestId({
52
- limitLength: 36,
53
- headerName: "x-correlation-id",
54
- generator: () => deps.IdProvider.generate(),
55
- }),
56
- ApiVersion.build(deps),
57
- new ShieldCsrfStrategy(config.csrf).verify,
49
+ new ShieldMaintenanceHonoStrategy(config.maintenanceMode).handle(),
50
+ new TrailingSlashHonoMiddleware().handle(),
51
+ new CorrelationHonoMiddleware(deps).handle(),
52
+ new ApiVersionHonoMiddleware(deps).handle(),
53
+ new ShieldCsrfHonoStrategy(config.csrf).handle(),
58
54
  secureHeaders({
59
55
  referrerPolicy: "no-referrer",
60
56
  xContentTypeOptions: "nosniff",
@@ -67,7 +63,6 @@ export class Setup {
67
63
  originAgentCluster: false,
68
64
  xFrameOptions: false,
69
65
  }),
70
- bodyLimit({ maxSize: BODY_LIMIT_MAX_SIZE.toBytes() }),
71
66
  cors({
72
67
  // Stryker disable all
73
68
  origin: (origin, c) => {
@@ -92,13 +87,11 @@ export class Setup {
92
87
  caches: false,
93
88
  // Stryker restore all
94
89
  }),
95
- TimeZoneOffset.attach,
96
- Context.attach,
97
- WeakETagExtractor.attach,
98
- ETagExtractor.attach,
99
- HttpLogger.build(deps, config.httpLogger),
100
- timing(),
101
- CorrelationStorage.handle(),
90
+ new TimeZoneOffsetHonoMiddleware().handle(),
91
+ new WeakETagExtractorHonoMiddleware().handle(),
92
+ new ETagExtractorHonoMiddleware().handle(),
93
+ new HttpLoggerHonoMiddleware(deps, config.httpLogger).handle(),
94
+ new TimingHonoMiddleware(deps).handle(),
102
95
  ];
103
96
  }
104
97
  }
@@ -0,0 +1,28 @@
1
+ import type { MiddlewareHandler } from "hono";
2
+ import { HTTPException } from "hono/http-exception";
3
+ import type { MiddlewareHonoPort } from "./middleware-hono.port";
4
+ import { RequestContextHonoAdapter } from "./request-context-hono.adapter";
5
+ import {
6
+ type ApiKeyShieldConfig,
7
+ ShieldApiKeyStrategy,
8
+ ShieldApiKeyStrategyError,
9
+ } from "./shield-api-key.strategy";
10
+
11
+ export const ShieldApiKeyError = new HTTPException(403, { message: ShieldApiKeyStrategyError.Rejected });
12
+
13
+ export class ShieldApiKeyHonoStrategy implements MiddlewareHonoPort {
14
+ private readonly strategy: ShieldApiKeyStrategy;
15
+
16
+ constructor(config: ApiKeyShieldConfig) {
17
+ this.strategy = new ShieldApiKeyStrategy(config);
18
+ }
19
+
20
+ handle(): MiddlewareHandler {
21
+ return async (c, next) => {
22
+ const context = new RequestContextHonoAdapter(c);
23
+
24
+ if (this.strategy.evaluate(context)) return next();
25
+ throw ShieldApiKeyError;
26
+ };
27
+ }
28
+ }
@@ -1,22 +1,16 @@
1
1
  import type * as tools from "@bgord/tools";
2
- import { createMiddleware } from "hono/factory";
3
- import { HTTPException } from "hono/http-exception";
4
- import { RequestContextAdapterHono } from "./request-context-hono.adapter";
5
- import type { ShieldStrategy } from "./shield.strategy";
2
+ import type { HasRequestHeader } from "./request-context.port";
6
3
 
7
- type ApiKeyShieldConfigType = { API_KEY: tools.ApiKeyType };
4
+ export type ApiKeyShieldConfig = { API_KEY: tools.ApiKeyType };
8
5
 
9
- export const ShieldApiKeyError = new HTTPException(403, { message: "shield.api.key" });
6
+ export const ShieldApiKeyStrategyError = { Rejected: "shield.api.key.rejected" };
10
7
 
11
- export class ShieldApiKeyStrategy implements ShieldStrategy {
12
- static readonly HEADER_NAME = "bgord-api-key";
8
+ export class ShieldApiKeyStrategy {
9
+ static readonly HEADER_NAME = "api-key";
13
10
 
14
- constructor(private readonly config: ApiKeyShieldConfigType) {}
11
+ constructor(private readonly config: ApiKeyShieldConfig) {}
15
12
 
16
- verify = createMiddleware(async (c, next) => {
17
- const context = new RequestContextAdapterHono(c);
18
-
19
- if (context.request.header(ShieldApiKeyStrategy.HEADER_NAME) === this.config.API_KEY) return next();
20
- throw ShieldApiKeyError;
21
- });
13
+ evaluate(context: HasRequestHeader): boolean {
14
+ return context.request.header(ShieldApiKeyStrategy.HEADER_NAME) === this.config.API_KEY;
15
+ }
22
16
  }
@@ -0,0 +1,41 @@
1
+ import type hono from "hono";
2
+ import { createMiddleware } from "hono/factory";
3
+ import { HTTPException } from "hono/http-exception";
4
+ import type { AuthSessionReaderPort } from "./auth-session-reader.port";
5
+ import { RequestContextHonoAdapter } from "./request-context-hono.adapter";
6
+ import { ShieldAuthStrategy, ShieldAuthStrategyError } from "./shield-auth.strategy";
7
+
8
+ type Dependencies<User, Session> = { AuthSessionReader: AuthSessionReaderPort<User, Session> };
9
+
10
+ export const ShieldAuthError = new HTTPException(403, { message: ShieldAuthStrategyError.Rejected });
11
+
12
+ export class ShieldAuthHonoStrategy<User, Session> {
13
+ private readonly strategy: ShieldAuthStrategy<User, Session>;
14
+
15
+ constructor(deps: Dependencies<User, Session>) {
16
+ this.strategy = new ShieldAuthStrategy(deps);
17
+ }
18
+
19
+ attach = createMiddleware(async (c: hono.Context, next: hono.Next) => {
20
+ const context = new RequestContextHonoAdapter(c);
21
+ const auth = await this.strategy.attach(context);
22
+
23
+ c.set("user", auth.user);
24
+ c.set("session", auth.session);
25
+ return next();
26
+ });
27
+
28
+ verify = createMiddleware(async (c: hono.Context, next: hono.Next) => {
29
+ const user = c.get("user");
30
+
31
+ if (this.strategy.verify(user)) return next();
32
+ throw ShieldAuthError;
33
+ });
34
+
35
+ reverse = createMiddleware(async (c: hono.Context, next: hono.Next) => {
36
+ const user = c.get("user");
37
+
38
+ if (this.strategy.reverse(user)) return next();
39
+ throw ShieldAuthError;
40
+ });
41
+ }
@@ -1,36 +1,22 @@
1
- import type hono from "hono";
2
- import { createMiddleware } from "hono/factory";
3
- import { HTTPException } from "hono/http-exception";
4
- import type { AuthSessionReaderPort } from "./auth-session-reader.port";
5
- import { RequestContextAdapterHono } from "./request-context-hono.adapter";
1
+ import type { AuthSessionReaderPort, AuthSessionType } from "./auth-session-reader.port";
2
+ import type { HasRequestHeaders } from "./request-context.port";
6
3
 
7
4
  type Dependencies<User, Session> = { AuthSessionReader: AuthSessionReaderPort<User, Session> };
8
5
 
9
- export const ShieldAuthError = new HTTPException(403, { message: "shield.auth" });
6
+ export const ShieldAuthStrategyError = { Rejected: "shield.auth.rejected" };
10
7
 
11
8
  export class ShieldAuthStrategy<User, Session> {
12
9
  constructor(private readonly deps: Dependencies<User, Session>) {}
13
10
 
14
- attach = createMiddleware(async (c: hono.Context, next: hono.Next) => {
15
- const context = new RequestContextAdapterHono(c);
16
- const auth = await this.deps.AuthSessionReader.getSession(context);
11
+ async attach(context: HasRequestHeaders): Promise<AuthSessionType<User, Session>> {
12
+ return await this.deps.AuthSessionReader.getSession(context);
13
+ }
17
14
 
18
- c.set("user", auth.user);
19
- c.set("session", auth.session);
20
- return next();
21
- });
15
+ verify(user: User | null): boolean {
16
+ return user !== null;
17
+ }
22
18
 
23
- verify = createMiddleware(async (c: hono.Context, next: hono.Next) => {
24
- const user = c.get("user");
25
-
26
- if (!user) throw ShieldAuthError;
27
- return next();
28
- });
29
-
30
- reverse = createMiddleware(async (c: hono.Context, next: hono.Next) => {
31
- const user = c.get("user");
32
-
33
- if (user) throw ShieldAuthError;
34
- return next();
35
- });
19
+ reverse(user: User | null): boolean {
20
+ return user === null;
21
+ }
36
22
  }
@@ -0,0 +1,30 @@
1
+ import type { MiddlewareHandler } from "hono";
2
+ import { HTTPException } from "hono/http-exception";
3
+ import type { MiddlewareHonoPort } from "./middleware-hono.port";
4
+ import { RequestContextHonoAdapter } from "./request-context-hono.adapter";
5
+ import {
6
+ type ShieldBasicAuthConfig,
7
+ ShieldBasicAuthStrategy,
8
+ ShieldBasicAuthStrategyError,
9
+ } from "./shield-basic-auth.strategy";
10
+
11
+ export const ShieldBasicAuthError = new HTTPException(401, {
12
+ message: ShieldBasicAuthStrategyError.Rejected,
13
+ });
14
+
15
+ export class ShieldBasicAuthHonoStrategy implements MiddlewareHonoPort {
16
+ private readonly strategy: ShieldBasicAuthStrategy;
17
+
18
+ constructor(config: ShieldBasicAuthConfig) {
19
+ this.strategy = new ShieldBasicAuthStrategy(config);
20
+ }
21
+
22
+ handle(): MiddlewareHandler {
23
+ return async (c, next) => {
24
+ const context = new RequestContextHonoAdapter(c);
25
+
26
+ if (this.strategy.evaluate(context)) return next();
27
+ throw ShieldBasicAuthError;
28
+ };
29
+ }
30
+ }