@beechcms/api 0.6.0-preview.1 → 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 (373) 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-Cws4Yj6K.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-BjPpppHe.css +1 -0
  11. package/assets/dashboard/assets/index-CrW-zhkA.js +642 -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-CAxoDQp2.js +1 -0
  20. package/assets/dashboard/assets/timeseries-chart-recharts-CixDW-LM.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 +39 -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} +37 -42
  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} +20 -33
  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 +6 -0
  98. package/dist/index.js +9666 -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/rate-limit.middleware.d.ts +9 -0
  103. package/dist/middleware/repository.middleware.d.ts +34 -0
  104. package/dist/middleware/seed-registry.middleware.d.ts +10 -0
  105. package/dist/middleware/storage.middleware.d.ts +7 -0
  106. package/dist/middleware.d.ts +11 -0
  107. package/dist/public/access-policy.d.ts +12 -0
  108. package/dist/public/api-key-middleware.d.ts +6 -0
  109. package/dist/public/cache-utils.d.ts +10 -0
  110. package/dist/public/entry-projection.d.ts +2 -0
  111. package/dist/public/idempotency.d.ts +9 -0
  112. package/dist/public/index.d.ts +11 -0
  113. package/dist/public/problem-details.d.ts +31 -0
  114. package/dist/public/public-add.d.ts +3 -0
  115. package/dist/public/public-edit.d.ts +5 -0
  116. package/dist/public/public-errors.d.ts +13 -0
  117. package/dist/public/public-read.d.ts +3 -0
  118. package/dist/public/public-routes.d.ts +3 -0
  119. package/dist/public/query-builder.d.ts +28 -0
  120. package/dist/public/rate-limit-middleware.d.ts +3 -0
  121. package/dist/public/read-list.d.ts +26 -0
  122. package/dist/public/read-single.d.ts +22 -0
  123. package/dist/public/response-builder.d.ts +22 -0
  124. package/dist/public/sanitize.d.ts +23 -0
  125. package/dist/public/slug-utils.d.ts +11 -0
  126. package/dist/rate-limit/cloudflare-rate-limiter.d.ts +6 -0
  127. package/dist/rate-limit/in-memory-rate-limiter.d.ts +7 -0
  128. package/dist/rate-limit/no-op-rate-limiter.d.ts +4 -0
  129. package/dist/search-utils.d.ts +54 -0
  130. package/dist/search.d.ts +6 -0
  131. package/dist/shared/apply-policies.d.ts +10 -0
  132. package/dist/shared/automations.repository.d1.d.ts +12 -0
  133. package/dist/shared/background-notification-service.d.ts +18 -0
  134. package/dist/shared/base.repository.d1.d.ts +18 -0
  135. package/dist/shared/content-utils.d.ts +21 -0
  136. package/dist/shared/content.repository.d1.d.ts +68 -0
  137. package/dist/shared/d1-activity-log.repository.d.ts +13 -0
  138. package/dist/shared/d1-activity-logger.d.ts +20 -0
  139. package/dist/shared/d1-analytics.repository.d.ts +20 -0
  140. package/dist/shared/d1-content-scan.repository.d.ts +7 -0
  141. package/dist/shared/d1-notification.repository.d.ts +17 -0
  142. package/dist/shared/d1-password-reset-token.repository.d.ts +10 -0
  143. package/dist/shared/d1-search.repository.d.ts +14 -0
  144. package/dist/shared/d1-session.repository.d.ts +12 -0
  145. package/dist/shared/d1-setup-checklist.repository.d.ts +12 -0
  146. package/dist/shared/d1-user.repository.d.ts +18 -0
  147. package/dist/shared/d1-widget.repository.d.ts +31 -0
  148. package/dist/shared/dashboard-layout.repository.d1.d.ts +9 -0
  149. package/dist/shared/demo-data-sql.d.ts +1 -0
  150. package/dist/shared/demo-data.repository.d1.d.ts +6 -0
  151. package/dist/shared/execution-context-scheduler.d.ts +6 -0
  152. package/dist/shared/fixed-clock.d.ts +13 -0
  153. package/dist/shared/fts-sync.d.ts +1 -0
  154. package/dist/shared/idempotency.repository.d1.d.ts +16 -0
  155. package/dist/shared/in-memory-activity-logger.d.ts +11 -0
  156. package/dist/shared/in-memory-notification-service.d.ts +11 -0
  157. package/dist/shared/in-memory-seed.repository.d.ts +18 -0
  158. package/dist/shared/media.repository.d1.d.ts +35 -0
  159. package/dist/shared/qstash-notification-service.d.ts +18 -0
  160. package/dist/shared/query-utils.d.ts +36 -0
  161. package/dist/shared/request-utils.d.ts +13 -0
  162. package/dist/shared/schema-mutator.d1.d.ts +12 -0
  163. package/dist/shared/seed-layout.repository.d1.d.ts +9 -0
  164. package/dist/shared/seed-registry-cache.d.ts +12 -0
  165. package/dist/shared/seed.repository.d1.d.ts +13 -0
  166. package/dist/shared/sequential-id-generator.d.ts +13 -0
  167. package/dist/shared/site-settings.repository.d1.d.ts +7 -0
  168. package/dist/shared/storage/factory.d.ts +8 -0
  169. package/dist/shared/storage/s3-bucket.d.ts +43 -0
  170. package/dist/shared/storage-utils.d.ts +7 -0
  171. package/dist/shared/system-stats.repository.d1.d.ts +25 -0
  172. package/dist/types.d.ts +85 -0
  173. package/dist/upload.d.ts +16 -0
  174. package/dist/widget.d.ts +7 -0
  175. package/migrations/0000_v040_base.sql +265 -265
  176. package/migrations/0029_automations.sql +14 -14
  177. package/migrations/0030_test_seeds.sql +125 -125
  178. package/package.json +27 -18
  179. package/assets/dashboard/assets/index-BSjk0Sx9.js +0 -634
  180. package/assets/dashboard/assets/index-kRCYVN2B.css +0 -1
  181. package/src/auth/__fixtures__/in-memory-hash-provider.ts +0 -17
  182. package/src/auth/__fixtures__/static-token-service.ts +0 -22
  183. package/src/auth/bcrypt-hash-provider.ts +0 -24
  184. package/src/auth/constants.ts +0 -14
  185. package/src/auth/generate-refresh-token.test.ts +0 -23
  186. package/src/auth/hash-provider.test.ts +0 -55
  187. package/src/auth/jose-token-service.ts +0 -62
  188. package/src/auth/jwt-claims-passthrough.test.ts +0 -87
  189. package/src/auth/login.test.ts +0 -100
  190. package/src/auth/login.ts +0 -78
  191. package/src/auth/refresh.ts +0 -11
  192. package/src/auth/token-service.test.ts +0 -90
  193. package/src/factory.ts +0 -368
  194. package/src/features/automations/__tests__/action-executors.test.ts +0 -255
  195. package/src/features/automations/__tests__/automation-runner.test.ts +0 -196
  196. package/src/features/automations/__tests__/automation-runner.utils.test.ts +0 -60
  197. package/src/features/automations/__tests__/automations.handler.test.ts +0 -264
  198. package/src/features/automations/__tests__/automations.repository.test.ts +0 -163
  199. package/src/features/automations/__tests__/automations.schema.test.ts +0 -224
  200. package/src/features/automations/__tests__/context-resolver.test.ts +0 -126
  201. package/src/features/automations/__tests__/cron-runner.test.ts +0 -267
  202. package/src/features/automations/__tests__/cron-runner.utils.test.ts +0 -144
  203. package/src/features/automations/__tests__/set-variable.executor.test.ts +0 -383
  204. package/src/features/automations/__tests__/template-grammar.test.ts +0 -308
  205. package/src/features/automations/__tests__/webhook.executor.test.ts +0 -142
  206. package/src/features/automations/__tests__/when-evaluator.test.ts +0 -274
  207. package/src/features/automations/__tests__/when-pushdown.test.ts +0 -281
  208. package/src/features/automations/action-executors/create-entry.executor.ts +0 -27
  209. package/src/features/automations/action-executors/edit-field.executor.ts +0 -26
  210. package/src/features/automations/action-executors/index.ts +0 -37
  211. package/src/features/automations/action-executors/send-mail.executor.ts +0 -53
  212. package/src/features/automations/action-executors/set-variable.executor.ts +0 -159
  213. package/src/features/automations/action-executors/webhook.executor.ts +0 -67
  214. package/src/features/automations/automation-runner.ts +0 -85
  215. package/src/features/automations/automation-runner.utils.ts +0 -47
  216. package/src/features/automations/automations.handler.ts +0 -197
  217. package/src/features/automations/automations.schema.ts +0 -177
  218. package/src/features/automations/context-resolver.ts +0 -152
  219. package/src/features/automations/cron-runner.ts +0 -140
  220. package/src/features/automations/cron-runner.utils.ts +0 -44
  221. package/src/features/automations/filter-translation.ts +0 -46
  222. package/src/features/automations/index.ts +0 -16
  223. package/src/features/automations/template-grammar.ts +0 -245
  224. package/src/features/automations/var-access-resolver.ts +0 -140
  225. package/src/features/automations/when-evaluator.ts +0 -87
  226. package/src/features/automations/when-pushdown.ts +0 -57
  227. package/src/features/backrefs/__tests__/backrefs.handler.test.ts +0 -359
  228. package/src/features/backrefs/backrefs.handler.ts +0 -168
  229. package/src/features/backrefs/d1-backref.repository.ts +0 -84
  230. package/src/features/backrefs/index.ts +0 -5
  231. package/src/features/content/constants.ts +0 -16
  232. package/src/features/content/handlers/bulk.handler.ts +0 -185
  233. package/src/features/content/handlers/create.ts +0 -129
  234. package/src/features/content/handlers/delete.ts +0 -62
  235. package/src/features/content/handlers/facets.ts +0 -49
  236. package/src/features/content/handlers/get.ts +0 -120
  237. package/src/features/content/handlers/helpers.test.ts +0 -180
  238. package/src/features/content/handlers/helpers.ts +0 -93
  239. package/src/features/content/handlers/list.ts +0 -174
  240. package/src/features/content/handlers/update.ts +0 -174
  241. package/src/features/content/index.ts +0 -26
  242. package/src/features/draft/draft.handler.ts +0 -195
  243. package/src/features/draft/draft.middleware.ts +0 -66
  244. package/src/features/draft/index.ts +0 -5
  245. package/src/features/email/email.service.ts +0 -98
  246. package/src/features/email/email.types.ts +0 -119
  247. package/src/features/email/providers/resend.ts +0 -67
  248. package/src/features/email/providers/smtp.ts +0 -55
  249. package/src/features/email/templates/automation-mail.ts +0 -19
  250. package/src/features/email/templates/password-changed.ts +0 -63
  251. package/src/features/email/templates/password-reset.ts +0 -68
  252. package/src/features/email/templates/shell.ts +0 -96
  253. package/src/features/notifications/index.ts +0 -5
  254. package/src/features/notifications/notifications.handler.ts +0 -105
  255. package/src/features/password-reset/index.ts +0 -19
  256. package/src/features/password-reset/request.ts +0 -92
  257. package/src/features/password-reset/reset.ts +0 -102
  258. package/src/features/rotate-field/index.ts +0 -5
  259. package/src/features/rotate-field/rotate-field.handler.ts +0 -132
  260. package/src/features/rotate-field/rotate-field.schema.ts +0 -17
  261. package/src/features/schema/schema.handler.ts +0 -131
  262. package/src/features/seeds/index.ts +0 -5
  263. package/src/features/seeds/seeds.handler.test.ts +0 -632
  264. package/src/features/seeds/seeds.handler.ts +0 -693
  265. package/src/features/settings/__tests__/settings.handler.test.ts +0 -555
  266. package/src/features/settings/settings.handler.ts +0 -392
  267. package/src/features/setup/index.ts +0 -204
  268. package/src/features/stats/index.ts +0 -5
  269. package/src/features/stats/stats.handler.ts +0 -420
  270. package/src/features/webhooks/index.ts +0 -63
  271. package/src/index.ts +0 -65
  272. package/src/media-utils.ts +0 -82
  273. package/src/middleware/auth-providers.middleware.ts +0 -45
  274. package/src/middleware/observability.middleware.ts +0 -70
  275. package/src/middleware/rate-limit.middleware.ts +0 -45
  276. package/src/middleware/repository.middleware.ts +0 -114
  277. package/src/middleware/seed-registry.middleware.test.ts +0 -97
  278. package/src/middleware/seed-registry.middleware.ts +0 -21
  279. package/src/middleware/storage.middleware.ts +0 -25
  280. package/src/middleware.ts +0 -45
  281. package/src/public/access-policy.ts +0 -27
  282. package/src/public/api-key-middleware.ts +0 -57
  283. package/src/public/cache-utils.ts +0 -38
  284. package/src/public/entry-projection.ts +0 -46
  285. package/src/public/idempotency.ts +0 -23
  286. package/src/public/index.ts +0 -16
  287. package/src/public/problem-details.ts +0 -124
  288. package/src/public/public-add.ts +0 -114
  289. package/src/public/public-edit.ts +0 -163
  290. package/src/public/public-errors.ts +0 -19
  291. package/src/public/public-read.ts +0 -63
  292. package/src/public/public-routes.ts +0 -88
  293. package/src/public/query-builder.test.ts +0 -224
  294. package/src/public/query-builder.ts +0 -156
  295. package/src/public/rate-limit-middleware.ts +0 -34
  296. package/src/public/read-list.ts +0 -54
  297. package/src/public/read-single.ts +0 -48
  298. package/src/public/response-builder.ts +0 -30
  299. package/src/public/sanitize.ts +0 -69
  300. package/src/public/slug-utils.ts +0 -18
  301. package/src/rate-limit/cloudflare-rate-limiter.test.ts +0 -30
  302. package/src/rate-limit/cloudflare-rate-limiter.ts +0 -15
  303. package/src/rate-limit/in-memory-rate-limiter.test.ts +0 -37
  304. package/src/rate-limit/in-memory-rate-limiter.ts +0 -17
  305. package/src/rate-limit/no-op-rate-limiter.test.ts +0 -22
  306. package/src/rate-limit/no-op-rate-limiter.ts +0 -11
  307. package/src/search-utils.test.ts +0 -211
  308. package/src/search-utils.ts +0 -213
  309. package/src/search.ts +0 -65
  310. package/src/shared/apply-policies.test.ts +0 -81
  311. package/src/shared/apply-policies.ts +0 -67
  312. package/src/shared/automations.repository.d1.ts +0 -150
  313. package/src/shared/background-notification-service.test.ts +0 -62
  314. package/src/shared/background-notification-service.ts +0 -52
  315. package/src/shared/base.repository.d1.ts +0 -32
  316. package/src/shared/content-utils.test.ts +0 -165
  317. package/src/shared/content-utils.ts +0 -86
  318. package/src/shared/content.repository.d1.test.ts +0 -458
  319. package/src/shared/content.repository.d1.ts +0 -851
  320. package/src/shared/d1-activity-log.repository.test.ts +0 -140
  321. package/src/shared/d1-activity-log.repository.ts +0 -105
  322. package/src/shared/d1-activity-logger.test.ts +0 -86
  323. package/src/shared/d1-activity-logger.ts +0 -67
  324. package/src/shared/d1-analytics.repository.test.ts +0 -78
  325. package/src/shared/d1-analytics.repository.ts +0 -85
  326. package/src/shared/d1-content-scan.repository.test.ts +0 -80
  327. package/src/shared/d1-content-scan.repository.ts +0 -37
  328. package/src/shared/d1-notification.repository.test.ts +0 -128
  329. package/src/shared/d1-notification.repository.ts +0 -118
  330. package/src/shared/d1-password-reset-token.repository.test.ts +0 -81
  331. package/src/shared/d1-password-reset-token.repository.ts +0 -56
  332. package/src/shared/d1-search.repository.test.ts +0 -87
  333. package/src/shared/d1-search.repository.ts +0 -88
  334. package/src/shared/d1-session.repository.test.ts +0 -125
  335. package/src/shared/d1-session.repository.ts +0 -102
  336. package/src/shared/d1-setup-checklist.repository.ts +0 -36
  337. package/src/shared/d1-user.repository.test.ts +0 -151
  338. package/src/shared/d1-user.repository.ts +0 -119
  339. package/src/shared/d1-widget.repository.test.ts +0 -221
  340. package/src/shared/d1-widget.repository.ts +0 -341
  341. package/src/shared/demo-data-sql.ts +0 -54
  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 -51
  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.ts +0 -64
  358. package/src/shared/seed-layout.repository.d1.test.ts +0 -114
  359. package/src/shared/seed-layout.repository.d1.ts +0 -62
  360. package/src/shared/seed-registry-cache.test.ts +0 -68
  361. package/src/shared/seed-registry-cache.ts +0 -49
  362. package/src/shared/seed.repository.d1.test.ts +0 -143
  363. package/src/shared/seed.repository.d1.ts +0 -98
  364. package/src/shared/sequential-id-generator.ts +0 -33
  365. package/src/shared/site-settings.repository.d1.ts +0 -53
  366. package/src/shared/storage/factory.ts +0 -41
  367. package/src/shared/storage/s3-bucket.ts +0 -195
  368. package/src/shared/storage-utils.ts +0 -40
  369. package/src/shared/system-stats.repository.d1.test.ts +0 -58
  370. package/src/shared/system-stats.repository.d1.ts +0 -48
  371. package/src/types.ts +0 -87
  372. package/src/upload.ts +0 -198
  373. package/src/widget.ts +0 -212
