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,78 @@
1
+ /**
2
+ * `HookContext` builder — per-request factory that admin-api route
3
+ * handlers call to construct the context passed to dispatch.
4
+ *
5
+ * The HookContext is built ONCE per request (not per-hook) and
6
+ * shared across every dispatch in that request. This is the
7
+ * "deterministic timestamp" invariant from design-hooks.md "Locked
8
+ * invariants" — `now` is computed when the context is built so all
9
+ * hooks in the request see the same wall clock.
10
+ *
11
+ * # Why a builder, not a middleware
12
+ *
13
+ * Earlier drafts considered a `hooksMiddleware` that attaches the
14
+ * context to `c.var.hooks`. The reason that doesn't work as
15
+ * cleanly: HookContext needs the SCOPE of each operation
16
+ * (page name, fragment name, locale, etc.) which the middleware
17
+ * can't know — only the route handler does. Route handlers
18
+ * already have everything they need (principal from
19
+ * `c.var.principal`, headers from `c.req`, source from the
20
+ * resolver); a tiny builder function bundles them into a
21
+ * HookContext per-call.
22
+ *
23
+ * # Read-only storage proxy
24
+ *
25
+ * The HookContext exposes `storage` as `ReadOnlyStorageProvider`.
26
+ * v1 uses a Proxy that forwards read methods only; write methods
27
+ * are absent from the type and would throw at the proxy layer if
28
+ * called via type assertion. This is the "Proxy implementation"
29
+ * design open question 2 from design-hooks.md — accepted with the
30
+ * Proxy approach for less code duplication.
31
+ *
32
+ * # Logger fallback
33
+ *
34
+ * Until the logging foundation lands, the context's `log` field is
35
+ * a no-op logger. design-hooks.md notes this: "v1 hooks dispatch
36
+ * supplies a no-op logger or pino child as available."
37
+ *
38
+ * # SOLID lenses
39
+ *
40
+ * - SRP: builder constructs the context; doesn't dispatch
41
+ * (Cut 2's concern), doesn't discover handlers (Cut 3's), and
42
+ * doesn't audit hook firings (Cut 7's).
43
+ * - DIP: builder takes a Principal + StorageProvider + ID
44
+ * generator + clock; doesn't reach into Hono internals.
45
+ */
46
+ import type { Principal } from '../auth/types.js';
47
+ import type { StorageProvider } from '../types.js';
48
+ import type { HookFiringEmitter } from './audit-emitter.js';
49
+ import type { HookContext, HookLogger, ReadOnlySiteConfig } from './types.js';
50
+ export interface BuildHookContextOptions {
51
+ principal: Principal;
52
+ storage: StorageProvider;
53
+ /** Active target name when the operation is target-scoped. */
54
+ target?: string;
55
+ /** Per-request correlation ID; matches audit + log ids. */
56
+ requestId: string;
57
+ /** Request timestamp; deterministic for all hooks in this request. */
58
+ now?: Date;
59
+ /** Logger; defaults to no-op until logging foundation lands. */
60
+ log?: HookLogger;
61
+ /** Read-only site config. */
62
+ site: ReadOnlySiteConfig;
63
+ /**
64
+ * Optional audit firing emitter. When set, dispatch records
65
+ * one `action: 'hook-fired'` audit event per hook firing per
66
+ * design-hooks.md "Audit events". Production wires this to
67
+ * `c.var.audit`; tests omit for silent firing.
68
+ */
69
+ auditEmit?: HookFiringEmitter;
70
+ }
71
+ /**
72
+ * Build a HookContext for one request. Construct once per request
73
+ * and pass to every dispatch in that request — the `now` and
74
+ * `requestId` fields are deterministic across the per-request
75
+ * dispatches.
76
+ */
77
+ export declare function buildHookContext(opts: BuildHookContextOptions): HookContext;
78
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/hooks/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAS7E,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,eAAe,CAAA;IACxB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAA;IACjB,sEAAsE;IACtE,GAAG,CAAC,EAAE,IAAI,CAAA;IACV,gEAAgE;IAChE,GAAG,CAAC,EAAE,UAAU,CAAA;IAChB,6BAA6B;IAC7B,IAAI,EAAE,kBAAkB,CAAA;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAA;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,WAAW,CAW3E"}
@@ -0,0 +1,56 @@
1
+ const NOOP_LOGGER = {
2
+ debug: () => { },
3
+ info: () => { },
4
+ warn: () => { },
5
+ error: () => { },
6
+ };
7
+ /**
8
+ * Build a HookContext for one request. Construct once per request
9
+ * and pass to every dispatch in that request — the `now` and
10
+ * `requestId` fields are deterministic across the per-request
11
+ * dispatches.
12
+ */
13
+ export function buildHookContext(opts) {
14
+ return {
15
+ principal: opts.principal,
16
+ target: opts.target,
17
+ requestId: opts.requestId,
18
+ auditEmit: opts.auditEmit,
19
+ now: opts.now ?? new Date(),
20
+ log: opts.log ?? NOOP_LOGGER,
21
+ site: opts.site,
22
+ storage: makeReadOnlyStorage(opts.storage),
23
+ };
24
+ }
25
+ /**
26
+ * Wrap a `StorageProvider` in a read-only Proxy. The returned
27
+ * value satisfies `ReadOnlyStorageProvider`; the wrapped read
28
+ * methods forward to the underlying provider; the write methods
29
+ * are absent from the type AND would throw if invoked via type
30
+ * assertion.
31
+ *
32
+ * Why Proxy instead of a copy of read methods: Proxy preserves
33
+ * `this` for any inherited methods + future read methods (e.g.,
34
+ * `stat()` if added later) flow through automatically.
35
+ */
36
+ function makeReadOnlyStorage(storage) {
37
+ const READ_METHODS = new Set(['readFile', 'readDir', 'exists', 'readBytes', 'readStream']);
38
+ const handler = {
39
+ get(target, prop, receiver) {
40
+ if (typeof prop !== 'string')
41
+ return Reflect.get(target, prop, receiver);
42
+ if (READ_METHODS.has(prop)) {
43
+ const method = Reflect.get(target, prop, receiver);
44
+ if (typeof method === 'function')
45
+ return method.bind(target);
46
+ return method;
47
+ }
48
+ // Write methods + anything else: throw to surface the
49
+ // contract violation. Hooks should never reach for
50
+ // writeFile/writeBytes/writeStream/mkdir/rm via ctx.storage.
51
+ throw new TypeError(`Hook context's storage is read-only — "${prop}" is not available. Writes go through the operation that fired the hook.`);
52
+ },
53
+ };
54
+ return new Proxy(storage, handler);
55
+ }
56
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/hooks/context.ts"],"names":[],"mappings":"AAmDA,MAAM,WAAW,GAAe;IAC9B,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;CAChB,CAAA;AAwBD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA6B;IAC5D,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;QAC3B,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,WAAW;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;KAC3C,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,mBAAmB,CAAC,OAAwB;IACnD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;IAC1F,MAAM,OAAO,GAAkC;QAC7C,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;YACxE,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;gBAClD,IAAI,OAAO,MAAM,KAAK,UAAU;oBAAE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAC5D,OAAO,MAAM,CAAA;YACf,CAAC;YACD,sDAAsD;YACtD,mDAAmD;YACnD,6DAA6D;YAC7D,MAAM,IAAI,SAAS,CACjB,0CAA0C,IAAI,0EAA0E,CACzH,CAAA;QACH,CAAC;KACF,CAAA;IACD,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,CAAuC,CAAA;AAC1E,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * `HookContribution` — what a hook factory returns.
3
+ *
4
+ * Operators add factory contributions to `site.config.ts`'s
5
+ * `admin.hooks` array; the boot path calls each contribution's
6
+ * `hooks[]` entries against the same registry that picks up
7
+ * site-local file discovery.
8
+ *
9
+ * Per design-hooks.md Cut 9 + grilling-with-docs locked Q1
10
+ * (bundled-object shape):
11
+ *
12
+ * - `source` is package-level metadata (e.g.,
13
+ * '@example/cdn-purge'). Captured once per contribution; the
14
+ * loader stamps it on every registered HookEntry's source
15
+ * field for audit + diagnostics.
16
+ * - `hooks` is an array because one package may contribute
17
+ * multiple handlers across phases (e.g., a CDN-purge plugin
18
+ * wires both afterSave and afterPublish).
19
+ *
20
+ * # Why bundle vs. flat array
21
+ *
22
+ * - SRP: source is per-package; hook entries are per-handler.
23
+ * Bundling reflects the ontology — one factory call = one
24
+ * logical plugin contributing N handlers.
25
+ * - DRY: source declared once per package, not stamped on
26
+ * every entry.
27
+ *
28
+ * # Why source is required
29
+ *
30
+ * - Audit log records source per firing; defaulting to
31
+ * 'site-local' would lie when the contribution actually came
32
+ * from a named package.
33
+ * - Plugin authors writing distributables always know their
34
+ * package name; declaring it is one line.
35
+ * - Site-local hooks (admin/hooks/*.ts) get 'site-local' from
36
+ * the file walker, not from this type.
37
+ *
38
+ * # Why duplicate sources allowed
39
+ *
40
+ * - Operators legitimately invoke the same factory twice with
41
+ * different config (e.g., two CDN-purge instances for
42
+ * different regions). Both register; audit log records both
43
+ * events with the same source. Per-handler `options.name`
44
+ * distinguishes them where needed.
45
+ * - Locked grilling-with-docs Q5.
46
+ *
47
+ * # SOLID lenses
48
+ *
49
+ * - SRP: type owns the contribution shape; doesn't construct
50
+ * handlers, doesn't register against the registry.
51
+ * - LSP: every plugin's factory returns `HookContribution`;
52
+ * the loader treats them all uniformly.
53
+ */
54
+ import type { HookHandler, HookOptions, HookPhase } from './types.js';
55
+ /**
56
+ * One entry in a contribution's `hooks` array. Carries the phase,
57
+ * the handler, and per-handler options (priority / name /
58
+ * timeout).
59
+ *
60
+ * `source` is intentionally absent — it lives on the parent
61
+ * `HookContribution` and gets stamped at registration time.
62
+ * Per-entry override would defeat the bundling rationale.
63
+ */
64
+ export interface HookEntry {
65
+ readonly phase: HookPhase;
66
+ readonly handler: HookHandler;
67
+ readonly options?: HookOptions;
68
+ }
69
+ /**
70
+ * What a hook factory returns. Operators add to
71
+ * `site.config.ts`'s `admin.hooks` array; one entry per factory
72
+ * invocation.
73
+ */
74
+ export interface HookContribution {
75
+ /**
76
+ * Source identity for diagnostics + audit. Conventional values:
77
+ *
78
+ * - `'@scope/package-name'` — npm-distributed plugin
79
+ * - `'github.com/org/repo'` — git-distributed plugin
80
+ * - any other unambiguous string the plugin author prefers
81
+ *
82
+ * The reserved value `'site-local'` is auto-applied by the
83
+ * file-discovery walker (admin/hooks/*.ts) and SHOULD NOT be
84
+ * used by factory-supplied contributions.
85
+ */
86
+ readonly source: string;
87
+ /** One or more handlers contributed by this package. */
88
+ readonly hooks: ReadonlyArray<HookEntry>;
89
+ }
90
+ //# sourceMappingURL=contribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contribution.d.ts","sourceRoot":"","sources":["../../src/hooks/contribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAErE;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAA;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;CACzC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contribution.js","sourceRoot":"","sources":["../../src/hooks/contribution.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import type { HookRegistry } from './registry.js';
2
+ import type { HookContext, HookScope, PublishHookResult, PublishItem, SaveResult, UploadHookAsset, UploadHookPayload, UploadHookResult } from './types.js';
3
+ /**
4
+ * Chain `beforeSave` handlers. Returns the final payload after
5
+ * every handler has run (or throws `HookCancellation` on first
6
+ * failing handler).
7
+ */
8
+ export declare function dispatchBeforeSave<T>(registry: HookRegistry, scope: HookScope, payload: T, ctx: HookContext): Promise<T>;
9
+ /**
10
+ * Fan out `afterSave` handlers in parallel. Failures logged;
11
+ * never propagated.
12
+ */
13
+ export declare function dispatchAfterSave<T>(registry: HookRegistry, scope: HookScope, result: SaveResult<T>, ctx: HookContext): Promise<void>;
14
+ /**
15
+ * Chain `afterLoad` handlers. Although the phase fires after
16
+ * load (not before save), it's a mutating chain: each handler
17
+ * may transform the loaded payload. Same shape as `beforeSave`.
18
+ */
19
+ export declare function dispatchAfterLoad<T>(registry: HookRegistry, scope: HookScope, payload: T, ctx: HookContext): Promise<T>;
20
+ /**
21
+ * Chain `beforePublish` handlers. Returns the final item array.
22
+ */
23
+ export declare function dispatchBeforePublish(registry: HookRegistry, target: string, items: ReadonlyArray<PublishItem>, ctx: HookContext): Promise<ReadonlyArray<PublishItem>>;
24
+ /** Fan-out `afterPublish` parallel. */
25
+ export declare function dispatchAfterPublish(registry: HookRegistry, target: string, result: PublishHookResult, ctx: HookContext): Promise<void>;
26
+ /** Chain `beforeUpload` handlers. Returns the final asset + bytes. */
27
+ export declare function dispatchBeforeUpload(registry: HookRegistry, asset: UploadHookAsset, bytes: Uint8Array, ctx: HookContext): Promise<UploadHookPayload>;
28
+ /** Fan-out `afterUpload` parallel. */
29
+ export declare function dispatchAfterUpload(registry: HookRegistry, asset: UploadHookAsset, result: UploadHookResult, ctx: HookContext): Promise<void>;
30
+ //# sourceMappingURL=dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/hooks/dispatch.ts"],"names":[],"mappings":"AAoDA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,KAAK,EAQV,WAAW,EAGX,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,CAAC,EACV,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,CAAC,CAAC,CASZ;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EACrB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,CAAC,EACV,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,CAAC,CAAC,CASZ;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,EACjC,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CASrC;AAED,uCAAuC;AACvC,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,sEAAsE;AACtE,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,iBAAiB,CAAC,CAS5B;AAED,sCAAsC;AACtC,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,IAAI,CAAC,CAGf"}
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Hook dispatch — chains `before*` handlers, fans out `after*`
3
+ * handlers, enforces per-handler timeout.
4
+ *
5
+ * Per design-hooks.md "Composition (Q3 locked)":
6
+ *
7
+ * - `before*` chain: output of handler N = input of handler N+1.
8
+ * Final output proceeds to the operation. One handler throws
9
+ * → operation cancels; subsequent handlers don't fire.
10
+ * - `after*` parallel: each handler receives the same operation
11
+ * result. Independent (no chaining). Failures logged but
12
+ * don't stop other `after*` handlers from running.
13
+ * - Per-hook timeout (default 5s, configurable per registration):
14
+ * `before*` timeout = throw = cancel operation; `after*`
15
+ * timeout = logged + counted; chain continues.
16
+ *
17
+ * # Why two dispatch functions, not one
18
+ *
19
+ * `dispatchBefore` returns `Promise<T>` (the chained payload).
20
+ * `dispatchAfter` returns `Promise<void>` (nothing to chain).
21
+ * Same generic shape would force `dispatchAfter` consumers to
22
+ * discard a meaningless return value, and `dispatchBefore`'s
23
+ * cancellation semantics would force `after*` callers to handle
24
+ * a throw they can never produce. Two functions, two contracts.
25
+ *
26
+ * # Timeout implementation
27
+ *
28
+ * `Promise.race(handler, timeoutPromise)` where the timeout
29
+ * promise rejects with `HookTimeout`. The handler may still be
30
+ * resolving in the background after timeout — Node's process
31
+ * keeps running until handles drain. v1 doesn't `AbortController`
32
+ * the handler; the design notes this as acceptable for v1
33
+ * (handler completion after timeout is harmless because the
34
+ * dispatcher already moved on).
35
+ *
36
+ * # Promise.allSettled vs Promise.all for `after*`
37
+ *
38
+ * `allSettled` so one failing handler doesn't prevent siblings
39
+ * from firing. Each rejection is logged via `ctx.log.error` with
40
+ * the hook name + phase + duration. The dispatcher itself never
41
+ * rejects from `dispatchAfter`.
42
+ *
43
+ * # SOLID lenses
44
+ *
45
+ * - SRP: dispatch owns the orchestration logic. Per-handler
46
+ * timeout is one concern (private helper). Cancellation
47
+ * wrapping is one concern (private helper).
48
+ * - DIP: callers depend on the dispatch functions; the
49
+ * registry's storage layout is opaque.
50
+ * - LSP: every dispatcher behaves identically across phases.
51
+ */
52
+ import { HookCancellation, HookTimeout } from './errors.js';
53
+ import { eventFromRegistration } from './audit-emitter.js';
54
+ /**
55
+ * Chain `beforeSave` handlers. Returns the final payload after
56
+ * every handler has run (or throws `HookCancellation` on first
57
+ * failing handler).
58
+ */
59
+ export async function dispatchBeforeSave(registry, scope, payload, ctx) {
60
+ const handlers = registry.getByPhase('beforeSave');
61
+ let current = payload;
62
+ for (const reg of handlers) {
63
+ current = await runWithTimeout('beforeSave', reg, ctx, async () => reg.handler(scope, current, ctx));
64
+ }
65
+ return current;
66
+ }
67
+ /**
68
+ * Fan out `afterSave` handlers in parallel. Failures logged;
69
+ * never propagated.
70
+ */
71
+ export async function dispatchAfterSave(registry, scope, result, ctx) {
72
+ const handlers = registry.getByPhase('afterSave');
73
+ await runAfterChain(handlers, ctx, async (reg) => reg.handler(scope, result, ctx));
74
+ }
75
+ /**
76
+ * Chain `afterLoad` handlers. Although the phase fires after
77
+ * load (not before save), it's a mutating chain: each handler
78
+ * may transform the loaded payload. Same shape as `beforeSave`.
79
+ */
80
+ export async function dispatchAfterLoad(registry, scope, payload, ctx) {
81
+ const handlers = registry.getByPhase('afterLoad');
82
+ let current = payload;
83
+ for (const reg of handlers) {
84
+ current = await runWithTimeout('afterLoad', reg, ctx, async () => reg.handler(scope, current, ctx));
85
+ }
86
+ return current;
87
+ }
88
+ /**
89
+ * Chain `beforePublish` handlers. Returns the final item array.
90
+ */
91
+ export async function dispatchBeforePublish(registry, target, items, ctx) {
92
+ const handlers = registry.getByPhase('beforePublish');
93
+ let current = items;
94
+ for (const reg of handlers) {
95
+ current = await runWithTimeout('beforePublish', reg, ctx, async () => reg.handler(target, current, ctx));
96
+ }
97
+ return current;
98
+ }
99
+ /** Fan-out `afterPublish` parallel. */
100
+ export async function dispatchAfterPublish(registry, target, result, ctx) {
101
+ const handlers = registry.getByPhase('afterPublish');
102
+ await runAfterChain(handlers, ctx, async (reg) => reg.handler(target, result, ctx));
103
+ }
104
+ /** Chain `beforeUpload` handlers. Returns the final asset + bytes. */
105
+ export async function dispatchBeforeUpload(registry, asset, bytes, ctx) {
106
+ const handlers = registry.getByPhase('beforeUpload');
107
+ let current = { asset, bytes };
108
+ for (const reg of handlers) {
109
+ current = await runWithTimeout('beforeUpload', reg, ctx, async () => reg.handler(current.asset, current.bytes, ctx));
110
+ }
111
+ return current;
112
+ }
113
+ /** Fan-out `afterUpload` parallel. */
114
+ export async function dispatchAfterUpload(registry, asset, result, ctx) {
115
+ const handlers = registry.getByPhase('afterUpload');
116
+ await runAfterChain(handlers, ctx, async (reg) => reg.handler(asset, result, ctx));
117
+ }
118
+ /**
119
+ * Run a handler with a per-handler timeout. Wraps non-
120
+ * cancellation errors as `HookCancellation` so call sites can
121
+ * `instanceof HookCancellation` uniformly.
122
+ *
123
+ * Used by `before*` chains. Throws to cancel the operation.
124
+ */
125
+ async function runWithTimeout(phase, reg, ctx, handler) {
126
+ let timer;
127
+ const start = Date.now();
128
+ try {
129
+ const handlerPromise = handler();
130
+ const timeoutPromise = new Promise((_, reject) => {
131
+ timer = setTimeout(() => {
132
+ reject(new HookTimeout({ hookName: reg.name, phase, timeoutMs: reg.timeout }));
133
+ }, reg.timeout);
134
+ // unref() so a hung handler doesn't keep the process alive.
135
+ // Available on Node setTimeout return; not on browser.
136
+ const t = timer;
137
+ t.unref?.();
138
+ });
139
+ const result = await Promise.race([handlerPromise, timeoutPromise]);
140
+ // Audit: success firing. Per design-hooks.md "Audit events".
141
+ await safeEmit(ctx, reg, 'success', Date.now() - start);
142
+ return result;
143
+ }
144
+ catch (err) {
145
+ // HookTimeout and HookCancellation already carry the right
146
+ // shape; rewrap anything else as a HookCancellation so
147
+ // `instanceof HookCancellation` covers both "explicit cancel"
148
+ // and "handler crashed."
149
+ const durationMs = Date.now() - start;
150
+ if (err instanceof HookTimeout) {
151
+ await safeEmit(ctx, reg, 'timeout', durationMs);
152
+ throw err;
153
+ }
154
+ if (err instanceof HookCancellation) {
155
+ await safeEmit(ctx, reg, 'hook-cancelled', durationMs);
156
+ throw err;
157
+ }
158
+ await safeEmit(ctx, reg, 'hook-cancelled', durationMs);
159
+ throw new HookCancellation({
160
+ hookName: reg.name,
161
+ phase,
162
+ message: err instanceof Error ? err.message : String(err),
163
+ cause: err,
164
+ });
165
+ }
166
+ finally {
167
+ if (timer !== undefined)
168
+ clearTimeout(timer);
169
+ }
170
+ }
171
+ /**
172
+ * Forward a hook firing event to ctx.auditEmit. Wrapped in
173
+ * try/catch so emitter failures don't break dispatch.
174
+ */
175
+ async function safeEmit(ctx, reg, outcome, durationMs) {
176
+ if (!ctx.auditEmit)
177
+ return;
178
+ try {
179
+ await ctx.auditEmit(eventFromRegistration(reg, ctx, outcome, durationMs));
180
+ }
181
+ catch {
182
+ // Emitter failures isolate to the dispatcher; we don't want
183
+ // a crashing audit recorder to cancel an operation. Failure
184
+ // is silently ignored; audit pipeline has its own structured
185
+ // log surface for emitter problems.
186
+ }
187
+ }
188
+ /**
189
+ * Run an `after*` chain: parallel via `Promise.allSettled`,
190
+ * per-handler timeout, failures logged via ctx.log without
191
+ * propagating.
192
+ */
193
+ async function runAfterChain(handlers, ctx, invoke) {
194
+ if (handlers.length === 0)
195
+ return;
196
+ const results = await Promise.allSettled(handlers.map(reg => runWithTimeoutAfter(reg, ctx, () => invoke(reg))));
197
+ for (const [i, r] of results.entries()) {
198
+ if (r.status === 'rejected') {
199
+ const reg = handlers[i];
200
+ const reason = r.reason;
201
+ const isTimeout = reason instanceof HookTimeout;
202
+ ctx.log.error({
203
+ hookName: reg.name,
204
+ phase: reg.phase,
205
+ source: reg.source,
206
+ timeout: isTimeout,
207
+ err: reason instanceof Error ? { name: reason.name, message: reason.message } : { message: String(reason) },
208
+ }, `Hook "${reg.name}" failed in ${reg.phase}`);
209
+ }
210
+ }
211
+ }
212
+ /**
213
+ * Variant of `runWithTimeout` for `after*` handlers — preserves
214
+ * `HookTimeout` for the logger to discriminate, but doesn't wrap
215
+ * crashes as `HookCancellation` (after-handlers can't cancel).
216
+ *
217
+ * Audit emit fires the same way as `runWithTimeout`; outcome
218
+ * `'timeout'` distinguishes per-handler timeouts; non-timeout
219
+ * crashes record as `'hook-cancelled'` (closest semantic — handler
220
+ * threw, even if the operation didn't cancel).
221
+ */
222
+ async function runWithTimeoutAfter(reg, ctx, handler) {
223
+ let timer;
224
+ const start = Date.now();
225
+ try {
226
+ const handlerPromise = handler();
227
+ const timeoutPromise = new Promise((_, reject) => {
228
+ timer = setTimeout(() => {
229
+ reject(new HookTimeout({ hookName: reg.name, phase: reg.phase, timeoutMs: reg.timeout }));
230
+ }, reg.timeout);
231
+ const t = timer;
232
+ t.unref?.();
233
+ });
234
+ await Promise.race([handlerPromise, timeoutPromise]);
235
+ await safeEmit(ctx, reg, 'success', Date.now() - start);
236
+ }
237
+ catch (err) {
238
+ const durationMs = Date.now() - start;
239
+ if (err instanceof HookTimeout) {
240
+ await safeEmit(ctx, reg, 'timeout', durationMs);
241
+ }
242
+ else {
243
+ await safeEmit(ctx, reg, 'hook-cancelled', durationMs);
244
+ }
245
+ throw err;
246
+ }
247
+ finally {
248
+ if (timer !== undefined)
249
+ clearTimeout(timer);
250
+ }
251
+ }
252
+ //# sourceMappingURL=dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/hooks/dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Hook error taxonomy.
3
+ *
4
+ * Per design-hooks.md, three distinct error classes carry different
5
+ * dispatcher semantics:
6
+ *
7
+ * - `HookCancellation`: a `before*` hook threw to cancel the
8
+ * operation. Operation aborts; audit records
9
+ * `outcome: 'hook-cancelled'`. The original error (if not a
10
+ * `HookCancellation`) is wrapped so call sites can distinguish
11
+ * "hook explicitly cancelled" from "hook crashed."
12
+ *
13
+ * - `HookTimeout`: a hook's per-handler timeout fired before the
14
+ * handler resolved. For `before*` hooks this cancels the
15
+ * operation (same handling as `HookCancellation`); for `after*`
16
+ * hooks it's logged + counted but doesn't propagate.
17
+ *
18
+ * - `RegistrationAfterInitError`: thrown when code tries to
19
+ * register a hook after the boot-time registration phase has
20
+ * finished. `buildHooksRegistry({ contributions })` registers
21
+ * all factory contributions then calls `seal()`. Any subsequent
22
+ * `register(...)` surfaces this error — a deferred Promise that
23
+ * registers from inside a hook handler, for example, leaks past
24
+ * the registration window.
25
+ *
26
+ * # SOLID lenses
27
+ *
28
+ * - SRP: each error class names one failure mode; consumers
29
+ * branch on `instanceof` to discriminate.
30
+ * - LSP: each subclass `extends HookError` so a `catch (err: HookError)`
31
+ * handler covers every hook-layer failure.
32
+ * - DIP: callers depend on the abstract `HookError` for catch-all
33
+ * handling; specific subclasses for fine-grained recovery.
34
+ */
35
+ /** Base class for all hook-layer errors. */
36
+ export declare class HookError extends Error {
37
+ readonly name: string;
38
+ }
39
+ /**
40
+ * A `before*` hook threw to cancel the operation, OR a hook handler
41
+ * threw a non-cancellation error that the dispatcher wraps for
42
+ * uniform handling.
43
+ *
44
+ * The originating handler's name is captured for audit metadata.
45
+ * The original error (if any) is exposed via `cause` so operators
46
+ * can investigate handler crashes vs. explicit cancellations.
47
+ */
48
+ export declare class HookCancellation extends HookError {
49
+ readonly name = "HookCancellation";
50
+ /** The hook that cancelled — either `meta.name` or the file basename. */
51
+ readonly hookName: string;
52
+ /** The phase the hook was firing in. */
53
+ readonly phase: string;
54
+ constructor(opts: {
55
+ hookName: string;
56
+ phase: string;
57
+ message?: string;
58
+ cause?: unknown;
59
+ });
60
+ }
61
+ /**
62
+ * A hook's per-handler timeout fired. The handler may still be
63
+ * resolving (the dispatcher races the handler against a setTimeout-
64
+ * backed promise) — but the operation can't wait for it.
65
+ */
66
+ export declare class HookTimeout extends HookError {
67
+ readonly name = "HookTimeout";
68
+ readonly hookName: string;
69
+ readonly phase: string;
70
+ readonly timeoutMs: number;
71
+ constructor(opts: {
72
+ hookName: string;
73
+ phase: string;
74
+ timeoutMs: number;
75
+ });
76
+ }
77
+ /**
78
+ * Thrown when `register(...)` is called on a sealed `HookRegistry`
79
+ * (post-boot).
80
+ *
81
+ * Registration window per ADR-0009 + `design-plugins.md`:
82
+ * `buildHooksRegistry({ contributions })` walks `admin.hooks`
83
+ * factory contributions at boot, registers each entry, then calls
84
+ * `seal()`. Any subsequent `register(...)` surfaces this error —
85
+ * for instance a deferred Promise inside a factory that resolves
86
+ * after the registration window closed, or a hook handler that
87
+ * tries to register additional hooks at runtime.
88
+ */
89
+ export declare class RegistrationAfterInitError extends HookError {
90
+ readonly name = "RegistrationAfterInitError";
91
+ /** Source identity (plugin name / `'site-local'`) attempting late registration. */
92
+ readonly source: string;
93
+ /** Phase the late registration targeted. */
94
+ readonly phase: string;
95
+ constructor(opts: {
96
+ source: string;
97
+ phase: string;
98
+ });
99
+ }
100
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/hooks/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,4CAA4C;AAC5C,qBAAa,SAAU,SAAQ,KAAK;IAClC,SAAkB,IAAI,EAAE,MAAM,CAAc;CAC7C;AAED;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,SAAkB,IAAI,sBAAqB;IAC3C,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,wCAAwC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;gBAEV,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAOzF;AAED;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,SAAS;IACxC,SAAkB,IAAI,iBAAgB;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;gBAEd,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CAMzE;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,0BAA2B,SAAQ,SAAS;IACvD,SAAkB,IAAI,gCAA+B;IACrD,mFAAmF;IACnF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;gBAEV,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CAOpD"}