@heyo-sh/heyo-cms 0.0.0-stage → 0.2.0

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 (401) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -2
  3. package/dist/access/index.d.ts +9 -0
  4. package/dist/access/index.d.ts.map +1 -0
  5. package/dist/access/permissions.d.ts +54 -0
  6. package/dist/access/permissions.d.ts.map +1 -0
  7. package/dist/adapters/astro.d.ts +45 -0
  8. package/dist/adapters/astro.d.ts.map +1 -0
  9. package/dist/adapters/astro.js +1 -0
  10. package/dist/adapters/deliver.d.ts +26 -0
  11. package/dist/adapters/deliver.d.ts.map +1 -0
  12. package/dist/adapters/next.d.ts +45 -0
  13. package/dist/adapters/next.d.ts.map +1 -0
  14. package/dist/adapters/next.js +1 -0
  15. package/dist/adapters/nuxt.d.ts +51 -0
  16. package/dist/adapters/nuxt.d.ts.map +1 -0
  17. package/dist/adapters/nuxt.js +1 -0
  18. package/dist/adapters/react-router.d.ts +36 -0
  19. package/dist/adapters/react-router.d.ts.map +1 -0
  20. package/dist/adapters/react-router.js +1 -0
  21. package/dist/adapters/sveltekit.d.ts +41 -0
  22. package/dist/adapters/sveltekit.d.ts.map +1 -0
  23. package/dist/adapters/sveltekit.js +1 -0
  24. package/dist/ai/assistant/context.d.ts +64 -0
  25. package/dist/ai/assistant/context.d.ts.map +1 -0
  26. package/dist/ai/assistant/limits.d.ts +10 -0
  27. package/dist/ai/assistant/limits.d.ts.map +1 -0
  28. package/dist/ai/assistant/plans.d.ts +83 -0
  29. package/dist/ai/assistant/plans.d.ts.map +1 -0
  30. package/dist/ai/assistant/prompt.d.ts +22 -0
  31. package/dist/ai/assistant/prompt.d.ts.map +1 -0
  32. package/dist/ai/assistant/run.d.ts +59 -0
  33. package/dist/ai/assistant/run.d.ts.map +1 -0
  34. package/dist/ai/assistant/runtime.d.ts +35 -0
  35. package/dist/ai/assistant/runtime.d.ts.map +1 -0
  36. package/dist/ai/assistant/schema.d.ts +66 -0
  37. package/dist/ai/assistant/schema.d.ts.map +1 -0
  38. package/dist/ai/assistant/tools.d.ts +41 -0
  39. package/dist/ai/assistant/tools.d.ts.map +1 -0
  40. package/dist/ai/assistant/values.d.ts +33 -0
  41. package/dist/ai/assistant/values.d.ts.map +1 -0
  42. package/dist/ai/crypto.d.ts +12 -0
  43. package/dist/ai/crypto.d.ts.map +1 -0
  44. package/dist/ai/index.d.ts +19 -0
  45. package/dist/ai/index.d.ts.map +1 -0
  46. package/dist/ai/pi.d.ts +89 -0
  47. package/dist/ai/pi.d.ts.map +1 -0
  48. package/dist/ai/registry.d.ts +66 -0
  49. package/dist/ai/registry.d.ts.map +1 -0
  50. package/dist/ai/service.d.ts +31 -0
  51. package/dist/ai/service.d.ts.map +1 -0
  52. package/dist/ai/variant-translation.d.ts +6 -0
  53. package/dist/ai/variant-translation.d.ts.map +1 -0
  54. package/dist/ai.d.ts +12 -0
  55. package/dist/ai.d.ts.map +1 -0
  56. package/dist/ai.js +1 -0
  57. package/dist/auth/config.d.ts +65 -0
  58. package/dist/auth/config.d.ts.map +1 -0
  59. package/dist/auth/crypto.d.ts +44 -0
  60. package/dist/auth/crypto.d.ts.map +1 -0
  61. package/dist/auth/index.d.ts +15 -0
  62. package/dist/auth/index.d.ts.map +1 -0
  63. package/dist/auth/oauth.d.ts +93 -0
  64. package/dist/auth/oauth.d.ts.map +1 -0
  65. package/dist/auth/service.d.ts +38 -0
  66. package/dist/auth/service.d.ts.map +1 -0
  67. package/dist/auth/totp.d.ts +34 -0
  68. package/dist/auth/totp.d.ts.map +1 -0
  69. package/dist/auth.d.ts +9 -0
  70. package/dist/auth.d.ts.map +1 -0
  71. package/dist/auth.js +1 -0
  72. package/dist/cli.d.ts +3 -0
  73. package/dist/cli.d.ts.map +1 -0
  74. package/dist/cli.js +30 -0
  75. package/dist/client/index.d.ts +51 -0
  76. package/dist/client/index.d.ts.map +1 -0
  77. package/dist/client/types.d.ts +363 -0
  78. package/dist/client/types.d.ts.map +1 -0
  79. package/dist/client.d.ts +46 -0
  80. package/dist/client.d.ts.map +1 -0
  81. package/dist/client.js +1 -0
  82. package/dist/config.d.ts +31 -0
  83. package/dist/config.d.ts.map +1 -0
  84. package/dist/config.js +1 -0
  85. package/dist/content/export.d.ts +28 -0
  86. package/dist/content/export.d.ts.map +1 -0
  87. package/dist/content/import.d.ts +65 -0
  88. package/dist/content/import.d.ts.map +1 -0
  89. package/dist/content/records.d.ts +73 -0
  90. package/dist/content/records.d.ts.map +1 -0
  91. package/dist/content.d.ts +12 -0
  92. package/dist/content.d.ts.map +1 -0
  93. package/dist/content.js +1 -0
  94. package/dist/db/d1.d.ts +29 -0
  95. package/dist/db/d1.d.ts.map +1 -0
  96. package/dist/db/d1.js +1 -0
  97. package/dist/db/mongodb.d.ts +128 -0
  98. package/dist/db/mongodb.d.ts.map +1 -0
  99. package/dist/db/mongodb.js +2 -0
  100. package/dist/db/postgres.d.ts +37 -0
  101. package/dist/db/postgres.d.ts.map +1 -0
  102. package/dist/db/postgres.js +1 -0
  103. package/dist/db/sql/adapter.d.ts +57 -0
  104. package/dist/db/sql/adapter.d.ts.map +1 -0
  105. package/dist/db/sql/compile.d.ts +50 -0
  106. package/dist/db/sql/compile.d.ts.map +1 -0
  107. package/dist/db/sql/ddl.d.ts +34 -0
  108. package/dist/db/sql/ddl.d.ts.map +1 -0
  109. package/dist/db/sql/dialect.d.ts +37 -0
  110. package/dist/db/sql/dialect.d.ts.map +1 -0
  111. package/dist/db/sql/driver.d.ts +34 -0
  112. package/dist/db/sql/driver.d.ts.map +1 -0
  113. package/dist/db/sql/introspect.d.ts +15 -0
  114. package/dist/db/sql/introspect.d.ts.map +1 -0
  115. package/dist/db/sqlite.d.ts +50 -0
  116. package/dist/db/sqlite.d.ts.map +1 -0
  117. package/dist/db/sqlite.js +1 -0
  118. package/dist/defaults.d.ts +5 -0
  119. package/dist/defaults.d.ts.map +1 -0
  120. package/dist/duration.d.ts +12 -0
  121. package/dist/duration.d.ts.map +1 -0
  122. package/dist/editor/builtin.d.ts +45 -0
  123. package/dist/editor/builtin.d.ts.map +1 -0
  124. package/dist/editor/index.d.ts +14 -0
  125. package/dist/editor/index.d.ts.map +1 -0
  126. package/dist/editor/markdown.d.ts +19 -0
  127. package/dist/editor/markdown.d.ts.map +1 -0
  128. package/dist/editor/registry.d.ts +30 -0
  129. package/dist/editor/registry.d.ts.map +1 -0
  130. package/dist/editor/serialize.d.ts +41 -0
  131. package/dist/editor/serialize.d.ts.map +1 -0
  132. package/dist/editor.d.ts +10 -0
  133. package/dist/editor.d.ts.map +1 -0
  134. package/dist/editor.js +1 -0
  135. package/dist/engine/access.d.ts +33 -0
  136. package/dist/engine/access.d.ts.map +1 -0
  137. package/dist/engine/activity.d.ts +16 -0
  138. package/dist/engine/activity.d.ts.map +1 -0
  139. package/dist/engine/cursor.d.ts +19 -0
  140. package/dist/engine/cursor.d.ts.map +1 -0
  141. package/dist/engine/documents.d.ts +81 -0
  142. package/dist/engine/documents.d.ts.map +1 -0
  143. package/dist/engine/engine.d.ts +295 -0
  144. package/dist/engine/engine.d.ts.map +1 -0
  145. package/dist/engine/field-access.d.ts +21 -0
  146. package/dist/engine/field-access.d.ts.map +1 -0
  147. package/dist/engine/hooks.d.ts +58 -0
  148. package/dist/engine/hooks.d.ts.map +1 -0
  149. package/dist/engine/index.d.ts +20 -0
  150. package/dist/engine/index.d.ts.map +1 -0
  151. package/dist/engine/jobs.d.ts +63 -0
  152. package/dist/engine/jobs.d.ts.map +1 -0
  153. package/dist/engine/locales.d.ts +40 -0
  154. package/dist/engine/locales.d.ts.map +1 -0
  155. package/dist/engine/outbox.d.ts +81 -0
  156. package/dist/engine/outbox.d.ts.map +1 -0
  157. package/dist/engine/relations.d.ts +60 -0
  158. package/dist/engine/relations.d.ts.map +1 -0
  159. package/dist/engine/scoped-db.d.ts +13 -0
  160. package/dist/engine/scoped-db.d.ts.map +1 -0
  161. package/dist/engine/slugs.d.ts +124 -0
  162. package/dist/engine/slugs.d.ts.map +1 -0
  163. package/dist/engine/trash.d.ts +25 -0
  164. package/dist/engine/trash.d.ts.map +1 -0
  165. package/dist/errors.d.ts +42 -0
  166. package/dist/errors.d.ts.map +1 -0
  167. package/dist/fields/builtin.d.ts +169 -0
  168. package/dist/fields/builtin.d.ts.map +1 -0
  169. package/dist/fields/index.d.ts +3 -0
  170. package/dist/fields/index.d.ts.map +1 -0
  171. package/dist/fields/registry.d.ts +35 -0
  172. package/dist/fields/registry.d.ts.map +1 -0
  173. package/dist/fields.d.ts +9 -0
  174. package/dist/fields.d.ts.map +1 -0
  175. package/dist/fields.js +1 -0
  176. package/dist/http/guard.d.ts +45 -0
  177. package/dist/http/guard.d.ts.map +1 -0
  178. package/dist/http/handler.d.ts +31 -0
  179. package/dist/http/handler.d.ts.map +1 -0
  180. package/dist/http/index.d.ts +13 -0
  181. package/dist/http/index.d.ts.map +1 -0
  182. package/dist/http/openapi.d.ts +5 -0
  183. package/dist/http/openapi.d.ts.map +1 -0
  184. package/dist/http/params.d.ts +32 -0
  185. package/dist/http/params.d.ts.map +1 -0
  186. package/dist/http/request-db.d.ts +19 -0
  187. package/dist/http/request-db.d.ts.map +1 -0
  188. package/dist/http/respond.d.ts +48 -0
  189. package/dist/http/respond.d.ts.map +1 -0
  190. package/dist/http/rich-text.d.ts +41 -0
  191. package/dist/http/rich-text.d.ts.map +1 -0
  192. package/dist/http/router.d.ts +55 -0
  193. package/dist/http/router.d.ts.map +1 -0
  194. package/dist/http/routes/access.d.ts +13 -0
  195. package/dist/http/routes/access.d.ts.map +1 -0
  196. package/dist/http/routes/admin.d.ts +28 -0
  197. package/dist/http/routes/admin.d.ts.map +1 -0
  198. package/dist/http/routes/ai.d.ts +26 -0
  199. package/dist/http/routes/ai.d.ts.map +1 -0
  200. package/dist/http/routes/auth.d.ts +13 -0
  201. package/dist/http/routes/auth.d.ts.map +1 -0
  202. package/dist/http/routes/documents.d.ts +24 -0
  203. package/dist/http/routes/documents.d.ts.map +1 -0
  204. package/dist/http/routes/generate.d.ts +5 -0
  205. package/dist/http/routes/generate.d.ts.map +1 -0
  206. package/dist/http/routes/media.d.ts +58 -0
  207. package/dist/http/routes/media.d.ts.map +1 -0
  208. package/dist/http/routes/panel.d.ts +20 -0
  209. package/dist/http/routes/panel.d.ts.map +1 -0
  210. package/dist/http/routes/system.d.ts +25 -0
  211. package/dist/http/routes/system.d.ts.map +1 -0
  212. package/dist/http/routes/webhooks.d.ts +17 -0
  213. package/dist/http/routes/webhooks.d.ts.map +1 -0
  214. package/dist/http/spec.d.ts +28 -0
  215. package/dist/http/spec.d.ts.map +1 -0
  216. package/dist/http.d.ts +17 -0
  217. package/dist/http.d.ts.map +1 -0
  218. package/dist/http.js +1 -0
  219. package/dist/i18n/index.d.ts +12 -0
  220. package/dist/i18n/index.d.ts.map +1 -0
  221. package/dist/i18n/names.d.ts +25 -0
  222. package/dist/i18n/names.d.ts.map +1 -0
  223. package/dist/ids.d.ts +28 -0
  224. package/dist/ids.d.ts.map +1 -0
  225. package/dist/index-2ddk43me.js +2 -0
  226. package/dist/index-2prbs05k.js +2 -0
  227. package/dist/index-385ggnge.js +2 -0
  228. package/dist/index-466cwb0b.js +2 -0
  229. package/dist/index-4qrep5f0.js +26 -0
  230. package/dist/index-67e458ws.js +2 -0
  231. package/dist/index-6m1kjq9g.js +2 -0
  232. package/dist/index-6w10rch0.js +3 -0
  233. package/dist/index-761dec5z.js +2 -0
  234. package/dist/index-8nzmqy0f.js +2 -0
  235. package/dist/index-8x2em6c8.js +14 -0
  236. package/dist/index-91fa1gzf.js +2 -0
  237. package/dist/index-9g2n7xa6.js +2 -0
  238. package/dist/index-a8jcwqsf.js +2 -0
  239. package/dist/index-abfzb1ve.js +2 -0
  240. package/dist/index-cv0hpz3d.js +2 -0
  241. package/dist/index-ebtj6ebd.js +0 -0
  242. package/dist/index-g041kfa5.js +18 -0
  243. package/dist/index-g4crf47y.js +0 -0
  244. package/dist/index-hbx67b20.js +7 -0
  245. package/dist/index-hpast878.js +40 -0
  246. package/dist/index-kc1j3h6z.js +2 -0
  247. package/dist/index-p2cqsmvw.js +2 -0
  248. package/dist/index-rg9tpg3p.js +5 -0
  249. package/dist/index-rw0hze6x.js +2 -0
  250. package/dist/index-s9x07zb3.js +2 -0
  251. package/dist/index-sgdnp83t.js +2 -0
  252. package/dist/index-szaq03qq.js +2 -0
  253. package/dist/index-vkwzdfte.js +5 -0
  254. package/dist/index-vzhxn50e.js +2 -0
  255. package/dist/index-x72d1hzh.js +2 -0
  256. package/dist/index-y8kzzn94.js +2 -0
  257. package/dist/index-ypcmns0v.js +2 -0
  258. package/dist/index.d.ts +25 -0
  259. package/dist/index.d.ts.map +1 -0
  260. package/dist/index.js +1 -0
  261. package/dist/jobs/runner.d.ts +77 -0
  262. package/dist/jobs/runner.d.ts.map +1 -0
  263. package/dist/jobs.d.ts +11 -0
  264. package/dist/jobs.d.ts.map +1 -0
  265. package/dist/jobs.js +1 -0
  266. package/dist/media/cloudflare.d.ts +58 -0
  267. package/dist/media/cloudflare.d.ts.map +1 -0
  268. package/dist/media/document.d.ts +29 -0
  269. package/dist/media/document.d.ts.map +1 -0
  270. package/dist/media/gc.d.ts +46 -0
  271. package/dist/media/gc.d.ts.map +1 -0
  272. package/dist/media/index.d.ts +20 -0
  273. package/dist/media/index.d.ts.map +1 -0
  274. package/dist/media/pipeline.d.ts +55 -0
  275. package/dist/media/pipeline.d.ts.map +1 -0
  276. package/dist/media/probe.d.ts +6 -0
  277. package/dist/media/probe.d.ts.map +1 -0
  278. package/dist/media/service.d.ts +26 -0
  279. package/dist/media/service.d.ts.map +1 -0
  280. package/dist/media/sharp.d.ts +28 -0
  281. package/dist/media/sharp.d.ts.map +1 -0
  282. package/dist/media/strip.d.ts +16 -0
  283. package/dist/media/strip.d.ts.map +1 -0
  284. package/dist/media/urls.d.ts +77 -0
  285. package/dist/media/urls.d.ts.map +1 -0
  286. package/dist/media/usages.d.ts +77 -0
  287. package/dist/media/usages.d.ts.map +1 -0
  288. package/dist/media/variants.d.ts +61 -0
  289. package/dist/media/variants.d.ts.map +1 -0
  290. package/dist/migrations.d.ts +115 -0
  291. package/dist/migrations.d.ts.map +1 -0
  292. package/dist/migrations.js +1 -0
  293. package/dist/panel.d.ts +31 -0
  294. package/dist/panel.d.ts.map +1 -0
  295. package/dist/plugins/indexnow.d.ts +82 -0
  296. package/dist/plugins/indexnow.d.ts.map +1 -0
  297. package/dist/plugins.d.ts +9 -0
  298. package/dist/plugins.d.ts.map +1 -0
  299. package/dist/plugins.js +1 -0
  300. package/dist/query.d.ts +40 -0
  301. package/dist/query.d.ts.map +1 -0
  302. package/dist/query.js +1 -0
  303. package/dist/run-bjge3v8e.js +6 -0
  304. package/dist/schema/describe.d.ts +19 -0
  305. package/dist/schema/describe.d.ts.map +1 -0
  306. package/dist/schema/index.d.ts +5 -0
  307. package/dist/schema/index.d.ts.map +1 -0
  308. package/dist/schema/plan.d.ts +20 -0
  309. package/dist/schema/plan.d.ts.map +1 -0
  310. package/dist/schema/snapshot.d.ts +24 -0
  311. package/dist/schema/snapshot.d.ts.map +1 -0
  312. package/dist/schema/system.d.ts +31 -0
  313. package/dist/schema/system.d.ts.map +1 -0
  314. package/dist/schema.d.ts +7 -0
  315. package/dist/schema.d.ts.map +1 -0
  316. package/dist/schema.js +1 -0
  317. package/dist/slugify.d.ts +31 -0
  318. package/dist/slugify.d.ts.map +1 -0
  319. package/dist/storage/bytes.d.ts +17 -0
  320. package/dist/storage/bytes.d.ts.map +1 -0
  321. package/dist/storage/http.d.ts +43 -0
  322. package/dist/storage/http.d.ts.map +1 -0
  323. package/dist/storage/local.d.ts +31 -0
  324. package/dist/storage/local.d.ts.map +1 -0
  325. package/dist/storage/providers.d.ts +95 -0
  326. package/dist/storage/providers.d.ts.map +1 -0
  327. package/dist/storage/sign.d.ts +53 -0
  328. package/dist/storage/sign.d.ts.map +1 -0
  329. package/dist/strings.d.ts +13 -0
  330. package/dist/strings.d.ts.map +1 -0
  331. package/dist/telemetry.d.ts +137 -0
  332. package/dist/telemetry.d.ts.map +1 -0
  333. package/dist/telemetry.js +1 -0
  334. package/dist/types/activity.d.ts +68 -0
  335. package/dist/types/activity.d.ts.map +1 -0
  336. package/dist/types/actor.d.ts +26 -0
  337. package/dist/types/actor.d.ts.map +1 -0
  338. package/dist/types/ai.d.ts +357 -0
  339. package/dist/types/ai.d.ts.map +1 -0
  340. package/dist/types/api.d.ts +268 -0
  341. package/dist/types/api.d.ts.map +1 -0
  342. package/dist/types/auth.d.ts +310 -0
  343. package/dist/types/auth.d.ts.map +1 -0
  344. package/dist/types/config.d.ts +647 -0
  345. package/dist/types/config.d.ts.map +1 -0
  346. package/dist/types/database.d.ts +75 -0
  347. package/dist/types/database.d.ts.map +1 -0
  348. package/dist/types/editor.d.ts +166 -0
  349. package/dist/types/editor.d.ts.map +1 -0
  350. package/dist/types/events.d.ts +72 -0
  351. package/dist/types/events.d.ts.map +1 -0
  352. package/dist/types/fields.d.ts +142 -0
  353. package/dist/types/fields.d.ts.map +1 -0
  354. package/dist/types/hooks.d.ts +142 -0
  355. package/dist/types/hooks.d.ts.map +1 -0
  356. package/dist/types/index.d.ts +25 -0
  357. package/dist/types/index.d.ts.map +1 -0
  358. package/dist/types/instance.d.ts +263 -0
  359. package/dist/types/instance.d.ts.map +1 -0
  360. package/dist/types/jobs.d.ts +78 -0
  361. package/dist/types/jobs.d.ts.map +1 -0
  362. package/dist/types/json.d.ts +24 -0
  363. package/dist/types/json.d.ts.map +1 -0
  364. package/dist/types/locales.d.ts +30 -0
  365. package/dist/types/locales.d.ts.map +1 -0
  366. package/dist/types/media.d.ts +342 -0
  367. package/dist/types/media.d.ts.map +1 -0
  368. package/dist/types/panel.d.ts +249 -0
  369. package/dist/types/panel.d.ts.map +1 -0
  370. package/dist/types/plugin.d.ts +194 -0
  371. package/dist/types/plugin.d.ts.map +1 -0
  372. package/dist/types/query.d.ts +101 -0
  373. package/dist/types/query.d.ts.map +1 -0
  374. package/dist/types/schema.d.ts +203 -0
  375. package/dist/types/schema.d.ts.map +1 -0
  376. package/dist/types/storage.d.ts +61 -0
  377. package/dist/types/storage.d.ts.map +1 -0
  378. package/dist/types/telemetry.d.ts +14 -0
  379. package/dist/types/telemetry.d.ts.map +1 -0
  380. package/dist/types/trash.d.ts +42 -0
  381. package/dist/types/trash.d.ts.map +1 -0
  382. package/dist/types/webhooks.d.ts +133 -0
  383. package/dist/types/webhooks.d.ts.map +1 -0
  384. package/dist/types.d.ts +8 -0
  385. package/dist/types.d.ts.map +1 -0
  386. package/dist/types.js +1 -0
  387. package/dist/uploads.d.ts +22 -0
  388. package/dist/uploads.d.ts.map +1 -0
  389. package/dist/uploads.js +9 -0
  390. package/dist/webhooks/index.d.ts +10 -0
  391. package/dist/webhooks/index.d.ts.map +1 -0
  392. package/dist/webhooks/job.d.ts +17 -0
  393. package/dist/webhooks/job.d.ts.map +1 -0
  394. package/dist/webhooks/service.d.ts +53 -0
  395. package/dist/webhooks/service.d.ts.map +1 -0
  396. package/dist/webhooks/sign.d.ts +26 -0
  397. package/dist/webhooks/sign.d.ts.map +1 -0
  398. package/dist/webhooks.d.ts +10 -0
  399. package/dist/webhooks.d.ts.map +1 -0
  400. package/dist/webhooks.js +1 -0
  401. package/package.json +187 -4
