stratal 0.0.21 → 0.0.23

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 (296) hide show
  1. package/README.md +2 -2
  2. package/dist/bin/cloudflare-workers-loader.mjs +80 -7
  3. package/dist/bin/cloudflare-workers-loader.mjs.map +1 -1
  4. package/dist/bin/quarry.mjs +84 -160
  5. package/dist/bin/quarry.mjs.map +1 -1
  6. package/dist/cache/index.d.mts +8 -46
  7. package/dist/cache/index.d.mts.map +1 -1
  8. package/dist/cache/index.mjs +134 -97
  9. package/dist/cache/index.mjs.map +1 -1
  10. package/dist/{cache.service-DsnKuNyO.d.mts → cache.service-uElmBtdS.d.mts} +29 -39
  11. package/dist/cache.service-uElmBtdS.d.mts.map +1 -0
  12. package/dist/{command-BgSlsS4M.mjs → command-BvmUAPPQ.mjs} +15 -4
  13. package/dist/command-BvmUAPPQ.mjs.map +1 -0
  14. package/dist/{command-Cmmf0oHX.d.mts → command-CPhFHjG3.d.mts} +3 -2
  15. package/dist/command-CPhFHjG3.d.mts.map +1 -0
  16. package/dist/command-not-found.error-ONAZ2Bpk.mjs +14 -0
  17. package/dist/command-not-found.error-ONAZ2Bpk.mjs.map +1 -0
  18. package/dist/config/index.d.mts +24 -11
  19. package/dist/config/index.d.mts.map +1 -1
  20. package/dist/config/index.mjs +32 -57
  21. package/dist/config/index.mjs.map +1 -1
  22. package/dist/{consumer-registry-B7yUNh0q.d.mts → consumer-registry-D3iMTSdy.d.mts} +54 -22
  23. package/dist/consumer-registry-D3iMTSdy.d.mts.map +1 -0
  24. package/dist/container-storage-BmOJ4_Na.mjs +52 -0
  25. package/dist/container-storage-BmOJ4_Na.mjs.map +1 -0
  26. package/dist/{controller.decorator-B9vwn0zK.mjs → controller.decorator-C5UVeJS3.mjs} +8 -8
  27. package/dist/controller.decorator-C5UVeJS3.mjs.map +1 -0
  28. package/dist/cron/index.d.mts +103 -7
  29. package/dist/cron/index.d.mts.map +1 -1
  30. package/dist/cron/index.mjs +2 -2
  31. package/dist/cron-job-NesZRk8F.d.mts +58 -0
  32. package/dist/cron-job-NesZRk8F.d.mts.map +1 -0
  33. package/dist/{cron-manager-DQSK8uoV.mjs → cron.module-Bgzq5hiT.mjs} +47 -17
  34. package/dist/cron.module-Bgzq5hiT.mjs.map +1 -0
  35. package/dist/decorate-CuAoSZvs.mjs +16 -0
  36. package/dist/deep-merge-ByiAOZ3r.mjs +18 -0
  37. package/dist/deep-merge-ByiAOZ3r.mjs.map +1 -0
  38. package/dist/di/index.d.mts +2 -2
  39. package/dist/di/index.mjs +4 -3
  40. package/dist/di-DseMn-z9.mjs +524 -0
  41. package/dist/di-DseMn-z9.mjs.map +1 -0
  42. package/dist/email/index.d.mts +40 -122
  43. package/dist/email/index.d.mts.map +1 -1
  44. package/dist/email/index.mjs +446 -131
  45. package/dist/email/index.mjs.map +1 -1
  46. package/dist/en-CDZBMcc1.mjs +202 -0
  47. package/dist/en-CDZBMcc1.mjs.map +1 -0
  48. package/dist/{env-D1rcZ8_r.d.mts → env-ug22bJj7.d.mts} +1 -1
  49. package/dist/env-ug22bJj7.d.mts.map +1 -0
  50. package/dist/errors/index.d.mts +2 -2
  51. package/dist/errors/index.mjs +4 -2
  52. package/dist/errors-mXYxG0XB.mjs +333 -0
  53. package/dist/errors-mXYxG0XB.mjs.map +1 -0
  54. package/dist/events/index.d.mts +14 -3
  55. package/dist/events/index.d.mts.map +1 -1
  56. package/dist/events/index.mjs +2 -2
  57. package/dist/{events-CzCV8jI8.mjs → events-BXJGZjpG.mjs} +23 -13
  58. package/dist/events-BXJGZjpG.mjs.map +1 -0
  59. package/dist/exception-context-kEoMFwze.mjs +429 -0
  60. package/dist/exception-context-kEoMFwze.mjs.map +1 -0
  61. package/dist/{gateway-context-CXmXtaUP.mjs → gateway-context-TMu_AlJt.mjs} +38 -31
  62. package/dist/gateway-context-TMu_AlJt.mjs.map +1 -0
  63. package/dist/guards/index.d.mts +3 -3
  64. package/dist/guards/index.d.mts.map +1 -1
  65. package/dist/guards/index.mjs +1 -1
  66. package/dist/{guards-DU1_J9YA.mjs → guards-DALPXy3_.mjs} +6 -5
  67. package/dist/guards-DALPXy3_.mjs.map +1 -0
  68. package/dist/hono-app-CvV3hOfT.mjs +161 -0
  69. package/dist/hono-app-CvV3hOfT.mjs.map +1 -0
  70. package/dist/{http-method.decorator-BrgHMdLQ.mjs → http-method.decorator-ByWZb9DO.mjs} +7 -6
  71. package/dist/http-method.decorator-ByWZb9DO.mjs.map +1 -0
  72. package/dist/i18n/index.d.mts +238 -3
  73. package/dist/i18n/index.d.mts.map +1 -0
  74. package/dist/i18n/index.mjs +39 -3
  75. package/dist/i18n/index.mjs.map +1 -0
  76. package/dist/i18n/messages/en/index.d.mts +2 -2
  77. package/dist/i18n/messages/en/index.mjs +2 -2
  78. package/dist/i18n/utils/index.d.mts +4 -26
  79. package/dist/i18n/utils/index.d.mts.map +1 -1
  80. package/dist/i18n/utils/index.mjs +2 -2
  81. package/dist/i18n/validation/index.d.mts +3 -2
  82. package/dist/i18n/validation/index.mjs +4 -2
  83. package/dist/i18n.module-DRQAZoSZ.mjs +222 -0
  84. package/dist/i18n.module-DRQAZoSZ.mjs.map +1 -0
  85. package/dist/i18n.tokens-CZ_v8oyS.mjs +19 -0
  86. package/dist/i18n.tokens-CZ_v8oyS.mjs.map +1 -0
  87. package/dist/{index-7-hU3GTV.d.mts → index-0ItCjaqw.d.mts} +1 -1
  88. package/dist/index-0ItCjaqw.d.mts.map +1 -0
  89. package/dist/index-B5JBRcWD.d.mts +544 -0
  90. package/dist/index-B5JBRcWD.d.mts.map +1 -0
  91. package/dist/index-BUt92sAE.d.mts +124 -0
  92. package/dist/index-BUt92sAE.d.mts.map +1 -0
  93. package/dist/{index-ByOyTmqf.d.mts → index-B_JoEl3V.d.mts} +751 -2229
  94. package/dist/index-B_JoEl3V.d.mts.map +1 -0
  95. package/dist/index-DtBNIFuP.d.mts +42 -0
  96. package/dist/index-DtBNIFuP.d.mts.map +1 -0
  97. package/dist/{index-C1KvMncZ.d.mts → index-HgOLNruQ.d.mts} +3 -108
  98. package/dist/index-HgOLNruQ.d.mts.map +1 -0
  99. package/dist/index.d.mts +6 -43
  100. package/dist/index.mjs +3 -2
  101. package/dist/{is-command-C6a7WTPw.mjs → is-command-CEPO9n8c.mjs} +2 -2
  102. package/dist/{is-command-C6a7WTPw.mjs.map → is-command-CEPO9n8c.mjs.map} +1 -1
  103. package/dist/{is-seeder-CebjZCDn.mjs → is-seeder-Gvh_AM71.mjs} +1 -1
  104. package/dist/{is-seeder-CebjZCDn.mjs.map → is-seeder-Gvh_AM71.mjs.map} +1 -1
  105. package/dist/lazy-module-loader-Ib383jH_.d.mts +60 -0
  106. package/dist/lazy-module-loader-Ib383jH_.d.mts.map +1 -0
  107. package/dist/locale-path.service-D-dHiIPc.mjs +165 -0
  108. package/dist/locale-path.service-D-dHiIPc.mjs.map +1 -0
  109. package/dist/locale-url-nZrZxqJP.mjs +44 -0
  110. package/dist/locale-url-nZrZxqJP.mjs.map +1 -0
  111. package/dist/locale-url.service-C2EWmGdq.mjs +41 -0
  112. package/dist/locale-url.service-C2EWmGdq.mjs.map +1 -0
  113. package/dist/logger/index.d.mts +2 -2
  114. package/dist/logger/index.mjs +170 -2
  115. package/dist/logger/index.mjs.map +1 -0
  116. package/dist/macroable/index.d.mts +2 -2
  117. package/dist/macroable/index.mjs +1 -1
  118. package/dist/{macroable-BmufBshB.mjs → macroable-cvDTFZ_A.mjs} +1 -1
  119. package/dist/{macroable-BmufBshB.mjs.map → macroable-cvDTFZ_A.mjs.map} +1 -1
  120. package/dist/metadata-DzzprcID.mjs +39 -0
  121. package/dist/metadata-DzzprcID.mjs.map +1 -0
  122. package/dist/module/index.d.mts +7 -24
  123. package/dist/module/index.d.mts.map +1 -1
  124. package/dist/module/index.mjs +10 -2
  125. package/dist/module/index.mjs.map +1 -0
  126. package/dist/module-registry-Dm-pqHd3.mjs +554 -0
  127. package/dist/module-registry-Dm-pqHd3.mjs.map +1 -0
  128. package/dist/module.decorator-CYHY6pG5.mjs +19 -0
  129. package/dist/module.decorator-CYHY6pG5.mjs.map +1 -0
  130. package/dist/openapi/index.d.mts +44 -8
  131. package/dist/openapi/index.d.mts.map +1 -1
  132. package/dist/openapi/index.mjs +3 -3
  133. package/dist/openapi-CstuTM8S.mjs +309 -0
  134. package/dist/openapi-CstuTM8S.mjs.map +1 -0
  135. package/dist/{openapi-tools.service-Zs-Ewv7F.mjs → openapi-tools.service-BC5EC3R3.mjs} +8 -2
  136. package/dist/openapi-tools.service-BC5EC3R3.mjs.map +1 -0
  137. package/dist/{openapi.service-Bt9bCIrd.d.mts → openapi.service-YhTiJ1bO.d.mts} +3 -3
  138. package/dist/openapi.service-YhTiJ1bO.d.mts.map +1 -0
  139. package/dist/quarry/index.d.mts +14 -163
  140. package/dist/quarry/index.d.mts.map +1 -1
  141. package/dist/quarry/index.mjs +6 -5
  142. package/dist/quarry/runner.d.mts +184 -0
  143. package/dist/quarry/runner.d.mts.map +1 -0
  144. package/dist/quarry/runner.mjs +945 -0
  145. package/dist/quarry/runner.mjs.map +1 -0
  146. package/dist/quarry-registry-CXg0RFXq.d.mts +69 -0
  147. package/dist/quarry-registry-CXg0RFXq.d.mts.map +1 -0
  148. package/dist/quarry.module-BuRPGMDm.mjs +312 -0
  149. package/dist/quarry.module-BuRPGMDm.mjs.map +1 -0
  150. package/dist/queue/index.d.mts +3 -3
  151. package/dist/queue/index.mjs +57 -48
  152. package/dist/queue/index.mjs.map +1 -1
  153. package/dist/queue.module-nddvxzCB.mjs +613 -0
  154. package/dist/queue.module-nddvxzCB.mjs.map +1 -0
  155. package/dist/queue.tokens-DjHnFmre.mjs +11 -0
  156. package/dist/queue.tokens-DjHnFmre.mjs.map +1 -0
  157. package/dist/{r2-storage.provider-DuonKeYm.mjs → r2-storage.provider-DCxQt9dD.mjs} +6 -6
  158. package/dist/r2-storage.provider-DCxQt9dD.mjs.map +1 -0
  159. package/dist/{rate-limit.decorator-6qzNcSOt.mjs → rate-limit.decorator-BPAie_p3.mjs} +6 -11
  160. package/dist/rate-limit.decorator-BPAie_p3.mjs.map +1 -0
  161. package/dist/rate-limiter/index.d.mts +11 -50
  162. package/dist/rate-limiter/index.d.mts.map +1 -1
  163. package/dist/rate-limiter/index.mjs +33 -42
  164. package/dist/rate-limiter/index.mjs.map +1 -1
  165. package/dist/route-name-DGoBOfPg.mjs +171 -0
  166. package/dist/route-name-DGoBOfPg.mjs.map +1 -0
  167. package/dist/route-registration.service-D6vSwiKP.mjs +918 -0
  168. package/dist/route-registration.service-D6vSwiKP.mjs.map +1 -0
  169. package/dist/route-registry-CYqLp2Nj.mjs +123 -0
  170. package/dist/route-registry-CYqLp2Nj.mjs.map +1 -0
  171. package/dist/router/index.d.mts +2 -2
  172. package/dist/router/index.mjs +18 -7
  173. package/dist/router-CWGBD-Bg.mjs +78 -0
  174. package/dist/router-CWGBD-Bg.mjs.map +1 -0
  175. package/dist/router-resolver-D4YlPNlm.mjs +88 -0
  176. package/dist/router-resolver-D4YlPNlm.mjs.map +1 -0
  177. package/dist/seeder/index.d.mts +16 -11
  178. package/dist/seeder/index.d.mts.map +1 -1
  179. package/dist/seeder/index.mjs +5 -3
  180. package/dist/seeder-7ubkms-Y.mjs +81 -0
  181. package/dist/seeder-7ubkms-Y.mjs.map +1 -0
  182. package/dist/seeder-registry-CyUmKsJq.mjs +57 -0
  183. package/dist/seeder-registry-CyUmKsJq.mjs.map +1 -0
  184. package/dist/seeder.module-CYYwk3Qk.mjs +15 -0
  185. package/dist/seeder.module-CYYwk3Qk.mjs.map +1 -0
  186. package/dist/{signed-url-BQPbv2In.mjs → signed-url-DIU0sK_6.mjs} +1 -1
  187. package/dist/{signed-url-BQPbv2In.mjs.map → signed-url-DIU0sK_6.mjs.map} +1 -1
  188. package/dist/storage/index.d.mts +15 -39
  189. package/dist/storage/index.d.mts.map +1 -1
  190. package/dist/storage/index.mjs +3 -3
  191. package/dist/storage/providers/index.d.mts +2 -2
  192. package/dist/storage/providers/index.d.mts.map +1 -1
  193. package/dist/storage/providers/index.mjs +1 -1
  194. package/dist/{storage-D8CBP72Z.mjs → storage-MDZypIE9.mjs} +66 -59
  195. package/dist/storage-MDZypIE9.mjs.map +1 -0
  196. package/dist/{storage-provider.interface-Bd6vA4ak.d.mts → storage-provider.interface-ClUwxz4S.d.mts} +2 -3
  197. package/dist/storage-provider.interface-ClUwxz4S.d.mts.map +1 -0
  198. package/dist/storage.error-Dnib4VHc.mjs +8 -0
  199. package/dist/storage.error-Dnib4VHc.mjs.map +1 -0
  200. package/dist/stratal-DL9M38_s.mjs +383 -0
  201. package/dist/stratal-DL9M38_s.mjs.map +1 -0
  202. package/dist/stratal-DwDJPY9N.d.mts +43 -0
  203. package/dist/stratal-DwDJPY9N.d.mts.map +1 -0
  204. package/dist/tiered-cache.service-Dv3BhxxE.d.mts +79 -0
  205. package/dist/tiered-cache.service-Dv3BhxxE.d.mts.map +1 -0
  206. package/dist/trailing-slash-CFyw8nYu.mjs +34 -0
  207. package/dist/trailing-slash-CFyw8nYu.mjs.map +1 -0
  208. package/dist/{types-cySNS_lp.d.mts → types-CmV_9xBD.d.mts} +1 -1
  209. package/dist/types-CmV_9xBD.d.mts.map +1 -0
  210. package/dist/uri-h7Q8Jug9.mjs +251 -0
  211. package/dist/uri-h7Q8Jug9.mjs.map +1 -0
  212. package/dist/{usage-generator-BUdlhnCK.mjs → usage-generator-DAWYasuP.mjs} +7 -4
  213. package/dist/usage-generator-DAWYasuP.mjs.map +1 -0
  214. package/dist/validation-CpOjviyT.mjs +49 -0
  215. package/dist/validation-CpOjviyT.mjs.map +1 -0
  216. package/dist/validation.context-CRvmrhq7.mjs +117 -0
  217. package/dist/validation.context-CRvmrhq7.mjs.map +1 -0
  218. package/dist/versioning.service-C6aHky8-.mjs +36 -0
  219. package/dist/versioning.service-C6aHky8-.mjs.map +1 -0
  220. package/dist/websocket/index.d.mts +16 -14
  221. package/dist/websocket/index.d.mts.map +1 -1
  222. package/dist/websocket/index.mjs +2 -2
  223. package/dist/workers/index.d.mts +2 -2
  224. package/dist/workers/index.d.mts.map +1 -1
  225. package/dist/workers/index.mjs +3 -2
  226. package/dist/workers/index.mjs.map +1 -1
  227. package/dist/zod-eKqqhZ5_.mjs +72 -0
  228. package/dist/zod-eKqqhZ5_.mjs.map +1 -0
  229. package/dist/{index-Bnpfq6uk.d.mts → zod-wecrEVAs.d.mts} +63 -133
  230. package/dist/zod-wecrEVAs.d.mts.map +1 -0
  231. package/package.json +28 -39
  232. package/dist/base-email.provider-CfQCA08m.mjs +0 -42
  233. package/dist/base-email.provider-CfQCA08m.mjs.map +0 -1
  234. package/dist/cache.service-DsnKuNyO.d.mts.map +0 -1
  235. package/dist/cache.tokens-B7Rw1C9Q.mjs +0 -6
  236. package/dist/cache.tokens-B7Rw1C9Q.mjs.map +0 -1
  237. package/dist/colors-DJaRDXoS.mjs +0 -16
  238. package/dist/colors-DJaRDXoS.mjs.map +0 -1
  239. package/dist/command-BgSlsS4M.mjs.map +0 -1
  240. package/dist/command-Cmmf0oHX.d.mts.map +0 -1
  241. package/dist/consumer-registry-B7yUNh0q.d.mts.map +0 -1
  242. package/dist/controller.decorator-B9vwn0zK.mjs.map +0 -1
  243. package/dist/cron-manager-CmTimEjf.d.mts +0 -131
  244. package/dist/cron-manager-CmTimEjf.d.mts.map +0 -1
  245. package/dist/cron-manager-DQSK8uoV.mjs.map +0 -1
  246. package/dist/en-DSH_bhh6.mjs +0 -308
  247. package/dist/en-DSH_bhh6.mjs.map +0 -1
  248. package/dist/env-D1rcZ8_r.d.mts.map +0 -1
  249. package/dist/errors-COW9-Mar.mjs +0 -1739
  250. package/dist/errors-COW9-Mar.mjs.map +0 -1
  251. package/dist/errors-ORxu1-Bb.mjs +0 -74
  252. package/dist/errors-ORxu1-Bb.mjs.map +0 -1
  253. package/dist/events-CzCV8jI8.mjs.map +0 -1
  254. package/dist/gateway-context-CXmXtaUP.mjs.map +0 -1
  255. package/dist/guards-DU1_J9YA.mjs.map +0 -1
  256. package/dist/http-method.decorator-BrgHMdLQ.mjs.map +0 -1
  257. package/dist/i18n.module-CzXLW9Hy.mjs +0 -2532
  258. package/dist/i18n.module-CzXLW9Hy.mjs.map +0 -1
  259. package/dist/index-7-hU3GTV.d.mts.map +0 -1
  260. package/dist/index-Bnpfq6uk.d.mts.map +0 -1
  261. package/dist/index-ByOyTmqf.d.mts.map +0 -1
  262. package/dist/index-C1KvMncZ.d.mts.map +0 -1
  263. package/dist/index-DBd_2wv8.d.mts +0 -263
  264. package/dist/index-DBd_2wv8.d.mts.map +0 -1
  265. package/dist/index-DUzWs0z7.d.mts +0 -494
  266. package/dist/index-DUzWs0z7.d.mts.map +0 -1
  267. package/dist/index.d.mts.map +0 -1
  268. package/dist/logger-DlV7NtvD.mjs +0 -440
  269. package/dist/logger-DlV7NtvD.mjs.map +0 -1
  270. package/dist/module-BzLg57FK.mjs +0 -866
  271. package/dist/module-BzLg57FK.mjs.map +0 -1
  272. package/dist/openapi-tools.service-Zs-Ewv7F.mjs.map +0 -1
  273. package/dist/openapi.service-Bt9bCIrd.d.mts.map +0 -1
  274. package/dist/quarry-registry-BwY2hOxm.mjs +0 -699
  275. package/dist/quarry-registry-BwY2hOxm.mjs.map +0 -1
  276. package/dist/queue.module-BhCjZp6H.mjs +0 -409
  277. package/dist/queue.module-BhCjZp6H.mjs.map +0 -1
  278. package/dist/r2-storage.provider-DuonKeYm.mjs.map +0 -1
  279. package/dist/rate-limit.decorator-6qzNcSOt.mjs.map +0 -1
  280. package/dist/resend.provider-DB4IlFjG.mjs +0 -68
  281. package/dist/resend.provider-DB4IlFjG.mjs.map +0 -1
  282. package/dist/seeder-zoEfEw9i.mjs +0 -138
  283. package/dist/seeder-zoEfEw9i.mjs.map +0 -1
  284. package/dist/setup-CefZKV_e.mjs +0 -37
  285. package/dist/setup-CefZKV_e.mjs.map +0 -1
  286. package/dist/smtp.provider-B6D7zuWX.mjs +0 -76
  287. package/dist/smtp.provider-B6D7zuWX.mjs.map +0 -1
  288. package/dist/storage-D8CBP72Z.mjs.map +0 -1
  289. package/dist/storage-provider.interface-Bd6vA4ak.d.mts.map +0 -1
  290. package/dist/stratal-CNwpbSZl.mjs +0 -535
  291. package/dist/stratal-CNwpbSZl.mjs.map +0 -1
  292. package/dist/types-cySNS_lp.d.mts.map +0 -1
  293. package/dist/usage-generator-BUdlhnCK.mjs.map +0 -1
  294. package/dist/validation-DtJwAv7O.mjs +0 -248
  295. package/dist/validation-DtJwAv7O.mjs.map +0 -1
  296. /package/dist/{chunk-D1SwGrFN.mjs → chunk-BBjsoOtd.mjs} +0 -0
