gazetta 0.7.0 → 0.8.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 (738) hide show
  1. package/admin-dist/assets/index-CBeq0rRb.js +693 -0
  2. package/admin-dist/assets/index-Dtg1dTZQ.css +1 -0
  3. package/admin-dist/assets/rolldown-runtime-BYbx6iT9.js +1 -0
  4. package/admin-dist/assets/{vendor-primevue-C0Q_YTCb.js → vendor-primevue-CBGHkaXv.js} +183 -39
  5. package/admin-dist/assets/{vendor-react-BipDVGow.js → vendor-react-BdW_kNCG.js} +2 -2
  6. package/admin-dist/assets/vendor-rjsf-lN2SztQt.js +33 -0
  7. package/admin-dist/assets/vendor-tiptap-C36yDquB.js +141 -0
  8. package/admin-dist/assets/vendor-vue-Bt5uR1VW.js +1 -0
  9. package/admin-dist/assets/workbox-window.prod.es5-DGMtIXHc.js +2 -0
  10. package/admin-dist/index.html +8 -8
  11. package/admin-dist/sw.js +1 -0
  12. package/dist/admin-api/archived-name-conflict.d.ts +31 -0
  13. package/dist/admin-api/archived-name-conflict.d.ts.map +1 -0
  14. package/dist/admin-api/archived-name-conflict.js +226 -0
  15. package/dist/admin-api/archived-name-conflict.js.map +1 -0
  16. package/dist/admin-api/cache-stats-logger.d.ts +83 -0
  17. package/dist/admin-api/cache-stats-logger.d.ts.map +1 -0
  18. package/dist/admin-api/cache-stats-logger.js +59 -0
  19. package/dist/admin-api/cache-stats-logger.js.map +1 -0
  20. package/dist/admin-api/hook-audit-emitter.d.ts +38 -0
  21. package/dist/admin-api/hook-audit-emitter.d.ts.map +1 -0
  22. package/dist/admin-api/hook-audit-emitter.js +21 -0
  23. package/dist/admin-api/hook-audit-emitter.js.map +1 -0
  24. package/dist/admin-api/index.d.ts +84 -0
  25. package/dist/admin-api/index.d.ts.map +1 -1
  26. package/dist/admin-api/index.js +254 -9
  27. package/dist/admin-api/index.js.map +1 -1
  28. package/dist/admin-api/middleware/audit.d.ts +25 -0
  29. package/dist/admin-api/middleware/audit.d.ts.map +1 -0
  30. package/dist/admin-api/middleware/audit.js +65 -0
  31. package/dist/admin-api/middleware/audit.js.map +1 -0
  32. package/dist/admin-api/middleware/capability.d.ts +8 -0
  33. package/dist/admin-api/middleware/capability.d.ts.map +1 -0
  34. package/dist/admin-api/middleware/capability.js +65 -0
  35. package/dist/admin-api/middleware/capability.js.map +1 -0
  36. package/dist/admin-api/middleware/principal.d.ts +18 -0
  37. package/dist/admin-api/middleware/principal.d.ts.map +1 -0
  38. package/dist/admin-api/middleware/principal.js +128 -0
  39. package/dist/admin-api/middleware/principal.js.map +1 -0
  40. package/dist/admin-api/routes/archive-review.d.ts +80 -0
  41. package/dist/admin-api/routes/archive-review.d.ts.map +1 -0
  42. package/dist/admin-api/routes/archive-review.js +70 -0
  43. package/dist/admin-api/routes/archive-review.js.map +1 -0
  44. package/dist/admin-api/routes/archive.d.ts +145 -0
  45. package/dist/admin-api/routes/archive.d.ts.map +1 -0
  46. package/dist/admin-api/routes/archive.js +540 -0
  47. package/dist/admin-api/routes/archive.js.map +1 -0
  48. package/dist/admin-api/routes/assets.d.ts +6 -1
  49. package/dist/admin-api/routes/assets.d.ts.map +1 -1
  50. package/dist/admin-api/routes/assets.js +167 -14
  51. package/dist/admin-api/routes/assets.js.map +1 -1
  52. package/dist/admin-api/routes/audit.d.ts +71 -0
  53. package/dist/admin-api/routes/audit.d.ts.map +1 -0
  54. package/dist/admin-api/routes/audit.js +178 -0
  55. package/dist/admin-api/routes/audit.js.map +1 -0
  56. package/dist/admin-api/routes/compare.d.ts.map +1 -1
  57. package/dist/admin-api/routes/compare.js +3 -2
  58. package/dist/admin-api/routes/compare.js.map +1 -1
  59. package/dist/admin-api/routes/fields.d.ts.map +1 -1
  60. package/dist/admin-api/routes/fields.js +2 -1
  61. package/dist/admin-api/routes/fields.js.map +1 -1
  62. package/dist/admin-api/routes/fragments.d.ts +13 -1
  63. package/dist/admin-api/routes/fragments.d.ts.map +1 -1
  64. package/dist/admin-api/routes/fragments.js +127 -92
  65. package/dist/admin-api/routes/fragments.js.map +1 -1
  66. package/dist/admin-api/routes/health.d.ts +60 -0
  67. package/dist/admin-api/routes/health.d.ts.map +1 -0
  68. package/dist/admin-api/routes/health.js +65 -0
  69. package/dist/admin-api/routes/health.js.map +1 -0
  70. package/dist/admin-api/routes/history.d.ts +2 -1
  71. package/dist/admin-api/routes/history.d.ts.map +1 -1
  72. package/dist/admin-api/routes/history.js +26 -4
  73. package/dist/admin-api/routes/history.js.map +1 -1
  74. package/dist/admin-api/routes/pages.d.ts +20 -1
  75. package/dist/admin-api/routes/pages.d.ts.map +1 -1
  76. package/dist/admin-api/routes/pages.js +157 -117
  77. package/dist/admin-api/routes/pages.js.map +1 -1
  78. package/dist/admin-api/routes/preview.d.ts.map +1 -1
  79. package/dist/admin-api/routes/preview.js +56 -17
  80. package/dist/admin-api/routes/preview.js.map +1 -1
  81. package/dist/admin-api/routes/publish.d.ts +19 -1
  82. package/dist/admin-api/routes/publish.d.ts.map +1 -1
  83. package/dist/admin-api/routes/publish.js +508 -92
  84. package/dist/admin-api/routes/publish.js.map +1 -1
  85. package/dist/admin-api/routes/rename.d.ts +62 -0
  86. package/dist/admin-api/routes/rename.d.ts.map +1 -0
  87. package/dist/admin-api/routes/rename.js +366 -0
  88. package/dist/admin-api/routes/rename.js.map +1 -0
  89. package/dist/admin-api/routes/site.d.ts.map +1 -1
  90. package/dist/admin-api/routes/site.js +6 -18
  91. package/dist/admin-api/routes/site.js.map +1 -1
  92. package/dist/admin-api/routes/system.d.ts +23 -0
  93. package/dist/admin-api/routes/system.d.ts.map +1 -0
  94. package/dist/admin-api/routes/system.js +115 -0
  95. package/dist/admin-api/routes/system.js.map +1 -0
  96. package/dist/admin-api/routes/templates.d.ts +11 -1
  97. package/dist/admin-api/routes/templates.d.ts.map +1 -1
  98. package/dist/admin-api/routes/templates.js +36 -3
  99. package/dist/admin-api/routes/templates.js.map +1 -1
  100. package/dist/admin-api/routes/validation.d.ts +47 -0
  101. package/dist/admin-api/routes/validation.d.ts.map +1 -0
  102. package/dist/admin-api/routes/validation.js +120 -0
  103. package/dist/admin-api/routes/validation.js.map +1 -0
  104. package/dist/admin-api/schemas/archive.d.ts +124 -0
  105. package/dist/admin-api/schemas/archive.d.ts.map +1 -0
  106. package/dist/admin-api/schemas/archive.js +93 -0
  107. package/dist/admin-api/schemas/archive.js.map +1 -0
  108. package/dist/admin-api/schemas/assets.d.ts +16 -0
  109. package/dist/admin-api/schemas/assets.d.ts.map +1 -1
  110. package/dist/admin-api/schemas/assets.js +15 -0
  111. package/dist/admin-api/schemas/assets.js.map +1 -1
  112. package/dist/admin-api/schemas/audit.d.ts +175 -0
  113. package/dist/admin-api/schemas/audit.d.ts.map +1 -0
  114. package/dist/admin-api/schemas/audit.js +91 -0
  115. package/dist/admin-api/schemas/audit.js.map +1 -0
  116. package/dist/admin-api/schemas/error.d.ts +94 -0
  117. package/dist/admin-api/schemas/error.d.ts.map +1 -0
  118. package/dist/admin-api/schemas/error.js +79 -0
  119. package/dist/admin-api/schemas/error.js.map +1 -0
  120. package/dist/admin-api/schemas/fragments.d.ts +2 -0
  121. package/dist/admin-api/schemas/fragments.d.ts.map +1 -1
  122. package/dist/admin-api/schemas/fragments.js +4 -0
  123. package/dist/admin-api/schemas/fragments.js.map +1 -1
  124. package/dist/admin-api/schemas/index.d.ts +8 -0
  125. package/dist/admin-api/schemas/index.d.ts.map +1 -1
  126. package/dist/admin-api/schemas/index.js +8 -0
  127. package/dist/admin-api/schemas/index.js.map +1 -1
  128. package/dist/admin-api/schemas/pages.d.ts +2 -0
  129. package/dist/admin-api/schemas/pages.d.ts.map +1 -1
  130. package/dist/admin-api/schemas/pages.js +11 -0
  131. package/dist/admin-api/schemas/pages.js.map +1 -1
  132. package/dist/admin-api/schemas/rename.d.ts +77 -0
  133. package/dist/admin-api/schemas/rename.d.ts.map +1 -0
  134. package/dist/admin-api/schemas/rename.js +75 -0
  135. package/dist/admin-api/schemas/rename.js.map +1 -0
  136. package/dist/admin-api/schemas/site.d.ts +3 -2
  137. package/dist/admin-api/schemas/site.d.ts.map +1 -1
  138. package/dist/admin-api/schemas/site.js +3 -2
  139. package/dist/admin-api/schemas/site.js.map +1 -1
  140. package/dist/admin-api/schemas/system.d.ts +28 -0
  141. package/dist/admin-api/schemas/system.d.ts.map +1 -0
  142. package/dist/admin-api/schemas/system.js +35 -0
  143. package/dist/admin-api/schemas/system.js.map +1 -0
  144. package/dist/admin-api/schemas/targets.d.ts +55 -0
  145. package/dist/admin-api/schemas/targets.d.ts.map +1 -1
  146. package/dist/admin-api/schemas/targets.js +46 -0
  147. package/dist/admin-api/schemas/targets.js.map +1 -1
  148. package/dist/admin-api/schemas/templates.d.ts +54 -0
  149. package/dist/admin-api/schemas/templates.d.ts.map +1 -1
  150. package/dist/admin-api/schemas/templates.js +21 -0
  151. package/dist/admin-api/schemas/templates.js.map +1 -1
  152. package/dist/admin-api/schemas/validation.d.ts +101 -0
  153. package/dist/admin-api/schemas/validation.d.ts.map +1 -0
  154. package/dist/admin-api/schemas/validation.js +57 -0
  155. package/dist/admin-api/schemas/validation.js.map +1 -0
  156. package/dist/admin-api/source-context.d.ts +66 -10
  157. package/dist/admin-api/source-context.d.ts.map +1 -1
  158. package/dist/admin-api/source-context.js +43 -5
  159. package/dist/admin-api/source-context.js.map +1 -1
  160. package/dist/ai/adapter-scaffold.d.ts +63 -0
  161. package/dist/ai/adapter-scaffold.d.ts.map +1 -0
  162. package/dist/ai/adapter-scaffold.js +89 -0
  163. package/dist/ai/adapter-scaffold.js.map +1 -0
  164. package/dist/ai/compose-prompt.d.ts +50 -0
  165. package/dist/ai/compose-prompt.d.ts.map +1 -0
  166. package/dist/ai/compose-prompt.js +49 -0
  167. package/dist/ai/compose-prompt.js.map +1 -0
  168. package/dist/ai/errors.d.ts +65 -0
  169. package/dist/ai/errors.d.ts.map +1 -0
  170. package/dist/ai/errors.js +59 -0
  171. package/dist/ai/errors.js.map +1 -0
  172. package/dist/ai/index.d.ts +17 -0
  173. package/dist/ai/index.d.ts.map +1 -0
  174. package/dist/ai/index.js +16 -0
  175. package/dist/ai/index.js.map +1 -0
  176. package/dist/ai/provider.d.ts +76 -0
  177. package/dist/ai/provider.d.ts.map +1 -0
  178. package/dist/ai/provider.js +13 -0
  179. package/dist/ai/provider.js.map +1 -0
  180. package/dist/ai/refusal.d.ts +50 -0
  181. package/dist/ai/refusal.d.ts.map +1 -0
  182. package/dist/ai/refusal.js +100 -0
  183. package/dist/ai/refusal.js.map +1 -0
  184. package/dist/ai/vision-prep.d.ts +32 -0
  185. package/dist/ai/vision-prep.d.ts.map +1 -0
  186. package/dist/ai/vision-prep.js +113 -0
  187. package/dist/ai/vision-prep.js.map +1 -0
  188. package/dist/alt/adapter.d.ts +140 -0
  189. package/dist/alt/adapter.d.ts.map +1 -0
  190. package/dist/alt/adapter.js +7 -0
  191. package/dist/alt/adapter.js.map +1 -0
  192. package/dist/alt/anthropic.d.ts +63 -0
  193. package/dist/alt/anthropic.d.ts.map +1 -0
  194. package/dist/alt/anthropic.js +147 -0
  195. package/dist/alt/anthropic.js.map +1 -0
  196. package/dist/alt/config.d.ts +67 -0
  197. package/dist/alt/config.d.ts.map +1 -0
  198. package/dist/alt/config.js +41 -0
  199. package/dist/alt/config.js.map +1 -0
  200. package/dist/alt/factory.d.ts +19 -0
  201. package/dist/alt/factory.d.ts.map +1 -0
  202. package/dist/alt/factory.js +69 -0
  203. package/dist/alt/factory.js.map +1 -0
  204. package/dist/alt/null-adapter.d.ts +3 -0
  205. package/dist/alt/null-adapter.d.ts.map +1 -0
  206. package/dist/alt/null-adapter.js +43 -0
  207. package/dist/alt/null-adapter.js.map +1 -0
  208. package/dist/alt/ollama.d.ts +40 -0
  209. package/dist/alt/ollama.d.ts.map +1 -0
  210. package/dist/alt/ollama.js +139 -0
  211. package/dist/alt/ollama.js.map +1 -0
  212. package/dist/alt/openai.d.ts +46 -0
  213. package/dist/alt/openai.d.ts.map +1 -0
  214. package/dist/alt/openai.js +118 -0
  215. package/dist/alt/openai.js.map +1 -0
  216. package/dist/alt/prompt-policies.d.ts +79 -0
  217. package/dist/alt/prompt-policies.d.ts.map +1 -0
  218. package/dist/alt/prompt-policies.js +67 -0
  219. package/dist/alt/prompt-policies.js.map +1 -0
  220. package/dist/alt/route-handler.d.ts +56 -0
  221. package/dist/alt/route-handler.d.ts.map +1 -0
  222. package/dist/alt/route-handler.js +122 -0
  223. package/dist/alt/route-handler.js.map +1 -0
  224. package/dist/alt/suggester.d.ts +57 -0
  225. package/dist/alt/suggester.d.ts.map +1 -0
  226. package/dist/alt/suggester.js +133 -0
  227. package/dist/alt/suggester.js.map +1 -0
  228. package/dist/app.js +1 -1
  229. package/dist/app.js.map +1 -1
  230. package/dist/archive-aliases.d.ts +79 -0
  231. package/dist/archive-aliases.d.ts.map +1 -0
  232. package/dist/archive-aliases.js +60 -0
  233. package/dist/archive-aliases.js.map +1 -0
  234. package/dist/archive-helpers.d.ts +73 -0
  235. package/dist/archive-helpers.d.ts.map +1 -0
  236. package/dist/archive-helpers.js +94 -0
  237. package/dist/archive-helpers.js.map +1 -0
  238. package/dist/assets/find-refs.d.ts +1 -1
  239. package/dist/assets/find-refs.js +1 -1
  240. package/dist/assets/find-refs.js.map +1 -1
  241. package/dist/assets/rename.js +1 -1
  242. package/dist/assets/rename.js.map +1 -1
  243. package/dist/assets/replace.js +1 -1
  244. package/dist/assets/replace.js.map +1 -1
  245. package/dist/assets/resolve.js +4 -4
  246. package/dist/assets/resolve.js.map +1 -1
  247. package/dist/assets/serve-route.js +2 -2
  248. package/dist/assets/serve-route.js.map +1 -1
  249. package/dist/assets/validate.d.ts +1 -1
  250. package/dist/assets/validate.js +1 -1
  251. package/dist/audit/config.d.ts +75 -0
  252. package/dist/audit/config.d.ts.map +1 -0
  253. package/dist/audit/config.js +91 -0
  254. package/dist/audit/config.js.map +1 -0
  255. package/dist/audit/context.d.ts +98 -0
  256. package/dist/audit/context.d.ts.map +1 -0
  257. package/dist/audit/context.js +51 -0
  258. package/dist/audit/context.js.map +1 -0
  259. package/dist/audit/errors.d.ts +73 -0
  260. package/dist/audit/errors.d.ts.map +1 -0
  261. package/dist/audit/errors.js +78 -0
  262. package/dist/audit/errors.js.map +1 -0
  263. package/dist/audit/index.d.ts +16 -0
  264. package/dist/audit/index.d.ts.map +1 -0
  265. package/dist/audit/index.js +10 -0
  266. package/dist/audit/index.js.map +1 -0
  267. package/dist/audit/provider.d.ts +73 -0
  268. package/dist/audit/provider.d.ts.map +1 -0
  269. package/dist/audit/provider.js +2 -0
  270. package/dist/audit/provider.js.map +1 -0
  271. package/dist/audit/providers/history.d.ts +66 -0
  272. package/dist/audit/providers/history.d.ts.map +1 -0
  273. package/dist/audit/providers/history.js +102 -0
  274. package/dist/audit/providers/history.js.map +1 -0
  275. package/dist/audit/pseudonymize.d.ts +26 -0
  276. package/dist/audit/pseudonymize.d.ts.map +1 -0
  277. package/dist/audit/pseudonymize.js +86 -0
  278. package/dist/audit/pseudonymize.js.map +1 -0
  279. package/dist/audit/recorder.d.ts +102 -0
  280. package/dist/audit/recorder.d.ts.map +1 -0
  281. package/dist/audit/recorder.js +55 -0
  282. package/dist/audit/recorder.js.map +1 -0
  283. package/dist/audit/retention.d.ts +83 -0
  284. package/dist/audit/retention.d.ts.map +1 -0
  285. package/dist/audit/retention.js +142 -0
  286. package/dist/audit/retention.js.map +1 -0
  287. package/dist/audit/source-ip.d.ts +32 -0
  288. package/dist/audit/source-ip.d.ts.map +1 -0
  289. package/dist/audit/source-ip.js +164 -0
  290. package/dist/audit/source-ip.js.map +1 -0
  291. package/dist/audit/types.d.ts +143 -0
  292. package/dist/audit/types.d.ts.map +1 -0
  293. package/dist/audit/types.js +33 -0
  294. package/dist/audit/types.js.map +1 -0
  295. package/dist/audit/user-agent.d.ts +28 -0
  296. package/dist/audit/user-agent.d.ts.map +1 -0
  297. package/dist/audit/user-agent.js +63 -0
  298. package/dist/audit/user-agent.js.map +1 -0
  299. package/dist/auth/capabilities.d.ts +28 -0
  300. package/dist/auth/capabilities.d.ts.map +1 -0
  301. package/dist/auth/capabilities.js +101 -0
  302. package/dist/auth/capabilities.js.map +1 -0
  303. package/dist/auth/config.d.ts +109 -0
  304. package/dist/auth/config.d.ts.map +1 -0
  305. package/dist/auth/config.js +221 -0
  306. package/dist/auth/config.js.map +1 -0
  307. package/dist/auth/errors.d.ts +72 -0
  308. package/dist/auth/errors.d.ts.map +1 -0
  309. package/dist/auth/errors.js +78 -0
  310. package/dist/auth/errors.js.map +1 -0
  311. package/dist/auth/factory.d.ts +43 -0
  312. package/dist/auth/factory.d.ts.map +1 -0
  313. package/dist/auth/factory.js +48 -0
  314. package/dist/auth/factory.js.map +1 -0
  315. package/dist/auth/index.d.ts +21 -0
  316. package/dist/auth/index.d.ts.map +1 -0
  317. package/dist/auth/index.js +14 -0
  318. package/dist/auth/index.js.map +1 -0
  319. package/dist/auth/ip-match.d.ts +29 -0
  320. package/dist/auth/ip-match.d.ts.map +1 -0
  321. package/dist/auth/ip-match.js +162 -0
  322. package/dist/auth/ip-match.js.map +1 -0
  323. package/dist/auth/provider.d.ts +76 -0
  324. package/dist/auth/provider.d.ts.map +1 -0
  325. package/dist/auth/provider.js +2 -0
  326. package/dist/auth/provider.js.map +1 -0
  327. package/dist/auth/providers/aws-cognito.d.ts +55 -0
  328. package/dist/auth/providers/aws-cognito.d.ts.map +1 -0
  329. package/dist/auth/providers/aws-cognito.js +114 -0
  330. package/dist/auth/providers/aws-cognito.js.map +1 -0
  331. package/dist/auth/providers/azure-easy-auth.d.ts +7 -0
  332. package/dist/auth/providers/azure-easy-auth.d.ts.map +1 -0
  333. package/dist/auth/providers/azure-easy-auth.js +48 -0
  334. package/dist/auth/providers/azure-easy-auth.js.map +1 -0
  335. package/dist/auth/providers/cloudflare-access.d.ts +71 -0
  336. package/dist/auth/providers/cloudflare-access.d.ts.map +1 -0
  337. package/dist/auth/providers/cloudflare-access.js +120 -0
  338. package/dist/auth/providers/cloudflare-access.js.map +1 -0
  339. package/dist/auth/providers/forwarded-user.d.ts +31 -0
  340. package/dist/auth/providers/forwarded-user.d.ts.map +1 -0
  341. package/dist/auth/providers/forwarded-user.js +72 -0
  342. package/dist/auth/providers/forwarded-user.js.map +1 -0
  343. package/dist/auth/providers/none.d.ts +6 -0
  344. package/dist/auth/providers/none.d.ts.map +1 -0
  345. package/dist/auth/providers/none.js +19 -0
  346. package/dist/auth/providers/none.js.map +1 -0
  347. package/dist/auth/providers/tailscale.d.ts +7 -0
  348. package/dist/auth/providers/tailscale.d.ts.map +1 -0
  349. package/dist/auth/providers/tailscale.js +30 -0
  350. package/dist/auth/providers/tailscale.js.map +1 -0
  351. package/dist/auth/role-resolver.d.ts +38 -0
  352. package/dist/auth/role-resolver.d.ts.map +1 -0
  353. package/dist/auth/role-resolver.js +92 -0
  354. package/dist/auth/role-resolver.js.map +1 -0
  355. package/dist/auth/types.d.ts +150 -0
  356. package/dist/auth/types.d.ts.map +1 -0
  357. package/dist/auth/types.js +60 -0
  358. package/dist/auth/types.js.map +1 -0
  359. package/dist/cache/errors.d.ts +41 -0
  360. package/dist/cache/errors.d.ts.map +1 -0
  361. package/dist/cache/errors.js +44 -0
  362. package/dist/cache/errors.js.map +1 -0
  363. package/dist/cache/factories.d.ts +17 -0
  364. package/dist/cache/factories.d.ts.map +1 -0
  365. package/dist/cache/factories.js +17 -0
  366. package/dist/cache/factories.js.map +1 -0
  367. package/dist/cache/keys.d.ts +63 -0
  368. package/dist/cache/keys.d.ts.map +1 -0
  369. package/dist/cache/keys.js +145 -0
  370. package/dist/cache/keys.js.map +1 -0
  371. package/dist/cache/memory.d.ts +51 -0
  372. package/dist/cache/memory.d.ts.map +1 -0
  373. package/dist/cache/memory.js +204 -0
  374. package/dist/cache/memory.js.map +1 -0
  375. package/dist/cache/per-site.d.ts +22 -0
  376. package/dist/cache/per-site.d.ts.map +1 -0
  377. package/dist/cache/per-site.js +114 -0
  378. package/dist/cache/per-site.js.map +1 -0
  379. package/dist/cache/types.d.ts +142 -0
  380. package/dist/cache/types.d.ts.map +1 -0
  381. package/dist/cache/types.js +33 -0
  382. package/dist/cache/types.js.map +1 -0
  383. package/dist/cli/archive.d.ts +44 -0
  384. package/dist/cli/archive.d.ts.map +1 -0
  385. package/dist/cli/archive.js +310 -0
  386. package/dist/cli/archive.js.map +1 -0
  387. package/dist/cli/bootstrap.d.ts +15 -8
  388. package/dist/cli/bootstrap.d.ts.map +1 -1
  389. package/dist/cli/bootstrap.js +59 -23
  390. package/dist/cli/bootstrap.js.map +1 -1
  391. package/dist/cli/dev-template-watcher.d.ts +29 -0
  392. package/dist/cli/dev-template-watcher.d.ts.map +1 -0
  393. package/dist/cli/dev-template-watcher.js +38 -0
  394. package/dist/cli/dev-template-watcher.js.map +1 -0
  395. package/dist/cli/history.d.ts.map +1 -1
  396. package/dist/cli/history.js +5 -3
  397. package/dist/cli/history.js.map +1 -1
  398. package/dist/cli/index.js +712 -395
  399. package/dist/cli/index.js.map +1 -1
  400. package/dist/cli/validate-flags.d.ts +29 -0
  401. package/dist/cli/validate-flags.d.ts.map +1 -0
  402. package/dist/cli/validate-flags.js +49 -0
  403. package/dist/cli/validate-flags.js.map +1 -0
  404. package/dist/compare.d.ts +1 -1
  405. package/dist/compare.d.ts.map +1 -1
  406. package/dist/compare.js +25 -23
  407. package/dist/compare.js.map +1 -1
  408. package/dist/component-ids.d.ts +25 -0
  409. package/dist/component-ids.d.ts.map +1 -0
  410. package/dist/component-ids.js +83 -0
  411. package/dist/component-ids.js.map +1 -0
  412. package/dist/config/define.d.ts +61 -0
  413. package/dist/config/define.d.ts.map +1 -0
  414. package/dist/config/define.js +64 -0
  415. package/dist/config/define.js.map +1 -0
  416. package/dist/config/errors.d.ts +32 -0
  417. package/dist/config/errors.d.ts.map +1 -0
  418. package/dist/config/errors.js +40 -0
  419. package/dist/config/errors.js.map +1 -0
  420. package/dist/config/index.d.ts +13 -0
  421. package/dist/config/index.d.ts.map +1 -0
  422. package/dist/config/index.js +20 -0
  423. package/dist/config/index.js.map +1 -0
  424. package/dist/config/loader.d.ts +105 -0
  425. package/dist/config/loader.d.ts.map +1 -0
  426. package/dist/config/loader.js +265 -0
  427. package/dist/config/loader.js.map +1 -0
  428. package/dist/config/schemas.d.ts +89 -0
  429. package/dist/config/schemas.d.ts.map +1 -0
  430. package/dist/config/schemas.js +172 -0
  431. package/dist/config/schemas.js.map +1 -0
  432. package/dist/config/types.d.ts +32 -0
  433. package/dist/config/types.d.ts.map +1 -0
  434. package/dist/config/types.js +15 -0
  435. package/dist/config/types.js.map +1 -0
  436. package/dist/deploy/cloudflare-workers.d.ts +46 -0
  437. package/dist/deploy/cloudflare-workers.d.ts.map +1 -0
  438. package/dist/deploy/cloudflare-workers.js +213 -0
  439. package/dist/deploy/cloudflare-workers.js.map +1 -0
  440. package/dist/deploy/errors.d.ts +66 -0
  441. package/dist/deploy/errors.d.ts.map +1 -0
  442. package/dist/deploy/errors.js +82 -0
  443. package/dist/deploy/errors.js.map +1 -0
  444. package/dist/deploy/index.d.ts +9 -0
  445. package/dist/deploy/index.d.ts.map +1 -0
  446. package/dist/deploy/index.js +3 -0
  447. package/dist/deploy/index.js.map +1 -0
  448. package/dist/deploy/types.d.ts +162 -0
  449. package/dist/deploy/types.d.ts.map +1 -0
  450. package/dist/deploy/types.js +2 -0
  451. package/dist/deploy/types.js.map +1 -0
  452. package/dist/fragments/create.d.ts +70 -0
  453. package/dist/fragments/create.d.ts.map +1 -0
  454. package/dist/fragments/create.js +93 -0
  455. package/dist/fragments/create.js.map +1 -0
  456. package/dist/fragments/publish.d.ts +37 -0
  457. package/dist/fragments/publish.d.ts.map +1 -0
  458. package/dist/fragments/publish.js +52 -0
  459. package/dist/fragments/publish.js.map +1 -0
  460. package/dist/fragments/save.d.ts +81 -0
  461. package/dist/fragments/save.d.ts.map +1 -0
  462. package/dist/fragments/save.js +105 -0
  463. package/dist/fragments/save.js.map +1 -0
  464. package/dist/history-recorder.d.ts +5 -5
  465. package/dist/history-recorder.d.ts.map +1 -1
  466. package/dist/history-recorder.js +4 -4
  467. package/dist/history-recorder.js.map +1 -1
  468. package/dist/history-restorer.js +2 -2
  469. package/dist/history-restorer.js.map +1 -1
  470. package/dist/history.d.ts +1 -1
  471. package/dist/hooks/audit-emitter.d.ts +73 -0
  472. package/dist/hooks/audit-emitter.d.ts.map +1 -0
  473. package/dist/hooks/audit-emitter.js +13 -0
  474. package/dist/hooks/audit-emitter.js.map +1 -0
  475. package/dist/hooks/context.d.ts +78 -0
  476. package/dist/hooks/context.d.ts.map +1 -0
  477. package/dist/hooks/context.js +56 -0
  478. package/dist/hooks/context.js.map +1 -0
  479. package/dist/hooks/contribution.d.ts +90 -0
  480. package/dist/hooks/contribution.d.ts.map +1 -0
  481. package/dist/hooks/contribution.js +2 -0
  482. package/dist/hooks/contribution.js.map +1 -0
  483. package/dist/hooks/dispatch.d.ts +30 -0
  484. package/dist/hooks/dispatch.d.ts.map +1 -0
  485. package/dist/hooks/dispatch.js +252 -0
  486. package/dist/hooks/dispatch.js.map +1 -0
  487. package/dist/hooks/errors.d.ts +100 -0
  488. package/dist/hooks/errors.d.ts.map +1 -0
  489. package/dist/hooks/errors.js +103 -0
  490. package/dist/hooks/errors.js.map +1 -0
  491. package/dist/hooks/index.d.ts +15 -0
  492. package/dist/hooks/index.d.ts.map +1 -0
  493. package/dist/hooks/index.js +6 -0
  494. package/dist/hooks/index.js.map +1 -0
  495. package/dist/hooks/registry.d.ts +53 -0
  496. package/dist/hooks/registry.d.ts.map +1 -0
  497. package/dist/hooks/registry.js +139 -0
  498. package/dist/hooks/registry.js.map +1 -0
  499. package/dist/hooks/storage.d.ts +43 -0
  500. package/dist/hooks/storage.d.ts.map +1 -0
  501. package/dist/hooks/storage.js +2 -0
  502. package/dist/hooks/storage.js.map +1 -0
  503. package/dist/hooks/types.d.ts +324 -0
  504. package/dist/hooks/types.d.ts.map +1 -0
  505. package/dist/hooks/types.js +2 -0
  506. package/dist/hooks/types.js.map +1 -0
  507. package/dist/index.d.ts +26 -6
  508. package/dist/index.d.ts.map +1 -1
  509. package/dist/index.js +49 -5
  510. package/dist/index.js.map +1 -1
  511. package/dist/locale.d.ts +5 -1
  512. package/dist/locale.d.ts.map +1 -1
  513. package/dist/locale.js +6 -2
  514. package/dist/locale.js.map +1 -1
  515. package/dist/manifest-save.d.ts +255 -0
  516. package/dist/manifest-save.d.ts.map +1 -0
  517. package/dist/manifest-save.js +260 -0
  518. package/dist/manifest-save.js.map +1 -0
  519. package/dist/manifest.d.ts +1 -2
  520. package/dist/manifest.d.ts.map +1 -1
  521. package/dist/manifest.js +43 -44
  522. package/dist/manifest.js.map +1 -1
  523. package/dist/node-floor.d.ts +3 -0
  524. package/dist/node-floor.d.ts.map +1 -0
  525. package/dist/node-floor.js +3 -0
  526. package/dist/node-floor.js.map +1 -0
  527. package/dist/pages/create.d.ts +103 -0
  528. package/dist/pages/create.d.ts.map +1 -0
  529. package/dist/pages/create.js +117 -0
  530. package/dist/pages/create.js.map +1 -0
  531. package/dist/pages/publish.d.ts +59 -0
  532. package/dist/pages/publish.d.ts.map +1 -0
  533. package/dist/pages/publish.js +78 -0
  534. package/dist/pages/publish.js.map +1 -0
  535. package/dist/pages/save.d.ts +97 -0
  536. package/dist/pages/save.d.ts.map +1 -0
  537. package/dist/pages/save.js +138 -0
  538. package/dist/pages/save.js.map +1 -0
  539. package/dist/providers/factories.d.ts +65 -0
  540. package/dist/providers/factories.d.ts.map +1 -0
  541. package/dist/providers/factories.js +189 -0
  542. package/dist/providers/factories.js.map +1 -0
  543. package/dist/publish-item.d.ts +225 -0
  544. package/dist/publish-item.d.ts.map +1 -0
  545. package/dist/publish-item.js +210 -0
  546. package/dist/publish-item.js.map +1 -0
  547. package/dist/publish-rendered.d.ts.map +1 -1
  548. package/dist/publish-rendered.js +75 -6
  549. package/dist/publish-rendered.js.map +1 -1
  550. package/dist/publish-renderers.d.ts +132 -0
  551. package/dist/publish-renderers.d.ts.map +1 -0
  552. package/dist/publish-renderers.js +240 -0
  553. package/dist/publish-renderers.js.map +1 -0
  554. package/dist/publish-run.d.ts +223 -0
  555. package/dist/publish-run.d.ts.map +1 -0
  556. package/dist/publish-run.js +307 -0
  557. package/dist/publish-run.js.map +1 -0
  558. package/dist/publish.d.ts.map +1 -1
  559. package/dist/publish.js +1 -10
  560. package/dist/publish.js.map +1 -1
  561. package/dist/render-for-analysis.d.ts +24 -0
  562. package/dist/render-for-analysis.d.ts.map +1 -0
  563. package/dist/render-for-analysis.js +146 -0
  564. package/dist/render-for-analysis.js.map +1 -0
  565. package/dist/resolver.d.ts.map +1 -1
  566. package/dist/resolver.js +47 -23
  567. package/dist/resolver.js.map +1 -1
  568. package/dist/runtime/archive-marker.d.ts +62 -0
  569. package/dist/runtime/archive-marker.d.ts.map +1 -0
  570. package/dist/runtime/archive-marker.js +88 -0
  571. package/dist/runtime/archive-marker.js.map +1 -0
  572. package/dist/runtime/capability-gap-warnings.d.ts +42 -0
  573. package/dist/runtime/capability-gap-warnings.d.ts.map +1 -0
  574. package/dist/runtime/capability-gap-warnings.js +28 -0
  575. package/dist/runtime/capability-gap-warnings.js.map +1 -0
  576. package/dist/runtime/redirects-emit.d.ts +93 -0
  577. package/dist/runtime/redirects-emit.d.ts.map +1 -0
  578. package/dist/runtime/redirects-emit.js +89 -0
  579. package/dist/runtime/redirects-emit.js.map +1 -0
  580. package/dist/runtime/runtime-capabilities.d.ts +79 -0
  581. package/dist/runtime/runtime-capabilities.d.ts.map +1 -0
  582. package/dist/runtime/runtime-capabilities.js +60 -0
  583. package/dist/runtime/runtime-capabilities.js.map +1 -0
  584. package/dist/save-etag.d.ts +69 -0
  585. package/dist/save-etag.d.ts.map +1 -0
  586. package/dist/save-etag.js +118 -0
  587. package/dist/save-etag.js.map +1 -0
  588. package/dist/site-loader.d.ts +42 -4
  589. package/dist/site-loader.d.ts.map +1 -1
  590. package/dist/site-loader.js +27 -8
  591. package/dist/site-loader.js.map +1 -1
  592. package/dist/targets.d.ts +21 -12
  593. package/dist/targets.d.ts.map +1 -1
  594. package/dist/targets.js +27 -95
  595. package/dist/targets.js.map +1 -1
  596. package/dist/testing/admin-cache-contract.d.ts +52 -0
  597. package/dist/testing/admin-cache-contract.d.ts.map +1 -0
  598. package/dist/testing/admin-cache-contract.js +203 -0
  599. package/dist/testing/admin-cache-contract.js.map +1 -0
  600. package/dist/testing/index.d.ts +11 -0
  601. package/dist/testing/index.d.ts.map +1 -0
  602. package/dist/testing/index.js +11 -0
  603. package/dist/testing/index.js.map +1 -0
  604. package/dist/transforms/factories.d.ts +16 -0
  605. package/dist/transforms/factories.d.ts.map +1 -0
  606. package/dist/transforms/factories.js +18 -0
  607. package/dist/transforms/factories.js.map +1 -0
  608. package/dist/transforms/index.d.ts +10 -17
  609. package/dist/transforms/index.d.ts.map +1 -1
  610. package/dist/transforms/index.js +4 -28
  611. package/dist/transforms/index.js.map +1 -1
  612. package/dist/transforms/sharp.d.ts +15 -1
  613. package/dist/transforms/sharp.d.ts.map +1 -1
  614. package/dist/transforms/sharp.js +34 -20
  615. package/dist/transforms/sharp.js.map +1 -1
  616. package/dist/types.d.ts +379 -52
  617. package/dist/types.d.ts.map +1 -1
  618. package/dist/types.js +20 -1
  619. package/dist/types.js.map +1 -1
  620. package/dist/validation/alt-required-walker.d.ts +27 -0
  621. package/dist/validation/alt-required-walker.d.ts.map +1 -0
  622. package/dist/validation/alt-required-walker.js +108 -0
  623. package/dist/validation/alt-required-walker.js.map +1 -0
  624. package/dist/validation/default-registry.d.ts +12 -0
  625. package/dist/validation/default-registry.d.ts.map +1 -0
  626. package/dist/validation/default-registry.js +55 -0
  627. package/dist/validation/default-registry.js.map +1 -0
  628. package/dist/validation/publish-audit.d.ts +44 -0
  629. package/dist/validation/publish-audit.d.ts.map +1 -0
  630. package/dist/validation/publish-audit.js +64 -0
  631. package/dist/validation/publish-audit.js.map +1 -0
  632. package/dist/validation/registry.d.ts +23 -0
  633. package/dist/validation/registry.d.ts.map +1 -0
  634. package/dist/validation/registry.js +15 -0
  635. package/dist/validation/registry.js.map +1 -0
  636. package/dist/validation/save-delta.d.ts +46 -0
  637. package/dist/validation/save-delta.d.ts.map +1 -0
  638. package/dist/validation/save-delta.js +57 -0
  639. package/dist/validation/save-delta.js.map +1 -0
  640. package/dist/validation/scanner.d.ts +91 -0
  641. package/dist/validation/scanner.d.ts.map +1 -0
  642. package/dist/validation/scanner.js +327 -0
  643. package/dist/validation/scanner.js.map +1 -0
  644. package/dist/validation/template-impact.d.ts +52 -0
  645. package/dist/validation/template-impact.d.ts.map +1 -0
  646. package/dist/validation/template-impact.js +53 -0
  647. package/dist/validation/template-impact.js.map +1 -0
  648. package/dist/validation/types.d.ts +123 -0
  649. package/dist/validation/types.d.ts.map +1 -0
  650. package/dist/validation/types.js +7 -0
  651. package/dist/validation/types.js.map +1 -0
  652. package/dist/validation/validators/accessibility.d.ts +3 -0
  653. package/dist/validation/validators/accessibility.d.ts.map +1 -0
  654. package/dist/validation/validators/accessibility.js +106 -0
  655. package/dist/validation/validators/accessibility.js.map +1 -0
  656. package/dist/validation/validators/aliasof-points-to-archived.d.ts +40 -0
  657. package/dist/validation/validators/aliasof-points-to-archived.d.ts.map +1 -0
  658. package/dist/validation/validators/aliasof-points-to-archived.js +34 -0
  659. package/dist/validation/validators/aliasof-points-to-archived.js.map +1 -0
  660. package/dist/validation/validators/alt-required.d.ts +3 -0
  661. package/dist/validation/validators/alt-required.d.ts.map +1 -0
  662. package/dist/validation/validators/alt-required.js +118 -0
  663. package/dist/validation/validators/alt-required.js.map +1 -0
  664. package/dist/validation/validators/archive-not-supported-on-target.d.ts +3 -0
  665. package/dist/validation/validators/archive-not-supported-on-target.d.ts.map +1 -0
  666. package/dist/validation/validators/archive-not-supported-on-target.js +38 -0
  667. package/dist/validation/validators/archive-not-supported-on-target.js.map +1 -0
  668. package/dist/validation/validators/broken-links.d.ts +3 -0
  669. package/dist/validation/validators/broken-links.d.ts.map +1 -0
  670. package/dist/validation/validators/broken-links.js +190 -0
  671. package/dist/validation/validators/broken-links.js.map +1 -0
  672. package/dist/validation/validators/circular-alias.d.ts +36 -0
  673. package/dist/validation/validators/circular-alias.d.ts.map +1 -0
  674. package/dist/validation/validators/circular-alias.js +63 -0
  675. package/dist/validation/validators/circular-alias.js.map +1 -0
  676. package/dist/validation/validators/circular-fragment.d.ts +15 -0
  677. package/dist/validation/validators/circular-fragment.d.ts.map +1 -0
  678. package/dist/validation/validators/circular-fragment.js +97 -0
  679. package/dist/validation/validators/circular-fragment.js.map +1 -0
  680. package/dist/validation/validators/dangling-alias.d.ts +38 -0
  681. package/dist/validation/validators/dangling-alias.d.ts.map +1 -0
  682. package/dist/validation/validators/dangling-alias.js +31 -0
  683. package/dist/validation/validators/dangling-alias.js.map +1 -0
  684. package/dist/validation/validators/deploy-target-type-supported.d.ts +3 -0
  685. package/dist/validation/validators/deploy-target-type-supported.d.ts.map +1 -0
  686. package/dist/validation/validators/deploy-target-type-supported.js +32 -0
  687. package/dist/validation/validators/deploy-target-type-supported.js.map +1 -0
  688. package/dist/validation/validators/dynamic-route-conflict.d.ts +18 -0
  689. package/dist/validation/validators/dynamic-route-conflict.d.ts.map +1 -0
  690. package/dist/validation/validators/dynamic-route-conflict.js +80 -0
  691. package/dist/validation/validators/dynamic-route-conflict.js.map +1 -0
  692. package/dist/validation/validators/html-validity.d.ts +3 -0
  693. package/dist/validation/validators/html-validity.d.ts.map +1 -0
  694. package/dist/validation/validators/html-validity.js +89 -0
  695. package/dist/validation/validators/html-validity.js.map +1 -0
  696. package/dist/validation/validators/orphaned-locale-file.d.ts +21 -0
  697. package/dist/validation/validators/orphaned-locale-file.d.ts.map +1 -0
  698. package/dist/validation/validators/orphaned-locale-file.js +84 -0
  699. package/dist/validation/validators/orphaned-locale-file.js.map +1 -0
  700. package/dist/validation/validators/referenced-archived-without-alias.d.ts +3 -0
  701. package/dist/validation/validators/referenced-archived-without-alias.d.ts.map +1 -0
  702. package/dist/validation/validators/referenced-archived-without-alias.js +65 -0
  703. package/dist/validation/validators/referenced-archived-without-alias.js.map +1 -0
  704. package/dist/validation/validators/referenced-asset-exists.d.ts +13 -0
  705. package/dist/validation/validators/referenced-asset-exists.d.ts.map +1 -0
  706. package/dist/validation/validators/referenced-asset-exists.js +80 -0
  707. package/dist/validation/validators/referenced-asset-exists.js.map +1 -0
  708. package/dist/validation/validators/referenced-fragment-exists.d.ts +9 -0
  709. package/dist/validation/validators/referenced-fragment-exists.d.ts.map +1 -0
  710. package/dist/validation/validators/referenced-fragment-exists.js +52 -0
  711. package/dist/validation/validators/referenced-fragment-exists.js.map +1 -0
  712. package/dist/validation/validators/referenced-template-exists.d.ts +10 -0
  713. package/dist/validation/validators/referenced-template-exists.d.ts.map +1 -0
  714. package/dist/validation/validators/referenced-template-exists.js +74 -0
  715. package/dist/validation/validators/referenced-template-exists.js.map +1 -0
  716. package/dist/validation/validators/schema-conformance.d.ts +17 -0
  717. package/dist/validation/validators/schema-conformance.d.ts.map +1 -0
  718. package/dist/validation/validators/schema-conformance.js +94 -0
  719. package/dist/validation/validators/schema-conformance.js.map +1 -0
  720. package/dist/validation/validators/target-deploy-coverage.d.ts +3 -0
  721. package/dist/validation/validators/target-deploy-coverage.d.ts.map +1 -0
  722. package/dist/validation/validators/target-deploy-coverage.js +37 -0
  723. package/dist/validation/validators/target-deploy-coverage.js.map +1 -0
  724. package/dist/validation/validators/unused-fragment.d.ts +16 -0
  725. package/dist/validation/validators/unused-fragment.d.ts.map +1 -0
  726. package/dist/validation/validators/unused-fragment.js +86 -0
  727. package/dist/validation/validators/unused-fragment.js.map +1 -0
  728. package/package.json +54 -31
  729. package/admin-dist/assets/index-BO9-CXmW.css +0 -1
  730. package/admin-dist/assets/index-Ufu8zZH_.js +0 -668
  731. package/admin-dist/assets/rolldown-runtime-COnpUsM8.js +0 -1
  732. package/admin-dist/assets/vendor-rjsf-HKBAjOmQ.js +0 -32
  733. package/admin-dist/assets/vendor-tiptap-IyO99U4R.js +0 -142
  734. package/admin-dist/assets/vendor-vue-D3wBSmDf.js +0 -1
  735. package/dist/publish-locale.d.ts +0 -44
  736. package/dist/publish-locale.d.ts.map +0 -1
  737. package/dist/publish-locale.js +0 -103
  738. package/dist/publish-locale.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-audit-emitter.d.ts","sourceRoot":"","sources":["../../src/admin-api/hook-audit-emitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAe7E"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Build a HookFiringEmitter that forwards every firing to
