@beechcms/api 0.6.0-preview.2 → 0.6.0-preview.3

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 (375) hide show
  1. package/README.md +4 -4
  2. package/assets/dashboard/assets/chart-Cws4Yj6K.js +39 -0
  3. package/assets/dashboard/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  4. package/assets/dashboard/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  5. package/assets/dashboard/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  6. package/assets/dashboard/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  7. package/assets/dashboard/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  8. package/assets/dashboard/assets/index-BjPpppHe.css +1 -0
  9. package/assets/dashboard/assets/index-CrW-zhkA.js +642 -0
  10. package/assets/dashboard/assets/lora-cyrillic-ext-wght-normal-YcVxMP-u.woff2 +0 -0
  11. package/assets/dashboard/assets/lora-cyrillic-wght-normal-UWPuZLjM.woff2 +0 -0
  12. package/assets/dashboard/assets/lora-latin-ext-wght-normal-C2Wlntb9.woff2 +0 -0
  13. package/assets/dashboard/assets/lora-latin-wght-normal-BiLcIKcI.woff2 +0 -0
  14. package/assets/dashboard/assets/lora-math-wght-normal-sOy7rEfW.woff2 +0 -0
  15. package/assets/dashboard/assets/lora-symbols-wght-normal-DQ5VrUkH.woff2 +0 -0
  16. package/assets/dashboard/assets/lora-vietnamese-wght-normal-CfJ7gtf3.woff2 +0 -0
  17. package/assets/dashboard/assets/pie-chart-recharts-CAxoDQp2.js +1 -0
  18. package/assets/dashboard/assets/timeseries-chart-recharts-CixDW-LM.js +1 -0
  19. package/assets/dashboard/index.html +2 -2
  20. package/dist/auth/__fixtures__/in-memory-hash-provider.d.ts +5 -0
  21. package/dist/auth/__fixtures__/static-token-service.d.ts +6 -0
  22. package/dist/auth/bcrypt-hash-provider.d.ts +8 -0
  23. package/dist/auth/constants.d.ts +10 -0
  24. package/dist/auth/jose-token-service.d.ts +14 -0
  25. package/dist/auth/login.d.ts +32 -0
  26. package/dist/auth/refresh.d.ts +1 -0
  27. package/dist/factory.d.ts +39 -0
  28. package/dist/features/automations/action-executors/create-entry.executor.d.ts +7 -0
  29. package/dist/features/automations/action-executors/edit-field.executor.d.ts +7 -0
  30. package/dist/features/automations/action-executors/index.d.ts +13 -0
  31. package/dist/features/automations/action-executors/send-mail.executor.d.ts +7 -0
  32. package/dist/features/automations/action-executors/set-variable.executor.d.ts +15 -0
  33. package/dist/features/automations/action-executors/webhook.executor.d.ts +7 -0
  34. package/dist/features/automations/automation-runner.d.ts +13 -0
  35. package/dist/features/automations/automation-runner.utils.d.ts +3 -0
  36. package/dist/features/automations/automations.handler.d.ts +7 -0
  37. package/dist/features/automations/automations.schema.d.ts +191 -0
  38. package/dist/features/automations/context-resolver.d.ts +8 -0
  39. package/dist/features/automations/cron-runner.d.ts +9 -0
  40. package/dist/features/automations/cron-runner.utils.d.ts +1 -0
  41. package/dist/features/automations/filter-translation.d.ts +9 -0
  42. package/dist/features/automations/index.d.ts +7 -0
  43. package/dist/features/automations/template-grammar.d.ts +73 -0
  44. package/dist/features/automations/var-access-resolver.d.ts +6 -0
  45. package/dist/features/automations/when-evaluator.d.ts +3 -0
  46. package/dist/features/automations/when-pushdown.d.ts +2 -0
  47. package/dist/features/backrefs/backrefs.handler.d.ts +3 -0
  48. package/dist/features/backrefs/d1-backref.repository.d.ts +17 -0
  49. package/dist/features/backrefs/index.d.ts +1 -0
  50. package/dist/features/content/constants.d.ts +12 -0
  51. package/dist/features/content/handlers/bulk.handler.d.ts +3 -0
  52. package/dist/features/content/handlers/create.d.ts +3 -0
  53. package/dist/features/content/handlers/delete.d.ts +3 -0
  54. package/dist/features/content/handlers/facets.d.ts +3 -0
  55. package/dist/features/content/handlers/get.d.ts +4 -0
  56. package/dist/features/content/handlers/helpers.d.ts +12 -0
  57. package/dist/features/content/handlers/list.d.ts +3 -0
  58. package/dist/features/content/handlers/update.d.ts +3 -0
  59. package/dist/features/content/index.d.ts +4 -0
  60. package/dist/features/dashboard-layout/dashboard-layout.handler.d.ts +7 -0
  61. package/dist/features/dashboard-layout/index.d.ts +1 -0
  62. package/dist/features/draft/draft.handler.d.ts +4 -0
  63. package/dist/features/draft/draft.middleware.d.ts +9 -0
  64. package/dist/features/draft/index.d.ts +1 -0
  65. package/{src/features/email/email.provider.ts → dist/features/email/email.provider.d.ts} +19 -24
  66. package/dist/features/email/email.service.d.ts +13 -0
  67. package/dist/features/email/email.types.d.ts +94 -0
  68. package/{src/features/email/index.ts → dist/features/email/index.d.ts} +3 -16
  69. package/dist/features/email/providers/resend.d.ts +36 -0
  70. package/dist/features/email/providers/smtp.d.ts +11 -0
  71. package/dist/features/email/templates/automation-mail.d.ts +8 -0
  72. package/dist/features/email/templates/password-changed.d.ts +15 -0
  73. package/dist/features/email/templates/password-reset.d.ts +18 -0
  74. package/dist/features/email/templates/shell.d.ts +58 -0
  75. package/dist/features/notifications/index.d.ts +1 -0
  76. package/dist/features/notifications/notifications.handler.d.ts +15 -0
  77. package/dist/features/password-reset/index.d.ts +6 -0
  78. package/dist/features/password-reset/request.d.ts +10 -0
  79. package/dist/features/password-reset/reset.d.ts +9 -0
  80. package/dist/features/rotate-field/index.d.ts +1 -0
  81. package/dist/features/rotate-field/rotate-field.handler.d.ts +7 -0
  82. package/dist/features/rotate-field/rotate-field.schema.d.ts +11 -0
  83. package/dist/features/schema/schema.handler.d.ts +7 -0
  84. package/dist/features/seeds/index.d.ts +1 -0
  85. package/dist/features/seeds/seeds.handler.d.ts +6 -0
  86. package/dist/features/settings/settings.handler.d.ts +7 -0
  87. package/dist/features/setup/index.d.ts +7 -0
  88. package/dist/features/stats/index.d.ts +1 -0
  89. package/dist/features/stats/stats.handler.d.ts +7 -0
  90. package/dist/features/webhooks/index.d.ts +3 -0
  91. package/dist/index.d.ts +6 -0
  92. package/dist/index.js +9666 -0
  93. package/dist/media-utils.d.ts +25 -0
  94. package/dist/middleware/auth-providers.middleware.d.ts +8 -0
  95. package/dist/middleware/observability.middleware.d.ts +20 -0
  96. package/dist/middleware/rate-limit.middleware.d.ts +9 -0
  97. package/dist/middleware/repository.middleware.d.ts +34 -0
  98. package/dist/middleware/seed-registry.middleware.d.ts +10 -0
  99. package/dist/middleware/storage.middleware.d.ts +7 -0
  100. package/dist/middleware.d.ts +11 -0
  101. package/dist/public/access-policy.d.ts +12 -0
  102. package/dist/public/api-key-middleware.d.ts +6 -0
  103. package/dist/public/cache-utils.d.ts +10 -0
  104. package/dist/public/entry-projection.d.ts +2 -0
  105. package/dist/public/idempotency.d.ts +9 -0
  106. package/dist/public/index.d.ts +11 -0
  107. package/dist/public/problem-details.d.ts +31 -0
  108. package/dist/public/public-add.d.ts +3 -0
  109. package/dist/public/public-edit.d.ts +5 -0
  110. package/dist/public/public-errors.d.ts +13 -0
  111. package/dist/public/public-read.d.ts +3 -0
  112. package/dist/public/public-routes.d.ts +3 -0
  113. package/dist/public/query-builder.d.ts +28 -0
  114. package/dist/public/rate-limit-middleware.d.ts +3 -0
  115. package/dist/public/read-list.d.ts +26 -0
  116. package/dist/public/read-single.d.ts +22 -0
  117. package/dist/public/response-builder.d.ts +22 -0
  118. package/dist/public/sanitize.d.ts +23 -0
  119. package/{src/public/slug-utils.ts → dist/public/slug-utils.d.ts} +3 -10
  120. package/dist/rate-limit/cloudflare-rate-limiter.d.ts +6 -0
  121. package/dist/rate-limit/in-memory-rate-limiter.d.ts +7 -0
  122. package/dist/rate-limit/no-op-rate-limiter.d.ts +4 -0
  123. package/dist/search-utils.d.ts +54 -0
  124. package/dist/search.d.ts +6 -0
  125. package/dist/shared/apply-policies.d.ts +10 -0
  126. package/dist/shared/automations.repository.d1.d.ts +12 -0
  127. package/dist/shared/background-notification-service.d.ts +18 -0
  128. package/dist/shared/base.repository.d1.d.ts +18 -0
  129. package/dist/shared/content-utils.d.ts +21 -0
  130. package/dist/shared/content.repository.d1.d.ts +68 -0
  131. package/dist/shared/d1-activity-log.repository.d.ts +13 -0
  132. package/dist/shared/d1-activity-logger.d.ts +20 -0
  133. package/dist/shared/d1-analytics.repository.d.ts +20 -0
  134. package/dist/shared/d1-content-scan.repository.d.ts +7 -0
  135. package/dist/shared/d1-notification.repository.d.ts +17 -0
  136. package/dist/shared/d1-password-reset-token.repository.d.ts +10 -0
  137. package/dist/shared/d1-search.repository.d.ts +14 -0
  138. package/dist/shared/d1-session.repository.d.ts +12 -0
  139. package/dist/shared/d1-setup-checklist.repository.d.ts +12 -0
  140. package/dist/shared/d1-user.repository.d.ts +18 -0
  141. package/dist/shared/d1-widget.repository.d.ts +31 -0
  142. package/dist/shared/dashboard-layout.repository.d1.d.ts +9 -0
  143. package/dist/shared/demo-data-sql.d.ts +1 -0
  144. package/dist/shared/demo-data.repository.d1.d.ts +6 -0
  145. package/dist/shared/execution-context-scheduler.d.ts +6 -0
  146. package/dist/shared/fixed-clock.d.ts +13 -0
  147. package/dist/shared/fts-sync.d.ts +1 -0
  148. package/dist/shared/idempotency.repository.d1.d.ts +16 -0
  149. package/dist/shared/in-memory-activity-logger.d.ts +11 -0
  150. package/dist/shared/in-memory-notification-service.d.ts +11 -0
  151. package/dist/shared/in-memory-seed.repository.d.ts +18 -0
  152. package/dist/shared/media.repository.d1.d.ts +35 -0
  153. package/dist/shared/qstash-notification-service.d.ts +18 -0
  154. package/dist/shared/query-utils.d.ts +36 -0
  155. package/dist/shared/request-utils.d.ts +13 -0
  156. package/dist/shared/schema-mutator.d1.d.ts +12 -0
  157. package/dist/shared/seed-layout.repository.d1.d.ts +9 -0
  158. package/dist/shared/seed-registry-cache.d.ts +12 -0
  159. package/dist/shared/seed.repository.d1.d.ts +13 -0
  160. package/dist/shared/sequential-id-generator.d.ts +13 -0
  161. package/dist/shared/site-settings.repository.d1.d.ts +7 -0
  162. package/dist/shared/storage/factory.d.ts +8 -0
  163. package/dist/shared/storage/s3-bucket.d.ts +43 -0
  164. package/dist/shared/storage-utils.d.ts +7 -0
  165. package/dist/shared/system-stats.repository.d1.d.ts +25 -0
  166. package/dist/types.d.ts +85 -0
  167. package/dist/upload.d.ts +16 -0
  168. package/dist/widget.d.ts +7 -0
  169. package/package.json +27 -18
  170. package/assets/dashboard/assets/chart-BrJFdsGZ.js +0 -39
  171. package/assets/dashboard/assets/index-CIaoMxuB.css +0 -1
  172. package/assets/dashboard/assets/index-wTKgygsg.js +0 -636
  173. package/assets/dashboard/assets/pie-chart-recharts-BEaE1FOE.js +0 -1
  174. package/assets/dashboard/assets/timeseries-chart-recharts-DmWM6imF.js +0 -1
  175. package/src/auth/__fixtures__/in-memory-hash-provider.ts +0 -17
  176. package/src/auth/__fixtures__/static-token-service.ts +0 -22
  177. package/src/auth/bcrypt-hash-provider.ts +0 -24
  178. package/src/auth/constants.ts +0 -14
  179. package/src/auth/generate-refresh-token.test.ts +0 -23
  180. package/src/auth/hash-provider.test.ts +0 -55
  181. package/src/auth/jose-token-service.ts +0 -62
  182. package/src/auth/jwt-claims-passthrough.test.ts +0 -87
  183. package/src/auth/login.test.ts +0 -100
  184. package/src/auth/login.ts +0 -78
  185. package/src/auth/refresh.ts +0 -11
  186. package/src/auth/token-service.test.ts +0 -90
  187. package/src/factory.ts +0 -370
  188. package/src/features/automations/__tests__/action-executors.test.ts +0 -255
  189. package/src/features/automations/__tests__/automation-runner.test.ts +0 -196
  190. package/src/features/automations/__tests__/automation-runner.utils.test.ts +0 -60
  191. package/src/features/automations/__tests__/automations.handler.test.ts +0 -264
  192. package/src/features/automations/__tests__/automations.repository.test.ts +0 -163
  193. package/src/features/automations/__tests__/automations.schema.test.ts +0 -224
  194. package/src/features/automations/__tests__/context-resolver.test.ts +0 -126
  195. package/src/features/automations/__tests__/cron-runner.test.ts +0 -267
  196. package/src/features/automations/__tests__/cron-runner.utils.test.ts +0 -144
  197. package/src/features/automations/__tests__/set-variable.executor.test.ts +0 -383
  198. package/src/features/automations/__tests__/template-grammar.test.ts +0 -308
  199. package/src/features/automations/__tests__/webhook.executor.test.ts +0 -142
  200. package/src/features/automations/__tests__/when-evaluator.test.ts +0 -274
  201. package/src/features/automations/__tests__/when-pushdown.test.ts +0 -281
  202. package/src/features/automations/action-executors/create-entry.executor.ts +0 -27
  203. package/src/features/automations/action-executors/edit-field.executor.ts +0 -26
  204. package/src/features/automations/action-executors/index.ts +0 -37
  205. package/src/features/automations/action-executors/send-mail.executor.ts +0 -53
  206. package/src/features/automations/action-executors/set-variable.executor.ts +0 -159
  207. package/src/features/automations/action-executors/webhook.executor.ts +0 -67
  208. package/src/features/automations/automation-runner.ts +0 -85
  209. package/src/features/automations/automation-runner.utils.ts +0 -47
  210. package/src/features/automations/automations.handler.ts +0 -197
  211. package/src/features/automations/automations.schema.ts +0 -177
  212. package/src/features/automations/context-resolver.ts +0 -152
  213. package/src/features/automations/cron-runner.ts +0 -140
  214. package/src/features/automations/cron-runner.utils.ts +0 -44
  215. package/src/features/automations/filter-translation.ts +0 -46
  216. package/src/features/automations/index.ts +0 -16
  217. package/src/features/automations/template-grammar.ts +0 -245
  218. package/src/features/automations/var-access-resolver.ts +0 -140
  219. package/src/features/automations/when-evaluator.ts +0 -87
  220. package/src/features/automations/when-pushdown.ts +0 -57
  221. package/src/features/backrefs/__tests__/backrefs.handler.test.ts +0 -359
  222. package/src/features/backrefs/backrefs.handler.ts +0 -168
  223. package/src/features/backrefs/d1-backref.repository.ts +0 -84
  224. package/src/features/backrefs/index.ts +0 -5
  225. package/src/features/content/constants.ts +0 -16
  226. package/src/features/content/handlers/bulk.handler.ts +0 -185
  227. package/src/features/content/handlers/create.ts +0 -129
  228. package/src/features/content/handlers/delete.ts +0 -62
  229. package/src/features/content/handlers/facets.ts +0 -49
  230. package/src/features/content/handlers/get.ts +0 -120
  231. package/src/features/content/handlers/helpers.test.ts +0 -180
  232. package/src/features/content/handlers/helpers.ts +0 -93
  233. package/src/features/content/handlers/list.ts +0 -174
  234. package/src/features/content/handlers/update.ts +0 -174
  235. package/src/features/content/index.ts +0 -26
  236. package/src/features/dashboard-layout/__tests__/dashboard-layout.handler.test.ts +0 -388
  237. package/src/features/dashboard-layout/dashboard-layout.handler.ts +0 -206
  238. package/src/features/dashboard-layout/index.ts +0 -5
  239. package/src/features/draft/draft.handler.ts +0 -195
  240. package/src/features/draft/draft.middleware.ts +0 -66
  241. package/src/features/draft/index.ts +0 -5
  242. package/src/features/email/email.service.ts +0 -98
  243. package/src/features/email/email.types.ts +0 -119
  244. package/src/features/email/providers/resend.ts +0 -67
  245. package/src/features/email/providers/smtp.ts +0 -55
  246. package/src/features/email/templates/automation-mail.ts +0 -19
  247. package/src/features/email/templates/password-changed.ts +0 -63
  248. package/src/features/email/templates/password-reset.ts +0 -68
  249. package/src/features/email/templates/shell.ts +0 -96
  250. package/src/features/notifications/index.ts +0 -5
  251. package/src/features/notifications/notifications.handler.ts +0 -105
  252. package/src/features/password-reset/index.ts +0 -19
  253. package/src/features/password-reset/request.ts +0 -92
  254. package/src/features/password-reset/reset.ts +0 -102
  255. package/src/features/rotate-field/index.ts +0 -5
  256. package/src/features/rotate-field/rotate-field.handler.ts +0 -132
  257. package/src/features/rotate-field/rotate-field.schema.ts +0 -17
  258. package/src/features/schema/schema.handler.ts +0 -131
  259. package/src/features/seeds/index.ts +0 -5
  260. package/src/features/seeds/seeds.handler.test.ts +0 -1199
  261. package/src/features/seeds/seeds.handler.ts +0 -558
  262. package/src/features/settings/__tests__/settings.handler.test.ts +0 -555
  263. package/src/features/settings/settings.handler.ts +0 -392
  264. package/src/features/setup/index.ts +0 -288
  265. package/src/features/stats/index.ts +0 -5
  266. package/src/features/stats/stats.handler.ts +0 -420
  267. package/src/features/webhooks/index.ts +0 -63
  268. package/src/index.ts +0 -65
  269. package/src/media-utils.ts +0 -82
  270. package/src/middleware/auth-providers.middleware.test.ts +0 -85
  271. package/src/middleware/auth-providers.middleware.ts +0 -45
  272. package/src/middleware/observability.middleware.test.ts +0 -93
  273. package/src/middleware/observability.middleware.ts +0 -70
  274. package/src/middleware/rate-limit.middleware.ts +0 -45
  275. package/src/middleware/repository.middleware.ts +0 -117
  276. package/src/middleware/seed-registry.middleware.test.ts +0 -97
  277. package/src/middleware/seed-registry.middleware.ts +0 -21
  278. package/src/middleware/storage.middleware.ts +0 -25
  279. package/src/middleware.ts +0 -45
  280. package/src/public/access-policy.ts +0 -27
  281. package/src/public/api-key-middleware.ts +0 -57
  282. package/src/public/cache-utils.ts +0 -38
  283. package/src/public/entry-projection.ts +0 -46
  284. package/src/public/idempotency.ts +0 -23
  285. package/src/public/index.ts +0 -16
  286. package/src/public/problem-details.ts +0 -124
  287. package/src/public/public-add.ts +0 -114
  288. package/src/public/public-edit.ts +0 -163
  289. package/src/public/public-errors.ts +0 -19
  290. package/src/public/public-read.ts +0 -63
  291. package/src/public/public-routes.ts +0 -88
  292. package/src/public/query-builder.test.ts +0 -224
  293. package/src/public/query-builder.ts +0 -156
  294. package/src/public/rate-limit-middleware.ts +0 -34
  295. package/src/public/read-list.ts +0 -54
  296. package/src/public/read-single.ts +0 -48
  297. package/src/public/response-builder.ts +0 -30
  298. package/src/public/sanitize.ts +0 -69
  299. package/src/rate-limit/cloudflare-rate-limiter.test.ts +0 -30
  300. package/src/rate-limit/cloudflare-rate-limiter.ts +0 -15
  301. package/src/rate-limit/in-memory-rate-limiter.test.ts +0 -37
  302. package/src/rate-limit/in-memory-rate-limiter.ts +0 -17
  303. package/src/rate-limit/no-op-rate-limiter.test.ts +0 -22
  304. package/src/rate-limit/no-op-rate-limiter.ts +0 -11
  305. package/src/search-utils.test.ts +0 -211
  306. package/src/search-utils.ts +0 -213
  307. package/src/search.ts +0 -65
  308. package/src/shared/apply-policies.test.ts +0 -81
  309. package/src/shared/apply-policies.ts +0 -67
  310. package/src/shared/automations.repository.d1.ts +0 -150
  311. package/src/shared/background-notification-service.test.ts +0 -62
  312. package/src/shared/background-notification-service.ts +0 -52
  313. package/src/shared/base.repository.d1.ts +0 -32
  314. package/src/shared/content-utils.test.ts +0 -165
  315. package/src/shared/content-utils.ts +0 -86
  316. package/src/shared/content.repository.d1.test.ts +0 -507
  317. package/src/shared/content.repository.d1.ts +0 -851
  318. package/src/shared/d1-activity-log.repository.test.ts +0 -140
  319. package/src/shared/d1-activity-log.repository.ts +0 -105
  320. package/src/shared/d1-activity-logger.test.ts +0 -86
  321. package/src/shared/d1-activity-logger.ts +0 -67
  322. package/src/shared/d1-analytics.repository.test.ts +0 -78
  323. package/src/shared/d1-analytics.repository.ts +0 -85
  324. package/src/shared/d1-content-scan.repository.test.ts +0 -80
  325. package/src/shared/d1-content-scan.repository.ts +0 -37
  326. package/src/shared/d1-notification.repository.test.ts +0 -128
  327. package/src/shared/d1-notification.repository.ts +0 -118
  328. package/src/shared/d1-password-reset-token.repository.test.ts +0 -81
  329. package/src/shared/d1-password-reset-token.repository.ts +0 -56
  330. package/src/shared/d1-search.repository.test.ts +0 -87
  331. package/src/shared/d1-search.repository.ts +0 -88
  332. package/src/shared/d1-session.repository.test.ts +0 -125
  333. package/src/shared/d1-session.repository.ts +0 -102
  334. package/src/shared/d1-setup-checklist.repository.ts +0 -36
  335. package/src/shared/d1-user.repository.test.ts +0 -151
  336. package/src/shared/d1-user.repository.ts +0 -119
  337. package/src/shared/d1-widget.repository.test.ts +0 -267
  338. package/src/shared/d1-widget.repository.ts +0 -385
  339. package/src/shared/dashboard-layout.repository.d1.test.ts +0 -135
  340. package/src/shared/dashboard-layout.repository.d1.ts +0 -58
  341. package/src/shared/demo-data-sql.ts +0 -216
  342. package/src/shared/demo-data.repository.d1.ts +0 -20
  343. package/src/shared/execution-context-scheduler.ts +0 -13
  344. package/src/shared/fixed-clock.ts +0 -25
  345. package/src/shared/fts-sync.ts +0 -8
  346. package/src/shared/idempotency.repository.d1.test.ts +0 -83
  347. package/src/shared/idempotency.repository.d1.ts +0 -60
  348. package/src/shared/in-memory-activity-logger.ts +0 -19
  349. package/src/shared/in-memory-notification-service.ts +0 -19
  350. package/src/shared/in-memory-seed.repository.ts +0 -58
  351. package/src/shared/media.repository.d1.test.ts +0 -107
  352. package/src/shared/media.repository.d1.ts +0 -68
  353. package/src/shared/qstash-notification-service.test.ts +0 -67
  354. package/src/shared/qstash-notification-service.ts +0 -55
  355. package/src/shared/query-utils.ts +0 -141
  356. package/src/shared/request-utils.ts +0 -26
  357. package/src/shared/schema-mutator.d1.test.ts +0 -142
  358. package/src/shared/schema-mutator.d1.ts +0 -64
  359. package/src/shared/seed-layout.repository.d1.test.ts +0 -114
  360. package/src/shared/seed-layout.repository.d1.ts +0 -62
  361. package/src/shared/seed-registry-cache.test.ts +0 -68
  362. package/src/shared/seed-registry-cache.ts +0 -49
  363. package/src/shared/seed.repository.d1.test.ts +0 -143
  364. package/src/shared/seed.repository.d1.ts +0 -98
  365. package/src/shared/sequential-id-generator.ts +0 -33
  366. package/src/shared/site-settings.repository.d1.ts +0 -53
  367. package/src/shared/storage/factory.ts +0 -41
  368. package/src/shared/storage/s3-bucket.ts +0 -195
  369. package/src/shared/storage-utils.ts +0 -40
  370. package/src/shared/system-stats.repository.d1.test.ts +0 -58
  371. package/src/shared/system-stats.repository.d1.ts +0 -48
  372. package/src/types.ts +0 -90
  373. package/src/upload.ts +0 -198
  374. package/src/widget.test.ts +0 -85
  375. package/src/widget.ts +0 -251
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Media utils: estrazione chiavi R2 dal data di un'entry.
3
+ * Usato alla cancellazione entry per eliminare i file associati da R2.
4
+ *
5
+ * @see docs/media-engine.md
6
+ */
7
+ import type { Seed } from '@beechcms/core';
8
+ /**
9
+ * Estrae la chiave R2 da un URL di media.
10
+ * Es: "https://x.com/api/media/1739123456-avatar.png" → "1739123456-avatar.png"
11
+ *
12
+ * @param mediaUrl - URL completo o path (es. /api/media/123-foto.png)
13
+ * @returns Chiave R2 o null se l'URL non è valido
14
+ */
15
+ export declare function extractMediaKey(mediaUrl: string): string | null;
16
+ /**
17
+ * Estrae tutte le chiavi R2 dal data di un'entry.
18
+ * Cerca nei campi `file` (stringa URL) e `json` (array/oggetto con URL).
19
+ * Il data è in formato DB: chiavi = branch.id (es. art_03, prd_05).
20
+ *
21
+ * @param seed - Schema del tipo di contenuto
22
+ * @param entryData - Payload in formato DB (chiavi = branch ID)
23
+ * @returns Array di chiavi R2 uniche da eliminare
24
+ */
25
+ export declare function extractMediaKeysFromData(seed: Seed, entryData: Record<string, unknown>): string[];
@@ -0,0 +1,8 @@
1
+ import type { IHashProvider, ITokenService, IClock } from '@beechcms/core';
2
+ import type { AppEnv } from '../types';
3
+ export interface AuthProviderOverrides {
4
+ hashProvider?: IHashProvider;
5
+ tokenService?: ITokenService;
6
+ clock?: IClock;
7
+ }
8
+ export declare const authProvidersMiddleware: (overrides?: AuthProviderOverrides) => import("hono").MiddlewareHandler<AppEnv, string, {}, Response>;
@@ -0,0 +1,20 @@
1
+ import type { IActivityLogger, INotificationService, IClock, IIdGenerator } from '@beechcms/core';
2
+ import type { AppEnv } from '../types';
3
+ export interface ObservabilityOverrides {
4
+ activityLogger?: IActivityLogger;
5
+ notificationService?: INotificationService;
6
+ clock?: IClock;
7
+ idGenerator?: IIdGenerator;
8
+ }
9
+ /**
10
+ * Observability middleware.
11
+ *
12
+ * Injects the activity logger and the notification service into the Hono
13
+ * context. Both depend on `executionCtx.waitUntil` to fire-and-forget their
14
+ * persistence work in production. The notification service additionally
15
+ * depends on the notification repository — `repositoryMiddleware` MUST run
16
+ * before this middleware in the factory pipeline.
17
+ *
18
+ * Tests can pass their own implementations via `overrides` to bypass D1.
19
+ */
20
+ export declare const observabilityMiddleware: (overrides?: ObservabilityOverrides) => import("hono").MiddlewareHandler<AppEnv, string, {}, Response>;
@@ -0,0 +1,9 @@
1
+ import type { IRateLimiter } from '@beechcms/core';
2
+ import type { AppEnv } from '../types';
3
+ export type RateLimiterName = 'login' | 'tokenRefresh' | 'forgotPassword' | 'resetPassword' | 'publicApiRead' | 'publicApiWrite';
4
+ export interface IRateLimiterRegistry {
5
+ getLimiter(name: RateLimiterName): IRateLimiter;
6
+ }
7
+ export declare const rateLimiterMiddleware: (overrides?: {
8
+ registry?: IRateLimiterRegistry;
9
+ }) => import("hono").MiddlewareHandler<AppEnv, string, {}, Response>;
@@ -0,0 +1,34 @@
1
+ import type { ContentRepository, IdempotencyRepository, MediaRepository, SystemStatsRepository, IUserRepository, ISessionRepository, IPasswordResetTokenRepository, IActivityLogRepository, INotificationRepository, IWidgetRepository, ISearchRepository, IAnalyticsRepository, IContentScanRepository, IClock, IIdGenerator, IAutomationRunner, IAutomationRepository, IScheduler, ISiteSettingsRepository, IDemoDataRepository, ISeedLayoutRepository, ISeedRepository, ISchemaMutator, IDashboardLayoutRepository, BeechHooks } from '@beechcms/core';
2
+ import type { Env, Variables } from '../types';
3
+ interface RepositoryOverrides {
4
+ repository?: ContentRepository;
5
+ idempotencyRepository?: IdempotencyRepository;
6
+ mediaRepository?: MediaRepository;
7
+ systemStatsRepository?: SystemStatsRepository;
8
+ userRepository?: IUserRepository;
9
+ sessionRepository?: ISessionRepository;
10
+ passwordResetTokenRepository?: IPasswordResetTokenRepository;
11
+ activityLogRepository?: IActivityLogRepository;
12
+ notificationRepository?: INotificationRepository;
13
+ widgetRepository?: IWidgetRepository;
14
+ searchRepository?: ISearchRepository;
15
+ analyticsRepository?: IAnalyticsRepository;
16
+ contentScanRepository?: IContentScanRepository;
17
+ clock?: IClock;
18
+ idGenerator?: IIdGenerator;
19
+ automationRepository?: IAutomationRepository;
20
+ automationRunner?: IAutomationRunner;
21
+ scheduler?: IScheduler;
22
+ siteSettingsRepository?: ISiteSettingsRepository;
23
+ demoDataRepository?: IDemoDataRepository;
24
+ seedLayoutRepository?: ISeedLayoutRepository;
25
+ seedRepository?: ISeedRepository;
26
+ schemaMutator?: ISchemaMutator;
27
+ dashboardLayoutRepository?: IDashboardLayoutRepository;
28
+ hooks?: BeechHooks;
29
+ }
30
+ export declare const repositoryMiddleware: (overrides?: RepositoryOverrides) => import("hono").MiddlewareHandler<{
31
+ Bindings: Env;
32
+ Variables: Variables;
33
+ }, string, {}, Response>;
34
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { Env, Variables } from '../types';
2
+ /**
3
+ * Hydrates the seed registry from D1 and injects seedRegistry, getSeed, and backrefMap
4
+ * into the context. Must run AFTER repositoryMiddleware (needs seedRepository) and
5
+ * BEFORE any handler that reads the registry.
6
+ */
7
+ export declare const seedRegistryMiddleware: () => import("hono").MiddlewareHandler<{
8
+ Bindings: Env;
9
+ Variables: Variables;
10
+ }, string, {}, Response>;
@@ -0,0 +1,7 @@
1
+ import { BeechBucket } from '@beechcms/core';
2
+ import { AppEnv } from '../types';
3
+ interface StorageOverrides {
4
+ bucket?: BeechBucket;
5
+ }
6
+ export declare const storageMiddleware: (overrides?: StorageOverrides) => import("hono").MiddlewareHandler<AppEnv, string, {}, Response>;
7
+ export {};
@@ -0,0 +1,11 @@
1
+ import type { Context, Next } from 'hono';
2
+ import type { Env, Variables } from './types';
3
+ /**
4
+ * JWT authentication middleware. Reads the Bearer token from the Authorization
5
+ * header and delegates verification to the ITokenService injected in context.
6
+ * Returns 401 on any missing or invalid token; never exposes failure details.
7
+ */
8
+ export declare function authMiddleware(): (c: Context<{
9
+ Bindings: Env;
10
+ Variables: Variables;
11
+ }>, next: Next) => Promise<Response | void>;
@@ -0,0 +1,12 @@
1
+ import type { Seed } from '@beechcms/core';
2
+ export type PublicOperation = 'read' | 'add' | 'edit';
3
+ export declare function checkPublicOperation(seed: Seed, operation: PublicOperation): {
4
+ readonly ok: true;
5
+ readonly error?: undefined;
6
+ } | {
7
+ readonly ok: false;
8
+ readonly error: {
9
+ readonly error: "Forbidden";
10
+ readonly message: `Public ${string} is not allowed for content type '${string}'.`;
11
+ };
12
+ };
@@ -0,0 +1,6 @@
1
+ import type { Context, Next } from 'hono';
2
+ /**
3
+ * API key auth middleware for Public API routes.
4
+ * Uses X-API-Key header only.
5
+ */
6
+ export declare function apiKeyMiddleware(): (c: Context, next: Next) => Promise<Response | void>;
@@ -0,0 +1,10 @@
1
+ import type { Context } from 'hono';
2
+ type EdgeCache = {
3
+ cache: Cache;
4
+ executionCtx: {
5
+ waitUntil: (p: Promise<unknown>) => void;
6
+ };
7
+ } | null;
8
+ export declare function resolveEdgeCache(c: Context): EdgeCache;
9
+ export declare function withCachedResponse(edgeCache: EdgeCache, cacheKey: Request, response: Response): Response;
10
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { Seed } from '@beechcms/core';
2
+ export declare function toFlatPublicEntry(data: Record<string, unknown>, seed: Seed, fieldsParam?: string): Record<string, unknown>;
@@ -0,0 +1,9 @@
1
+ export declare function parseIdempotencyKey(rawValue: string | undefined): string | null;
2
+ type FingerprintInput = {
3
+ seedSlug: string;
4
+ statusValue: unknown;
5
+ slug: string | null;
6
+ data: Record<string, unknown>;
7
+ };
8
+ export declare function buildRequestFingerprint(input: FingerprintInput): Promise<string>;
9
+ export {};
@@ -0,0 +1,11 @@
1
+ export { apiKeyMiddleware } from './api-key-middleware';
2
+ export { publicRateLimitMiddleware } from './rate-limit-middleware';
3
+ export { publicRoutes } from './public-routes';
4
+ export { PUBLIC_ERRORS } from './public-errors';
5
+ export { sanitizePublicPayload } from './sanitize';
6
+ export { generateEntrySlug, slugify } from './slug-utils';
7
+ export { buildPublicListMeta, buildPublicSingleMeta } from './response-builder';
8
+ export { parseLatestCount, parsePublicPagination } from './query-builder';
9
+ export { publicReadHandler } from './public-read';
10
+ export { publicAddHandler } from './public-add';
11
+ export { publicEditHandler } from './public-edit';
@@ -0,0 +1,31 @@
1
+ import type { Context } from 'hono';
2
+ /**
3
+ * Returns a Problem+JSON response when the error is a SQLite FK violation,
4
+ * or null when the error is unrelated (let the caller handle it).
5
+ *
6
+ * @param c Hono context
7
+ * @param error The caught error
8
+ * @param method HTTP method of the current request (e.g. 'DELETE', 'POST')
9
+ */
10
+ export declare function fkProblemOrNull(c: Context, error: unknown, method: string): Response | null;
11
+ export interface PublicProblemDetailItem {
12
+ field: string;
13
+ expected: string;
14
+ received: string;
15
+ message: string;
16
+ }
17
+ type PublicProblemInput = {
18
+ type: string;
19
+ title: string;
20
+ status: 400 | 401 | 403 | 404 | 405 | 409 | 422 | 429 | 500 | 501;
21
+ detail: string;
22
+ errors?: PublicProblemDetailItem[];
23
+ };
24
+ export declare function internalErrorDetail(env: {
25
+ ENV?: string;
26
+ }, error: unknown): string;
27
+ /**
28
+ * Restituisce errori API in formato Problem Details (RFC 9457).
29
+ */
30
+ export declare function publicProblem(c: Context, input: PublicProblemInput): Response;
31
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { Context } from 'hono';
2
+ import { AppEnv } from '../types';
3
+ export declare function publicAddHandler(context: Context<AppEnv>): Promise<Response>;
@@ -0,0 +1,5 @@
1
+ import type { Context } from 'hono';
2
+ import { AppEnv } from '../types';
3
+ type PublicCtx = Context<AppEnv>;
4
+ export declare function publicEditHandler(context: PublicCtx): Promise<Response>;
5
+ export {};
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Error constants for Public API responses.
3
+ */
4
+ export declare const PUBLIC_ERRORS: {
5
+ readonly API_KEY_UNAUTHORIZED: {
6
+ readonly error: "Unauthorized";
7
+ readonly message: "Missing or invalid API key. Provide a valid key via X-API-Key header.";
8
+ };
9
+ readonly API_KEY_FORBIDDEN: {
10
+ readonly error: "Forbidden";
11
+ readonly message: "Public API access is not configured for this instance.";
12
+ };
13
+ };
@@ -0,0 +1,3 @@
1
+ import type { Context } from 'hono';
2
+ import { AppEnv } from '../types';
3
+ export declare function publicReadHandler(context: Context<AppEnv>): Promise<Response>;
@@ -0,0 +1,3 @@
1
+ import { Hono } from 'hono';
2
+ import type { AppEnv } from '../types';
3
+ export declare const publicRoutes: Hono<AppEnv, import("hono/types").BlankSchema, "/">;
@@ -0,0 +1,28 @@
1
+ import type { Seed, FilterGroup } from '@beechcms/core';
2
+ export type PublicQueryInput = {
3
+ page?: string;
4
+ limit?: string;
5
+ latest?: string;
6
+ };
7
+ export type PublicFilterLogic = 'AND' | 'OR';
8
+ export type PublicFilterOperator = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'is_empty' | 'is_not_empty' | 'in' | 'not_in' | 'has_tag' | 'has_any_tag' | 'has_all_tags';
9
+ export type PublicFilterCondition = {
10
+ field: string;
11
+ op: PublicFilterOperator;
12
+ value?: unknown;
13
+ };
14
+ export type ParsedPublicFilter = {
15
+ where: PublicFilterCondition[];
16
+ logic: PublicFilterLogic;
17
+ };
18
+ export declare function parsePublicFilter(raw: string | undefined): ParsedPublicFilter | null;
19
+ /**
20
+ * Trasforma il filtro pubblico in FilterGroup[] per il Repository.
21
+ * Zero SQL: la logica di generazione query risiede esclusivamente nel Repository/Engine core.
22
+ */
23
+ export declare function toEngineFilters(seed: Seed, parsedFilter: ParsedPublicFilter | null): FilterGroup[];
24
+ export declare function parsePublicPagination(input: PublicQueryInput): {
25
+ page: number;
26
+ limit: number;
27
+ };
28
+ export declare function parseLatestCount(latest: string | undefined): number;
@@ -0,0 +1,3 @@
1
+ import type { Context, Next } from 'hono';
2
+ import type { AppEnv } from '../types';
3
+ export declare function publicRateLimitMiddleware(): (c: Context<AppEnv>, next: Next) => Promise<Response | void>;
@@ -0,0 +1,26 @@
1
+ import type { Seed, ContentRepository } from '@beechcms/core';
2
+ type ReadListInput = {
3
+ seed: Seed;
4
+ seedSlug: string;
5
+ repository: ContentRepository;
6
+ query: Record<string, string | undefined>;
7
+ publishedOnly: boolean;
8
+ };
9
+ export declare function readListEntries(input: ReadListInput): Promise<{
10
+ data: Record<string, unknown>[];
11
+ meta: {
12
+ total: number;
13
+ returned: number;
14
+ seed: string;
15
+ };
16
+ } | {
17
+ data: Record<string, unknown>[];
18
+ meta: {
19
+ total: number;
20
+ page: number;
21
+ limit: number;
22
+ returned: number;
23
+ seed: string;
24
+ };
25
+ }>;
26
+ export {};
@@ -0,0 +1,22 @@
1
+ import type { Seed, ContentRepository } from '@beechcms/core';
2
+ type ReadSingleInput = {
3
+ seed: Seed;
4
+ seedSlug: string;
5
+ repository: ContentRepository;
6
+ id: string | null;
7
+ slug: string | null;
8
+ publishedOnly: boolean;
9
+ fieldsParam?: string;
10
+ };
11
+ export type ReadSingleResult = {
12
+ ok: true;
13
+ data: Record<string, unknown>;
14
+ meta: {
15
+ seed: string;
16
+ };
17
+ } | {
18
+ ok: false;
19
+ detail: string;
20
+ };
21
+ export declare function readSingleEntry(input: ReadSingleInput): Promise<ReadSingleResult>;
22
+ export {};
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Helper meta per risposta lista Public API.
3
+ */
4
+ export declare function buildPublicListMeta(input: {
5
+ total: number;
6
+ page: number;
7
+ limit: number;
8
+ returned: number;
9
+ seed: string;
10
+ }): {
11
+ total: number;
12
+ page: number;
13
+ limit: number;
14
+ returned: number;
15
+ seed: string;
16
+ };
17
+ /**
18
+ * Helper meta per risposta singolo elemento Public API.
19
+ */
20
+ export declare function buildPublicSingleMeta(seed: string): {
21
+ seed: string;
22
+ };
@@ -0,0 +1,23 @@
1
+ import type { Seed, ValidationDetail } from '@beechcms/core';
2
+ type PublicSanitizeSuccess = {
3
+ ok: true;
4
+ data: Record<string, unknown>;
5
+ };
6
+ type PublicSanitizeFailure = {
7
+ ok: false;
8
+ status: 400 | 422;
9
+ code: 'validation_failed' | 'dangerous_content';
10
+ message: string;
11
+ details?: ValidationDetail[];
12
+ };
13
+ export type PublicSanitizeResult = PublicSanitizeSuccess | PublicSanitizeFailure;
14
+ /**
15
+ * Public API Adapter: uses the core foundation and maps errors into the sprint format.
16
+ */
17
+ export declare function sanitizePublicPayload(seed: Seed, payload: Record<string, unknown>, options?: {
18
+ allowNull?: boolean;
19
+ operation?: 'create' | 'update';
20
+ requireAtLeastOneValidField?: boolean;
21
+ enforceRequiredFields?: boolean;
22
+ }): PublicSanitizeResult;
23
+ export {};
@@ -1,18 +1,11 @@
1
- // SPDX-License-Identifier: BUSL-1.1
2
- // Copyright (c) 2024–2026 Flavio De Musso. All rights reserved.
3
- // See LICENSE in the repository root for license terms.
4
-
5
- import { slugify, generateEntrySlug } from '@beechcms/core'
6
-
1
+ import { slugify, generateEntrySlug } from '@beechcms/core';
7
2
  /**
8
3
  * Converts a string into a URL-safe slug.
9
4
  * Logic moved to @beechcms/core for consistency between Dashboard and API.
10
5
  */