@@ -0,0 +1,16 @@
1
+ import { IdempotencyRepository, IdempotencyRecord } from '@beechcms/core';
2
+ import { BaseD1Repository } from './base.repository.d1.js';
3
+ export declare class D1IdempotencyRepository extends BaseD1Repository implements IdempotencyRepository {
4
+ /**
5
+ * Looks up an idempotency record by its key.
6
+ */
7
+ lookup(idempotencyKey: string): Promise<IdempotencyRecord | null>;
8
+ /**
9
+ * Stores or updates an idempotency record.
10
+ */
11
+ store(idempotencyData: IdempotencyRecord): Promise<void>;
12
+ /**
13
+ * Cleans up expired idempotency records.
14
+ */
15
+ cleanup(expirationTimestamp: number): Promise<void>;
16
+ }
@@ -0,0 +1,11 @@
1
+ import type { IActivityLogger, ActivityLogEntry } from '@beechcms/core';
2
+ /**
3
+ * Test double for {@link IActivityLogger}.
4
+ *
5
+ * Captures every call into a public array so test assertions can verify
6
+ * audit-trail side effects without touching D1. Preserves insertion order.
7
+ */
8
+ export declare class InMemoryActivityLogger implements IActivityLogger {
9
+ readonly entries: ActivityLogEntry[];
10
+ log(entry: ActivityLogEntry): void;
11
+ }
@@ -0,0 +1,11 @@
1
+ import type { INotificationService, CreateNotificationInput } from '@beechcms/core';
2
+ /**
3
+ * Test double for {@link INotificationService}.
4
+ *
5
+ * Captures every call into a public array so tests can assert what would have
6
+ * been delivered without touching D1.
7
+ */
8
+ export declare class InMemoryNotificationService implements INotificationService {
9
+ readonly receivedNotifications: CreateNotificationInput[];
10
+ notify(input: CreateNotificationInput): void;
11
+ }
@@ -0,0 +1,18 @@
1
+ import type { ISeedRepository, Seed, SeedRecord } from '@beechcms/core';
2
+ /**
3
+ * In-memory ISeedRepository for testing and for the config.seeds back-compat shim.
4
+ * Returns a fixed seed list with a static version token.
5
+ */
6
+ export declare class InMemorySeedRepository implements ISeedRepository {
7
+ private readonly seeds;
8
+ private version;
9
+ constructor(seeds: Seed[]);
10
+ listActive(): Promise<Seed[]>;
11
+ listAll(): Promise<SeedRecord[]>;
12
+ get(slug: string): Promise<SeedRecord | null>;
13
+ upsert(_slug: string, _definition: Seed, _source?: 'code' | 'runtime'): Promise<void>;
14
+ softDelete(_slug: string): Promise<void>;
15
+ hardDelete(_slug: string): Promise<void>;
16
+ getRegistryVersion(): Promise<number>;
17
+ bumpRegistryVersion(): Promise<number>;
18
+ }
@@ -0,0 +1,35 @@
1
+ import { MediaRepository, MediaObject } from '@beechcms/core';
2
+ /**
3
+ * Implementation of MediaRepository using Cloudflare D1.
4
+ * Provides methods to track media uploads, retrieve media metadata, and manage the media library state in the database.
5
+ */
6
+ export declare class D1MediaRepository implements MediaRepository {
7
+ private database;
8
+ constructor(database: D1Database);
9
+ /**
10
+ * Registers a new media upload in the database.
11
+ */
12
+ trackUpload(mediaObject: Omit<MediaObject, 'created_at'>): Promise<void>;
13
+ /**
14
+ * Retrieves a media object's metadata by its unique key.
15
+ */
16
+ getByKey(mediaKey: string): Promise<MediaObject | null>;
17
+ /**
18
+ * Removes the metadata tracking for a specific media key.
19
+ */
20
+ untrack(mediaKey: string): Promise<void>;
21
+ /**
22
+ * Lists media objects with pagination support.
23
+ */
24
+ list(paginationOptions: {
25
+ limit: number;
26
+ offset: number;
27
+ }): Promise<{
28
+ items: MediaObject[];
29
+ total: number;
30
+ }>;
31
+ /**
32
+ * Returns the total number of media objects in the database.
33
+ */
34
+ count(): Promise<number>;
35
+ }
@@ -0,0 +1,18 @@
1
+ import type { INotificationService, CreateNotificationInput } from '@beechcms/core';
2
+ type ScheduleBackgroundTask = (task: Promise<unknown>) => void;
3
+ /**
4
+ * QStash implementation of {@link INotificationService}.
5
+ *
6
+ * This service acts as a publisher, sending the notification payload to Upstash QStash,
7
+ * which guarantees delivery and retries. QStash will then forward the payload to the
8
+ * local webhook endpoint where it is actually inserted into D1.
9
+ */
10
+ export declare class QStashNotificationService implements INotificationService {
11
+ private readonly scheduleBackgroundTask?;
12
+ private readonly client;
13
+ private readonly webhookUrl;
14
+ constructor(token: string, appUrl: string, scheduleBackgroundTask?: ScheduleBackgroundTask | undefined, qstashUrl?: string);
15
+ notify(input: CreateNotificationInput): Promise<void> | void;
16
+ private runPublish;
17
+ }
18
+ export {};
@@ -0,0 +1,36 @@
1
+ import type { FilterGroup, FilterType } from '@beechcms/core';
2
+ /** Entry parsata per le risposte API — contratto immutabile (C7). */
3
+ export interface ContentEntry {
4
+ id: string;
5
+ schema_slug: string;
6
+ slug: string | null;
7
+ status: string;
8
+ data: Record<string, unknown>;
9
+ hasPendingDraft: boolean;
10
+ created_at: number | null;
11
+ updated_at: number | null;
12
+ }
13
+ export type QueryFilterType = FilterType;
14
+ export type QueryFilterOperator = 'eq' | 'gt' | 'gte' | 'lt' | 'lte' | 'contains' | 'is_empty' | 'is_not_empty';
15
+ export interface QueryFilterCondition {
16
+ id?: string;
17
+ op: QueryFilterOperator;
18
+ value: string | number | boolean | null;
19
+ }
20
+ /** Formato inviato dalla dashboard (usa columnId). */
21
+ export interface QueryFilterGroup {
22
+ columnId: string;
23
+ label?: string;
24
+ type: QueryFilterType;
25
+ conditions: QueryFilterCondition[];
26
+ }
27
+ export declare function cleanStr(val: unknown): string | null;
28
+ export declare function safeParseJson(data: unknown): Record<string, unknown>;
29
+ export declare function parsePositiveInt(value: string | undefined, fallback: number): number;
30
+ /** Parse sicuro dei filtri da query-string (formato dashboard con columnId). */
31
+ export declare function parseQueryFilters(raw: string | undefined): QueryFilterGroup[];
32
+ /**
33
+ * Converte QueryFilterGroup[] (formato dashboard, columnId) in FilterGroup[]
34
+ * compatibile con buildSelectQuery del Botanical Engine.
35
+ */
36
+ export declare function toEngineFilters(groups: QueryFilterGroup[]): FilterGroup[];
@@ -0,0 +1,13 @@
1
+ import type { HonoRequest } from "hono";
2
+ /**
3
+ * Extracts the real client IP address from a Cloudflare Worker request.
4
+ *
5
+ * Cloudflare injects the cf-connecting-ip header on every request that
6
+ * passes through the edge. In local development (wrangler dev) or in
7
+ * unit tests the header may be absent, in which case the string "unknown"
8
+ * is returned so that rate-limiter keys remain non-empty and safe to use.
9
+ *
10
+ * Never derive security decisions from this value alone; treat it as a
11
+ * best-effort hint for rate-limiting and logging purposes only.
12
+ */
13
+ export declare function getClientIp(request: HonoRequest): string;
@@ -0,0 +1,12 @@
1
+ import type { ISchemaMutator } from '@beechcms/core';
2
+ export declare class D1SchemaMutator implements ISchemaMutator {
3
+ private readonly db;
4
+ constructor(db: D1Database);
5
+ getColumns(table: string): Promise<Set<string> | null>;
6
+ execDdl(statements: string[]): Promise<void>;
7
+ private static assertIdentifier;
8
+ dropTable(table: string): Promise<void>;
9
+ dropColumn(table: string, column: string): Promise<void>;
10
+ renameColumn(table: string, from: string, to: string): Promise<void>;
11
+ execDestructive(statements: string[]): Promise<void>;
12
+ }
@@ -0,0 +1,9 @@
1
+ import type { ISeedLayoutRepository, SeedLayoutRecord, FormLayout } from '@beechcms/core';
2
+ export declare class D1SeedLayoutRepository implements ISeedLayoutRepository {
3
+ private readonly db;
4
+ constructor(db: D1Database);
5
+ get(slug: string): Promise<SeedLayoutRecord | null>;
6
+ getAllAsMap(): Promise<Map<string, FormLayout>>;
7
+ upsert(slug: string, layout: FormLayout, updatedBy: string): Promise<void>;
8
+ remove(slug: string): Promise<void>;
9
+ }
@@ -0,0 +1,12 @@
1
+ import type { ISeedRegistry, BackrefMap, ISeedRepository } from '@beechcms/core';
2
+ /**
3
+ * Returns a fresh-enough { registry, backrefMap }. Reads the version token once per
4
+ * request (cheap indexed D1 read); rebuilds from listActive() only when the token
5
+ * changed or TTL lapsed.
6
+ */
7
+ export declare function getHydratedRegistry(repo: ISeedRepository): Promise<{
8
+ registry: ISeedRegistry;
9
+ backrefMap: BackrefMap;
10
+ }>;
11
+ /** Test seam: drop the isolate cache. */
12
+ export declare function __resetSeedRegistryCache(): void;
@@ -0,0 +1,13 @@
1
+ import type { ISeedRepository, SeedRecord, Seed } from '@beechcms/core';
2
+ export declare class D1SeedRepository implements ISeedRepository {
3
+ private readonly db;
4
+ constructor(db: D1Database);
5
+ listActive(): Promise<Seed[]>;
6
+ listAll(): Promise<SeedRecord[]>;
7
+ get(slug: string): Promise<SeedRecord | null>;
8
+ upsert(slug: string, definition: Seed, source?: 'code' | 'runtime'): Promise<void>;
9
+ softDelete(slug: string): Promise<void>;
10
+ hardDelete(slug: string): Promise<void>;
11
+ getRegistryVersion(): Promise<number>;
12
+ bumpRegistryVersion(): Promise<number>;
13
+ }
@@ -0,0 +1,13 @@
1
+ import type { IIdGenerator } from '@beechcms/core';
2
+ /**
3
+ * Test-only IIdGenerator implementation. Each call returns a stable,
4
+ * monotonically increasing identifier (`test-id-0001`, `test-id-0002`, …)
5
+ * so snapshot assertions and insert-order checks remain deterministic
6
+ * across runs.
7
+ */
8
+ export declare class SequentialIdGenerator implements IIdGenerator {
9
+ private counter;
10
+ uuid(): string;
11
+ isValid(value: unknown): value is string;
12
+ reset(): void;
13
+ }
@@ -0,0 +1,7 @@
1
+ import type { ISiteSettingsRepository, SiteSettings } from '@beechcms/core';
2
+ export declare class D1SiteSettingsRepository implements ISiteSettingsRepository {
3
+ private readonly db;
4
+ constructor(db: D1Database);
5
+ getAll(): Promise<SiteSettings>;
6
+ setMany(values: Partial<SiteSettings>): Promise<void>;
7
+ }
@@ -0,0 +1,8 @@
1
+ import { BeechBucket } from '@beechcms/core';
2
+ import { Env } from '../../types';
3
+ /**
4
+ * Single storage path: S3-compatible HTTP API.
5
+ * Prod → Cloudflare R2 with S3 API token.
6
+ * Dev → MinIO container (or R2 staging bucket).
7
+ */
8
+ export declare function createBucketProvider(env: Env, baseUrl: string): BeechBucket;
@@ -0,0 +1,43 @@
1
+ import { BeechBucket, PutBucketOptions, GetBucketResult, PresignOptions } from '@beechcms/core';
2
+ /**
3
+ * Implementation of BeechBucket using S3-compatible API (AWS SDK).
4
+ * Used for production when connecting to R2 or any other S3 provider via HTTP.
5
+ */
6
+ export declare class S3Bucket implements BeechBucket {
7
+ private client;
8
+ private bucketName;
9
+ private baseUrl;
10
+ private cdnUrl;
11
+ constructor(config: {
12
+ endpoint: string;
13
+ accessKeyId: string;
14
+ secretAccessKey: string;
15
+ bucketName: string;
16
+ baseUrl: string;
17
+ cdnUrl?: string;
18
+ });
19
+ put(key: string, body: ArrayBuffer | Uint8Array | ReadableStream, options?: PutBucketOptions): Promise<void>;
20
+ private streamToUint8Array;
21
+ get(key: string): Promise<GetBucketResult | null>;
22
+ delete(key: string): Promise<void>;
23
+ head(key: string): Promise<{
24
+ size: number;
25
+ contentType?: string;
26
+ metadata?: Record<string, string>;
27
+ } | null>;
28
+ getUrl(key: string): string;
29
+ getTotalSize(): Promise<number>;
30
+ presignPut(key: string, options: PresignOptions): Promise<string>;
31
+ presignGet(key: string, options: PresignOptions): Promise<string>;
32
+ list(options?: {
33
+ prefix?: string;
34
+ limit?: number;
35
+ cursor?: string;
36
+ }): Promise<{
37
+ objects: Array<{
38
+ key: string;
39
+ size: number;
40
+ }>;
41
+ cursor?: string;
42
+ }>;
43
+ }
@@ -0,0 +1,7 @@
1
+ import { S3Client } from '@aws-sdk/client-s3';
2
+ /**
3
+ * Calcola la dimensione totale occupata in un bucket R2 (in byte).
4
+ * Nota: esegue una scansione completa del bucket. Per bucket molto grandi
5
+ * andrebbe implementata una cache o usato Cloudflare Logpush/Analytics.
6
+ */
7
+ export declare function getBucketSize(client: S3Client, bucketName: string): Promise<number>;
@@ -0,0 +1,25 @@
1
+ import { SystemStatsRepository } from '@beechcms/core';
2
+ /**
3
+ * Implementation of SystemStatsRepository using Cloudflare D1.
4
+ * Manages global system statistics such as total storage usage.
5
+ */
6
+ export declare class D1SystemStatsRepository implements SystemStatsRepository {
7
+ private database;
8
+ constructor(database: D1Database);
9
+ /**
10
+ * Increments the total storage usage count.
11
+ */
12
+ incrementStorage(byteCount: number): Promise<void>;
13
+ /**
14
+ * Decrements the total storage usage count, ensuring it doesn't fall below zero.
15
+ */
16
+ decrementStorage(byteCount: number): Promise<void>;
17
+ /**
18
+ * Sets the total storage usage count to a specific value.
19
+ */
20
+ setStorage(byteCount: number): Promise<void>;
21
+ /**
22
+ * Retrieves the current total storage usage in bytes.
23
+ */
24
+ getStorageUsage(): Promise<number>;
25
+ }
@@ -0,0 +1,85 @@
1
+ import type { Seed, ContentRepository, IdempotencyRepository, BeechBucket, MediaRepository, SystemStatsRepository, IHashProvider, ITokenService, IUserRepository, ISessionRepository, IPasswordResetTokenRepository, IActivityLogger, IActivityLogRepository, INotificationRepository, INotificationService, IWidgetRepository, ISearchRepository, IAnalyticsRepository, IContentScanRepository, ISeedRegistry, IClock, IIdGenerator, IAutomationRunner, IAutomationRepository, IScheduler, BackrefMap, ISiteSettingsRepository, IDemoDataRepository, JwtClaims, ISeedLayoutRepository, ISeedRepository, ISchemaMutator, IDashboardLayoutRepository } from '@beechcms/core';
2
+ import type { IRateLimiterRegistry } from './middleware/rate-limit.middleware';
3
+ import type { ISetupChecklistRepository } from './shared/d1-setup-checklist.repository';
4
+ export interface Env {
5
+ DB: D1Database;
6
+ JWT_SECRET: string;
7
+ JWT_ISSUER?: string;
8
+ JWT_AUDIENCE?: string;
9
+ R2_ACCESS_KEY_ID?: string;
10
+ R2_SECRET_ACCESS_KEY?: string;
11
+ R2_ENDPOINT?: string;
12
+ R2_BUCKET_NAME?: string;
13
+ LOGIN_RATE_LIMITER?: RateLimit;
14
+ REFRESH_RATE_LIMITER?: RateLimit;
15
+ PUBLIC_READ_RATE_LIMITER?: RateLimit;
16
+ PUBLIC_WRITE_RATE_LIMITER?: RateLimit;
17
+ CORS_ORIGINS?: string;
18
+ PUBLIC_READ_API_KEY?: string;
19
+ PUBLIC_WRITE_API_KEY?: string;
20
+ PUBLIC_PUBLISHED_ONLY?: string;
21
+ PUBLIC_IDEMPOTENCY_TTL_SECONDS?: string;
22
+ MEDIA_BASE_URL?: string;
23
+ MEDIA_CDN_URL?: string;
24
+ MAX_UPLOAD_BYTES?: string;
25
+ RESEND_API_KEY?: string;
26
+ EMAIL_API_KEY?: string;
27
+ APP_URL?: string;
28
+ EMAIL_FROM?: string;
29
+ EMAIL_PROVIDER?: string;
30
+ SMTP_HOST?: string;
31
+ SMTP_PORT?: string;
32
+ WEBHOOK_TESTER_URL?: string;
33
+ FORGOT_PASSWORD_RATE_LIMITER?: RateLimit;
34
+ RESET_PASSWORD_RATE_LIMITER?: RateLimit;
35
+ ENV?: string;
36
+ DATE_FORMAT?: string;
37
+ ASSETS?: Fetcher;
38
+ QSTASH_TOKEN?: string;
39
+ QSTASH_URL?: string;
40
+ /** Public base URL the worker is reachable at, used by QStash to call back the webhook (e.g. an ngrok tunnel in dev). Falls back to APP_URL. */
41
+ QSTASH_CALLBACK_URL?: string;
42
+ QSTASH_CURRENT_SIGNING_KEY?: string;
43
+ QSTASH_NEXT_SIGNING_KEY?: string;
44
+ }
45
+ export interface Variables {
46
+ jwtPayload: JwtClaims;
47
+ getSeed: (slug: string) => Seed | null;
48
+ seedRegistry: ISeedRegistry;
49
+ repository: ContentRepository;
50
+ idempotencyRepository: IdempotencyRepository;
51
+ bucket: BeechBucket;
52
+ mediaRepository: MediaRepository;
53
+ systemStatsRepository: SystemStatsRepository;
54
+ hashProvider: IHashProvider;
55
+ tokenService: ITokenService;
56
+ userRepository: IUserRepository;
57
+ sessionRepository: ISessionRepository;
58
+ passwordResetTokenRepository: IPasswordResetTokenRepository;
59
+ rateLimiters: IRateLimiterRegistry;
60
+ activityLogger: IActivityLogger;
61
+ activityLogRepository: IActivityLogRepository;
62
+ notificationRepository: INotificationRepository;
63
+ notificationService: INotificationService;
64
+ widgetRepository: IWidgetRepository;
65
+ searchRepository: ISearchRepository;
66
+ analyticsRepository: IAnalyticsRepository;
67
+ contentScanRepository: IContentScanRepository;
68
+ clock: IClock;
69
+ idGenerator: IIdGenerator;
70
+ automationRepository: IAutomationRepository;
71
+ automationRunner: IAutomationRunner;
72
+ scheduler: IScheduler;
73
+ backrefMap: BackrefMap;
74
+ siteSettingsRepository: ISiteSettingsRepository;
75
+ demoDataRepository: IDemoDataRepository;
76
+ setupChecklistRepository: ISetupChecklistRepository;
77
+ seedLayoutRepository: ISeedLayoutRepository;
78
+ seedRepository: ISeedRepository;
79
+ schemaMutator: ISchemaMutator;
80
+ dashboardLayoutRepository: IDashboardLayoutRepository;
81
+ }
82
+ export type AppEnv = {
83
+ Bindings: Env;
84
+ Variables: Variables;
85
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Media Engine — Single-path presigned uploads.
3
+ * Il Worker non riceve mai i bytes: agisce solo da gatekeeper (auth, validazione, firma).
4
+ */
5
+ import { Hono } from 'hono';
6
+ import { AppEnv } from './types';
7
+ export declare function deleteR2Objects(c: {
8
+ var: {
9
+ bucket: any;
10
+ mediaRepository: any;
11
+ systemStatsRepository: any;
12
+ };
13
+ }, objectKeys: string[]): Promise<void>;
14
+ export declare const uploadRoutes: Hono<AppEnv, import("hono/types").BlankSchema, "/">;
15
+ /** Serve un file dallo storage (usato dalla rotta pubblica /api/media/:key). */
16
+ export declare function serveMediaHandler(c: any): Promise<Response>;
@@ -0,0 +1,7 @@
1
+ import { Hono } from 'hono';
2
+ import type { Env, Variables } from './types';
3
+ declare const widgetApp: Hono<{
4
+ Bindings: Env;
5
+ Variables: Variables;
6
+ }, import("hono/types").BlankSchema, "/">;
7
+ export { widgetApp };