@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,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 };
package/package.json CHANGED
@@ -1,43 +1,52 @@
1
1
  {
2
2
  "name": "@beechcms/api",
3
- "version": "0.6.0-preview.2",
3
+ "version": "0.6.0-preview.3",
4
4
  "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/factory.d.ts",
5
7
  "exports": {
6
- ".": "./src/factory.ts"
8
+ ".": {
9
+ "types": "./dist/factory.d.ts",
10
+ "import": "./dist/index.js"
11
+ }
7
12
  },
8
13
  "files": [
9
- "src/",
14
+ "dist/",
10
15
  "migrations/0000_v040_base.sql",
11
16
  "migrations/0029_automations.sql",
12
17
  "migrations/0030_test_seeds.sql",
13
18
  "assets/"
14
19
  ],
15
- "scripts": {
16
- "dev": "wrangler dev --port 8789",
17
- "build": "tsc -p tsconfig.build.json --noEmit",
18
- "db:migrate:local": "node ./scripts/bootstrap-d1.mjs",
19
- "db:reset:local": "node -e \"require('fs').rmSync('.wrangler/state', {recursive:true,force:true})\" && node ./scripts/bootstrap-d1.mjs",
20
- "deploy": "wrangler deploy --minify",
21
- "cf-typegen": "wrangler types --env-interface CloudflareBindings",
22
- "test": "vitest run",
23
- "test:coverage": "vitest run --coverage"
24
- },
25
20
  "dependencies": {
26
21
  "@aws-sdk/client-s3": "^3.995.0",
27
22
  "@aws-sdk/s3-request-presigner": "^3.995.0",
28
- "@beechcms/core": "^0.6.0-preview.2",
23
+ "@beechcms/core": "^0.6.0-preview.3",
29
24
  "@upstash/qstash": "^2.11.0",
30
25
  "bcryptjs": "^2.4.3",
31
26
  "hono": "^4.12.21",
32
- "jose": "^6.1.3"
27
+ "jose": "^6.1.3",
28
+ "zod": "^4.4.3"
33
29
  },
34
30
  "devDependencies": {
35
31
  "@cloudflare/workers-types": "^4.20260213.0",
36
32
  "@types/bcryptjs": "^2.4.6",
37
33
  "@vitest/coverage-v8": "^4.1.0",
34
+ "esbuild": "0.28.1",
35
+ "vite": "8.0.16",
38
36
  "vitest": "^4.1.0",
39
- "wrangler": "^4.98.0"
37
+ "wrangler": "^4.100.0"
40
38
  },
41
39
  "license": "BUSL-1.1",
42
- "licenseFile": "../../LICENSE"
43
- }
40
+ "licenseFile": "../../LICENSE",
41
+ "scripts": {
42
+ "dev": "wrangler dev --port 8789",
43
+ "build": "esbuild src/factory.ts --bundle --packages=external --platform=neutral --format=esm --outfile=dist/index.js && tsc -p tsconfig.build.json",
44
+ "type-check": "tsc -p tsconfig.build.json --noEmit",
45
+ "db:migrate:local": "node ./scripts/bootstrap-d1.mjs",
46
+ "db:reset:local": "node -e \"require('fs').rmSync('.wrangler/state', {recursive:true,force:true})\" && node ./scripts/bootstrap-d1.mjs",
47
+ "deploy": "wrangler deploy --minify",
48
+ "cf-typegen": "wrangler types --env-interface CloudflareBindings",
49
+ "test": "vitest run",
50
+ "test:coverage": "vitest run --coverage"
51
+ }
52
+ }