11
- export { slugify }
12
-
6
+ export { slugify };
13
7
  /**
14
8
  * Generates a slug from a title/name or a UUID-like fallback.
15
9
  * Logic moved to @beechcms/core for consistency between Dashboard and API.
16
10
  */
17
- export { generateEntrySlug }
18
-
11
+ export { generateEntrySlug };
@@ -0,0 +1,6 @@
1
+ import type { IRateLimiter, RateLimitResult } from '@beechcms/core';
2
+ export declare class CloudflareRateLimiter implements IRateLimiter {
3
+ private readonly binding;
4
+ constructor(binding: RateLimit);
5
+ checkLimit(key: string): Promise<RateLimitResult>;
6
+ }
@@ -0,0 +1,7 @@
1
+ import type { IRateLimiter, RateLimitResult } from '@beechcms/core';
2
+ export declare class InMemoryRateLimiter implements IRateLimiter {
3
+ private readonly maxAllowedHits;
4
+ private readonly hitCounts;
5
+ constructor(maxAllowedHits: number);
6
+ checkLimit(key: string): Promise<RateLimitResult>;
7
+ }
@@ -0,0 +1,4 @@
1
+ import type { IRateLimiter, RateLimitResult } from '@beechcms/core';
2
+ export declare class NoOpRateLimiter implements IRateLimiter {
3
+ checkLimit(_key: string): Promise<RateLimitResult>;
4
+ }
@@ -0,0 +1,54 @@
1
+ import type { Seed, SearchResultRow } from "@beechcms/core";
2
+ export interface FtsRow {
3
+ entry_id: string;
4
+ schema_slug: string;
5
+ slug: string | null;
6
+ status: string;
7
+ title: string | null;
8
+ excerpt: string;
9
+ rank: number;
10
+ }
11
+ export interface SearchResultItem {
12
+ id: string;
13
+ schema_slug: string;
14
+ slug: string | null;
15
+ status: string;
16
+ title: string;
17
+ excerpt: string;
18
+ data: Record<string, unknown>;
19
+ }
20
+ export interface SearchResponse {
21
+ items: SearchResultItem[];
22
+ nextCursor: string | null;
23
+ total: number;
24
+ }
25
+ export interface SearchQueryParams {
26
+ q: string;
27
+ schemaSlug: string | null;
28
+ status: string | null;
29
+ limit: number;
30
+ cursor: string | null;
31
+ }
32
+ export declare function encodeCursor(rank: number, entryId: string): string;
33
+ export declare function decodeCursor(cursor: string): {
34
+ rank: number;
35
+ entryId: string;
36
+ } | null;
37
+ /**
38
+ * Builds a UNION ALL query across all per-seed fts_{slug} tables (v0.4.0).
39
+ * Each SELECT joins fts_{slug} with content_{slug} to fetch title, slug, status.
40
+ * Seeds param: full registry — filtered internally by schemaSlug and FTS availability.
41
+ */
42
+ export declare function buildFtsQuery(params: SearchQueryParams, seeds: Seed[]): {
43
+ sql: string;
44
+ binds: unknown[];
45
+ countSql: string;
46
+ countBinds: unknown[];
47
+ };
48
+ export declare function mapFtsRow(row: FtsRow): SearchResultItem;
49
+ /**
50
+ * Maps a repository-shaped SearchResultRow (camelCase) to the wire-format
51
+ * SearchResultItem returned by the /api/search route. Keeps the HTML
52
+ * stripping behaviour previously inlined inside mapFtsRow.
53
+ */
54
+ export declare function mapSearchResultRow(row: SearchResultRow): SearchResultItem;
@@ -0,0 +1,6 @@
1
+ import { Hono } from "hono";
2
+ import type { Env, Variables } from "./types";
3
+ export declare const searchRouter: Hono<{
4
+ Bindings: Env;
5
+ Variables: Variables;
6
+ }, import("hono/types").BlankSchema, "/">;
@@ -0,0 +1,10 @@
1
+ import type { Seed } from '@beechcms/core';
2
+ declare class PrivacyPolicyError extends Error {
3
+ readonly status: 501;
4
+ constructor(message: string);
5
+ }
6
+ export { PrivacyPolicyError };
7
+ /** Applica la privacy policy ai campi del payload prima della scrittura su DB. */
8
+ export declare function applyPrivacy(data: Record<string, unknown>, seed: Seed): Promise<Record<string, unknown>>;
9
+ /** Applica la visibility policy ai campi del payload in uscita verso il client. */
10
+ export declare function applyVisibility(data: Record<string, unknown>, seed: Seed): Record<string, unknown>;
@@ -0,0 +1,12 @@
1
+ import type { IAutomationRepository, Automation, AutomationTriggerEvent, CreateAutomationInput, UpdateAutomationInput } from '@beechcms/core';
2
+ export declare class D1AutomationRepository implements IAutomationRepository {
3
+ private readonly db;
4
+ constructor(db: D1Database);
5
+ findActive(seedSlug: string, event: AutomationTriggerEvent): Promise<Automation[]>;
6
+ list(seedSlug: string): Promise<Automation[]>;
7
+ findById(id: string): Promise<Automation | null>;
8
+ create(input: CreateAutomationInput): Promise<string>;
9
+ update(id: string, input: UpdateAutomationInput): Promise<void>;
10
+ toggle(id: string, enabled: boolean): Promise<void>;
11
+ delete(id: string): Promise<void>;
12
+ }
@@ -0,0 +1,18 @@
1
+ import type { INotificationService, CreateNotificationInput, INotificationRepository } from '@beechcms/core';
2
+ type ScheduleBackgroundTask = (task: Promise<unknown>) => void;
3
+ /**
4
+ * Production implementation of {@link INotificationService}.
5
+ *
6
+ * Delegates persistence to the injected {@link INotificationRepository}.
7
+ * When `scheduleBackgroundTask` is provided (wired to
8
+ * `c.executionCtx.waitUntil`), the repository write runs after the response
9
+ * is flushed so the public-API request that triggered it is never delayed.
10
+ */
11
+ export declare class BackgroundNotificationService implements INotificationService {
12
+ private readonly notificationRepository;
13
+ private readonly scheduleBackgroundTask?;
14
+ constructor(notificationRepository: INotificationRepository, scheduleBackgroundTask?: ScheduleBackgroundTask | undefined);
15
+ notify(input: CreateNotificationInput): Promise<void> | void;
16
+ private runPersist;
17
+ }
18
+ export {};
@@ -0,0 +1,18 @@
1
+ import { RepositoryError } from '@beechcms/core';
2
+ /**
3
+ * Base class for D1-backed repositories.
4
+ * Handles the D1 instance and provides common database utilities and error mapping.
5
+ */
6
+ export declare abstract class BaseD1Repository {
7
+ protected readonly database: D1Database;
8
+ constructor(database: D1Database);
9
+ /**
10
+ * Utility method to extract a table name for a given seed.
11
+ */
12
+ protected getTableName(slug: string, isDraft?: boolean): string;
13
+ /**
14
+ * Helper to map generic D1 errors to Beech RepositoryErrors.
15
+ * This centralizes error handling for all D1 repositories.
16
+ */
17
+ protected mapError(error: any, context: string): RepositoryError;
18
+ }
@@ -0,0 +1,21 @@
1
+ import type { Seed } from '@beechcms/core';
2
+ import type { ContentEntry } from './query-utils';
3
+ /** Deserializza ogni branch colonna di un DB row in formato API alias. */
4
+ export declare function rowToApiData(seed: Seed, row: Record<string, unknown>): Record<string, unknown>;
5
+ /** Converte un row della tabella content_{slug} in ContentEntry per le risposte API. */
6
+ export declare function rowToEntry(seed: Seed, row: Record<string, unknown>, hasPendingDraft?: boolean): ContentEntry;
7
+ export interface InsertBindings {
8
+ cols: string[];
9
+ placeholders: string[];
10
+ bindings: (string | number | null)[];
11
+ }
12
+ /** Costruisce colonne, placeholders e bindings per INSERT INTO content_{slug}. */
13
+ export declare function buildInsertBindings(seed: Seed, payload: Record<string, unknown>): InsertBindings;
14
+ export interface UpdateBindings {
15
+ setClause: string;
16
+ bindings: (string | number | null)[];
17
+ }
18
+ /** Costruisce SET clause e bindings per UPDATE content_{slug}. */
19
+ export declare function buildUpdateBindings(seed: Seed, payload: Record<string, unknown>): UpdateBindings;
20
+ /** Controlla se esiste un draft pendente in content_{slug}_drafts. */
21
+ export declare function hasDraft(db: D1Database, seed: Seed, entryId: string): Promise<boolean>;