3
+ * `audit.record(...)`. Pass into HookContext.auditEmit.
4
+ */
5
+ export function makeAuditFiringEmitter(audit) {
6
+ return async (event) => {
7
+ await audit.record({
8
+ action: 'hook-fired',
9
+ outcome: event.outcome,
10
+ scope: { kind: 'site' },
11
+ metadata: {
12
+ hookName: event.hookName,
13
+ phase: event.phase,
14
+ source: event.source,
15
+ priority: event.priority,
16
+ durationMs: event.durationMs,
17
+ },
18
+ });
19
+ };
20
+ }
21
+ //# sourceMappingURL=hook-audit-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-audit-emitter.js","sourceRoot":"","sources":["../../src/admin-api/hook-audit-emitter.ts"],"names":[],"mappings":"AAiCA;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAmB;IACxD,OAAO,KAAK,EAAC,KAAK,EAAC,EAAE;QACnB,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACvB,QAAQ,EAAE;gBACR,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B;SACF,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC"}
@@ -1,6 +1,39 @@
1
1
  import { Hono } from 'hono';
2
2
  import type { StorageProvider, TargetConfig } from '../types.js';
3
3
  import { type SourceContext } from './source-context.js';
4
+ import { HookRegistry, type HookContribution } from '../hooks/index.js';
5
+ export interface BuildHooksRegistryOptions {
6
+ /**
7
+ * Factory contributions from `site.config.ts admin.hooks`.
8
+ * Each contribution carries a `source` + array of phase /
9
+ * handler / options entries.
10
+ *
11
+ * Default per-handler priority is **100** (factory band) when
12
+ * the contribution doesn't specify one explicitly. Site-local
13
+ * factories that want to run last can pass `priority: 1000`
14
+ * via per-entry options.
15
+ */
16
+ contributions?: ReadonlyArray<HookContribution>;
17
+ }
18
+ /**
19
+ * Convenience boot helper: construct a HookRegistry, populate it
20
+ * from `admin.hooks` factory contributions, seal it, return it.
21
+ *
22
+ * Per design-hooks.md "Registration (Q4 locked — factory
23
+ * contributions only)". Site-local hooks AND npm-distributed
24
+ * plugins both produce `HookContribution` from a factory call;
25
+ * both wire identically through `admin.hooks` in `site.config.ts`.
26
+ *
27
+ * Sequence:
28
+ * 1. For each contribution → for each `hooks[i]` entry →
29
+ * register with the contribution's source identity.
30
+ * 2. Seal — subsequent registrations throw
31
+ * RegistrationAfterInitError.
32
+ *
33
+ * `contributions` is optional; an empty registry is a valid
34
+ * result for sites without hooks.
35
+ */
36
+ export declare function buildHooksRegistry(opts?: BuildHooksRegistryOptions): Promise<HookRegistry>;
4
37
  export interface AdminAppOptions {
5
38
  /**
6
39
  * Pre-built SourceContext — preferred when the caller controls source-content
@@ -21,9 +54,60 @@ export interface AdminAppOptions {
21
54
  targets?: Map<string, StorageProvider>;
22
55
  /** Target configurations — providers are initialized lazily on first publish/fetch/compare. */
23
56
  targetConfigs?: Record<string, TargetConfig>;
57
+ /**
58
+ * Disable the periodic cache-stats logger. Defaults to false (logger
59
+ * runs every 5 minutes). Tests pass true to avoid background timers
60
+ * leaking into the test runtime.
61
+ */
62
+ disableCacheStatsLogger?: boolean;
63
+ /**
64
+ * Pre-built hook registry. Construct via
65
+ * `buildHooksRegistry({ contributions })` against
66
+ * `manifest.admin?.hooks` from the loaded site config, then pass
67
+ * the sealed registry here. When omitted, hook dispatch is a
68
+ * no-op (sites without hooks pay zero overhead).
69
+ *
70
+ * Tests pass an empty (or pre-populated) registry directly.
71
+ */
72
+ hooks?: HookRegistry;
73
+ /**
74
+ * Background validation scanner (Cut 2). Constructed by the boot path
75
+ * via `createValidationScanner({...})` against the resolved source. The
76
+ * admin app mounts the read-side route + SSE channel against this
77
+ * instance. When omitted, `/api/validation/issues` returns an empty list
78
+ * and the SSE channel emits no events.
79
+ */
80
+ validationScanner?: import('../validation/scanner.js').ValidationScanner | null;
81
+ /**
82
+ * Validator registry override. Defaults to `defaultValidatorRegistry()`
83
+ * which ships every Cut 1-4 validator. Tests pass a custom registry to
84
+ * exercise the publish-audit + publish-gate paths with synthetic
85
+ * pre-publish-stage validators.
86
+ */
87
+ validators?: import('../validation/registry.js').ValidatorRegistry;
88
+ /**
89
+ * Disable the periodic audit retention pruner. Defaults to false
90
+ * (pruner runs at boot + every 6 hours when audit retention is
91
+ * configured). Tests pass true to avoid background timers leaking
92
+ * into the test runtime; the boot pass and the interval both gate
93
+ * on this flag.
94
+ */
95
+ disableAuditRetentionPruner?: boolean;
24
96
  }