@@ -0,0 +1,342 @@
1
+ import type { Actor, OperationSource } from "./actor";
2
+ import type { JsonObject } from "./json";
3
+ import type { StorageAdapter } from "./storage";
4
+ /**
5
+ * Where a file is in its life (section 6).
6
+ *
7
+ * `orphaned` is the state that makes the whole design work: a file that lost
8
+ * its last reference stops being counted as used but keeps serving, so an
9
+ * accidental delete or a reverted edit costs nothing for `retention.purgeAfter`.
10
+ * `purging` is only ever seen by a collector that died mid-sweep.
11
+ */
12
+ export type MediaStatus = "active" | "orphaned" | "purging";
13
+ /** Relative, `0..1`, origin top-left. Resolution-independent by construction. */
14
+ export interface FocalPoint {
15
+ x: number;
16
+ y: number;
17
+ }
18
+ /** A rectangle in the pixels of the stored original. */
19
+ export interface CropRect {
20
+ x: number;
21
+ y: number;
22
+ width: number;
23
+ height: number;
24
+ }
25
+ /**
26
+ * A file, as everything outside the engine sees it.
27
+ *
28
+ * `crop` and `variants` are stored inside the `metadata` column under those
29
+ * two reserved keys and surfaced here, because a panel needs them and nobody
30
+ * should have to know they share a column with user metadata.
31
+ */
32
+ export interface MediaDocument {
33
+ id: string;
34
+ filename: string;
35
+ mimeType: string;
36
+ size: number;
37
+ width: number | null;
38
+ height: number | null;
39
+ storageKey: string;
40
+ checksum: string | null;
41
+ /** Localized alternative text, keyed by locale like any content field. */
42
+ alt: Record<string, string>;
43
+ focalPoint: FocalPoint | null;
44
+ crop: CropRect | null;
45
+ status: MediaStatus;
46
+ orphanedAt: string | null;
47
+ /** When the collector will delete it. `null` means never. */
48
+ purgeAfter: string | null;
49
+ /** Why the last purge attempt failed, so it is not retried blindly. */
50
+ purgeError: string | null;
51
+ /** Everything except the two keys the engine reserves. */
52
+ metadata: JsonObject;
53
+ /** Named sizes that exist as stored objects right now. */
54
+ variants: string[];
55
+ createdBy: string | null;
56
+ createdAt: string | null;
57
+ updatedAt: string | null;
58
+ /** The public URL of the original, from the storage adapter. */
59
+ url: string;
60
+ }
61
+ /** One place a document points at a file. */
62
+ export interface MediaUsage {
63
+ mediaId: string;
64
+ collection: string;
65
+ documentId: string;
66
+ field: string;
67
+ /** Empty for a field that is not localized. */
68
+ locale: string;
69
+ createdAt: string | null;
70
+ }
71
+ /** One file used by one document, as `cms.media.forDocuments()` returns it. */
72
+ export interface MediaDocumentUsage {
73
+ media: MediaDocument;
74
+ field: string;
75
+ /** Null for a field that is not localized: the file is used in every locale. */
76
+ locale: string | null;
77
+ }
78
+ export interface MediaForDocumentsArgs {
79
+ /** Only these documents. All of the collection's, by default. */
80
+ ids?: readonly string[];
81
+ }
82
+ /** The fields of a file a URL is made of. A `MediaDocument` has them all. */
83
+ export type MediaUrlInput = Pick<MediaDocument, "id" | "filename" | "mimeType"> & Partial<Pick<MediaDocument, "width" | "height" | "crop" | "focalPoint">>;
84
+ export type MediaImageInput = MediaUrlInput & Partial<Pick<MediaDocument, "alt">>;
85
+ export interface MediaUrlOptions {
86
+ /** A name from `uploads.images.variants.sizes`; the original when omitted. */
87
+ variant?: string;
88
+ }
89
+ export interface MediaSrcsetOptions {
90
+ /**
91
+ * The sizes to offer, by name. By default every declared size that keeps
92
+ * the picture's shape: `inside` and `outside` fits, and one-sided boxes.
93
+ */
94
+ sizes?: string[];
95
+ }
96
+ export interface MediaImageOptions {
97
+ /** One named size as the `src`, without a `srcset`: a thumbnail, a card. */
98
+ variant?: string;
99
+ /** The `sizes` attribute that goes with the `srcset`, e.g. `(min-width: 768px) 680px, 100vw`. */
100
+ sizes?: string;
101
+ /** The sizes the `srcset` offers; see `MediaSrcsetOptions.sizes`. */
102
+ srcset?: string[];
103
+ /** Which language of the library's alt text; the default locale otherwise. */
104
+ locale?: string;
105
+ }
106
+ /** An `<img>`, as data. Every field maps to the attribute of the same name. */
107
+ export interface MediaImage {
108
+ src: string;
109
+ width: number | null;
110
+ height: number | null;
111
+ srcset: string | null;
112
+ sizes: string | null;
113
+ /** The library's alt text in the requested locale, or null when there is none. */
114
+ alt: string | null;
115
+ }
116
+ export interface MediaRichTextOptions {
117
+ /** `html` by default. */
118
+ format?: "html" | "markdown" | "text";
119
+ /** Which language of the library's alt text to fall back on. */
120
+ locale?: string;
121
+ /** The `sizes` attribute for every image's `srcset`. */
122
+ sizes?: string;
123
+ /**
124
+ * `lazy` by default: images in prose are rarely what a reader sees first.
125
+ * `eager` for a document whose first image is the largest thing on screen.
126
+ */
127
+ loading?: "lazy" | "eager";
128
+ }
129
+ /** What an upload may be handed. All of them end up as bytes. */
130
+ export type MediaSource = Blob | Uint8Array | ArrayBuffer | ReadableStream<Uint8Array>;
131
+ export interface MediaUploadArgs {
132
+ file: MediaSource;
133
+ /** Required unless `file` is a `File`, which already carries one. */
134
+ filename?: string;
135
+ /** Sniffed from the bytes when absent or when the client sent octet-stream. */
136
+ contentType?: string;
137
+ /** A string is stored under `locale`; an object is stored as given. */
138
+ alt?: string | Record<string, string>;
139
+ locale?: string;
140
+ metadata?: JsonObject;
141
+ actor?: Actor | null;
142
+ source?: OperationSource;
143
+ }
144
+ export interface MediaListArgs {
145
+ status?: MediaStatus;
146
+ /** `image/*` style wildcards allowed. */
147
+ mimeType?: string;
148
+ /** Case-insensitive match on the filename. */
149
+ search?: string;
150
+ limit?: number;
151
+ cursor?: string;
152
+ actor?: Actor | null;
153
+ }
154
+ export interface MediaListResult {
155
+ docs: MediaDocument[];
156
+ limit: number;
157
+ hasNextPage: boolean;
158
+ cursor: string | null;
159
+ }
160
+ export interface MediaUpdateArgs {
161
+ id: string;
162
+ filename?: string;
163
+ /** A string writes one locale; an object replaces the whole map. */
164
+ alt?: string | Record<string, string>;
165
+ locale?: string;
166
+ /** `null` clears it. Requires `uploads.images.focalPoint`. */
167
+ focalPoint?: FocalPoint | null;
168
+ /** `null` clears it. Requires `uploads.images.crop`. */
169
+ crop?: CropRect | null;
170
+ /** Merged into the existing metadata; the reserved keys are refused. */
171
+ metadata?: JsonObject;
172
+ actor?: Actor | null;
173
+ source?: OperationSource;
174
+ }
175
+ export interface MediaDeleteArgs {
176
+ id: string;
177
+ /**
178
+ * Deletes a file that documents still point at.
179
+ *
180
+ * Without it a referenced file is refused, because "delete" in a media
181
+ * library is routinely clicked on something that is on a page right now.
182
+ */
183
+ force?: boolean;
184
+ actor?: Actor | null;
185
+ source?: OperationSource;
186
+ }
187
+ export interface MediaKeepArgs {
188
+ id: string;
189
+ actor?: Actor | null;
190
+ source?: OperationSource;
191
+ }
192
+ export interface MediaVariantArgs {
193
+ id: string;
194
+ /**
195
+ * A name from `uploads.images.variants.sizes`. Omit for the original.
196
+ *
197
+ * Only declared names are accepted. Arbitrary dimensions in a URL are a way
198
+ * to make a stranger fill a bucket and burn CPU, one pixel at a time.
199
+ */
200
+ variant?: string;
201
+ /** Renders again even if a stored copy exists. */
202
+ refresh?: boolean;
203
+ }
204
+ /**
205
+ * One answer to "give me this file at this size".
206
+ *
207
+ * `cached` says whether the bytes came from storage or were rendered during
208
+ * this call, which is what makes the on-demand pipeline observable instead of
209
+ * a guess about CDN behaviour.
210
+ */
211
+ export interface MediaVariantResult {
212
+ media: MediaDocument;
213
+ variant: string | null;
214
+ key: string;
215
+ contentType: string;
216
+ width: number | null;
217
+ height: number | null;
218
+ size: number | null;
219
+ body: ReadableStream;
220
+ url: string;
221
+ cached: boolean;
222
+ /**
223
+ * Why the named size could not be rendered, when it could not.
224
+ *
225
+ * The original is served in its place and nothing is stored, so the next
226
+ * request tries again — the usual cause is a quota that resets, or a
227
+ * service that comes back. Null whenever the answer is what was asked for.
228
+ * An HTTP layer should not cache a fallback for long.
229
+ */
230
+ processingError: string | null;
231
+ }
232
+ export interface MediaCollectArgs {
233
+ /** The moment the sweep runs as. Injectable so a test need not wait. */
234
+ now?: Date;
235
+ limit?: number;
236
+ }
237
+ export interface MediaCollectReport {
238
+ examined: number;
239
+ purged: number;
240
+ /** Files that were used again between being orphaned and being collected. */
241
+ reclaimed: number;
242
+ failed: number;
243
+ }
244
+ /**
245
+ * `cms.media`.
246
+ *
247
+ * Media is a high-level setting rather than a plugin (section 3), so it is a
248
+ * first-class part of the instance: the same object the REST routes call in
249
+ * stage 7 and the panel calls in stage 8, available without HTTP so a seed
250
+ * script or a migration can upload a file.
251
+ */
252
+ export interface CmsMedia {
253
+ upload(args: MediaUploadArgs): Promise<MediaDocument>;
254
+ list(args?: MediaListArgs): Promise<MediaListResult>;
255
+ get(id: string): Promise<MediaDocument | null>;
256
+ update(args: MediaUpdateArgs): Promise<MediaDocument>;
257
+ /** Removes the record, the original and every stored variant. */
258
+ delete(args: MediaDeleteArgs): Promise<MediaDocument>;
259
+ /** The panel's "Keep" button: clears the purge deadline of an orphan. */
260
+ keep(args: MediaKeepArgs): Promise<MediaDocument>;
261
+ /** Where a file is used. Empty for an orphan, by definition. */
262
+ usages(id: string): Promise<MediaUsage[]>;
263
+ /** The original or a named size, rendering and storing it if needed. */
264
+ variant(args: MediaVariantArgs): Promise<MediaVariantResult | null>;
265
+ /** The `media-gc` sweep. Also registered in `cms.jobs`. */
266
+ collect(args?: MediaCollectArgs): Promise<MediaCollectReport>;
267
+ /** The configured adapter, built on first use. */
268
+ storage(): Promise<StorageAdapter>;
269
+ /**
270
+ * Several files by id, in one query. Ids that do not exist are absent from
271
+ * the map rather than an error: a page that references a deleted picture
272
+ * should lose the picture, not the page.
273
+ */
274
+ getMany(ids: readonly string[]): Promise<Map<string, MediaDocument>>;
275
+ /**
276
+ * Every file a collection's documents use, per document — read from the
277
+ * reference count the engine already keeps, so it costs two queries for
278
+ * the whole collection instead of a parse of every document. What an
279
+ * image sitemap is built from.
280
+ */
281
+ forDocuments(collection: string, args?: MediaForDocumentsArgs): Promise<Map<string, MediaDocumentUsage[]>>;
282
+ /**
283
+ * Where a file or one of its sizes is served. Synchronous: it is
284
+ * arithmetic on the configuration and the record, never a storage call.
285
+ * Uses `uploads.publicPath` when the deployment has one.
286
+ */
287
+ url(media: MediaUrlInput, options?: MediaUrlOptions): string;
288
+ /** The declared sizes that keep the file's shape, as a `srcset`; null when there is no choice. */
289
+ srcset(media: MediaUrlInput, options?: MediaSrcsetOptions): string | null;
290
+ /** `src`, `srcset`, `width`, `height` and `alt` for an `<img>`. */
291
+ image(media: MediaImageInput, options?: MediaImageOptions): MediaImage;
292
+ /**
293
+ * A rich-text value as HTML (or Markdown, or text), with every library
294
+ * image resolved: its public URL, its dimensions, a `srcset` of the
295
+ * declared sizes, lazy loading, and the library's alt text where the
296
+ * editor left the node's empty. One query for all the images.
297
+ */
298
+ renderRichText(value: unknown, options?: MediaRichTextOptions): Promise<string>;
299
+ }
300
+ export type ImageFormat = "jpeg" | "png" | "gif" | "webp" | "avif" | "svg" | "tiff";
301
+ /** What the built-in header parser can tell without decoding an image. */
302
+ export interface ImageInfo {
303
+ format: ImageFormat;
304
+ contentType: string;
305
+ width: number;
306
+ height: number;
307
+ }
308
+ /** One rendering request, in the vocabulary every image library shares. */
309
+ export interface ImageTransform {
310
+ width?: number;
311
+ height?: number;
312
+ fit?: "cover" | "contain" | "inside" | "outside";
313
+ /** Where `cover` should crop around. Relative, so it survives a resize. */
314
+ position?: FocalPoint;
315
+ /** Applied to the original pixels, before any resize. */
316
+ crop?: CropRect;
317
+ format?: "webp" | "avif" | "jpeg" | "png";
318
+ quality?: number;
319
+ stripMetadata?: boolean;
320
+ }
321
+ export interface ProcessedImage {
322
+ data: Uint8Array;
323
+ contentType: string;
324
+ width: number;
325
+ height: number;
326
+ }
327
+ /**
328
+ * The pluggable renderer.
329
+ *
330
+ * Deliberately not built in. A codec is either a native module, which has no
331
+ * place in a package that has to load in a Worker, or a service call, which
332
+ * has no place in a package that has to run offline. Everything the engine can
333
+ * do without one — reading dimensions, enforcing limits, stripping EXIF — it
334
+ * does itself; everything that needs real pixels goes through here.
335
+ */
336
+ export interface ImageProcessor {
337
+ /** `sharp`, `cloudflare-images`. Printed by `cms.inspect()`. */
338
+ readonly id: string;
339
+ supports(contentType: string): boolean;
340
+ transform(source: Uint8Array, transform: ImageTransform, info: ImageInfo): Promise<ProcessedImage>;
341
+ }
342
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/types/media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,249 @@
1
+ import type { EditorSchemaDescription } from "./editor";
2
+ import type { JsonValue } from "./json";
3
+ /**
4
+ * What the panel is told about this deployment (stage 8).
5
+ *
6
+ * The panel is one static bundle serving every configuration, so everything
7
+ * it renders — which collections exist, which fields they carry, which
8
+ * languages are registered, whether there is a trash — has to arrive as data.
9
+ * `GET /panel` is that payload, and this file is its type.
10
+ *
11
+ * Two rules decide what may appear here:
12
+ *
13
+ * 1. **Only what survives JSON.** An access rule, a `condition` and a hook
14
+ * are functions; they stay on the server and the panel is told *that they
15
+ * exist* instead of being handed something it cannot run.
16
+ * 2. **Resolved, not raw.** `purgeAfter: "30d"` is also given in milliseconds
17
+ * because a countdown should not re-implement the duration grammar, and a
18
+ * locale arrives with the name of its language, because `pl` is not a
19
+ * label a switcher can show.
20
+ */
21
+ /** One entry in the AI menu next to a field. Keys come from `field.ai`. */
22
+ export interface PanelFieldAiAction {
23
+ key: string;
24
+ label: string;
25
+ /** Present when the action overrides `ai.defaultModel`. */
26
+ model?: {
27
+ provider: string;
28
+ model: string;
29
+ };
30
+ }
31
+ /**
32
+ * Whether the caller may see and write a field.
33
+ *
34
+ * Evaluated with the actor but **without a record**, because the panel asks
35
+ * before a document is chosen — so a rule that reads `record` answers for the
36
+ * generic case and the engine remains the authority on the specific one. A
37
+ * rule that throws without a record counts as permitted here and is still
38
+ * enforced on the write.
39
+ */
40
+ export interface PanelAccessFlags {
41
+ read: boolean;
42
+ update: boolean;
43
+ }
44
+ export interface PanelField {
45
+ name: string;
46
+ type: string;
47
+ label: string;
48
+ description?: string;
49
+ required: boolean;
50
+ localized: boolean;
51
+ readOnly: boolean;
52
+ unique: boolean;
53
+ /** Server-side deterministic generator is available for this field. */
54
+ generate: boolean;
55
+ defaultValue?: JsonValue;
56
+ /**
57
+ * The field type's own options, minus everything that is a function.
58
+ *
59
+ * `select` carries its choices here, `relation` its target, `media` its
60
+ * accept list — the panel reads them by field type, exactly as the field
61
+ * type's `Input` would.
62
+ */
63
+ options: Record<string, JsonValue>;
64
+ admin: {
65
+ placeholder?: string;
66
+ hidden: boolean;
67
+ };
68
+ ai: PanelFieldAiAction[];
69
+ access: PanelAccessFlags;
70
+ }
71
+ export interface PanelCollection {
72
+ name: string;
73
+ slug: string;
74
+ label: string;
75
+ kind: "collection" | "global";
76
+ group?: string;
77
+ description?: string;
78
+ /** Field used as the row title. Resolved here so the panel never guesses. */
79
+ useAsTitle: string | null;
80
+ defaultColumns: string[];
81
+ fields: PanelField[];
82
+ /**
83
+ * What this actor may do, evaluated without a record.
84
+ *
85
+ * Drives whether the panel offers a "New" button, not whether the write
86
+ * succeeds: a rule that depends on the document is answered properly by the
87
+ * engine when the document exists.
88
+ */
89
+ can: {
90
+ read: boolean;
91
+ create: boolean;
92
+ update: boolean;
93
+ delete: boolean;
94
+ };
95
+ }
96
+ export interface PanelLocale {
97
+ code: string;
98
+ /** The English name of the language, looked up from the code. */
99
+ name: string;
100
+ rtl: boolean;
101
+ isDefault: boolean;
102
+ }
103
+ /**
104
+ * The languages, as the switcher needs them.
105
+ *
106
+ * Configuration, not a registry: `i18n.locales` is a list of codes, so the
107
+ * panel renders it and never offers to edit it.
108
+ */
109
+ export interface PanelI18n {
110
+ locales: PanelLocale[];
111
+ defaultLocale: string;
112
+ }
113
+ export interface PanelMedia {
114
+ enabled: boolean;
115
+ /** Declared sizes. Nothing else may be requested from a URL. */
116
+ variants: string[];
117
+ variantMode: "on-demand" | "pregenerate" | null;
118
+ focalPoint: boolean;
119
+ crop: boolean;
120
+ accept: string[];
121
+ maxFileSize: string | null;
122
+ maxFileSizeBytes: number | null;
123
+ /** How long an unused file keeps serving, for the countdown. */
124
+ purgeAfter: string | null;
125
+ purgeAfterMs: number | null;
126
+ }
127
+ export interface PanelTrash {
128
+ enabled: boolean;
129
+ purgeAfter: string | null;
130
+ purgeAfterMs: number | null;
131
+ }
132
+ export interface PanelAuth {
133
+ methods: string[];
134
+ twoFactor: boolean;
135
+ apiKeys: boolean;
136
+ sso: string | null;
137
+ /**
138
+ * Whether the magic-link and password-reset routes exist at all.
139
+ *
140
+ * They are registered only when `admin.auth.deliverToken` is configured, so
141
+ * a sign-in screen that offered them unconditionally would offer a 404.
142
+ */
143
+ magicLink: boolean;
144
+ passwordReset: boolean;
145
+ /**
146
+ * Whether this deployment has no account yet.
147
+ *
148
+ * `true` turns the sign-in screen into a "claim this CMS" screen: there is
149
+ * nobody to sign in as, and `POST /auth/setup` is open for exactly as long
150
+ * as that sentence stays true.
151
+ */
152
+ setupRequired: boolean;
153
+ }
154
+ export interface PanelRbac {
155
+ enabled: boolean;
156
+ roles: string[];
157
+ customRoles: boolean;
158
+ }
159
+ /**
160
+ * AI, as the panel sees it.
161
+ *
162
+ * `configured` is "there is an `ai` section"; `runtime` is "something answers
163
+ * the AI routes". They are still two flags rather than one because they fail
164
+ * for different reasons — no section, or no credentials for the provider the
165
+ * default model names — and a greyed-out button with no explanation is a bug
166
+ * report.
167
+ */
168
+ export interface PanelAi {
169
+ configured: boolean;
170
+ runtime: boolean;
171
+ defaultModel: {
172
+ provider: string;
173
+ model: string;
174
+ } | null;
175
+ /**
176
+ * Whether the panel-wide assistant is switched on for this deployment.
177
+ *
178
+ * The composer is rendered either way. A disabled composer that names its
179
+ * reason is a feature somebody can fix; a composer that is simply not there
180
+ * is a feature nobody reports as missing.
181
+ */
182
+ assistant: boolean;
183
+ /** Effective assistant settings. Instructions themselves never leave the server. */
184
+ assistantSettings: {
185
+ model: {
186
+ provider: string;
187
+ model: string;
188
+ };
189
+ maxTurns: number;
190
+ maxToolCalls: number;
191
+ timeoutMs: number;
192
+ customInstructions: boolean;
193
+ } | null;
194
+ /** Every registered action id, including the ones plugins added. */
195
+ actions: string[];
196
+ /** Whether provider keys can be managed from the settings screen. */
197
+ managedKeys: boolean;
198
+ }
199
+ export interface PanelWebhooks {
200
+ enabled: boolean;
201
+ managedInAdmin: boolean;
202
+ /** Whether the delivery endpoints answer. */
203
+ runtime: boolean;
204
+ /** The event catalogue, so the subscription form is a picker. */
205
+ events: string[];
206
+ }
207
+ /**
208
+ * A plugin, as the panel can act on it.
209
+ *
210
+ * `scripts` is the whole of the client extension story: the panel is one
211
+ * static bundle compiled before any plugin existed, so a plugin that wants
212
+ * to render something ships a script the panel loads at boot, and that
213
+ * script registers a field control or a view against the global the panel
214
+ * exposes. The alternative — shipping React components through JSON — is not
215
+ * a thing that can work.
216
+ */
217
+ export interface PanelPlugin {
218
+ id: string;
219
+ navItems: {
220
+ label: string;
221
+ path: string;
222
+ icon?: string;
223
+ }[];
224
+ /** URLs, relative to `basePath` unless absolute. Loaded in order. */
225
+ scripts: string[];
226
+ /** Field types the plugin says it renders, for a diagnostic when it fails. */
227
+ fields: string[];
228
+ }
229
+ export interface PanelConfig {
230
+ title: string;
231
+ /** Where the API is mounted, absolute: every request the panel makes. */
232
+ basePath: string;
233
+ /** Where the panel itself is mounted, absolute: its router's prefix. */
234
+ panelPath: string;
235
+ collections: PanelCollection[];
236
+ globals: PanelCollection[];
237
+ i18n: PanelI18n;
238
+ media: PanelMedia;
239
+ trash: PanelTrash;
240
+ auth: PanelAuth;
241
+ rbac: PanelRbac;
242
+ ai: PanelAi;
243
+ webhooks: PanelWebhooks;
244
+ /** Rich-text nodes and marks, including the ones plugins registered. */
245
+ editor: EditorSchemaDescription;
246
+ /** Installed plugins and what they contribute to this screen. */
247
+ plugins: PanelPlugin[];
248
+ }
249
+ //# sourceMappingURL=panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/types/panel.ts"],"names":[],"mappings":"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"}