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

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 (388) hide show
  1. package/README.md +4 -4
  2. package/assets/dashboard/BeechLogo.svg +18 -18
  3. package/assets/dashboard/BeechLogoLIght.svg +48 -48
  4. package/assets/dashboard/assets/chart-BwlCt-IA.js +39 -0
  5. package/assets/dashboard/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  6. package/assets/dashboard/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  7. package/assets/dashboard/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  8. package/assets/dashboard/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  9. package/assets/dashboard/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  10. package/assets/dashboard/assets/index-BcVN-DNy.js +642 -0
  11. package/assets/dashboard/assets/index-Cf1yRCqG.css +1 -0
  12. package/assets/dashboard/assets/lora-cyrillic-ext-wght-normal-YcVxMP-u.woff2 +0 -0
  13. package/assets/dashboard/assets/lora-cyrillic-wght-normal-UWPuZLjM.woff2 +0 -0
  14. package/assets/dashboard/assets/lora-latin-ext-wght-normal-C2Wlntb9.woff2 +0 -0
  15. package/assets/dashboard/assets/lora-latin-wght-normal-BiLcIKcI.woff2 +0 -0
  16. package/assets/dashboard/assets/lora-math-wght-normal-sOy7rEfW.woff2 +0 -0
  17. package/assets/dashboard/assets/lora-symbols-wght-normal-DQ5VrUkH.woff2 +0 -0
  18. package/assets/dashboard/assets/lora-vietnamese-wght-normal-CfJ7gtf3.woff2 +0 -0
  19. package/assets/dashboard/assets/pie-chart-recharts-BMWpjFzf.js +1 -0
  20. package/assets/dashboard/assets/timeseries-chart-recharts-8_GwAFR0.js +1 -0
  21. package/assets/dashboard/beechLogoDark.svg +48 -48
  22. package/assets/dashboard/index.html +18 -18
  23. package/assets/dashboard/noResult.svg +42 -42
  24. package/assets/dashboard/sol.svg +3 -3
  25. package/assets/dashboard/undraw_enter_nwx3.svg +36 -36
  26. package/dist/auth/__fixtures__/in-memory-hash-provider.d.ts +5 -0
  27. package/dist/auth/__fixtures__/static-token-service.d.ts +6 -0
  28. package/dist/auth/bcrypt-hash-provider.d.ts +8 -0
  29. package/dist/auth/constants.d.ts +10 -0
  30. package/dist/auth/jose-token-service.d.ts +14 -0
  31. package/dist/auth/login.d.ts +32 -0
  32. package/dist/auth/refresh.d.ts +1 -0
  33. package/dist/factory.d.ts +45 -0
  34. package/dist/features/automations/action-executors/create-entry.executor.d.ts +7 -0
  35. package/dist/features/automations/action-executors/edit-field.executor.d.ts +7 -0
  36. package/dist/features/automations/action-executors/index.d.ts +13 -0
  37. package/dist/features/automations/action-executors/send-mail.executor.d.ts +7 -0
  38. package/dist/features/automations/action-executors/set-variable.executor.d.ts +15 -0
  39. package/dist/features/automations/action-executors/webhook.executor.d.ts +7 -0
  40. package/dist/features/automations/automation-runner.d.ts +13 -0
  41. package/dist/features/automations/automation-runner.utils.d.ts +3 -0
  42. package/dist/features/automations/automations.handler.d.ts +7 -0
  43. package/dist/features/automations/automations.schema.d.ts +191 -0
  44. package/dist/features/automations/context-resolver.d.ts +8 -0
  45. package/dist/features/automations/cron-runner.d.ts +9 -0
  46. package/dist/features/automations/cron-runner.utils.d.ts +1 -0
  47. package/dist/features/automations/filter-translation.d.ts +9 -0
  48. package/dist/features/automations/index.d.ts +7 -0
  49. package/dist/features/automations/template-grammar.d.ts +73 -0
  50. package/dist/features/automations/var-access-resolver.d.ts +6 -0
  51. package/dist/features/automations/when-evaluator.d.ts +3 -0
  52. package/dist/features/automations/when-pushdown.d.ts +2 -0
  53. package/dist/features/backrefs/backrefs.handler.d.ts +3 -0
  54. package/dist/features/backrefs/d1-backref.repository.d.ts +17 -0
  55. package/dist/features/backrefs/index.d.ts +1 -0
  56. package/dist/features/content/constants.d.ts +12 -0
  57. package/dist/features/content/handlers/bulk.handler.d.ts +3 -0
  58. package/dist/features/content/handlers/create.d.ts +3 -0
  59. package/dist/features/content/handlers/delete.d.ts +3 -0
  60. package/dist/features/content/handlers/facets.d.ts +3 -0
  61. package/dist/features/content/handlers/get.d.ts +4 -0
  62. package/dist/features/content/handlers/helpers.d.ts +12 -0
  63. package/dist/features/content/handlers/list.d.ts +3 -0
  64. package/dist/features/content/handlers/update.d.ts +3 -0
  65. package/dist/features/content/index.d.ts +4 -0
  66. package/dist/features/dashboard-layout/dashboard-layout.handler.d.ts +7 -0
  67. package/dist/features/dashboard-layout/index.d.ts +1 -0
  68. package/dist/features/draft/draft.handler.d.ts +4 -0
  69. package/dist/features/draft/draft.middleware.d.ts +9 -0
  70. package/dist/features/draft/index.d.ts +1 -0
  71. package/{src/features/email/email.provider.ts → dist/features/email/email.provider.d.ts} +19 -24
  72. package/dist/features/email/email.service.d.ts +13 -0
  73. package/dist/features/email/email.types.d.ts +94 -0
  74. package/{src/features/email/index.ts → dist/features/email/index.d.ts} +3 -16
  75. package/dist/features/email/providers/resend.d.ts +36 -0
  76. package/dist/features/email/providers/smtp.d.ts +11 -0
  77. package/dist/features/email/templates/automation-mail.d.ts +8 -0
  78. package/dist/features/email/templates/password-changed.d.ts +15 -0
  79. package/dist/features/email/templates/password-reset.d.ts +18 -0
  80. package/dist/features/email/templates/shell.d.ts +58 -0
  81. package/dist/features/notifications/index.d.ts +1 -0
  82. package/dist/features/notifications/notifications.handler.d.ts +15 -0
  83. package/dist/features/password-reset/index.d.ts +6 -0
  84. package/dist/features/password-reset/request.d.ts +10 -0
  85. package/dist/features/password-reset/reset.d.ts +9 -0
  86. package/dist/features/rotate-field/index.d.ts +1 -0
  87. package/dist/features/rotate-field/rotate-field.handler.d.ts +7 -0
  88. package/dist/features/rotate-field/rotate-field.schema.d.ts +11 -0
  89. package/dist/features/schema/schema.handler.d.ts +7 -0
  90. package/dist/features/seeds/index.d.ts +1 -0
  91. package/dist/features/seeds/seeds.handler.d.ts +6 -0
  92. package/dist/features/settings/settings.handler.d.ts +7 -0
  93. package/dist/features/setup/index.d.ts +7 -0
  94. package/dist/features/stats/index.d.ts +1 -0
  95. package/dist/features/stats/stats.handler.d.ts +7 -0
  96. package/dist/features/webhooks/index.d.ts +3 -0
  97. package/dist/index.d.ts +7 -0
  98. package/dist/index.js +9732 -0
  99. package/dist/media-utils.d.ts +25 -0
  100. package/dist/middleware/auth-providers.middleware.d.ts +8 -0
  101. package/dist/middleware/observability.middleware.d.ts +20 -0
  102. package/dist/middleware/queue.middleware.d.ts +11 -0
  103. package/dist/middleware/rate-limit.middleware.d.ts +9 -0
  104. package/dist/middleware/repository.middleware.d.ts +34 -0
  105. package/dist/middleware/seed-registry.middleware.d.ts +10 -0
  106. package/dist/middleware/storage.middleware.d.ts +7 -0
  107. package/dist/middleware.d.ts +11 -0
  108. package/dist/public/access-policy.d.ts +12 -0
  109. package/dist/public/api-key-middleware.d.ts +6 -0
  110. package/dist/public/cache-utils.d.ts +10 -0
  111. package/dist/public/entry-projection.d.ts +2 -0
  112. package/dist/public/idempotency.d.ts +9 -0
  113. package/dist/public/index.d.ts +11 -0
  114. package/dist/public/problem-details.d.ts +31 -0
  115. package/dist/public/public-add.d.ts +3 -0
  116. package/dist/public/public-edit.d.ts +5 -0
  117. package/dist/public/public-errors.d.ts +13 -0
  118. package/dist/public/public-read.d.ts +3 -0
  119. package/dist/public/public-routes.d.ts +3 -0
  120. package/dist/public/query-builder.d.ts +28 -0
  121. package/dist/public/rate-limit-middleware.d.ts +3 -0
  122. package/dist/public/read-list.d.ts +26 -0
  123. package/dist/public/read-single.d.ts +22 -0
  124. package/dist/public/response-builder.d.ts +22 -0
  125. package/dist/public/sanitize.d.ts +23 -0
  126. package/{src/public/slug-utils.ts → dist/public/slug-utils.d.ts} +3 -10
  127. package/dist/rate-limit/cloudflare-rate-limiter.d.ts +6 -0
  128. package/dist/rate-limit/in-memory-rate-limiter.d.ts +7 -0
  129. package/dist/rate-limit/no-op-rate-limiter.d.ts +4 -0
  130. package/dist/search-utils.d.ts +54 -0
  131. package/dist/search.d.ts +6 -0
  132. package/dist/shared/apply-policies.d.ts +10 -0
  133. package/dist/shared/automations.repository.d1.d.ts +12 -0
  134. package/dist/shared/background-notification-service.d.ts +18 -0
  135. package/dist/shared/base.repository.d1.d.ts +18 -0
  136. package/dist/shared/cloudflare-queue-service.d.ts +11 -0
  137. package/dist/shared/content-utils.d.ts +21 -0
  138. package/dist/shared/content.repository.d1.d.ts +68 -0
  139. package/dist/shared/d1-activity-log.repository.d.ts +13 -0
  140. package/dist/shared/d1-activity-logger.d.ts +20 -0
  141. package/dist/shared/d1-analytics.repository.d.ts +20 -0
  142. package/dist/shared/d1-content-scan.repository.d.ts +7 -0
  143. package/dist/shared/d1-notification.repository.d.ts +17 -0
  144. package/dist/shared/d1-password-reset-token.repository.d.ts +10 -0
  145. package/dist/shared/d1-search.repository.d.ts +14 -0
  146. package/dist/shared/d1-session.repository.d.ts +12 -0
  147. package/dist/shared/d1-setup-checklist.repository.d.ts +12 -0
  148. package/dist/shared/d1-user.repository.d.ts +18 -0
  149. package/dist/shared/d1-widget.repository.d.ts +31 -0
  150. package/dist/shared/dashboard-layout.repository.d1.d.ts +9 -0
  151. package/dist/shared/demo-data-sql.d.ts +1 -0
  152. package/dist/shared/demo-data.repository.d1.d.ts +6 -0
  153. package/dist/shared/execution-context-scheduler.d.ts +6 -0
  154. package/dist/shared/fixed-clock.d.ts +13 -0
  155. package/dist/shared/fts-sync.d.ts +1 -0
  156. package/dist/shared/idempotency.repository.d1.d.ts +16 -0
  157. package/dist/shared/in-memory-activity-logger.d.ts +11 -0
  158. package/dist/shared/in-memory-notification-service.d.ts +11 -0
  159. package/dist/shared/in-memory-queue-service.d.ts +16 -0
  160. package/dist/shared/in-memory-seed.repository.d.ts +18 -0
  161. package/dist/shared/media.repository.d1.d.ts +35 -0
  162. package/dist/shared/qstash-notification-service.d.ts +18 -0
  163. package/dist/shared/query-utils.d.ts +36 -0
  164. package/dist/shared/queue-consumer.d.ts +9 -0
  165. package/dist/shared/request-utils.d.ts +13 -0
  166. package/dist/shared/schema-mutator.d1.d.ts +12 -0
  167. package/dist/shared/seed-layout.repository.d1.d.ts +9 -0
  168. package/dist/shared/seed-registry-cache.d.ts +12 -0
  169. package/dist/shared/seed.repository.d1.d.ts +13 -0
  170. package/dist/shared/sequential-id-generator.d.ts +13 -0
  171. package/dist/shared/site-settings.repository.d1.d.ts +7 -0
  172. package/dist/shared/storage/factory.d.ts +8 -0
  173. package/dist/shared/storage/s3-bucket.d.ts +43 -0
  174. package/dist/shared/storage-utils.d.ts +7 -0
  175. package/dist/shared/system-stats.repository.d1.d.ts +25 -0
  176. package/dist/types.d.ts +87 -0
  177. package/dist/upload.d.ts +16 -0
  178. package/dist/widget.d.ts +7 -0
  179. package/migrations/0000_v040_base.sql +265 -265
  180. package/migrations/0029_automations.sql +14 -14
  181. package/migrations/0030_test_seeds.sql +125 -125
  182. package/package.json +28 -18
  183. package/assets/dashboard/assets/chart-BrJFdsGZ.js +0 -39
  184. package/assets/dashboard/assets/index-CIaoMxuB.css +0 -1
  185. package/assets/dashboard/assets/index-wTKgygsg.js +0 -636
  186. package/assets/dashboard/assets/pie-chart-recharts-BEaE1FOE.js +0 -1
  187. package/assets/dashboard/assets/timeseries-chart-recharts-DmWM6imF.js +0 -1
  188. package/src/auth/__fixtures__/in-memory-hash-provider.ts +0 -17
  189. package/src/auth/__fixtures__/static-token-service.ts +0 -22
  190. package/src/auth/bcrypt-hash-provider.ts +0 -24
  191. package/src/auth/constants.ts +0 -14
  192. package/src/auth/generate-refresh-token.test.ts +0 -23
  193. package/src/auth/hash-provider.test.ts +0 -55
  194. package/src/auth/jose-token-service.ts +0 -62
  195. package/src/auth/jwt-claims-passthrough.test.ts +0 -87
  196. package/src/auth/login.test.ts +0 -100
  197. package/src/auth/login.ts +0 -78
  198. package/src/auth/refresh.ts +0 -11
  199. package/src/auth/token-service.test.ts +0 -90
  200. package/src/factory.ts +0 -370
  201. package/src/features/automations/__tests__/action-executors.test.ts +0 -255
  202. package/src/features/automations/__tests__/automation-runner.test.ts +0 -196
  203. package/src/features/automations/__tests__/automation-runner.utils.test.ts +0 -60
  204. package/src/features/automations/__tests__/automations.handler.test.ts +0 -264
  205. package/src/features/automations/__tests__/automations.repository.test.ts +0 -163
  206. package/src/features/automations/__tests__/automations.schema.test.ts +0 -224
  207. package/src/features/automations/__tests__/context-resolver.test.ts +0 -126
  208. package/src/features/automations/__tests__/cron-runner.test.ts +0 -267
  209. package/src/features/automations/__tests__/cron-runner.utils.test.ts +0 -144
  210. package/src/features/automations/__tests__/set-variable.executor.test.ts +0 -383
  211. package/src/features/automations/__tests__/template-grammar.test.ts +0 -308
  212. package/src/features/automations/__tests__/webhook.executor.test.ts +0 -142
  213. package/src/features/automations/__tests__/when-evaluator.test.ts +0 -274
  214. package/src/features/automations/__tests__/when-pushdown.test.ts +0 -281
  215. package/src/features/automations/action-executors/create-entry.executor.ts +0 -27
  216. package/src/features/automations/action-executors/edit-field.executor.ts +0 -26
  217. package/src/features/automations/action-executors/index.ts +0 -37
  218. package/src/features/automations/action-executors/send-mail.executor.ts +0 -53
  219. package/src/features/automations/action-executors/set-variable.executor.ts +0 -159
  220. package/src/features/automations/action-executors/webhook.executor.ts +0 -67
  221. package/src/features/automations/automation-runner.ts +0 -85
  222. package/src/features/automations/automation-runner.utils.ts +0 -47
  223. package/src/features/automations/automations.handler.ts +0 -197
  224. package/src/features/automations/automations.schema.ts +0 -177
  225. package/src/features/automations/context-resolver.ts +0 -152
  226. package/src/features/automations/cron-runner.ts +0 -140
  227. package/src/features/automations/cron-runner.utils.ts +0 -44
  228. package/src/features/automations/filter-translation.ts +0 -46
  229. package/src/features/automations/index.ts +0 -16
  230. package/src/features/automations/template-grammar.ts +0 -245
  231. package/src/features/automations/var-access-resolver.ts +0 -140
  232. package/src/features/automations/when-evaluator.ts +0 -87
  233. package/src/features/automations/when-pushdown.ts +0 -57
  234. package/src/features/backrefs/__tests__/backrefs.handler.test.ts +0 -359
  235. package/src/features/backrefs/backrefs.handler.ts +0 -168
  236. package/src/features/backrefs/d1-backref.repository.ts +0 -84
  237. package/src/features/backrefs/index.ts +0 -5
  238. package/src/features/content/constants.ts +0 -16
  239. package/src/features/content/handlers/bulk.handler.ts +0 -185
  240. package/src/features/content/handlers/create.ts +0 -129
  241. package/src/features/content/handlers/delete.ts +0 -62
  242. package/src/features/content/handlers/facets.ts +0 -49
  243. package/src/features/content/handlers/get.ts +0 -120
  244. package/src/features/content/handlers/helpers.test.ts +0 -180
  245. package/src/features/content/handlers/helpers.ts +0 -93
  246. package/src/features/content/handlers/list.ts +0 -174
  247. package/src/features/content/handlers/update.ts +0 -174
  248. package/src/features/content/index.ts +0 -26
  249. package/src/features/dashboard-layout/__tests__/dashboard-layout.handler.test.ts +0 -388
  250. package/src/features/dashboard-layout/dashboard-layout.handler.ts +0 -206
  251. package/src/features/dashboard-layout/index.ts +0 -5
  252. package/src/features/draft/draft.handler.ts +0 -195
  253. package/src/features/draft/draft.middleware.ts +0 -66
  254. package/src/features/draft/index.ts +0 -5
  255. package/src/features/email/email.service.ts +0 -98
  256. package/src/features/email/email.types.ts +0 -119
  257. package/src/features/email/providers/resend.ts +0 -67
  258. package/src/features/email/providers/smtp.ts +0 -55
  259. package/src/features/email/templates/automation-mail.ts +0 -19
  260. package/src/features/email/templates/password-changed.ts +0 -63
  261. package/src/features/email/templates/password-reset.ts +0 -68
  262. package/src/features/email/templates/shell.ts +0 -96
  263. package/src/features/notifications/index.ts +0 -5
  264. package/src/features/notifications/notifications.handler.ts +0 -105
  265. package/src/features/password-reset/index.ts +0 -19
  266. package/src/features/password-reset/request.ts +0 -92
  267. package/src/features/password-reset/reset.ts +0 -102
  268. package/src/features/rotate-field/index.ts +0 -5
  269. package/src/features/rotate-field/rotate-field.handler.ts +0 -132
  270. package/src/features/rotate-field/rotate-field.schema.ts +0 -17
  271. package/src/features/schema/schema.handler.ts +0 -131
  272. package/src/features/seeds/index.ts +0 -5
  273. package/src/features/seeds/seeds.handler.test.ts +0 -1199
  274. package/src/features/seeds/seeds.handler.ts +0 -558
  275. package/src/features/settings/__tests__/settings.handler.test.ts +0 -555
  276. package/src/features/settings/settings.handler.ts +0 -392
  277. package/src/features/setup/index.ts +0 -288
  278. package/src/features/stats/index.ts +0 -5
  279. package/src/features/stats/stats.handler.ts +0 -420
  280. package/src/features/webhooks/index.ts +0 -63
  281. package/src/index.ts +0 -65
  282. package/src/media-utils.ts +0 -82
  283. package/src/middleware/auth-providers.middleware.test.ts +0 -85
  284. package/src/middleware/auth-providers.middleware.ts +0 -45
  285. package/src/middleware/observability.middleware.test.ts +0 -93
  286. package/src/middleware/observability.middleware.ts +0 -70
  287. package/src/middleware/rate-limit.middleware.ts +0 -45
  288. package/src/middleware/repository.middleware.ts +0 -117
  289. package/src/middleware/seed-registry.middleware.test.ts +0 -97
  290. package/src/middleware/seed-registry.middleware.ts +0 -21
  291. package/src/middleware/storage.middleware.ts +0 -25
  292. package/src/middleware.ts +0 -45
  293. package/src/public/access-policy.ts +0 -27
  294. package/src/public/api-key-middleware.ts +0 -57
  295. package/src/public/cache-utils.ts +0 -38
  296. package/src/public/entry-projection.ts +0 -46
  297. package/src/public/idempotency.ts +0 -23
  298. package/src/public/index.ts +0 -16
  299. package/src/public/problem-details.ts +0 -124
  300. package/src/public/public-add.ts +0 -114
  301. package/src/public/public-edit.ts +0 -163
  302. package/src/public/public-errors.ts +0 -19
  303. package/src/public/public-read.ts +0 -63
  304. package/src/public/public-routes.ts +0 -88
  305. package/src/public/query-builder.test.ts +0 -224
  306. package/src/public/query-builder.ts +0 -156
  307. package/src/public/rate-limit-middleware.ts +0 -34
  308. package/src/public/read-list.ts +0 -54
  309. package/src/public/read-single.ts +0 -48
  310. package/src/public/response-builder.ts +0 -30
  311. package/src/public/sanitize.ts +0 -69
  312. package/src/rate-limit/cloudflare-rate-limiter.test.ts +0 -30
  313. package/src/rate-limit/cloudflare-rate-limiter.ts +0 -15
  314. package/src/rate-limit/in-memory-rate-limiter.test.ts +0 -37
  315. package/src/rate-limit/in-memory-rate-limiter.ts +0 -17
  316. package/src/rate-limit/no-op-rate-limiter.test.ts +0 -22
  317. package/src/rate-limit/no-op-rate-limiter.ts +0 -11
  318. package/src/search-utils.test.ts +0 -211
  319. package/src/search-utils.ts +0 -213
  320. package/src/search.ts +0 -65
  321. package/src/shared/apply-policies.test.ts +0 -81
  322. package/src/shared/apply-policies.ts +0 -67
  323. package/src/shared/automations.repository.d1.ts +0 -150
  324. package/src/shared/background-notification-service.test.ts +0 -62
  325. package/src/shared/background-notification-service.ts +0 -52
  326. package/src/shared/base.repository.d1.ts +0 -32
  327. package/src/shared/content-utils.test.ts +0 -165
  328. package/src/shared/content-utils.ts +0 -86
  329. package/src/shared/content.repository.d1.test.ts +0 -507
  330. package/src/shared/content.repository.d1.ts +0 -851
  331. package/src/shared/d1-activity-log.repository.test.ts +0 -140
  332. package/src/shared/d1-activity-log.repository.ts +0 -105
  333. package/src/shared/d1-activity-logger.test.ts +0 -86
  334. package/src/shared/d1-activity-logger.ts +0 -67
  335. package/src/shared/d1-analytics.repository.test.ts +0 -78
  336. package/src/shared/d1-analytics.repository.ts +0 -85
  337. package/src/shared/d1-content-scan.repository.test.ts +0 -80
  338. package/src/shared/d1-content-scan.repository.ts +0 -37
  339. package/src/shared/d1-notification.repository.test.ts +0 -128
  340. package/src/shared/d1-notification.repository.ts +0 -118
  341. package/src/shared/d1-password-reset-token.repository.test.ts +0 -81
  342. package/src/shared/d1-password-reset-token.repository.ts +0 -56
  343. package/src/shared/d1-search.repository.test.ts +0 -87
  344. package/src/shared/d1-search.repository.ts +0 -88
  345. package/src/shared/d1-session.repository.test.ts +0 -125
  346. package/src/shared/d1-session.repository.ts +0 -102
  347. package/src/shared/d1-setup-checklist.repository.ts +0 -36
  348. package/src/shared/d1-user.repository.test.ts +0 -151
  349. package/src/shared/d1-user.repository.ts +0 -119
  350. package/src/shared/d1-widget.repository.test.ts +0 -267
  351. package/src/shared/d1-widget.repository.ts +0 -385
  352. package/src/shared/dashboard-layout.repository.d1.test.ts +0 -135
  353. package/src/shared/dashboard-layout.repository.d1.ts +0 -58
  354. package/src/shared/demo-data-sql.ts +0 -216
  355. package/src/shared/demo-data.repository.d1.ts +0 -20
  356. package/src/shared/execution-context-scheduler.ts +0 -13
  357. package/src/shared/fixed-clock.ts +0 -25
  358. package/src/shared/fts-sync.ts +0 -8
  359. package/src/shared/idempotency.repository.d1.test.ts +0 -83
  360. package/src/shared/idempotency.repository.d1.ts +0 -60
  361. package/src/shared/in-memory-activity-logger.ts +0 -19
  362. package/src/shared/in-memory-notification-service.ts +0 -19
  363. package/src/shared/in-memory-seed.repository.ts +0 -58
  364. package/src/shared/media.repository.d1.test.ts +0 -107
  365. package/src/shared/media.repository.d1.ts +0 -68
  366. package/src/shared/qstash-notification-service.test.ts +0 -67
  367. package/src/shared/qstash-notification-service.ts +0 -55
  368. package/src/shared/query-utils.ts +0 -141
  369. package/src/shared/request-utils.ts +0 -26
  370. package/src/shared/schema-mutator.d1.test.ts +0 -142
  371. package/src/shared/schema-mutator.d1.ts +0 -64
  372. package/src/shared/seed-layout.repository.d1.test.ts +0 -114
  373. package/src/shared/seed-layout.repository.d1.ts +0 -62
  374. package/src/shared/seed-registry-cache.test.ts +0 -68
  375. package/src/shared/seed-registry-cache.ts +0 -49
  376. package/src/shared/seed.repository.d1.test.ts +0 -143
  377. package/src/shared/seed.repository.d1.ts +0 -98
  378. package/src/shared/sequential-id-generator.ts +0 -33
  379. package/src/shared/site-settings.repository.d1.ts +0 -53
  380. package/src/shared/storage/factory.ts +0 -41
  381. package/src/shared/storage/s3-bucket.ts +0 -195
  382. package/src/shared/storage-utils.ts +0 -40
  383. package/src/shared/system-stats.repository.d1.test.ts +0 -58
  384. package/src/shared/system-stats.repository.d1.ts +0 -48
  385. package/src/types.ts +0 -90
  386. package/src/upload.ts +0 -198
  387. package/src/widget.test.ts +0 -85
  388. 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,11 @@
1
+ import type { IQueueService, JobRegistry } from '@beechcms/core';
2
+ import type { AppEnv } from '../types';
3
+ export interface QueueOverrides {
4
+ queue?: IQueueService;
5
+ }
6
+ /**
7
+ * Injects `queue` into context. Must run AFTER repositoryMiddleware and
8
+ * storageMiddleware: the in-memory fallback builds a JobContext from
9
+ * `repository` + `bucket` already present in context.
10
+ */
11
+ export declare const queueMiddleware: (jobs?: JobRegistry, overrides?: QueueOverrides) => 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,11 @@
1
+ import type { IQueueService, QueueMessage } from '@beechcms/core';
2
+ /**
3
+ * Production producer. Sends a QueueMessage envelope onto the Cloudflare Queue
4
+ * binding. Cloudflare guarantees at-least-once delivery + retries on the
5
+ * consumer side, so enqueue only needs to hand off the message.
6
+ */
7
+ export declare class CloudflareQueueService implements IQueueService {
8
+ private readonly queue;
9
+ constructor(queue: Queue<QueueMessage>);
10
+ enqueue<T>(name: string, payload: T): Promise<void>;
11
+ }
@@ -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>;