25
97
  type AdminApp = Hono & {
26
98
  invalidateTemplatesCache(): void;
99
+ /**
100
+ * Drop AdminCache entries for content (page + fragment summaries)
101
+ * across every SourceContext the resolver has built. Called by
102
+ * `gazetta dev`'s file watcher on out-of-band manifest changes
103
+ * (git pull, manual edit, e2e wipes) — those bypass the save
104
+ * handler that would normally invalidate the cache.
105
+ *
106
+ * Production (`gazetta serve`) doesn't have a file watcher;
107
+ * out-of-band changes there are vanishingly rare (manifests are
108
+ * deployed-once artifacts).
109
+ */
110
+ invalidateContentCache(): Promise<void>;
27
111
  };
28
112
  /**
29
113
  * Create an admin API Hono app. Accepts a single options object.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin-api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAMhE,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,qBAAqB,CAAA;AAa5B,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,6DAA6D;IAC7D,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wFAAwF;IACxF,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACtC,+FAA+F;IAC/F,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CAC7C;AAED,KAAK,QAAQ,GAAG,IAAI,GAAG;IACrB,wBAAwB,IAAI,IAAI,CAAA;CACjC,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,CA4G9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin-api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAK3B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAMhE,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,qBAAqB,CAAA;AAgC5B,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEvE,MAAM,WAAW,yBAAyB;IACxC;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAA;CAChD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,GAAE,yBAA8B,GAAG,OAAO,CAAC,YAAY,CAAC,CAcpG;AAGD,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,6DAA6D;IAC7D,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wFAAwF;IACxF,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACtC,+FAA+F;IAC/F,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAC5C;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,OAAO,0BAA0B,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC/E;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,2BAA2B,EAAE,iBAAiB,CAAA;IAClE;;;;;;OAMG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC;AAED,KAAK,QAAQ,GAAG,IAAI,GAAG;IACrB,wBAAwB,IAAI,IAAI,CAAA;IAChC;;;;;;;;;;OAUG;IACH,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACxC,CAAA;AA4BD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,CAiT9D"}
@@ -1,5 +1,7 @@
1
1
  import { Hono } from 'hono';
2
2
  import { join } from 'node:path';
3
+ import { hostname } from 'node:os';
4
+ import { randomBytes } from 'node:crypto';
3
5
  import { logger } from 'hono/logger';
4
6
  import { scanTemplates } from '../templates-scan.js';
5
7
  import { memoizeAsync } from '../concurrency.js';
@@ -8,9 +10,14 @@ import { createHistoryProvider } from '../history-provider.js';
8
10
  import { isHistoryEnabled, getHistoryRetention } from '../types.js';
9
11
  import { createSourceContext, staticSourceResolver, registrySourceResolver, } from './source-context.js';
10
12
  import { authMiddleware } from './middleware/auth.js';
13
+ import { principalMiddleware } from './middleware/principal.js';
14
+ import { auditMiddleware } from './middleware/audit.js';
15
+ import { AuthConfigSchema, AuthConfigurationError, buildAuthProvider } from '../auth/index.js';
16
+ import { AuditConfigSchema, AuditConfigurationError, createHistoryAuditProvider, DEFAULT_AUDIT_CONFIG, pruneAuditEvents, } from '../audit/index.js';
11
17
  import { siteRoutes } from './routes/site.js';
12
18
  import { pageRoutes } from './routes/pages.js';
13
19
  import { fragmentRoutes } from './routes/fragments.js';
20
+ import { defaultValidatorRegistry } from '../validation/default-registry.js';
14
21
  import { templateRoutes } from './routes/templates.js';
15
22
  import { previewRoutes } from './routes/preview.js';
16
23
  import { publishRoutes } from './routes/publish.js';
@@ -18,6 +25,76 @@ import { compareRoutes } from './routes/compare.js';
18
25
  import { fieldRoutes } from './routes/fields.js';
19
26
  import { historyRoutes } from './routes/history.js';
20
27
  import { assetRoutes } from './routes/assets.js';
28
+ import { systemRoutes } from './routes/system.js';
29
+ import { auditRoutes } from './routes/audit.js';
30
+ import { validationRoutes } from './routes/validation.js';
31
+ import { healthRoutes } from './routes/health.js';
32
+ import { archiveRoutes } from './routes/archive.js';
33
+ import { renameRoutes } from './routes/rename.js';
34
+ import { warnOnCapabilityGaps } from '../runtime/capability-gap-warnings.js';
35
+ import { HookRegistry } from '../hooks/index.js';
36
+ /**
37
+ * Convenience boot helper: construct a HookRegistry, populate it
38
+ * from `admin.hooks` factory contributions, seal it, return it.
39
+ *
40
+ * Per design-hooks.md "Registration (Q4 locked — factory
41
+ * contributions only)". Site-local hooks AND npm-distributed
42
+ * plugins both produce `HookContribution` from a factory call;
43
+ * both wire identically through `admin.hooks` in `site.config.ts`.
44
+ *
45
+ * Sequence:
46
+ * 1. For each contribution → for each `hooks[i]` entry →
47
+ * register with the contribution's source identity.
48
+ * 2. Seal — subsequent registrations throw
49
+ * RegistrationAfterInitError.
50
+ *
51
+ * `contributions` is optional; an empty registry is a valid
52
+ * result for sites without hooks.
53
+ */
54
+ export async function buildHooksRegistry(opts = {}) {
55
+ const registry = new HookRegistry();
56
+ if (opts.contributions) {
57
+ for (const contribution of opts.contributions) {
58
+ for (const entry of contribution.hooks) {
59
+ // Default factory-supplied hook priority to the factory
60
+ // band (100). Per-entry options.priority overrides.
61
+ const options = { priority: 100, ...(entry.options ?? {}) };
62
+ registry.register(entry.phase, entry.handler, options, contribution.source);
63
+ }
64
+ }
65
+ }
66
+ registry.seal();
67
+ return registry;
68
+ }
69
+ import { startCacheStatsLogger } from './cache-stats-logger.js';
70
+ /**
71
+ * Resolve a per-process instance id for audit JSONL file naming.
72
+ *
73
+ * Chain per `design-logging.md`'s "Multi-instance correlation":
74
+ * 1. `K_REVISION` env (Cloud Run; per-revision)
75
+ * 2. `os.hostname()` — returns the pod name on K8s default config,
76
+ * machine hostname elsewhere
77
+ * 3. Random 8-char hex (only when hostname is empty / unavailable)
78
+ *
79
+ * `process.env.HOSTNAME` is NOT in the chain — Linux containers
80
+ * usually have it via the shell, but Node processes exec'd directly
81
+ * may not inherit shell env, so HOSTNAME can be undefined on K8s
82
+ * pods. `os.hostname()` calls gethostname(2) directly and is reliable
83
+ * across runtimes.
84
+ */
85
+ function resolveInstanceId() {
86
+ if (process.env.K_REVISION)
87
+ return process.env.K_REVISION;
88
+ try {
89
+ const name = hostname();
90
+ if (name)
91
+ return name;
92
+ }
93
+ catch {
94
+ // hostname() can throw on some Wintertc-style runtimes — fall through.
95
+ }
96
+ return randomBytes(4).toString('hex');
97
+ }
21
98
  /**
22
99
  * Create an admin API Hono app. Accepts a single options object.
23
100
  *
@@ -29,6 +106,9 @@ import { assetRoutes } from './routes/assets.js';
29
106
  export function createAdminApp(opts) {
30
107
  const app = new Hono();
31
108
  app.use(logger());
109
+ // Bearer-token guard (legacy GAZETTA_TOKEN) — orthogonal to
110
+ // upstream-identity extraction. Principal middleware ships
111
+ // below once `source.manifest` is in scope.
32
112
  app.use('/api/*', authMiddleware());
33
113
  const templatesDir = opts.templatesDir ?? join(opts.siteDir, 'templates');
34
114
  const adminDir = opts.adminDir ?? join(opts.siteDir, 'admin');
@@ -51,7 +131,7 @@ export function createAdminApp(opts) {
51
131
  // Backfill history on the source if the caller didn't supply one —
52
132
  // dev bootstrap builds a bare SourceContext and relies on admin-api
53
133
  // to wire history per the target's config. Skip when the target's
54
- // site.yaml has `history.enabled: false`, or when there's no
134
+ // site.config.ts has `history.enabled: false`, or when there's no
55
135
  // matching targetConfig (legacy single-storage path).
56
136
  if (!opts.source.history) {
57
137
  source = { ...opts.source, history: buildHistoryForSource(opts, opts.source) };
@@ -67,6 +147,14 @@ export function createAdminApp(opts) {
67
147
  history: buildHistoryForLegacySource(opts),
68
148
  });
69
149
  }
150
+ // Capability-gap surface #1 (boot config validate) per
151
+ // `feature-design-process.md`'s capability-gap-UX discipline.
152
+ // Walks targets; warns about runtime capability gaps (e.g., a
153
+ // plain-static target can't emit 301 redirects from archive
154
+ // operations). Non-blocking — admin starts. Operators see the
155
+ // warning during deploy so misconfiguration surfaces early.
156
+ if (source.manifest)
157
+ warnOnCapabilityGaps(source.manifest);
70
158
  // Build the per-request source resolver. When target configs are
71
159
  // declared, routes honor `?target=<name>` to read from any known
72
160
  // target. Providers are initialized lazily so dev startup doesn't
@@ -86,6 +174,7 @@ export function createAdminApp(opts) {
86
174
  registry,
87
175
  projectSiteDir: source.projectSiteDir,
88
176
  manifest: source.manifest,
177
+ gazettaManifest: source.gazettaManifest,
89
178
  // The registry's filesystem targets are already content-rooted
90
179
  // (path=./targets/<key>); siteDir on the resolved context is empty.
91
180
  siteDir: '',
@@ -93,14 +182,16 @@ export function createAdminApp(opts) {
93
182
  const config = opts.targetConfigs[name];
94
183
  if (!config)
95
184
  return;
96
- const { createStorageProvider } = await import('../targets.js');
97
- const storage = await createStorageProvider(config.storage, source.projectSiteDir, name);
185
+ // Storage is already a constructed provider (Path X — operator-facing
186
+ // factory ran at config-eval). Init the connection if the provider
187
+ // exposes one (S3 + Azure use this for connectivity probes).
188
+ const storage = config.storage;
98
189
  const maybeInit = storage;
99
190
  if (typeof maybeInit.init === 'function')
100
191
  await maybeInit.init();
101
192
  providers.set(name, storage);
102
193
  },
103
- // Build a HistoryProvider per target, honoring the site.yaml
194
+ // Build a HistoryProvider per target, honoring the site.config.ts
104
195
  // `history` block (enabled/retention). Returns undefined when the
105
196
  // target has history turned off — routes no-op on absent provider.
106
197
  buildHistory: (name, storage) => {
@@ -114,21 +205,175 @@ export function createAdminApp(opts) {
114
205
  else {
115
206
  resolveSource = staticSourceResolver(source);
116
207
  }
208
+ // Validator registry built once per app — Cut 1 ships the 5 reference-
209
+ // existence validators; Cut 2+ extend the default registry. Tests can
210
+ // override via opts.validators.
211
+ const validators = opts.validators ?? defaultValidatorRegistry();
212
+ // Principal middleware — extracts upstream identity (Cloudflare
213
+ // Access JWT, X-Forwarded-User header, etc.) per the configured
214
+ // trust mode in `site.config.ts admin.auth`. Falls back to
215
+ // `none`-mode (anonymous + admin role) when no auth is configured.
216
+ // Must run before route registration so handlers see c.var.principal.
217
+ //
218
+ // The auth config sits under SiteManifest.admin.auth as a loose
219
+ // record (per the existing config schema's reserved-slot pattern);
220
+ // we strict-parse it here against the typed AuthConfigSchema and
221
+ // throw a clear AuthConfigurationError if the operator's block is
222
+ // malformed.
223
+ const rawAuthBlock = source.manifest?.admin?.auth;
224
+ let authProvider;
225
+ if (rawAuthBlock !== undefined) {
226
+ const parsed = AuthConfigSchema.safeParse(rawAuthBlock);
227
+ if (!parsed.success) {
228
+ throw new AuthConfigurationError(`Invalid admin.auth block in site.config.ts: ${parsed.error.issues
229
+ .map(i => `${i.path.join('.')}: ${i.message}`)
230
+ .join('; ')}`);
231
+ }
232
+ authProvider = buildAuthProvider(parsed.data);
233
+ }
234
+ else {
235
+ // No admin.auth block — none mode (single-author / dev).
236
+ authProvider = buildAuthProvider(undefined);
237
+ }
238
+ app.use('/api/*', principalMiddleware(authProvider));
239
+ // Audit middleware — per design-audit.md "Recording timing".
240
+ // Resolves admin.audit config; constructs the configured providers;
241
+ // injects c.var.audit so handlers can call `c.var.audit.record(...)`.
242
+ // Defaults to HistoryAuditProvider when admin.audit is absent
243
+ // (zero-config audit; events stored under target's
244
+ // .gazetta/audit/events-{instance}.jsonl).
245
+ const rawAuditBlock = source.manifest?.admin?.audit;
246
+ let auditConfig;
247
+ if (rawAuditBlock !== undefined) {
248
+ const parsed = AuditConfigSchema.safeParse(rawAuditBlock);
249
+ if (!parsed.success) {
250
+ throw new AuditConfigurationError(`Invalid admin.audit block in site.config.ts: ${parsed.error.issues
251
+ .map(i => `${i.path.join('.')}: ${i.message}`)
252
+ .join('; ')}`);
253
+ }
254
+ auditConfig = parsed.data;
255
+ }
256
+ else {
257
+ auditConfig = DEFAULT_AUDIT_CONFIG;
258
+ }
259
+ // Salt env var resolution per design-audit.md "Salt management":
260
+ // GAZETTA_AUDIT_ACTOR_SALT for actor pseudonymization;
261
+ // GAZETTA_AUDIT_SOURCEIP_SALT for source-IP hashing.
262
+ const actorPseudonym = auditConfig.actorPseudonym ?? 'none';
263
+ const recordSourceIp = auditConfig.recordSourceIp ?? 'none';
264
+ const recordUserAgent = auditConfig.recordUserAgent ?? 'none';
265
+ if (actorPseudonym === 'sha256' && !process.env.GAZETTA_AUDIT_ACTOR_SALT) {
266
+ throw new AuditConfigurationError('admin.audit.actorPseudonym: sha256 requires the GAZETTA_AUDIT_ACTOR_SALT environment variable');
267
+ }
268
+ if (recordSourceIp === 'hashed' && !process.env.GAZETTA_AUDIT_SOURCEIP_SALT) {
269
+ throw new AuditConfigurationError('admin.audit.recordSourceIp: hashed requires the GAZETTA_AUDIT_SOURCEIP_SALT environment variable');
270
+ }
271
+ // Build the configured providers. v1 ships only HistoryAuditProvider;
272
+ // v2 sinks (webhook, file, OTel, CloudWatch, etc.) extend the build
273
+ // step here when they ship.
274
+ const auditProviders = [];
275
+ if (auditConfig.provider === 'history') {
276
+ auditProviders.push(createHistoryAuditProvider({
277
+ storage: source.storage,
278
+ instance: resolveInstanceId(),
279
+ }));
280
+ }
281
+ app.use('/api/*', auditMiddleware({
282
+ providers: auditProviders,
283
+ strict: auditConfig.strict ?? false,
284
+ actorPseudonym,
285
+ actorSalt: process.env.GAZETTA_AUDIT_ACTOR_SALT,
286
+ recordSourceIp,
287
+ sourceIpSalt: process.env.GAZETTA_AUDIT_SOURCEIP_SALT,
288
+ trustedProxyCount: auditConfig.trustedProxyCount,
289
+ recordUserAgent,
290
+ }));
117
291
  app.route('/', siteRoutes(resolveSource));
118
- app.route('/', pageRoutes(resolveSource));
119
- app.route('/', fragmentRoutes(resolveSource));
120
- app.route('/', templateRoutes(resolveSource, templatesDir, adminDir, opts.production));
292
+ // Archive + rename routes must register BEFORE pageRoutes /
293
+ // fragmentRoutes — those modules use `:name{.+}` greedy regex
294
+ // parameters that would capture `landing/archive` (or `/rename`)
295
+ // when these routes' literal-suffix paths would correctly capture
296
+ // `landing` + the suffix. First-match-wins in Hono's routing trie
297
+ // means specific suffixes register first.
298
+ app.route('/', archiveRoutes(resolveSource, { scanner: opts.validationScanner ?? null }));
299
+ app.route('/', renameRoutes(resolveSource));
300
+ app.route('/', pageRoutes(resolveSource, validators, templatesDir, {
301
+ hooks: opts.hooks,
302
+ scanner: opts.validationScanner ?? null,
303
+ }));
304
+ app.route('/', fragmentRoutes(resolveSource, validators, templatesDir, {
305
+ hooks: opts.hooks,
306
+ scanner: opts.validationScanner ?? null,
307
+ }));
308
+ app.route('/', templateRoutes(resolveSource, templatesDir, adminDir, opts.production, {
309
+ scanner: opts.validationScanner ?? null,
310
+ }));
121
311
  app.route('/', previewRoutes(resolveSource, templatesDir));
122
- app.route('/', publishRoutes(resolveSource, opts.targets, opts.targetConfigs, templatesDir, scan));
312
+ app.route('/', publishRoutes(resolveSource, opts.targets, opts.targetConfigs, templatesDir, scan, {
313
+ hooks: opts.hooks,
314
+ validators,
315
+ }));
123
316
  app.route('/', compareRoutes(resolveSource, opts.targets, opts.targetConfigs, templatesDir, scan));
124
317
  app.route('/', fieldRoutes(resolveSource, adminDir));
125
318
  app.route('/', historyRoutes(resolveSource, opts.targets, opts.targetConfigs));
126
- app.route('/', assetRoutes(resolveSource));
319
+ app.route('/', assetRoutes(resolveSource, { hooks: opts.hooks }));
320
+ app.route('/', systemRoutes(resolveSource));
321
+ app.route('/', auditRoutes({ providers: auditProviders }));
322
+ app.route('/', validationRoutes({ scanner: opts.validationScanner ?? null }));
323
+ app.route('/', healthRoutes());
324
+ // Periodic cache stats log — fires every 5 minutes against the
325
+ // bootstrap source's cache. Runs unobtrusively (timer.unref()
326
+ // means it never blocks process exit). Tests pass
327
+ // `disableCacheStatsLogger: true` to avoid background timers; the
328
+ // route at /api/system/cache/stats still exposes on-demand
329
+ // snapshots either way.
330
+ if (!opts.disableCacheStatsLogger) {
331
+ startCacheStatsLogger({ cache: source.cache });
332
+ }
333
+ // Audit retention pruner — when admin.audit.retention is configured
334
+ // (events cap and/or maxAgeMonths), evict old / overflow events at
335
+ // boot + every 6 hours per design-audit.md "Retention". No-op when
336
+ // retention isn't configured (operator opted out / never opted in).
337
+ // Same pattern as the cache stats logger: timer.unref() so it never
338
+ // blocks process exit; tests pass `disableAuditRetentionPruner:
339
+ // true` to keep background work out of the test runtime.
340
+ if (!opts.disableAuditRetentionPruner &&
341
+ auditConfig.provider === 'history' &&
342
+ auditConfig.retention &&
343
+ (auditConfig.retention.events !== undefined || auditConfig.retention.maxAgeMonths)) {
344
+ const retentionConfig = auditConfig.retention;
345
+ const runPrune = async () => {
346
+ try {
347
+ await pruneAuditEvents(source.storage, {
348
+ events: retentionConfig.events,
349
+ maxAgeMonths: retentionConfig.maxAgeMonths ?? null,
350
+ });
351
+ }
352
+ catch {
353
+ // Pruner failures fail-open per Universal Provider Requirement
354
+ // #5 — audit accumulates until next successful prune. Operator
355
+ // monitoring sees the failure via structured log (TODO when
356
+ // logging foundation lands; v1 swallows silently).
357
+ }
358
+ };
359
+ // Boot pass.
360
+ void runPrune();
361
+ // 6-hour interval (21_600_000 ms). unref() so the process can exit
362
+ // independently of this timer.
363
+ const PRUNE_INTERVAL_MS = 6 * 60 * 60 * 1000;
364
+ const timer = setInterval(runPrune, PRUNE_INTERVAL_MS);
365
+ timer.unref();
366
+ }
127
367
  // Exposed for the CLI's template file watcher: clears the memoized scan
128
368
  // so the next publish/compare picks up template edits. Not part of the
129
369
  // Hono Request interface — the CLI casts the return.
130
370
  const appWithInvalidate = app;
131
371
  appWithInvalidate.invalidateTemplatesCache = () => cachedScan.invalidate();
372
+ appWithInvalidate.invalidateContentCache = async () => {
373
+ await resolveSource.forEachBuilt(async (ctx) => {
374
+ await Promise.all([ctx.cache.invalidatePrefix('pages:'), ctx.cache.invalidatePrefix('fragments:')]);
375
+ });
376
+ };
132
377
  return appWithInvalidate;
133
378
  }
134
379
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin-api/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin-api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type ActorPseudonymMode, type AuditContext, type AuditFailureLogger, type AuditProvider, type SourceIpMode, type UserAgentMode } from '../../audit/index.js';
2
+ import type { PrincipalEnv } from './principal.js';
3
+ /**
4
+ * Hono context augmentation — readers see `c.var.audit` typed as
5
+ * `AuditContext` (always populated; never undefined after this
6
+ * middleware runs).
7
+ */
8
+ export type AuditEnv = PrincipalEnv & {
9
+ Variables: PrincipalEnv['Variables'] & {
10
+ audit: AuditContext;
11
+ };
12
+ };
13
+ export interface AuditMiddlewareOptions {
14
+ providers: ReadonlyArray<AuditProvider>;
15
+ strict: boolean;
16
+ actorPseudonym: ActorPseudonymMode;
17
+ actorSalt?: string;
18
+ recordSourceIp: SourceIpMode;
19
+ sourceIpSalt?: string;
20
+ trustedProxyCount?: number;
21
+ recordUserAgent: UserAgentMode;
22
+ logFailure?: AuditFailureLogger;
23
+ }
24
+ export declare function auditMiddleware(opts: AuditMiddlewareOptions): import("hono").MiddlewareHandler<AuditEnv, string, {}, Response>;
25
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/admin-api/middleware/audit.ts"],"names":[],"mappings":"AA6BA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,aAAa,EAEnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG;IACpC,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,GAAG;QACrC,KAAK,EAAE,YAAY,CAAA;KACpB,CAAA;CACF,CAAA;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;IACvC,MAAM,EAAE,OAAO,CAAA;IACf,cAAc,EAAE,kBAAkB,CAAA;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,YAAY,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,eAAe,EAAE,aAAa,CAAA;IAC9B,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAChC;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,oEA4B3D"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Audit middleware — wires the audit subsystem into the per-request
3
+ * Hono context.
4
+ *
5
+ * # What this middleware does
6
+ *
7
+ * 1. Reads `c.var.principal` (set by Cut 7's principalMiddleware).
8
+ * 2. Builds an `AuditContext` for this request (with the principal,
9
+ * request headers, and peer IP bound).
10
+ * 3. Stores the context on `c.var.audit` so route handlers can call
11
+ * `c.var.audit.record({...})`.
12
+ *
13
+ * # Wiring order
14
+ *
15
+ * Must run AFTER principalMiddleware (Cut 7) so `c.var.principal`
16
+ * is populated. Must run BEFORE capability middleware (Cut 8) so
17
+ * the capability-failure path can record `outcome: 'forbidden'`
18
+ * audit events — that path needs `c.var.audit` available too.
19
+ *
20
+ * # SOLID lenses
21
+ *
22
+ * - SRP: middleware-shaped wiring; doesn't construct providers
23
+ * (Cut 2 + Cut 5's boot path do that), doesn't dispatch (the
24
+ * recorder does that), doesn't process privacy fields (the
25
+ * context does that).
26
+ * - DIP: takes pre-built providers + privacy modes; doesn't read
27
+ * site.config.ts directly.
28
+ */
29
+ import { createMiddleware } from 'hono/factory';
30
+ import { createAuditContext, } from '../../audit/index.js';
31
+ export function auditMiddleware(opts) {
32
+ return createMiddleware(async (c, next) => {
33
+ const principal = c.get('principal');
34
+ const headers = new Map();
35
+ c.req.raw.headers.forEach((value, key) => {
36
+ headers.set(key.toLowerCase(), value);
37
+ });
38
+ const peerIp = headers.get('cf-connecting-ip') ??
39
+ headers.get('x-real-ip') ??
40
+ extractFirstXffEntry(headers.get('x-forwarded-for'));
41
+ const ctx = createAuditContext({
42
+ providers: opts.providers,
43
+ strict: opts.strict,
44
+ actorPseudonym: opts.actorPseudonym,
45
+ actorSalt: opts.actorSalt,
46
+ recordSourceIp: opts.recordSourceIp,
47
+ sourceIpSalt: opts.sourceIpSalt,
48
+ trustedProxyCount: opts.trustedProxyCount,
49
+ recordUserAgent: opts.recordUserAgent,
50
+ principal,
51
+ headers,
52
+ peerIp: peerIp ?? undefined,
53
+ logFailure: opts.logFailure,
54
+ });
55
+ c.set('audit', ctx);
56
+ await next();
57
+ });
58
+ }
59
+ function extractFirstXffEntry(xff) {
60
+ if (!xff)
61
+ return null;
62
+ const first = xff.split(',')[0]?.trim();
63
+ return first || null;
64
+ }
65
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/admin-api/middleware/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAOL,kBAAkB,GACnB,MAAM,sBAAsB,CAAA;AA0B7B,MAAM,UAAU,eAAe,CAAC,IAA4B;IAC1D,OAAO,gBAAgB,CAAW,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAClD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;QACzC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACvC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAA;QACvC,CAAC,CAAC,CAAA;QACF,MAAM,MAAM,GACV,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;YACxB,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAA;QACtD,MAAM,GAAG,GAAG,kBAAkB,CAAC;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,SAAS;YACT,OAAO;YACP,MAAM,EAAE,MAAM,IAAI,SAAS;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAA;QACF,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACnB,MAAM,IAAI,EAAE,CAAA;IACd,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,GAA8B;IAC1D,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IACrB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;IACvC,OAAO,KAAK,IAAI,IAAI,CAAA;AACtB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { PrincipalEnv } from './principal.js';
2
+ /**
3
+ * Build a middleware that requires the specified capability.
4
+ * Returns 401 for anonymous requests, 403 for authenticated
5
+ * requests lacking the capability.
6
+ */
7
+ export declare function requireCapability(capability: string): import("hono").MiddlewareHandler<PrincipalEnv, string, {}, Response>;
8
+ //# sourceMappingURL=capability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../../src/admin-api/middleware/capability.ts"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,wEA0BnD"}