@@ -1,60 +1,69 @@
1
- import { a as __decorate, f as DI_TOKENS, o as __decorateParam, p as Transient, s as __decorateMetadata } from "../logger-DlV7NtvD.mjs";
2
- import { a as QueueProviderNotSupportedError, c as QUEUE_TOKENS, i as CloudflareQueueProvider, l as QueueSender, n as QueueProviderFactory, o as QueueBindingNotFoundError, r as SyncQueueProvider, s as QueueRegistry, t as QueueModule, u as ConsumerRegistry } from "../queue.module-BhCjZp6H.mjs";
3
- import { inject } from "tsyringe";
4
- //#region src/queue/queue-manager.ts
5
- let QueueManager = class QueueManager {
6
- registry;
7
- constructor(registry) {
8
- this.registry = registry;
1
+ import { c as Transient, d as inject } from "../di-DseMn-z9.mjs";
2
+ import { n as __decorateParam, t as __decorate } from "../decorate-CuAoSZvs.mjs";
3
+ import { LOGGER_TOKENS } from "../logger/index.mjs";
4
+ import { a as CloudflareQueueProvider, c as QueueRegistry, d as QueueManager, f as QueueError, i as SyncQueueProvider, l as QueueSender, o as DEFAULT_STORE_BINDING, r as QueueProviderFactory, s as QueueStore, t as QueueModule, u as ConsumerRegistry } from "../queue.module-nddvxzCB.mjs";
5
+ import { t as QUEUE_TOKENS } from "../queue.tokens-DjHnFmre.mjs";
6
+ //#region src/queue/jobs/failed-job-cleanup.job.ts
7
+ /** Retention applied when `failedJobs.retention` is not configured. */
8
+ const DEFAULT_RETENTION_SECONDS = 604800;
9
+ let FailedJobCleanupJob = class FailedJobCleanupJob {
10
+ store;
11
+ options;
12
+ logger;
13
+ static schedule = "0 0 * * *";
14
+ constructor(store, options, logger) {
15
+ this.store = store;
16
+ this.options = options;
17
+ this.logger = logger;
9
18
  }
10
- /**
11
- * Process a batch of queue messages
12
- *
13
- * Routes messages to registered consumers based on message type.
14
- * Uses ConsumerRegistry to find matching consumers.
15
- *
16
- * @param _queueName - Name of the queue (for logging, not used for routing)
17
- * @param batch - Batch of messages from Cloudflare Queue
18
- */
19
- async processBatch(_queueName, batch) {
20
- for (const message of batch.messages) {
21
- const queueMessage = message.body;
22
- const consumers = this.registry.getConsumers(queueMessage.type);
23
- for (const consumer of consumers) try {
24
- await consumer.handle(queueMessage);
25
- message.ack();
26
- } catch (error) {
27
- const errorInstance = error instanceof Error ? error : new Error(String(error));
28
- if (consumer.onError) await consumer.onError(errorInstance, queueMessage);
29
- message.retry();
30
- }
31
- }
19
+ async execute() {
20
+ const retention = this.options.failedJobs?.retention ?? DEFAULT_RETENTION_SECONDS;
21
+ const removed = await this.store.purgeFailedJobsOlderThan(retention);
22
+ this.logger.info("Failed-job cleanup complete", {
23
+ removed,
24
+ retentionSeconds: retention
25
+ });
32
26
  }
33
27
  };
34
- QueueManager = __decorate([
35
- Transient(DI_TOKENS.Queue),
36
- __decorateParam(0, inject(DI_TOKENS.ConsumerRegistry)),
37
- __decorateMetadata("design:paramtypes", [Object])
38
- ], QueueManager);
28
+ FailedJobCleanupJob = __decorate([
29
+ Transient(),
30
+ __decorateParam(0, inject(QUEUE_TOKENS.QueueStore)),
31
+ __decorateParam(1, inject(QUEUE_TOKENS.QueueModuleOptions)),
32
+ __decorateParam(2, inject(LOGGER_TOKENS.LoggerService))
33
+ ], FailedJobCleanupJob);
34
+ /**
35
+ * Create a {@link FailedJobCleanupJob} bound to a custom cron schedule (which
36
+ * must match a `wrangler.jsonc` trigger). Use when the default daily schedule
37
+ * isn't desired:
38
+ *
39
+ * ```ts
40
+ * @Module({ jobs: [failedJobCleanupJob('0 3 * * 0')] }) // weekly, Sundays 03:00
41
+ * ```
42
+ */
43
+ function failedJobCleanupJob(schedule) {
44
+ return class extends FailedJobCleanupJob {
45
+ static schedule = schedule;
46
+ };
47
+ }
39
48
  //#endregion
40
49
  //#region src/queue/decorators/inject-queue.decorator.ts
41
50
  /**
42
- * Inject a queue sender by name.
51
+ * Inject a queue sender by binding name.
43
52
  *
44
- * Queue names are typed via module augmentation of QueueNames interface.
45
- * The queue name serves as both the identifier and the DI injection token.
53
+ * The binding name matches the `binding` field declared under `queues.producers`
54
+ * in `wrangler.jsonc` (e.g. `BACKGROUND_QUEUE`). Stratal looks the binding up
55
+ * directly on the worker's `env`; the underlying Cloudflare queue can be any
56
+ * env-specific name (e.g. `background-queue-dev`) without affecting code.
46
57
  *
47
- * @param name - Queue name (typed with autocomplete if QueueNames is augmented)
58
+ * @param binding - Queue binding identifier (typed against `StratalEnv`).
48
59
  * @returns Parameter decorator for constructor injection
49
60
  *
50
61
  * @example
51
62
  * ```typescript
52
- * // Direct injection by queue name
53
63
  * constructor(
54
- * @InjectQueue('notifications-queue') private queue: IQueueSender
64
+ * @InjectQueue('NOTIFICATIONS_QUEUE') private queue: IQueueSender
55
65
  * ) {}
56
66
  *
57
- * // Usage
58
67
  * await this.queue.dispatch({
59
68
  * type: 'email.send',
60
69
  * payload: { to: 'user@example.com', subject: 'Hello' }
@@ -62,14 +71,14 @@ QueueManager = __decorate([
62
71
  * ```
63
72
  *
64
73
  * @remarks
65
- * The queue must be registered via `QueueModule.registerQueue(name)` before injection.
66
- * For module-internal queue bindings (e.g., EmailModule), use `@inject(TOKEN)` with
67
- * `useExisting` provider binding instead.
74
+ * The binding must be registered via `QueueModule.registerQueue(binding)`
75
+ * before injection. For module-internal bindings (e.g. EmailModule),
76
+ * use `@inject(TOKEN)` with `useExisting` provider binding instead.
68
77
  */
69
- function InjectQueue(name) {
70
- return inject(name);
78
+ function InjectQueue(binding) {
79
+ return inject(binding);
71
80
  }
72
81
  //#endregion
73
- export { CloudflareQueueProvider, ConsumerRegistry, InjectQueue, QUEUE_TOKENS, QueueBindingNotFoundError, QueueManager, QueueModule, QueueProviderFactory, QueueProviderNotSupportedError, QueueRegistry, QueueSender, SyncQueueProvider };
82
+ export { CloudflareQueueProvider, ConsumerRegistry, DEFAULT_STORE_BINDING, FailedJobCleanupJob, InjectQueue, QUEUE_TOKENS, QueueError, QueueManager, QueueModule, QueueProviderFactory, QueueRegistry, QueueSender, QueueStore, SyncQueueProvider, failedJobCleanupJob };
74
83
 
75
84
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/queue/queue-manager.ts","../../src/queue/decorators/inject-queue.decorator.ts"],"sourcesContent":["import { inject } from 'tsyringe'\nimport { Transient } from '../di/decorators'\nimport { DI_TOKENS } from '../di/tokens'\nimport { type ConsumerRegistry } from './consumer-registry'\nimport type { QueueMessage } from './queue-consumer'\n\n/**\n * Queue Manager\n *\n * Singleton service for processing queue message batches.\n * Routes messages to consumers based on message type.\n *\n * **Message Routing:**\n * - Consumers declare message types they handle (e.g., ['email.send'])\n * - When a message arrives, consumers matching the message type are invoked\n * - A consumer can handle messages from ANY queue (routing is by type, not queue)\n *\n * **Note:** For sending messages to queues, use IQueueSender instances\n * obtained via @InjectQueue('queue-name') or module bindings.\n *\n * @example Processing a queue batch\n * ```typescript\n * // In Cloudflare Worker queue handler\n * await queueManager.processBatch('notifications-queue', batch)\n * ```\n */\n@Transient(DI_TOKENS.Queue)\nexport class QueueManager {\n constructor(\n @inject(DI_TOKENS.ConsumerRegistry) private readonly registry: ConsumerRegistry\n ) {}\n\n /**\n * Process a batch of queue messages\n *\n * Routes messages to registered consumers based on message type.\n * Uses ConsumerRegistry to find matching consumers.\n *\n * @param _queueName - Name of the queue (for logging, not used for routing)\n * @param batch - Batch of messages from Cloudflare Queue\n */\n async processBatch(_queueName: string, batch: MessageBatch): Promise<void> {\n for (const message of batch.messages) {\n const queueMessage = message.body as QueueMessage\n\n // Find consumers by message type (not by queue name)\n const consumers = this.registry.getConsumers(queueMessage.type)\n\n for (const consumer of consumers) {\n try {\n await consumer.handle(queueMessage)\n message.ack()\n } catch (error) {\n const errorInstance = error instanceof Error\n ? error\n : new Error(String(error))\n\n if (consumer.onError) {\n await consumer.onError(errorInstance, queueMessage)\n }\n message.retry()\n }\n }\n }\n }\n}\n","import { inject } from 'tsyringe'\nimport type { QueueName } from '../queue-name'\n\n/**\n * Inject a queue sender by name.\n *\n * Queue names are typed via module augmentation of QueueNames interface.\n * The queue name serves as both the identifier and the DI injection token.\n *\n * @param name - Queue name (typed with autocomplete if QueueNames is augmented)\n * @returns Parameter decorator for constructor injection\n *\n * @example\n * ```typescript\n * // Direct injection by queue name\n * constructor(\n * @InjectQueue('notifications-queue') private queue: IQueueSender\n * ) {}\n *\n * // Usage\n * await this.queue.dispatch({\n * type: 'email.send',\n * payload: { to: 'user@example.com', subject: 'Hello' }\n * })\n * ```\n *\n * @remarks\n * The queue must be registered via `QueueModule.registerQueue(name)` before injection.\n * For module-internal queue bindings (e.g., EmailModule), use `@inject(TOKEN)` with\n * `useExisting` provider binding instead.\n */\nexport function InjectQueue(name: QueueName): ParameterDecorator {\n return inject(name)\n}\n"],"mappings":";;;;AA2BO,IAAA,eAAA,MAAM,aAAa;CAE+B;CADvD,YACE,UACA;EADqD,KAAA,WAAA;;;;;;;;;;;CAYvD,MAAM,aAAa,YAAoB,OAAoC;EACzE,KAAK,MAAM,WAAW,MAAM,UAAU;GACpC,MAAM,eAAe,QAAQ;GAG7B,MAAM,YAAY,KAAK,SAAS,aAAa,aAAa,KAAK;GAE/D,KAAK,MAAM,YAAY,WACrB,IAAI;IACF,MAAM,SAAS,OAAO,aAAa;IACnC,QAAQ,KAAK;YACN,OAAO;IACd,MAAM,gBAAgB,iBAAiB,QACnC,QACA,IAAI,MAAM,OAAO,MAAM,CAAC;IAE5B,IAAI,SAAS,SACX,MAAM,SAAS,QAAQ,eAAe,aAAa;IAErD,QAAQ,OAAO;;;;;;CAlCxB,UAAU,UAAU,MAAM;oBAGtB,OAAO,UAAU,iBAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACEvC,SAAgB,YAAY,MAAqC;CAC/D,OAAO,OAAO,KAAK"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/queue/jobs/failed-job-cleanup.job.ts","../../src/queue/decorators/inject-queue.decorator.ts"],"sourcesContent":["import type { CronJob } from '../../cron/cron-job'\nimport { inject } from '../../di'\nimport { Transient } from '../../di/decorators'\nimport { LOGGER_TOKENS, type LoggerService } from '../../logger'\nimport type { Constructor } from '../../types'\nimport type { QueueModuleOptions } from '../queue.module'\nimport type { QueueStore } from '../queue-store'\nimport { QUEUE_TOKENS } from '../queue.tokens'\n\n/** Retention applied when `failedJobs.retention` is not configured. */\nconst DEFAULT_RETENTION_SECONDS = 604800 // 7 days\n\n/**\n * Opt-in cron job that deletes failed jobs older than `failedJobs.retention`\n * (default 7 days). Failed jobs are persisted indefinitely by default; register\n * this job only if you want automatic cleanup.\n *\n * ```ts\n * @Module({\n * imports: [\n * QueueModule.forRoot({ provider: 'cloudflare', failedJobs: { retention: 1209600 } }),\n * ],\n * jobs: [FailedJobCleanupJob], // daily at 00:00 UTC\n * })\n * export class AppModule {}\n * ```\n *\n * Add a matching cron trigger to `wrangler.jsonc` (`\"0 0 * * *\"` for the\n * default schedule), or use {@link failedJobCleanupJob} for a custom one.\n */\n@Transient()\nexport class FailedJobCleanupJob implements CronJob {\n static schedule = '0 0 * * *' // daily at 00:00 UTC\n\n constructor(\n @inject(QUEUE_TOKENS.QueueStore) private readonly store: QueueStore,\n @inject(QUEUE_TOKENS.QueueModuleOptions) private readonly options: QueueModuleOptions,\n @inject(LOGGER_TOKENS.LoggerService) private readonly logger: LoggerService,\n ) {}\n\n async execute(): Promise<void> {\n const retention = this.options.failedJobs?.retention ?? DEFAULT_RETENTION_SECONDS\n const removed = await this.store.purgeFailedJobsOlderThan(retention)\n this.logger.info('Failed-job cleanup complete', { removed, retentionSeconds: retention })\n }\n}\n\n/**\n * Create a {@link FailedJobCleanupJob} bound to a custom cron schedule (which\n * must match a `wrangler.jsonc` trigger). Use when the default daily schedule\n * isn't desired:\n *\n * ```ts\n * @Module({ jobs: [failedJobCleanupJob('0 3 * * 0')] }) // weekly, Sundays 03:00\n * ```\n */\nexport function failedJobCleanupJob(schedule: string): Constructor<CronJob> {\n return class extends FailedJobCleanupJob {\n static schedule = schedule\n }\n}\n","import { inject } from '../../di'\nimport type { QueueBinding } from '../queue-binding'\n\n/**\n * Inject a queue sender by binding name.\n *\n * The binding name matches the `binding` field declared under `queues.producers`\n * in `wrangler.jsonc` (e.g. `BACKGROUND_QUEUE`). Stratal looks the binding up\n * directly on the worker's `env`; the underlying Cloudflare queue can be any\n * env-specific name (e.g. `background-queue-dev`) without affecting code.\n *\n * @param binding - Queue binding identifier (typed against `StratalEnv`).\n * @returns Parameter decorator for constructor injection\n *\n * @example\n * ```typescript\n * constructor(\n * @InjectQueue('NOTIFICATIONS_QUEUE') private queue: IQueueSender\n * ) {}\n *\n * await this.queue.dispatch({\n * type: 'email.send',\n * payload: { to: 'user@example.com', subject: 'Hello' }\n * })\n * ```\n *\n * @remarks\n * The binding must be registered via `QueueModule.registerQueue(binding)`\n * before injection. For module-internal bindings (e.g. EmailModule),\n * use `@inject(TOKEN)` with `useExisting` provider binding instead.\n */\nexport function InjectQueue(binding: QueueBinding): ParameterDecorator {\n return inject(binding)\n}\n"],"mappings":";;;;;;;AAUA,MAAM,4BAA4B;AAqB3B,IAAA,sBAAA,MAAM,oBAAuC;CAIE;CACQ;CACJ;CALxD,OAAO,WAAW;CAElB,YACE,OACA,SACA,QACA;EAHkD,KAAA,QAAA;EACQ,KAAA,UAAA;EACJ,KAAA,SAAA;CACrD;CAEH,MAAM,UAAyB;EAC7B,MAAM,YAAY,KAAK,QAAQ,YAAY,aAAa;EACxD,MAAM,UAAU,MAAM,KAAK,MAAM,yBAAyB,SAAS;EACnE,KAAK,OAAO,KAAK,+BAA+B;GAAE;GAAS,kBAAkB;EAAU,CAAC;CAC1F;AACF;;CAfC,UAAU;oBAKN,OAAO,aAAa,UAAU,CAAA;oBAC9B,OAAO,aAAa,kBAAkB,CAAA;oBACtC,OAAO,cAAc,aAAa,CAAA;;;;;;;;;;;AAmBvC,SAAgB,oBAAoB,UAAwC;CAC1E,OAAO,cAAc,oBAAoB;EACvC,OAAO,WAAW;CACpB;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BA,SAAgB,YAAY,SAA2C;CACrE,OAAO,OAAO,OAAO;AACvB"}