emdash 1.3.0 → 1.3.1

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 (1451) hide show
  1. package/dist/action-token-B1ds4laA.mjs +26 -0
  2. package/dist/action-token-B1ds4laA.mjs.map +1 -0
  3. package/dist/activation-sGF9br3X.mjs +387 -0
  4. package/dist/activation-sGF9br3X.mjs.map +1 -0
  5. package/dist/adapters-BOMSX9PU.d.mts +173 -0
  6. package/dist/adapters-BOMSX9PU.d.mts.map +1 -0
  7. package/dist/allowed-origins-CovsTkm3.mjs +116 -0
  8. package/dist/allowed-origins-CovsTkm3.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +4 -4
  10. package/dist/api/route-utils.mjs +59 -57
  11. package/dist/api/route-utils.mjs.map +1 -1
  12. package/dist/api/schemas/index.d.mts +1 -1
  13. package/dist/api/schemas/index.mjs +11 -11
  14. package/dist/api-C_LxFnOm.mjs +5077 -0
  15. package/dist/api-C_LxFnOm.mjs.map +1 -0
  16. package/dist/api-tokens-DQ9Ee-vP.mjs +173 -0
  17. package/dist/api-tokens-DQ9Ee-vP.mjs.map +1 -0
  18. package/dist/apply-CLjfxvyH.mjs +1758 -0
  19. package/dist/apply-CLjfxvyH.mjs.map +1 -0
  20. package/dist/approvals-ocK89i4H.mjs +460 -0
  21. package/dist/approvals-ocK89i4H.mjs.map +1 -0
  22. package/dist/artifact-fetch-CgvvpoWQ.mjs +659 -0
  23. package/dist/artifact-fetch-CgvvpoWQ.mjs.map +1 -0
  24. package/dist/artifacts-DwOYYBQm.mjs +323 -0
  25. package/dist/artifacts-DwOYYBQm.mjs.map +1 -0
  26. package/dist/astro/image-endpoint.mjs +12 -2
  27. package/dist/astro/image-endpoint.mjs.map +1 -1
  28. package/dist/astro/index.d.mts +14 -14
  29. package/dist/astro/index.mjs +23 -12
  30. package/dist/astro/index.mjs.map +1 -1
  31. package/dist/astro/middleware/auth.d.mts +12 -12
  32. package/dist/astro/middleware/auth.mjs +10 -10
  33. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  34. package/dist/astro/middleware/redirect.d.mts.map +1 -1
  35. package/dist/astro/middleware/redirect.mjs +128 -48
  36. package/dist/astro/middleware/redirect.mjs.map +1 -1
  37. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  38. package/dist/astro/middleware/request-context.mjs +12 -8
  39. package/dist/astro/middleware/request-context.mjs.map +1 -1
  40. package/dist/astro/middleware/setup.mjs +1 -1
  41. package/dist/astro/middleware.d.mts +12 -12
  42. package/dist/astro/middleware.d.mts.map +1 -1
  43. package/dist/astro/middleware.mjs +134 -124
  44. package/dist/astro/middleware.mjs.map +1 -1
  45. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +16 -16
  46. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +16 -16
  47. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -6
  48. package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
  49. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +7 -7
  50. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +19 -19
  51. package/dist/astro/routes/api/admin/byline-fields/index.mjs +19 -19
  52. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +19 -19
  53. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +29 -28
  54. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  55. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +29 -28
  56. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  57. package/dist/astro/routes/api/admin/bylines/index.mjs +29 -28
  58. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  59. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +21 -21
  60. package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
  61. package/dist/astro/routes/api/admin/comments/bulk.mjs +20 -20
  62. package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
  63. package/dist/astro/routes/api/admin/comments/index.mjs +20 -20
  64. package/dist/astro/routes/api/admin/core-update.mjs +7 -7
  65. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  66. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  67. package/dist/astro/routes/api/admin/media-usage/activation.mjs +22 -22
  68. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +23 -23
  69. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +23 -23
  70. package/dist/astro/routes/api/admin/media-usage/progress.mjs +27 -26
  71. package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
  72. package/dist/astro/routes/api/admin/media-usage/repair.mjs +33 -32
  73. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  74. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +23 -23
  75. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +23 -23
  76. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  77. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  78. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  79. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  80. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +81 -79
  81. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
  83. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +80 -78
  84. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  85. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +80 -78
  86. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  87. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +91 -89
  88. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  89. package/dist/astro/routes/api/admin/plugins/index.mjs +81 -79
  90. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +7 -7
  92. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +80 -78
  93. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +90 -88
  95. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +80 -78
  97. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  98. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +80 -78
  99. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  100. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +92 -90
  101. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -9
  103. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +82 -80
  104. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  105. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
  106. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +81 -79
  107. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  108. package/dist/astro/routes/api/admin/plugins/updates.mjs +80 -78
  109. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  110. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -6
  111. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +80 -78
  112. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  113. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +7 -7
  114. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +80 -78
  115. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  116. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
  117. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +45 -43
  118. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -1
  119. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +45 -43
  120. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
  121. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +47 -45
  122. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
  123. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +47 -45
  124. package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
  125. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +47 -45
  126. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -1
  127. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +48 -46
  128. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -1
  129. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +48 -46
  130. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -1
  131. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +47 -45
  132. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -1
  133. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +48 -46
  134. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
  135. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +49 -47
  136. package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
  137. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +47 -45
  138. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -1
  139. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +47 -45
  140. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -1
  141. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +49 -47
  142. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -1
  143. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +47 -45
  144. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -1
  145. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +49 -47
  146. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -1
  147. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +47 -45
  148. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -1
  149. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +47 -45
  150. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -1
  151. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +49 -47
  152. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -1
  153. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +47 -45
  154. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -1
  155. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +47 -45
  156. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
  157. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +49 -47
  158. package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
  159. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
  160. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
  161. package/dist/astro/routes/api/admin/users/_id_/index.mjs +17 -17
  162. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
  163. package/dist/astro/routes/api/admin/users/index.mjs +16 -16
  164. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  165. package/dist/astro/routes/api/auth/handover.mjs +6 -6
  166. package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
  167. package/dist/astro/routes/api/auth/invite/complete.mjs +21 -21
  168. package/dist/astro/routes/api/auth/invite/index.mjs +18 -18
  169. package/dist/astro/routes/api/auth/invite/register-options.mjs +19 -19
  170. package/dist/astro/routes/api/auth/logout.mjs +5 -5
  171. package/dist/astro/routes/api/auth/magic-link/send.mjs +20 -20
  172. package/dist/astro/routes/api/auth/magic-link/verify.mjs +17 -17
  173. package/dist/astro/routes/api/auth/me.mjs +17 -17
  174. package/dist/astro/routes/api/auth/mode.mjs +5 -5
  175. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +8 -8
  176. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  177. package/dist/astro/routes/api/auth/passkey/_id_.mjs +16 -16
  178. package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
  179. package/dist/astro/routes/api/auth/passkey/options.mjs +21 -21
  180. package/dist/astro/routes/api/auth/passkey/register/options.mjs +19 -19
  181. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +20 -20
  182. package/dist/astro/routes/api/auth/passkey/verify.mjs +21 -21
  183. package/dist/astro/routes/api/auth/signup/complete.mjs +21 -21
  184. package/dist/astro/routes/api/auth/signup/request.mjs +19 -19
  185. package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
  186. package/dist/astro/routes/api/calendar.mjs +17 -17
  187. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +13 -13
  188. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +21 -21
  189. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
  190. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +20 -20
  191. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
  192. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +19 -19
  193. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +6 -6
  194. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +12 -12
  195. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +36 -35
  196. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  197. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +20 -20
  198. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +40 -39
  199. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  200. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +40 -39
  201. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  202. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +6 -6
  203. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  204. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +20 -20
  205. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
  206. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +40 -32
  207. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  208. package/dist/astro/routes/api/content/_collection_/_id_/translations.d.mts.map +1 -1
  209. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +9 -5
  210. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs.map +1 -1
  211. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +20 -20
  212. package/dist/astro/routes/api/content/_collection_/_id_.mjs +20 -20
  213. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  214. package/dist/astro/routes/api/content/_collection_/index.mjs +17 -17
  215. package/dist/astro/routes/api/content/_collection_/trash.mjs +17 -17
  216. package/dist/astro/routes/api/dashboard.mjs +21 -15
  217. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  218. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  219. package/dist/astro/routes/api/dev/scheduled-tasks.mjs +119 -117
  220. package/dist/astro/routes/api/dev/scheduled-tasks.mjs.map +1 -1
  221. package/dist/astro/routes/api/health.mjs +6 -6
  222. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  223. package/dist/astro/routes/api/import/probe.mjs +31 -29
  224. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  225. package/dist/astro/routes/api/import/wordpress/analyze.mjs +8 -8
  226. package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -13
  227. package/dist/astro/routes/api/import/wordpress/execute.mjs +31 -30
  228. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  229. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  230. package/dist/astro/routes/api/import/wordpress/media.mjs +21 -21
  231. package/dist/astro/routes/api/import/wordpress/prepare.mjs +22 -22
  232. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  233. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +32 -31
  234. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  235. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  236. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +31 -29
  237. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  238. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  239. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +42 -40
  240. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  241. package/dist/astro/routes/api/manifest.mjs +6 -6
  242. package/dist/astro/routes/api/mcp.mjs +117 -100
  243. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  244. package/dist/astro/routes/api/media/_id_/confirm.mjs +21 -21
  245. package/dist/astro/routes/api/media/_id_/replace.mjs +18 -18
  246. package/dist/astro/routes/api/media/_id_/upload.mjs +9 -9
  247. package/dist/astro/routes/api/media/_id_/usage.mjs +35 -34
  248. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  249. package/dist/astro/routes/api/media/_id_.mjs +33 -32
  250. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  251. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  252. package/dist/astro/routes/api/media/file/_...key_.mjs +21 -13
  253. package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
  254. package/dist/astro/routes/api/media/folders/_id_.mjs +18 -18
  255. package/dist/astro/routes/api/media/folders/index.mjs +18 -18
  256. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  257. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  258. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  259. package/dist/astro/routes/api/media/upload-url.mjs +20 -20
  260. package/dist/astro/routes/api/media.mjs +37 -36
  261. package/dist/astro/routes/api/media.mjs.map +1 -1
  262. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +22 -21
  263. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  264. package/dist/astro/routes/api/menus/_name_/items.mjs +22 -21
  265. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  266. package/dist/astro/routes/api/menus/_name_/reorder.mjs +22 -21
  267. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  268. package/dist/astro/routes/api/menus/_name_/translations.mjs +22 -21
  269. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  270. package/dist/astro/routes/api/menus/_name_.mjs +22 -21
  271. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  272. package/dist/astro/routes/api/menus/index.mjs +22 -21
  273. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  274. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  275. package/dist/astro/routes/api/oauth/device/authorize.mjs +8 -8
  276. package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
  277. package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
  278. package/dist/astro/routes/api/oauth/register.mjs +7 -7
  279. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  280. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  281. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  282. package/dist/astro/routes/api/openapi.json.mjs +22 -22
  283. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +12 -12
  284. package/dist/astro/routes/api/redirects/404s/index.mjs +23 -22
  285. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  286. package/dist/astro/routes/api/redirects/404s/summary.mjs +23 -22
  287. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  288. package/dist/astro/routes/api/redirects/_id_.mjs +24 -23
  289. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  290. package/dist/astro/routes/api/redirects/index.mjs +24 -23
  291. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  292. package/dist/astro/routes/api/relations/_id_/index.mjs +40 -39
  293. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  294. package/dist/astro/routes/api/relations/index.mjs +40 -39
  295. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  296. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  297. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +19 -19
  298. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +80 -78
  299. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  300. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +80 -78
  301. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  302. package/dist/astro/routes/api/schema/block-types/index.mjs +80 -78
  303. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  304. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +80 -78
  305. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  306. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +80 -78
  307. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  308. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +80 -78
  309. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  310. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +80 -78
  311. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  312. package/dist/astro/routes/api/schema/collections/index.mjs +80 -78
  313. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  314. package/dist/astro/routes/api/schema/collections/reorder.mjs +80 -78
  315. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  316. package/dist/astro/routes/api/schema/index.mjs +20 -19
  317. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  318. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +80 -78
  319. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  320. package/dist/astro/routes/api/schema/orphans/index.mjs +80 -78
  321. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  322. package/dist/astro/routes/api/search/enable.mjs +23 -22
  323. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  324. package/dist/astro/routes/api/search/index.mjs +22 -21
  325. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  326. package/dist/astro/routes/api/search/rebuild.mjs +23 -22
  327. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  328. package/dist/astro/routes/api/search/stats.mjs +12 -11
  329. package/dist/astro/routes/api/search/stats.mjs.map +1 -1
  330. package/dist/astro/routes/api/search/suggest.mjs +22 -21
  331. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  332. package/dist/astro/routes/api/sections/_slug_.mjs +22 -21
  333. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  334. package/dist/astro/routes/api/sections/index.mjs +22 -21
  335. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  336. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  337. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  338. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  339. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  340. package/dist/astro/routes/api/settings/domain-notify.mjs +9 -9
  341. package/dist/astro/routes/api/settings/domain.mjs +22 -20
  342. package/dist/astro/routes/api/settings/domain.mjs.map +1 -1
  343. package/dist/astro/routes/api/settings/email.mjs +6 -6
  344. package/dist/astro/routes/api/settings.mjs +29 -27
  345. package/dist/astro/routes/api/settings.mjs.map +1 -1
  346. package/dist/astro/routes/api/setup/admin-verify.mjs +23 -23
  347. package/dist/astro/routes/api/setup/admin.mjs +20 -20
  348. package/dist/astro/routes/api/setup/dev-bypass.mjs +52 -50
  349. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  350. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  351. package/dist/astro/routes/api/setup/index.mjs +58 -56
  352. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  353. package/dist/astro/routes/api/setup/status.mjs +6 -6
  354. package/dist/astro/routes/api/site/domain-proof.mjs +16 -14
  355. package/dist/astro/routes/api/site/domain-proof.mjs.map +1 -1
  356. package/dist/astro/routes/api/snapshot.mjs +8 -8
  357. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +30 -29
  358. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  359. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +30 -29
  360. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  361. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +30 -29
  362. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  363. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +30 -29
  364. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  365. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +28 -27
  366. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  367. package/dist/astro/routes/api/taxonomies/_name_.mjs +30 -29
  368. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  369. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +44 -43
  370. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  371. package/dist/astro/routes/api/taxonomies/index.mjs +30 -29
  372. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  373. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  374. package/dist/astro/routes/api/typegen.mjs +6 -6
  375. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  376. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +21 -21
  377. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  378. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  379. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  380. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  381. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +19 -19
  382. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +24 -23
  383. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  384. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +24 -23
  385. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  386. package/dist/astro/routes/api/widget-areas/_name_.mjs +13 -12
  387. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
  388. package/dist/astro/routes/api/widget-areas/index.mjs +24 -23
  389. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  390. package/dist/astro/routes/api/widget-components.mjs +5 -5
  391. package/dist/astro/routes/robots.txt.mjs +15 -13
  392. package/dist/astro/routes/robots.txt.mjs.map +1 -1
  393. package/dist/astro/routes/sitemap-_collection_.xml.mjs +19 -17
  394. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  395. package/dist/astro/routes/sitemap.xml.mjs +16 -14
  396. package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
  397. package/dist/astro/types.d.mts +17 -17
  398. package/dist/audit-B8XE-0UV.mjs +127 -0
  399. package/dist/audit-B8XE-0UV.mjs.map +1 -0
  400. package/dist/auth/providers/github.d.mts +1 -1
  401. package/dist/auth/providers/google.d.mts +1 -1
  402. package/dist/auth/providers/microsoft.d.mts +1 -1
  403. package/dist/authoritative-records-LPtrIGOY.mjs +5183 -0
  404. package/dist/authoritative-records-LPtrIGOY.mjs.map +1 -0
  405. package/dist/authorize-CoDsRRp5.mjs +74 -0
  406. package/dist/authorize-CoDsRRp5.mjs.map +1 -0
  407. package/dist/backup-2Wj-hTCN.mjs +246 -0
  408. package/dist/backup-2Wj-hTCN.mjs.map +1 -0
  409. package/dist/block-types-C3gJEe7l.mjs +132 -0
  410. package/dist/block-types-C3gJEe7l.mjs.map +1 -0
  411. package/dist/block-values-CgbMtSGU.mjs +215 -0
  412. package/dist/block-values-CgbMtSGU.mjs.map +1 -0
  413. package/dist/byline-CzGZC2Zs.mjs +922 -0
  414. package/dist/byline-CzGZC2Zs.mjs.map +1 -0
  415. package/dist/byline-fields-B1qHvRps.mjs +280 -0
  416. package/dist/byline-fields-B1qHvRps.mjs.map +1 -0
  417. package/dist/byline-fields-vYd_4Q1e.mjs +123 -0
  418. package/dist/byline-fields-vYd_4Q1e.mjs.map +1 -0
  419. package/dist/byline-registry-BhzpO41z.mjs +406 -0
  420. package/dist/byline-registry-BhzpO41z.mjs.map +1 -0
  421. package/dist/bylines-BF555iIz.mjs +150 -0
  422. package/dist/bylines-BF555iIz.mjs.map +1 -0
  423. package/dist/bylines-DJx6IWWi.mjs +234 -0
  424. package/dist/bylines-DJx6IWWi.mjs.map +1 -0
  425. package/dist/cache-BWzswWB-.mjs +151 -0
  426. package/dist/cache-BWzswWB-.mjs.map +1 -0
  427. package/dist/canonical-DjF_z6GI.mjs +174 -0
  428. package/dist/canonical-DjF_z6GI.mjs.map +1 -0
  429. package/dist/capture-triggers-D7g3fOZj.mjs +362 -0
  430. package/dist/capture-triggers-D7g3fOZj.mjs.map +1 -0
  431. package/dist/challenge-store-Cfjdvw86.mjs +51 -0
  432. package/dist/challenge-store-Cfjdvw86.mjs.map +1 -0
  433. package/dist/checksum-BF4acJwn.mjs +162 -0
  434. package/dist/checksum-BF4acJwn.mjs.map +1 -0
  435. package/dist/chrome-tags-BDs29G3g.mjs +24 -0
  436. package/dist/chrome-tags-BDs29G3g.mjs.map +1 -0
  437. package/dist/chunks-CYBOL-zn.mjs +25 -0
  438. package/dist/chunks-CYBOL-zn.mjs.map +1 -0
  439. package/dist/cli/index.mjs +67 -65
  440. package/dist/cli/index.mjs.map +1 -1
  441. package/dist/client/cf-access.d.mts +1 -1
  442. package/dist/client/index.d.mts +48 -48
  443. package/dist/client/index.d.mts.map +1 -1
  444. package/dist/client/index.mjs +4 -3
  445. package/dist/client/index.mjs.map +1 -1
  446. package/dist/collection-slugs-cache-B2J5aESO.mjs +91 -0
  447. package/dist/collection-slugs-cache-B2J5aESO.mjs.map +1 -0
  448. package/dist/comment-DV7dybcs.mjs +335 -0
  449. package/dist/comment-DV7dybcs.mjs.map +1 -0
  450. package/dist/comment-reaction-CWwqiT6x.mjs +85 -0
  451. package/dist/comment-reaction-CWwqiT6x.mjs.map +1 -0
  452. package/dist/comments-DVjWJm8X.mjs +99 -0
  453. package/dist/comments-DVjWJm8X.mjs.map +1 -0
  454. package/dist/comments-Q-ILHCEI.mjs +195 -0
  455. package/dist/comments-Q-ILHCEI.mjs.map +1 -0
  456. package/dist/components-DnOmvvgg.mjs +112 -0
  457. package/dist/components-DnOmvvgg.mjs.map +1 -0
  458. package/dist/config-9IzA83_U.d.mts +6811 -0
  459. package/dist/config-9IzA83_U.d.mts.map +1 -0
  460. package/dist/config-BdQzFtmR.mjs +228 -0
  461. package/dist/config-BdQzFtmR.mjs.map +1 -0
  462. package/dist/config-Cs2RBkJ6.d.mts +41 -0
  463. package/dist/config-Cs2RBkJ6.d.mts.map +1 -0
  464. package/dist/config-Cs_AwWXI.mjs +106 -0
  465. package/dist/config-Cs_AwWXI.mjs.map +1 -0
  466. package/dist/connection-CiXgZyCY.mjs +36 -0
  467. package/dist/connection-CiXgZyCY.mjs.map +1 -0
  468. package/dist/content-Dt0Os_WQ.mjs +2109 -0
  469. package/dist/content-Dt0Os_WQ.mjs.map +1 -0
  470. package/dist/content-list-query-BK26u9Ly.d.mts +26 -0
  471. package/dist/content-list-query-BK26u9Ly.d.mts.map +1 -0
  472. package/dist/content-policy-BLDbNJOb.mjs +46 -0
  473. package/dist/content-policy-BLDbNJOb.mjs.map +1 -0
  474. package/dist/content-repair-CjwbLy4m.mjs +442 -0
  475. package/dist/content-repair-CjwbLy4m.mjs.map +1 -0
  476. package/dist/context-ErV7UdQY.mjs +2089 -0
  477. package/dist/context-ErV7UdQY.mjs.map +1 -0
  478. package/dist/credits-BRyjafiF.mjs +110 -0
  479. package/dist/credits-BRyjafiF.mjs.map +1 -0
  480. package/dist/cron-Bm5xa7tv.mjs +306 -0
  481. package/dist/cron-Bm5xa7tv.mjs.map +1 -0
  482. package/dist/dashboard-DVxQ5XiI.mjs +168 -0
  483. package/dist/dashboard-DVxQ5XiI.mjs.map +1 -0
  484. package/dist/database/migration-lock.mjs +1 -1
  485. package/dist/db/index.d.mts +3 -3
  486. package/dist/db/index.mjs +2 -2
  487. package/dist/db/libsql-migrations.d.mts +1 -1
  488. package/dist/db/libsql-migrations.mjs +5 -5
  489. package/dist/db/libsql.d.mts +1 -1
  490. package/dist/db/postgres-migrations.d.mts +1 -1
  491. package/dist/db/postgres-migrations.mjs +5 -5
  492. package/dist/db/postgres.d.mts +1 -1
  493. package/dist/db/sqlite-migrations.d.mts +1 -1
  494. package/dist/db/sqlite-migrations.mjs +5 -5
  495. package/dist/db/sqlite.d.mts +1 -1
  496. package/dist/db/sqlite.mjs +1 -1
  497. package/dist/db-errors-unnO6yiZ.mjs +65 -0
  498. package/dist/db-errors-unnO6yiZ.mjs.map +1 -0
  499. package/dist/default-B9Tf2n94.mjs +81 -0
  500. package/dist/default-B9Tf2n94.mjs.map +1 -0
  501. package/dist/deferred-tasks-CpPEqsga.d.mts +9 -0
  502. package/dist/deferred-tasks-CpPEqsga.d.mts.map +1 -0
  503. package/dist/destination-DR3IHjmy.mjs +18 -0
  504. package/dist/destination-DR3IHjmy.mjs.map +1 -0
  505. package/dist/dev-typegen-ZeWYV8Jp.mjs +29 -0
  506. package/dist/dev-typegen-ZeWYV8Jp.mjs.map +1 -0
  507. package/dist/device-flow-BbYNZ9Xi.mjs +521 -0
  508. package/dist/device-flow-BbYNZ9Xi.mjs.map +1 -0
  509. package/dist/digest-DlBa7kJl.mjs +194 -0
  510. package/dist/digest-DlBa7kJl.mjs.map +1 -0
  511. package/dist/direct-executor-5T8gkhvA.mjs +117 -0
  512. package/dist/direct-executor-5T8gkhvA.mjs.map +1 -0
  513. package/dist/dist-DY0aOmAP.mjs +810 -0
  514. package/dist/dist-DY0aOmAP.mjs.map +1 -0
  515. package/dist/email-console-v3OM8It-.mjs +50 -0
  516. package/dist/email-console-v3OM8It-.mjs.map +1 -0
  517. package/dist/email-locale-CoZo-oZx.mjs +25 -0
  518. package/dist/email-locale-CoZo-oZx.mjs.map +1 -0
  519. package/dist/emdash-runtime-DwezbIqQ.mjs +4392 -0
  520. package/dist/emdash-runtime-DwezbIqQ.mjs.map +1 -0
  521. package/dist/enrich-C3XIJi0O.mjs +194 -0
  522. package/dist/enrich-C3XIJi0O.mjs.map +1 -0
  523. package/dist/entry-lock-CY7XpdSw.d.mts +4568 -0
  524. package/dist/entry-lock-CY7XpdSw.d.mts.map +1 -0
  525. package/dist/entry-lock-DDuWaAiP.mjs +1211 -0
  526. package/dist/entry-lock-DDuWaAiP.mjs.map +1 -0
  527. package/dist/entry-lock-D_Og9Gy3.mjs +163 -0
  528. package/dist/entry-lock-D_Og9Gy3.mjs.map +1 -0
  529. package/dist/entry-locks-Cp8_BcQQ.mjs +167 -0
  530. package/dist/entry-locks-Cp8_BcQQ.mjs.map +1 -0
  531. package/dist/env-types-Br8uywYA.mjs +38 -0
  532. package/dist/env-types-Br8uywYA.mjs.map +1 -0
  533. package/dist/error-CT2SsX5S.mjs +90 -0
  534. package/dist/error-CT2SsX5S.mjs.map +1 -0
  535. package/dist/errors-BMaCpLeS.mjs +479 -0
  536. package/dist/errors-BMaCpLeS.mjs.map +1 -0
  537. package/dist/errors-DlJwot7q.mjs +120 -0
  538. package/dist/errors-DlJwot7q.mjs.map +1 -0
  539. package/dist/escape-BfbDyuQ-.mjs +9 -0
  540. package/dist/escape-BfbDyuQ-.mjs.map +1 -0
  541. package/dist/fence-BOD3SxZG.mjs +162 -0
  542. package/dist/fence-BOD3SxZG.mjs.map +1 -0
  543. package/dist/field-defs-cache-C7sR7ZeU.mjs +77 -0
  544. package/dist/field-defs-cache-C7sR7ZeU.mjs.map +1 -0
  545. package/dist/field-map-C_rDXfdJ.mjs +84 -0
  546. package/dist/field-map-C_rDXfdJ.mjs.map +1 -0
  547. package/dist/focal-point-CgCcr1Ca.mjs +23 -0
  548. package/dist/focal-point-CgCcr1Ca.mjs.map +1 -0
  549. package/dist/fts-manager-BzFo0xx6.mjs +483 -0
  550. package/dist/fts-manager-BzFo0xx6.mjs.map +1 -0
  551. package/dist/gc-B_c3DPpi.mjs +75 -0
  552. package/dist/gc-B_c3DPpi.mjs.map +1 -0
  553. package/dist/hash-A-o2ZX8O.mjs +37 -0
  554. package/dist/hash-A-o2ZX8O.mjs.map +1 -0
  555. package/dist/hook-result-f8t7hIuu.d.mts +31 -0
  556. package/dist/hook-result-f8t7hIuu.d.mts.map +1 -0
  557. package/dist/hreflang-BpUK9Lcu.mjs +105 -0
  558. package/dist/hreflang-BpUK9Lcu.mjs.map +1 -0
  559. package/dist/hreflang-D07R-RbI.d.mts +50 -0
  560. package/dist/hreflang-D07R-RbI.d.mts.map +1 -0
  561. package/dist/http-route-dispatch-C2Ep2Uf6.mjs +342 -0
  562. package/dist/http-route-dispatch-C2Ep2Uf6.mjs.map +1 -0
  563. package/dist/identity-BivQ8wkV.mjs +35 -0
  564. package/dist/identity-BivQ8wkV.mjs.map +1 -0
  565. package/dist/import-B4UvHNJz.mjs +2126 -0
  566. package/dist/import-B4UvHNJz.mjs.map +1 -0
  567. package/dist/index-C37Ty40w.d.mts +623 -0
  568. package/dist/index-C37Ty40w.d.mts.map +1 -0
  569. package/dist/index.d.mts +23 -23
  570. package/dist/index.mjs +112 -110
  571. package/dist/install-finalization-BbYaB4wj.mjs +58 -0
  572. package/dist/install-finalization-BbYaB4wj.mjs.map +1 -0
  573. package/dist/json-recordset-BjYIWFkV.mjs +12 -0
  574. package/dist/json-recordset-BjYIWFkV.mjs.map +1 -0
  575. package/dist/json-schema-Cde7le0s.mjs +15 -0
  576. package/dist/json-schema-Cde7le0s.mjs.map +1 -0
  577. package/dist/keys-CusTXpw-.mjs +61 -0
  578. package/dist/keys-CusTXpw-.mjs.map +1 -0
  579. package/dist/kinds-DogmNB6n.mjs +974 -0
  580. package/dist/kinds-DogmNB6n.mjs.map +1 -0
  581. package/dist/lifecycle-BLCoCz4T.mjs +25 -0
  582. package/dist/lifecycle-BLCoCz4T.mjs.map +1 -0
  583. package/dist/load-Dds3KhXr.mjs +28 -0
  584. package/dist/load-Dds3KhXr.mjs.map +1 -0
  585. package/dist/loader-D4w4XE7q.mjs +1420 -0
  586. package/dist/loader-D4w4XE7q.mjs.map +1 -0
  587. package/dist/loops-IYgzQdQu.mjs +205 -0
  588. package/dist/loops-IYgzQdQu.mjs.map +1 -0
  589. package/dist/manifest-builder-CGF5kujD.mjs +196 -0
  590. package/dist/manifest-builder-CGF5kujD.mjs.map +1 -0
  591. package/dist/manifest-schema-B0BxPSjB.mjs +497 -0
  592. package/dist/manifest-schema-B0BxPSjB.mjs.map +1 -0
  593. package/dist/marketplace-DNvEGLqU.mjs +257 -0
  594. package/dist/marketplace-DNvEGLqU.mjs.map +1 -0
  595. package/dist/media/image-endpoint.d.mts +3 -2
  596. package/dist/media/image-endpoint.d.mts.map +1 -1
  597. package/dist/media/image-endpoint.mjs +17 -8
  598. package/dist/media/image-endpoint.mjs.map +1 -1
  599. package/dist/media/index.d.mts +1 -1
  600. package/dist/media/index.mjs +7 -6
  601. package/dist/media/index.mjs.map +1 -1
  602. package/dist/media/local-runtime.d.mts +14 -14
  603. package/dist/media/local-runtime.d.mts.map +1 -1
  604. package/dist/media/local-runtime.mjs +18 -13
  605. package/dist/media/local-runtime.mjs.map +1 -1
  606. package/dist/media-BL9MRrSG.mjs +294 -0
  607. package/dist/media-BL9MRrSG.mjs.map +1 -0
  608. package/dist/media-B_x5B9EA.mjs +373 -0
  609. package/dist/media-B_x5B9EA.mjs.map +1 -0
  610. package/dist/media-allowlist-CpmqBbIQ.mjs +45 -0
  611. package/dist/media-allowlist-CpmqBbIQ.mjs.map +1 -0
  612. package/dist/media-folders-CNs_A_B-.mjs +210 -0
  613. package/dist/media-folders-CNs_A_B-.mjs.map +1 -0
  614. package/dist/media-qTTHVkls.mjs +416 -0
  615. package/dist/media-qTTHVkls.mjs.map +1 -0
  616. package/dist/media-url-GJboA1fl.mjs +43 -0
  617. package/dist/media-url-GJboA1fl.mjs.map +1 -0
  618. package/dist/media-usage-ClWgrX0d.mjs +282 -0
  619. package/dist/media-usage-ClWgrX0d.mjs.map +1 -0
  620. package/dist/media-usage-activation-B8Fjtq0h.mjs +78 -0
  621. package/dist/media-usage-activation-B8Fjtq0h.mjs.map +1 -0
  622. package/dist/media-usage-work-L8-Au4j-.mjs +1036 -0
  623. package/dist/media-usage-work-L8-Au4j-.mjs.map +1 -0
  624. package/dist/media-usage-work-LXgze5j9.mjs +151 -0
  625. package/dist/media-usage-work-LXgze5j9.mjs.map +1 -0
  626. package/dist/menus-BAxcbsbv.mjs +818 -0
  627. package/dist/menus-BAxcbsbv.mjs.map +1 -0
  628. package/dist/menus-BI6oBXco.mjs +92 -0
  629. package/dist/menus-BI6oBXco.mjs.map +1 -0
  630. package/dist/menus-fvGFd4m6.mjs +3725 -0
  631. package/dist/menus-fvGFd4m6.mjs.map +1 -0
  632. package/dist/migrations/index.d.mts +1 -1
  633. package/dist/migrations/index.mjs +4 -4
  634. package/dist/mime-DwhtRyUt.mjs +81 -0
  635. package/dist/mime-DwhtRyUt.mjs.map +1 -0
  636. package/dist/mode-DIDSUwuN.mjs +23 -0
  637. package/dist/mode-DIDSUwuN.mjs.map +1 -0
  638. package/dist/node-sqlite-compat-Ddr_mlR9.mjs +63 -0
  639. package/dist/node-sqlite-compat-Ddr_mlR9.mjs.map +1 -0
  640. package/dist/normalize-Ip_hFAm8.mjs +216 -0
  641. package/dist/normalize-Ip_hFAm8.mjs.map +1 -0
  642. package/dist/oauth-authorization-CcMgeT8R.mjs +274 -0
  643. package/dist/oauth-authorization-CcMgeT8R.mjs.map +1 -0
  644. package/dist/oauth-clients-C_osi0PU.mjs +266 -0
  645. package/dist/oauth-clients-C_osi0PU.mjs.map +1 -0
  646. package/dist/oauth-state-store-DGLP-6CK.mjs +50 -0
  647. package/dist/oauth-state-store-DGLP-6CK.mjs.map +1 -0
  648. package/dist/oauth-user-lookup-z77Ee0Hm.mjs +26 -0
  649. package/dist/oauth-user-lookup-z77Ee0Hm.mjs.map +1 -0
  650. package/dist/object-cache/memory.d.mts +1 -1
  651. package/dist/object-cache-EjasjtoQ.mjs +586 -0
  652. package/dist/object-cache-EjasjtoQ.mjs.map +1 -0
  653. package/dist/options-CmUpkyKW.d.mts +81 -0
  654. package/dist/options-CmUpkyKW.d.mts.map +1 -0
  655. package/dist/ownership-DCk5NutQ.mjs +12 -0
  656. package/dist/ownership-DCk5NutQ.mjs.map +1 -0
  657. package/dist/page/index.d.mts +2 -2
  658. package/dist/page/index.mjs +14 -12
  659. package/dist/page/index.mjs.map +1 -1
  660. package/dist/parse-2W-E2f7w.mjs +81 -0
  661. package/dist/parse-2W-E2f7w.mjs.map +1 -0
  662. package/dist/parse-6pN8Xqg5.d.mts +176 -0
  663. package/dist/parse-6pN8Xqg5.d.mts.map +1 -0
  664. package/dist/passkey-config-DTTZB6EI.mjs +46 -0
  665. package/dist/passkey-config-DTTZB6EI.mjs.map +1 -0
  666. package/dist/paths-CQA62503.mjs +77 -0
  667. package/dist/paths-CQA62503.mjs.map +1 -0
  668. package/dist/patterns-CryGz_EV.mjs +159 -0
  669. package/dist/patterns-CryGz_EV.mjs.map +1 -0
  670. package/dist/placeholder-BlfXkucE.d.mts +313 -0
  671. package/dist/placeholder-BlfXkucE.d.mts.map +1 -0
  672. package/dist/plan-B95eiwnF.mjs +135 -0
  673. package/dist/plan-B95eiwnF.mjs.map +1 -0
  674. package/dist/plugin-test-runtime.d.mts +14 -14
  675. package/dist/plugin-test-runtime.d.mts.map +1 -1
  676. package/dist/plugin-test-runtime.mjs +121 -119
  677. package/dist/plugin-tool-name-BDA7m4Xa.mjs +27 -0
  678. package/dist/plugin-tool-name-BDA7m4Xa.mjs.map +1 -0
  679. package/dist/plugin-types.d.mts +2 -2
  680. package/dist/plugin-utils.d.mts +12 -12
  681. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  682. package/dist/plugins/adapt-sandbox-entry.mjs +4 -4
  683. package/dist/plugins/host.d.mts +5 -5
  684. package/dist/plugins/host.mjs +57 -55
  685. package/dist/plugins-BhxLJ008.mjs +261 -0
  686. package/dist/plugins-BhxLJ008.mjs.map +1 -0
  687. package/dist/policy-DOJ2sPqB.mjs +53 -0
  688. package/dist/policy-DOJ2sPqB.mjs.map +1 -0
  689. package/dist/portable-text-RCMpCj47.mjs +311 -0
  690. package/dist/portable-text-RCMpCj47.mjs.map +1 -0
  691. package/dist/preview-DFwL5APO.mjs +107 -0
  692. package/dist/preview-DFwL5APO.mjs.map +1 -0
  693. package/dist/protocol-B-ztxp_y.d.mts +65 -0
  694. package/dist/protocol-B-ztxp_y.d.mts.map +1 -0
  695. package/dist/public-plugin-api-routes-ik4fPZMv.mjs +316 -0
  696. package/dist/public-plugin-api-routes-ik4fPZMv.mjs.map +1 -0
  697. package/dist/public-submission-C5JZIykp.mjs +251 -0
  698. package/dist/public-submission-C5JZIykp.mjs.map +1 -0
  699. package/dist/public-url-CQwzRljH.mjs +101 -0
  700. package/dist/public-url-CQwzRljH.mjs.map +1 -0
  701. package/dist/query-BFHjCzSh.mjs +37 -0
  702. package/dist/query-BFHjCzSh.mjs.map +1 -0
  703. package/dist/query-DuwyFr5Z.mjs +41 -0
  704. package/dist/query-DuwyFr5Z.mjs.map +1 -0
  705. package/dist/query-eR_Nz70M.mjs +1157 -0
  706. package/dist/query-eR_Nz70M.mjs.map +1 -0
  707. package/dist/range-BQWPjWgQ.mjs +51 -0
  708. package/dist/range-BQWPjWgQ.mjs.map +1 -0
  709. package/dist/rate-limit-mPKeQ3sm.mjs +127 -0
  710. package/dist/rate-limit-mPKeQ3sm.mjs.map +1 -0
  711. package/dist/receipt-CmUpyuW5.mjs +43 -0
  712. package/dist/receipt-CmUpyuW5.mjs.map +1 -0
  713. package/dist/redirect-BtiMkehU.mjs +19 -0
  714. package/dist/redirect-BtiMkehU.mjs.map +1 -0
  715. package/dist/redirect-DcmNMvOs.mjs +423 -0
  716. package/dist/redirect-DcmNMvOs.mjs.map +1 -0
  717. package/dist/redirect-paths-K5i3xYfR.mjs +36 -0
  718. package/dist/redirect-paths-K5i3xYfR.mjs.map +1 -0
  719. package/dist/redirects-BA_TvtuH.mjs +148 -0
  720. package/dist/redirects-BA_TvtuH.mjs.map +1 -0
  721. package/dist/redirects-BIrRvgn4.mjs +446 -0
  722. package/dist/redirects-BIrRvgn4.mjs.map +1 -0
  723. package/dist/registry/testing.mjs +3 -3
  724. package/dist/registry-DymfZkAN.mjs +8374 -0
  725. package/dist/registry-DymfZkAN.mjs.map +1 -0
  726. package/dist/relations-DrEs3Sc1.mjs +789 -0
  727. package/dist/relations-DrEs3Sc1.mjs.map +1 -0
  728. package/dist/request-cache-5z2WzWmh.mjs +104 -0
  729. package/dist/request-cache-5z2WzWmh.mjs.map +1 -0
  730. package/dist/request-context.d.mts +12 -1
  731. package/dist/request-context.d.mts.map +1 -1
  732. package/dist/request-context.mjs.map +1 -1
  733. package/dist/request-meta-o8RIf9pa.mjs +141 -0
  734. package/dist/request-meta-o8RIf9pa.mjs.map +1 -0
  735. package/dist/resolve-CVy9xgy_.mjs +102 -0
  736. package/dist/resolve-CVy9xgy_.mjs.map +1 -0
  737. package/dist/resolve-DdNXBJSr.mjs +199 -0
  738. package/dist/resolve-DdNXBJSr.mjs.map +1 -0
  739. package/dist/revision-Dx7Uth1X.mjs +374 -0
  740. package/dist/revision-Dx7Uth1X.mjs.map +1 -0
  741. package/dist/route-cache-DAG5dPhh.mjs +20 -0
  742. package/dist/route-cache-DAG5dPhh.mjs.map +1 -0
  743. package/dist/route-wire-Xbsu8Vih.mjs +197 -0
  744. package/dist/route-wire-Xbsu8Vih.mjs.map +1 -0
  745. package/dist/routes-YQkSOsws.mjs +272 -0
  746. package/dist/routes-YQkSOsws.mjs.map +1 -0
  747. package/dist/runner-CLorw5vo.mjs +6669 -0
  748. package/dist/runner-CLorw5vo.mjs.map +1 -0
  749. package/dist/runner-g1A9P-wD.d.mts +73 -0
  750. package/dist/runner-g1A9P-wD.d.mts.map +1 -0
  751. package/dist/runtime.d.mts +13 -13
  752. package/dist/runtime.mjs +6 -5
  753. package/dist/runtime.mjs.map +1 -1
  754. package/dist/schema/project-env-types.mjs +49 -47
  755. package/dist/schema/project-env-types.mjs.map +1 -1
  756. package/dist/schema-Bss8qImF.mjs +13 -0
  757. package/dist/schema-Bss8qImF.mjs.map +1 -0
  758. package/dist/schema-C036pqEw.mjs +815 -0
  759. package/dist/schema-C036pqEw.mjs.map +1 -0
  760. package/dist/scopes-C_SoYl9x.mjs +34 -0
  761. package/dist/scopes-C_SoYl9x.mjs.map +1 -0
  762. package/dist/search-uNqCgePJ.mjs +450 -0
  763. package/dist/search-uNqCgePJ.mjs.map +1 -0
  764. package/dist/sections-BLusMa96.mjs +346 -0
  765. package/dist/sections-BLusMa96.mjs.map +1 -0
  766. package/dist/seed/index.d.mts +2 -2
  767. package/dist/seed/index.mjs +47 -45
  768. package/dist/seo/index.d.mts +3 -3
  769. package/dist/seo/index.mjs +32 -30
  770. package/dist/seo/index.mjs.map +1 -1
  771. package/dist/seo-BodxIpws.mjs +188 -0
  772. package/dist/seo-BodxIpws.mjs.map +1 -0
  773. package/dist/seo-DaMYIQY8.mjs +133 -0
  774. package/dist/seo-DaMYIQY8.mjs.map +1 -0
  775. package/dist/service-BuM1BRsA.mjs +150 -0
  776. package/dist/service-BuM1BRsA.mjs.map +1 -0
  777. package/dist/session-user-2DpQDMKw.mjs +61 -0
  778. package/dist/session-user-2DpQDMKw.mjs.map +1 -0
  779. package/dist/settings-B3ZmPF_8.mjs +73 -0
  780. package/dist/settings-B3ZmPF_8.mjs.map +1 -0
  781. package/dist/settings-P5hwPX6_.mjs +66 -0
  782. package/dist/settings-P5hwPX6_.mjs.map +1 -0
  783. package/dist/settings-yIqoN-Ok.mjs +519 -0
  784. package/dist/settings-yIqoN-Ok.mjs.map +1 -0
  785. package/dist/setup-complete-eu6MUQnt.mjs +65 -0
  786. package/dist/setup-complete-eu6MUQnt.mjs.map +1 -0
  787. package/dist/setup-nonce-CyPOapqY.mjs +25 -0
  788. package/dist/setup-nonce-CyPOapqY.mjs.map +1 -0
  789. package/dist/site-domain-8lEJl_0U.mjs +131 -0
  790. package/dist/site-domain-8lEJl_0U.mjs.map +1 -0
  791. package/dist/site-settings-uPkW0e6o.mjs +50 -0
  792. package/dist/site-settings-uPkW0e6o.mjs.map +1 -0
  793. package/dist/site-url-25SGVXwL.mjs +45 -0
  794. package/dist/site-url-25SGVXwL.mjs.map +1 -0
  795. package/dist/sitemap-name-DTK7CYnY.mjs +26 -0
  796. package/dist/sitemap-name-DTK7CYnY.mjs.map +1 -0
  797. package/dist/slug-BEDl2IJY.mjs +16 -0
  798. package/dist/slug-BEDl2IJY.mjs.map +1 -0
  799. package/dist/slugify-BDEG9pLk.mjs +22 -0
  800. package/dist/slugify-BDEG9pLk.mjs.map +1 -0
  801. package/dist/snapshot-CvkIBRLY.mjs +414 -0
  802. package/dist/snapshot-CvkIBRLY.mjs.map +1 -0
  803. package/dist/ssrf-mcCKMH6B.mjs +406 -0
  804. package/dist/ssrf-mcCKMH6B.mjs.map +1 -0
  805. package/dist/stage-BQfGzGOy.mjs +662 -0
  806. package/dist/stage-BQfGzGOy.mjs.map +1 -0
  807. package/dist/staged-B5vQGeSf.mjs +686 -0
  808. package/dist/staged-B5vQGeSf.mjs.map +1 -0
  809. package/dist/state-dO6t6OxV.mjs +178 -0
  810. package/dist/state-dO6t6OxV.mjs.map +1 -0
  811. package/dist/status-DSURZwKS.mjs +30 -0
  812. package/dist/status-DSURZwKS.mjs.map +1 -0
  813. package/dist/storage/local.d.mts +1 -1
  814. package/dist/storage/local.mjs +2 -2
  815. package/dist/storage/s3.d.mts +1 -1
  816. package/dist/storage/s3.mjs +1 -1
  817. package/dist/storage-query-Cy0SZ8iG.d.mts +1619 -0
  818. package/dist/storage-query-Cy0SZ8iG.d.mts.map +1 -0
  819. package/dist/tar-DWzcUZ_Q.mjs +449 -0
  820. package/dist/tar-DWzcUZ_Q.mjs.map +1 -0
  821. package/dist/target-C9htUbrT.mjs +27 -0
  822. package/dist/target-C9htUbrT.mjs.map +1 -0
  823. package/dist/taxonomies-By2aGvq2.mjs +729 -0
  824. package/dist/taxonomies-By2aGvq2.mjs.map +1 -0
  825. package/dist/taxonomies-CVRd_jz0.mjs +937 -0
  826. package/dist/taxonomies-CVRd_jz0.mjs.map +1 -0
  827. package/dist/taxonomy-BG_xu2Qf.mjs +563 -0
  828. package/dist/taxonomy-BG_xu2Qf.mjs.map +1 -0
  829. package/dist/tokens-U5vzgSrM.mjs +171 -0
  830. package/dist/tokens-U5vzgSrM.mjs.map +1 -0
  831. package/dist/transaction-CkoQ5wqQ.mjs +29 -0
  832. package/dist/transaction-CkoQ5wqQ.mjs.map +1 -0
  833. package/dist/transfer-DA0OSfaT.mjs +8873 -0
  834. package/dist/transfer-DA0OSfaT.mjs.map +1 -0
  835. package/dist/transfer-Pyf3d7ka.mjs +166 -0
  836. package/dist/transfer-Pyf3d7ka.mjs.map +1 -0
  837. package/dist/transfer-download-cX7SuWEy.mjs +33 -0
  838. package/dist/transfer-download-cX7SuWEy.mjs.map +1 -0
  839. package/dist/transformations-DczubD4j.mjs +196 -0
  840. package/dist/transformations-DczubD4j.mjs.map +1 -0
  841. package/dist/transport-Dm5QzpT_.d.mts +42 -0
  842. package/dist/transport-Dm5QzpT_.d.mts.map +1 -0
  843. package/dist/transport-DtIrjEFO.mjs +137 -0
  844. package/dist/transport-DtIrjEFO.mjs.map +1 -0
  845. package/dist/trusted-proxy-CDRd5Kmw.mjs +51 -0
  846. package/dist/trusted-proxy-CDRd5Kmw.mjs.map +1 -0
  847. package/dist/turnstile-Ct5YuFNY.mjs +58 -0
  848. package/dist/turnstile-Ct5YuFNY.mjs.map +1 -0
  849. package/dist/types-Bgujop4S.d.mts +374 -0
  850. package/dist/types-Bgujop4S.d.mts.map +1 -0
  851. package/dist/types-BirHUEXt.mjs +18 -0
  852. package/dist/types-BirHUEXt.mjs.map +1 -0
  853. package/dist/types-BqJgTL_y.d.mts +293 -0
  854. package/dist/types-BqJgTL_y.d.mts.map +1 -0
  855. package/dist/types-C-lrOt9T.d.mts +87 -0
  856. package/dist/types-C-lrOt9T.d.mts.map +1 -0
  857. package/dist/types-CCEHAhOv.d.mts +916 -0
  858. package/dist/types-CCEHAhOv.d.mts.map +1 -0
  859. package/dist/types-CLVwYRBr.d.mts +227 -0
  860. package/dist/types-CLVwYRBr.d.mts.map +1 -0
  861. package/dist/types-C_asjp1J.mjs +201 -0
  862. package/dist/types-C_asjp1J.mjs.map +1 -0
  863. package/dist/types-CadaL_k8.d.mts +366 -0
  864. package/dist/types-CadaL_k8.d.mts.map +1 -0
  865. package/dist/types-DVbTb4Hk.mjs +77 -0
  866. package/dist/types-DVbTb4Hk.mjs.map +1 -0
  867. package/dist/types-Ddku19Zw.d.mts +209 -0
  868. package/dist/types-Ddku19Zw.d.mts.map +1 -0
  869. package/dist/types-DwhEvIVb.mjs +133 -0
  870. package/dist/types-DwhEvIVb.mjs.map +1 -0
  871. package/dist/types-FIiGQ3PE.mjs +16 -0
  872. package/dist/types-FIiGQ3PE.mjs.map +1 -0
  873. package/dist/types-OauzCOY0.mjs +37 -0
  874. package/dist/types-OauzCOY0.mjs.map +1 -0
  875. package/dist/types-mQGTpP-4.d.mts +1741 -0
  876. package/dist/types-mQGTpP-4.d.mts.map +1 -0
  877. package/dist/types-nbjz3Mgm.d.mts +125 -0
  878. package/dist/types-nbjz3Mgm.d.mts.map +1 -0
  879. package/dist/update-check-hW32-0pf.mjs +161 -0
  880. package/dist/update-check-hW32-0pf.mjs.map +1 -0
  881. package/dist/upload-attempts-Bpik1TLF.mjs +32 -0
  882. package/dist/upload-attempts-Bpik1TLF.mjs.map +1 -0
  883. package/dist/url-DTfGDJhI.mjs +104 -0
  884. package/dist/url-DTfGDJhI.mjs.map +1 -0
  885. package/dist/url-pattern-CJeCyNij.mjs +41 -0
  886. package/dist/url-pattern-CJeCyNij.mjs.map +1 -0
  887. package/dist/user-nQInBZbE.mjs +171 -0
  888. package/dist/user-nQInBZbE.mjs.map +1 -0
  889. package/dist/utils-govudc_U.mjs +442 -0
  890. package/dist/utils-govudc_U.mjs.map +1 -0
  891. package/dist/validate-BxLvcDYh.mjs +524 -0
  892. package/dist/validate-BxLvcDYh.mjs.map +1 -0
  893. package/dist/validate-mnoVfASU.d.mts +468 -0
  894. package/dist/validate-mnoVfASU.d.mts.map +1 -0
  895. package/dist/validation-DQDEvh87.mjs +221 -0
  896. package/dist/validation-DQDEvh87.mjs.map +1 -0
  897. package/dist/version-BOFfLiVT.mjs +49 -0
  898. package/dist/version-BOFfLiVT.mjs.map +1 -0
  899. package/dist/version-Dcvx_C9g.mjs +7 -0
  900. package/dist/version-Dcvx_C9g.mjs.map +1 -0
  901. package/dist/version-DzTJ3gD7.mjs +9 -0
  902. package/dist/version-DzTJ3gD7.mjs.map +1 -0
  903. package/dist/video-BX7AI5nJ.mjs +54 -0
  904. package/dist/video-BX7AI5nJ.mjs.map +1 -0
  905. package/dist/virtual-modules-CU29aip9.mjs +515 -0
  906. package/dist/virtual-modules-CU29aip9.mjs.map +1 -0
  907. package/dist/widgets-HIeFmZxt.mjs +121 -0
  908. package/dist/widgets-HIeFmZxt.mjs.map +1 -0
  909. package/dist/wxr-taxonomies-Dy2i2ON3.d.mts +34 -0
  910. package/dist/wxr-taxonomies-Dy2i2ON3.d.mts.map +1 -0
  911. package/dist/wxr-taxonomies-DyOGhl8W.mjs +454 -0
  912. package/dist/wxr-taxonomies-DyOGhl8W.mjs.map +1 -0
  913. package/dist/zod-generator-VxCPVDpo.mjs +425 -0
  914. package/dist/zod-generator-VxCPVDpo.mjs.map +1 -0
  915. package/package.json +5 -5
  916. package/src/api/handlers/bulk-tag.ts +11 -3
  917. package/src/api/handlers/bylines.ts +6 -2
  918. package/src/api/handlers/content.ts +107 -7
  919. package/src/api/handlers/dashboard.ts +13 -6
  920. package/src/api/handlers/menus.ts +24 -10
  921. package/src/api/handlers/relations.ts +15 -1
  922. package/src/api/handlers/taxonomies.ts +27 -17
  923. package/src/astro/image-endpoint.ts +23 -2
  924. package/src/astro/integration/vite-config.ts +16 -8
  925. package/src/astro/middleware/redirect.ts +158 -63
  926. package/src/astro/middleware/request-context.ts +1 -0
  927. package/src/astro/middleware.ts +17 -4
  928. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +4 -1
  929. package/src/astro/routes/api/content/[collection]/[id]/translations.ts +14 -1
  930. package/src/astro/routes/api/dashboard.ts +2 -0
  931. package/src/astro/routes/api/media/file/[...key].ts +13 -3
  932. package/src/auth/types.ts +6 -0
  933. package/src/cli/commands/export-seed.ts +6 -4
  934. package/src/cli/commands/login.ts +2 -4
  935. package/src/client/index.ts +1 -0
  936. package/src/client/transport.ts +11 -7
  937. package/src/components/EmDashImage.astro +14 -2
  938. package/src/components/InlinePortableTextEditor.tsx +4 -1
  939. package/src/database/migrations/content-sized.ts +82 -0
  940. package/src/database/migrations/policy.ts +28 -2
  941. package/src/database/migrations/runner.ts +48 -0
  942. package/src/database/repositories/byline.ts +73 -17
  943. package/src/database/repositories/comment.ts +17 -7
  944. package/src/database/repositories/content.ts +79 -19
  945. package/src/database/repositories/menu.ts +77 -11
  946. package/src/database/repositories/taxonomy-def.ts +9 -2
  947. package/src/database/repositories/taxonomy.ts +47 -14
  948. package/src/database/repositories/types.ts +11 -0
  949. package/src/emdash-runtime.ts +37 -10
  950. package/src/fields/image.ts +1 -0
  951. package/src/i18n/config.ts +58 -10
  952. package/src/i18n/normalize.ts +16 -2
  953. package/src/i18n/query.ts +47 -0
  954. package/src/i18n/resolve.ts +8 -3
  955. package/src/import/wxr-taxonomies.ts +3 -2
  956. package/src/loader.ts +80 -22
  957. package/src/mcp/server.ts +28 -1
  958. package/src/media/caption.ts +30 -0
  959. package/src/media/image-endpoint.ts +13 -6
  960. package/src/media/local-runtime.ts +3 -0
  961. package/src/media/normalize.ts +15 -8
  962. package/src/media/responsive.ts +12 -2
  963. package/src/media/types.ts +16 -3
  964. package/src/menus/index.ts +21 -11
  965. package/src/migrations/manifest.ts +1 -0
  966. package/src/plugins/byline-access.ts +3 -1
  967. package/src/plugins/context.ts +1 -2
  968. package/src/plugins/storage-indexes.ts +7 -3
  969. package/src/query.ts +23 -13
  970. package/src/redirects/artifacts.ts +39 -5
  971. package/src/references/field-map.ts +6 -4
  972. package/src/request-context.ts +8 -0
  973. package/src/schema/collection-slugs-cache.ts +31 -17
  974. package/src/schema/registry.ts +9 -0
  975. package/src/schema/zod-generator.ts +2 -1
  976. package/src/search/fts-manager.ts +98 -28
  977. package/src/search/query.ts +31 -64
  978. package/src/seed/apply.ts +191 -87
  979. package/src/seed/types.ts +3 -1
  980. package/src/settings/index.ts +135 -35
  981. package/src/settings/version.ts +54 -0
  982. package/src/taxonomies/index.ts +95 -52
  983. package/src/taxonomies/term-counts.ts +2 -1
  984. package/src/utils/db-errors.ts +15 -0
  985. package/src/virtual-modules.d.ts +1 -0
  986. package/dist/action-token-SK8zyN7w.mjs +0 -26
  987. package/dist/action-token-SK8zyN7w.mjs.map +0 -1
  988. package/dist/activation-Dim4YMM7.mjs +0 -387
  989. package/dist/activation-Dim4YMM7.mjs.map +0 -1
  990. package/dist/adapters-F_xorvWv.d.mts +0 -173
  991. package/dist/adapters-F_xorvWv.d.mts.map +0 -1
  992. package/dist/allowed-origins-CEug-p0t.mjs +0 -116
  993. package/dist/allowed-origins-CEug-p0t.mjs.map +0 -1
  994. package/dist/api-D-7BNHoz.mjs +0 -5025
  995. package/dist/api-D-7BNHoz.mjs.map +0 -1
  996. package/dist/api-tokens-Bx38ZCQp.mjs +0 -173
  997. package/dist/api-tokens-Bx38ZCQp.mjs.map +0 -1
  998. package/dist/apply-T7ATgzCh.mjs +0 -1702
  999. package/dist/apply-T7ATgzCh.mjs.map +0 -1
  1000. package/dist/approvals-D-m6wvGl.mjs +0 -460
  1001. package/dist/approvals-D-m6wvGl.mjs.map +0 -1
  1002. package/dist/artifact-fetch-DIh7iyOV.mjs +0 -659
  1003. package/dist/artifact-fetch-DIh7iyOV.mjs.map +0 -1
  1004. package/dist/artifacts-htGyfCSt.mjs +0 -307
  1005. package/dist/artifacts-htGyfCSt.mjs.map +0 -1
  1006. package/dist/audit-_gieLVGU.mjs +0 -127
  1007. package/dist/audit-_gieLVGU.mjs.map +0 -1
  1008. package/dist/authoritative-records-CQlB3JzE.mjs +0 -5183
  1009. package/dist/authoritative-records-CQlB3JzE.mjs.map +0 -1
  1010. package/dist/authorize-DPFBGbE6.mjs +0 -74
  1011. package/dist/authorize-DPFBGbE6.mjs.map +0 -1
  1012. package/dist/backup-3FgVxiDJ.mjs +0 -246
  1013. package/dist/backup-3FgVxiDJ.mjs.map +0 -1
  1014. package/dist/block-types-CYcG56JB.mjs +0 -132
  1015. package/dist/block-types-CYcG56JB.mjs.map +0 -1
  1016. package/dist/block-values-gCX4HBSl.mjs +0 -215
  1017. package/dist/block-values-gCX4HBSl.mjs.map +0 -1
  1018. package/dist/byline-BR1qhyiw.mjs +0 -909
  1019. package/dist/byline-BR1qhyiw.mjs.map +0 -1
  1020. package/dist/byline-fields-4ClDC88c.mjs +0 -123
  1021. package/dist/byline-fields-4ClDC88c.mjs.map +0 -1
  1022. package/dist/byline-fields-BLXZnX7N.mjs +0 -280
  1023. package/dist/byline-fields-BLXZnX7N.mjs.map +0 -1
  1024. package/dist/byline-registry-dvt4N3xV.mjs +0 -406
  1025. package/dist/byline-registry-dvt4N3xV.mjs.map +0 -1
  1026. package/dist/bylines-CVOvRUL7.mjs +0 -234
  1027. package/dist/bylines-CVOvRUL7.mjs.map +0 -1
  1028. package/dist/bylines-DxOs9B7z.mjs +0 -150
  1029. package/dist/bylines-DxOs9B7z.mjs.map +0 -1
  1030. package/dist/cache-CEU9wo_h.mjs +0 -151
  1031. package/dist/cache-CEU9wo_h.mjs.map +0 -1
  1032. package/dist/canonical-BudtH-Fx.mjs +0 -174
  1033. package/dist/canonical-BudtH-Fx.mjs.map +0 -1
  1034. package/dist/capture-triggers-CT6dK9zd.mjs +0 -362
  1035. package/dist/capture-triggers-CT6dK9zd.mjs.map +0 -1
  1036. package/dist/challenge-store-C17BYx2-.mjs +0 -51
  1037. package/dist/challenge-store-C17BYx2-.mjs.map +0 -1
  1038. package/dist/checksum-CEqvfxGX.mjs +0 -162
  1039. package/dist/checksum-CEqvfxGX.mjs.map +0 -1
  1040. package/dist/chrome-tags-BIKBMZYO.mjs +0 -24
  1041. package/dist/chrome-tags-BIKBMZYO.mjs.map +0 -1
  1042. package/dist/chunks-xC4UD5-S.mjs +0 -25
  1043. package/dist/chunks-xC4UD5-S.mjs.map +0 -1
  1044. package/dist/collection-slugs-cache-e09QeJQt.mjs +0 -85
  1045. package/dist/collection-slugs-cache-e09QeJQt.mjs.map +0 -1
  1046. package/dist/comment-UvIWDKcW.mjs +0 -325
  1047. package/dist/comment-UvIWDKcW.mjs.map +0 -1
  1048. package/dist/comment-reaction-dGp6_FRo.mjs +0 -85
  1049. package/dist/comment-reaction-dGp6_FRo.mjs.map +0 -1
  1050. package/dist/comments-pej-_BUO.mjs +0 -195
  1051. package/dist/comments-pej-_BUO.mjs.map +0 -1
  1052. package/dist/comments-yiRFx3w5.mjs +0 -99
  1053. package/dist/comments-yiRFx3w5.mjs.map +0 -1
  1054. package/dist/components-Brp__9xo.mjs +0 -112
  1055. package/dist/components-Brp__9xo.mjs.map +0 -1
  1056. package/dist/config-Bsm_u_oE.d.mts +0 -6799
  1057. package/dist/config-Bsm_u_oE.d.mts.map +0 -1
  1058. package/dist/config-CFMojMFK.d.mts +0 -39
  1059. package/dist/config-CFMojMFK.d.mts.map +0 -1
  1060. package/dist/config-CvmjJcVw.mjs +0 -73
  1061. package/dist/config-CvmjJcVw.mjs.map +0 -1
  1062. package/dist/config-DBU6iUQB.mjs +0 -228
  1063. package/dist/config-DBU6iUQB.mjs.map +0 -1
  1064. package/dist/connection-BtEN_lP9.mjs +0 -36
  1065. package/dist/connection-BtEN_lP9.mjs.map +0 -1
  1066. package/dist/content-DQSRZTVw.mjs +0 -2075
  1067. package/dist/content-DQSRZTVw.mjs.map +0 -1
  1068. package/dist/content-list-query-CYKcY6Vi.d.mts +0 -26
  1069. package/dist/content-list-query-CYKcY6Vi.d.mts.map +0 -1
  1070. package/dist/content-policy-Dm32n9C6.mjs +0 -46
  1071. package/dist/content-policy-Dm32n9C6.mjs.map +0 -1
  1072. package/dist/content-repair-DNh5--x5.mjs +0 -442
  1073. package/dist/content-repair-DNh5--x5.mjs.map +0 -1
  1074. package/dist/context-BYptmCN0.mjs +0 -2090
  1075. package/dist/context-BYptmCN0.mjs.map +0 -1
  1076. package/dist/credits-B9iORdWB.mjs +0 -110
  1077. package/dist/credits-B9iORdWB.mjs.map +0 -1
  1078. package/dist/cron-D7obTIfk.mjs +0 -306
  1079. package/dist/cron-D7obTIfk.mjs.map +0 -1
  1080. package/dist/dashboard-D0jcgBD7.mjs +0 -167
  1081. package/dist/dashboard-D0jcgBD7.mjs.map +0 -1
  1082. package/dist/db-errors-CBD5yMro.mjs +0 -55
  1083. package/dist/db-errors-CBD5yMro.mjs.map +0 -1
  1084. package/dist/default-C0W-PhAp.mjs +0 -81
  1085. package/dist/default-C0W-PhAp.mjs.map +0 -1
  1086. package/dist/deferred-tasks-ZvUECSzI.d.mts +0 -9
  1087. package/dist/deferred-tasks-ZvUECSzI.d.mts.map +0 -1
  1088. package/dist/destination-r2zIAZ2S.mjs +0 -18
  1089. package/dist/destination-r2zIAZ2S.mjs.map +0 -1
  1090. package/dist/dev-typegen-EBni_pOQ.mjs +0 -29
  1091. package/dist/dev-typegen-EBni_pOQ.mjs.map +0 -1
  1092. package/dist/device-flow-BkFKBoAn.mjs +0 -521
  1093. package/dist/device-flow-BkFKBoAn.mjs.map +0 -1
  1094. package/dist/digest-DJ1tHCgy.mjs +0 -194
  1095. package/dist/digest-DJ1tHCgy.mjs.map +0 -1
  1096. package/dist/direct-executor-Cbxzg4qe.mjs +0 -117
  1097. package/dist/direct-executor-Cbxzg4qe.mjs.map +0 -1
  1098. package/dist/dist-Cfu8mMBs.mjs +0 -810
  1099. package/dist/dist-Cfu8mMBs.mjs.map +0 -1
  1100. package/dist/email-console-FFVJWb9N.mjs +0 -50
  1101. package/dist/email-console-FFVJWb9N.mjs.map +0 -1
  1102. package/dist/email-locale-BJ8DjTzZ.mjs +0 -25
  1103. package/dist/email-locale-BJ8DjTzZ.mjs.map +0 -1
  1104. package/dist/emdash-runtime-DVi7vtXC.mjs +0 -4379
  1105. package/dist/emdash-runtime-DVi7vtXC.mjs.map +0 -1
  1106. package/dist/enrich-Duu4sV3a.mjs +0 -194
  1107. package/dist/enrich-Duu4sV3a.mjs.map +0 -1
  1108. package/dist/entry-lock-C7VX0NGK.d.mts +0 -4568
  1109. package/dist/entry-lock-C7VX0NGK.d.mts.map +0 -1
  1110. package/dist/entry-lock-DLxCffFW.mjs +0 -163
  1111. package/dist/entry-lock-DLxCffFW.mjs.map +0 -1
  1112. package/dist/entry-lock-Df6-XhIu.mjs +0 -1211
  1113. package/dist/entry-lock-Df6-XhIu.mjs.map +0 -1
  1114. package/dist/entry-locks-DJAqVweV.mjs +0 -167
  1115. package/dist/entry-locks-DJAqVweV.mjs.map +0 -1
  1116. package/dist/env-types-C3FCVBWe.mjs +0 -38
  1117. package/dist/env-types-C3FCVBWe.mjs.map +0 -1
  1118. package/dist/error-CVWeIOku.mjs +0 -90
  1119. package/dist/error-CVWeIOku.mjs.map +0 -1
  1120. package/dist/errors-B4f4It-2.mjs +0 -120
  1121. package/dist/errors-B4f4It-2.mjs.map +0 -1
  1122. package/dist/errors-BOYNdIo3.mjs +0 -479
  1123. package/dist/errors-BOYNdIo3.mjs.map +0 -1
  1124. package/dist/escape-lsNq38PP.mjs +0 -9
  1125. package/dist/escape-lsNq38PP.mjs.map +0 -1
  1126. package/dist/fence-C3MUitUN.mjs +0 -162
  1127. package/dist/fence-C3MUitUN.mjs.map +0 -1
  1128. package/dist/field-defs-cache-Dez5iWJJ.mjs +0 -77
  1129. package/dist/field-defs-cache-Dez5iWJJ.mjs.map +0 -1
  1130. package/dist/field-map-Bft9LKak.mjs +0 -83
  1131. package/dist/field-map-Bft9LKak.mjs.map +0 -1
  1132. package/dist/focal-point-JX8kcOTQ.mjs +0 -23
  1133. package/dist/focal-point-JX8kcOTQ.mjs.map +0 -1
  1134. package/dist/fts-manager-Beg3e4bI.mjs +0 -443
  1135. package/dist/fts-manager-Beg3e4bI.mjs.map +0 -1
  1136. package/dist/gc-ByyAYiYE.mjs +0 -75
  1137. package/dist/gc-ByyAYiYE.mjs.map +0 -1
  1138. package/dist/hash-BJaeek87.mjs +0 -37
  1139. package/dist/hash-BJaeek87.mjs.map +0 -1
  1140. package/dist/hook-result-BrdLyOdI.d.mts +0 -31
  1141. package/dist/hook-result-BrdLyOdI.d.mts.map +0 -1
  1142. package/dist/hreflang-C8Jb-hrf.mjs +0 -105
  1143. package/dist/hreflang-C8Jb-hrf.mjs.map +0 -1
  1144. package/dist/hreflang-CY_F5OjF.d.mts +0 -50
  1145. package/dist/hreflang-CY_F5OjF.d.mts.map +0 -1
  1146. package/dist/http-route-dispatch-CyeW6iPv.mjs +0 -342
  1147. package/dist/http-route-dispatch-CyeW6iPv.mjs.map +0 -1
  1148. package/dist/identity-Cael5uTT.mjs +0 -35
  1149. package/dist/identity-Cael5uTT.mjs.map +0 -1
  1150. package/dist/import-BUXjdZUn.mjs +0 -2126
  1151. package/dist/import-BUXjdZUn.mjs.map +0 -1
  1152. package/dist/index-BB9sVisO.d.mts +0 -623
  1153. package/dist/index-BB9sVisO.d.mts.map +0 -1
  1154. package/dist/install-finalization-3JX5qQEA.mjs +0 -58
  1155. package/dist/install-finalization-3JX5qQEA.mjs.map +0 -1
  1156. package/dist/json-recordset-BUjxhr77.mjs +0 -12
  1157. package/dist/json-recordset-BUjxhr77.mjs.map +0 -1
  1158. package/dist/json-schema-v_D_pPNG.mjs +0 -15
  1159. package/dist/json-schema-v_D_pPNG.mjs.map +0 -1
  1160. package/dist/keys-CifIkT0N.mjs +0 -61
  1161. package/dist/keys-CifIkT0N.mjs.map +0 -1
  1162. package/dist/kinds-B_Qcl5pz.mjs +0 -974
  1163. package/dist/kinds-B_Qcl5pz.mjs.map +0 -1
  1164. package/dist/lifecycle-7vUJeFRe.mjs +0 -25
  1165. package/dist/lifecycle-7vUJeFRe.mjs.map +0 -1
  1166. package/dist/load-CdAG9wz-.mjs +0 -28
  1167. package/dist/load-CdAG9wz-.mjs.map +0 -1
  1168. package/dist/loader-CswroUbe.mjs +0 -1380
  1169. package/dist/loader-CswroUbe.mjs.map +0 -1
  1170. package/dist/loops-uA4iTOzd.mjs +0 -205
  1171. package/dist/loops-uA4iTOzd.mjs.map +0 -1
  1172. package/dist/manifest-builder-B8zjuH3f.mjs +0 -189
  1173. package/dist/manifest-builder-B8zjuH3f.mjs.map +0 -1
  1174. package/dist/manifest-schema-DNb4XmTS.mjs +0 -497
  1175. package/dist/manifest-schema-DNb4XmTS.mjs.map +0 -1
  1176. package/dist/marketplace-CqbgeIa7.mjs +0 -257
  1177. package/dist/marketplace-CqbgeIa7.mjs.map +0 -1
  1178. package/dist/media--dJRU6i2.mjs +0 -294
  1179. package/dist/media--dJRU6i2.mjs.map +0 -1
  1180. package/dist/media-1WC65OCB.mjs +0 -416
  1181. package/dist/media-1WC65OCB.mjs.map +0 -1
  1182. package/dist/media-Bws9f18T.mjs +0 -373
  1183. package/dist/media-Bws9f18T.mjs.map +0 -1
  1184. package/dist/media-allowlist-BJB7MFx6.mjs +0 -45
  1185. package/dist/media-allowlist-BJB7MFx6.mjs.map +0 -1
  1186. package/dist/media-folders-Dn3C16B8.mjs +0 -210
  1187. package/dist/media-folders-Dn3C16B8.mjs.map +0 -1
  1188. package/dist/media-url-BQgKvpQ5.mjs +0 -43
  1189. package/dist/media-url-BQgKvpQ5.mjs.map +0 -1
  1190. package/dist/media-usage-CF0WVcLO.mjs +0 -282
  1191. package/dist/media-usage-CF0WVcLO.mjs.map +0 -1
  1192. package/dist/media-usage-activation-C9HwVw5w.mjs +0 -78
  1193. package/dist/media-usage-activation-C9HwVw5w.mjs.map +0 -1
  1194. package/dist/media-usage-work-CkLa5-nc.mjs +0 -1036
  1195. package/dist/media-usage-work-CkLa5-nc.mjs.map +0 -1
  1196. package/dist/media-usage-work-m3AWTmmC.mjs +0 -151
  1197. package/dist/media-usage-work-m3AWTmmC.mjs.map +0 -1
  1198. package/dist/menus-BCVSSp1z.mjs +0 -753
  1199. package/dist/menus-BCVSSp1z.mjs.map +0 -1
  1200. package/dist/menus-BSzwObhV.mjs +0 -92
  1201. package/dist/menus-BSzwObhV.mjs.map +0 -1
  1202. package/dist/menus-Cl4kwdt7.mjs +0 -3721
  1203. package/dist/menus-Cl4kwdt7.mjs.map +0 -1
  1204. package/dist/mime-B5M9R53H.mjs +0 -81
  1205. package/dist/mime-B5M9R53H.mjs.map +0 -1
  1206. package/dist/mode-C-D3qICy.mjs +0 -23
  1207. package/dist/mode-C-D3qICy.mjs.map +0 -1
  1208. package/dist/node-sqlite-compat-CrKzRr0J.mjs +0 -63
  1209. package/dist/node-sqlite-compat-CrKzRr0J.mjs.map +0 -1
  1210. package/dist/normalize-BuWa0lvd.mjs +0 -191
  1211. package/dist/normalize-BuWa0lvd.mjs.map +0 -1
  1212. package/dist/oauth-authorization-TpEJrYB7.mjs +0 -274
  1213. package/dist/oauth-authorization-TpEJrYB7.mjs.map +0 -1
  1214. package/dist/oauth-clients-BT0Pg-MO.mjs +0 -266
  1215. package/dist/oauth-clients-BT0Pg-MO.mjs.map +0 -1
  1216. package/dist/oauth-state-store-CHMn_mwc.mjs +0 -50
  1217. package/dist/oauth-state-store-CHMn_mwc.mjs.map +0 -1
  1218. package/dist/oauth-user-lookup-BDgF6IVG.mjs +0 -26
  1219. package/dist/oauth-user-lookup-BDgF6IVG.mjs.map +0 -1
  1220. package/dist/object-cache-Bo6DGaC9.mjs +0 -586
  1221. package/dist/object-cache-Bo6DGaC9.mjs.map +0 -1
  1222. package/dist/options-DJWaq3Ie.d.mts +0 -81
  1223. package/dist/options-DJWaq3Ie.d.mts.map +0 -1
  1224. package/dist/ownership-MiyA7qKO.mjs +0 -12
  1225. package/dist/ownership-MiyA7qKO.mjs.map +0 -1
  1226. package/dist/parse-CWHOFc6z.d.mts +0 -176
  1227. package/dist/parse-CWHOFc6z.d.mts.map +0 -1
  1228. package/dist/parse-DgQ2NABT.mjs +0 -81
  1229. package/dist/parse-DgQ2NABT.mjs.map +0 -1
  1230. package/dist/passkey-config-D0kdzEao.mjs +0 -46
  1231. package/dist/passkey-config-D0kdzEao.mjs.map +0 -1
  1232. package/dist/paths-biDzFTY2.mjs +0 -77
  1233. package/dist/paths-biDzFTY2.mjs.map +0 -1
  1234. package/dist/patterns-CMNnYCgf.mjs +0 -159
  1235. package/dist/patterns-CMNnYCgf.mjs.map +0 -1
  1236. package/dist/placeholder-D41vk11_.d.mts +0 -306
  1237. package/dist/placeholder-D41vk11_.d.mts.map +0 -1
  1238. package/dist/plan-CCoqxNoU.mjs +0 -135
  1239. package/dist/plan-CCoqxNoU.mjs.map +0 -1
  1240. package/dist/plugin-tool-name-DDUgN_0p.mjs +0 -27
  1241. package/dist/plugin-tool-name-DDUgN_0p.mjs.map +0 -1
  1242. package/dist/plugins-COJ2L49n.mjs +0 -261
  1243. package/dist/plugins-COJ2L49n.mjs.map +0 -1
  1244. package/dist/policy-DLQ--Hnm.mjs +0 -45
  1245. package/dist/policy-DLQ--Hnm.mjs.map +0 -1
  1246. package/dist/portable-text-BH4zgkSm.mjs +0 -311
  1247. package/dist/portable-text-BH4zgkSm.mjs.map +0 -1
  1248. package/dist/preview-DLexxwp3.mjs +0 -107
  1249. package/dist/preview-DLexxwp3.mjs.map +0 -1
  1250. package/dist/protocol-79kUO7jP.d.mts +0 -65
  1251. package/dist/protocol-79kUO7jP.d.mts.map +0 -1
  1252. package/dist/public-plugin-api-routes-BuAMJ8nN.mjs +0 -316
  1253. package/dist/public-plugin-api-routes-BuAMJ8nN.mjs.map +0 -1
  1254. package/dist/public-submission-Di3TsgzX.mjs +0 -251
  1255. package/dist/public-submission-Di3TsgzX.mjs.map +0 -1
  1256. package/dist/public-url-Bt98vysr.mjs +0 -101
  1257. package/dist/public-url-Bt98vysr.mjs.map +0 -1
  1258. package/dist/query-CpnRlBh8.mjs +0 -1156
  1259. package/dist/query-CpnRlBh8.mjs.map +0 -1
  1260. package/dist/query-haKvLAWl.mjs +0 -41
  1261. package/dist/query-haKvLAWl.mjs.map +0 -1
  1262. package/dist/range-CYfeXgGK.mjs +0 -51
  1263. package/dist/range-CYfeXgGK.mjs.map +0 -1
  1264. package/dist/rate-limit-Xp4d0NBY.mjs +0 -127
  1265. package/dist/rate-limit-Xp4d0NBY.mjs.map +0 -1
  1266. package/dist/receipt-BUsQCOeM.mjs +0 -43
  1267. package/dist/receipt-BUsQCOeM.mjs.map +0 -1
  1268. package/dist/redirect-CQAV7mCo.mjs +0 -19
  1269. package/dist/redirect-CQAV7mCo.mjs.map +0 -1
  1270. package/dist/redirect-DiS_3mA4.mjs +0 -423
  1271. package/dist/redirect-DiS_3mA4.mjs.map +0 -1
  1272. package/dist/redirect-paths-CNYq7w80.mjs +0 -36
  1273. package/dist/redirect-paths-CNYq7w80.mjs.map +0 -1
  1274. package/dist/redirects-BEVSRMa2.mjs +0 -148
  1275. package/dist/redirects-BEVSRMa2.mjs.map +0 -1
  1276. package/dist/redirects-BHpy-VsZ.mjs +0 -446
  1277. package/dist/redirects-BHpy-VsZ.mjs.map +0 -1
  1278. package/dist/registry-TUVaid9Z.mjs +0 -8369
  1279. package/dist/registry-TUVaid9Z.mjs.map +0 -1
  1280. package/dist/relations-CA_QuMTU.mjs +0 -776
  1281. package/dist/relations-CA_QuMTU.mjs.map +0 -1
  1282. package/dist/request-cache-C4CIo5ad.mjs +0 -104
  1283. package/dist/request-cache-C4CIo5ad.mjs.map +0 -1
  1284. package/dist/request-meta-bwZ_NsvU.mjs +0 -141
  1285. package/dist/request-meta-bwZ_NsvU.mjs.map +0 -1
  1286. package/dist/resolve-D-kqyKns.mjs +0 -199
  1287. package/dist/resolve-D-kqyKns.mjs.map +0 -1
  1288. package/dist/resolve-DwNM-CXl.mjs +0 -101
  1289. package/dist/resolve-DwNM-CXl.mjs.map +0 -1
  1290. package/dist/revision-BVp8S0e_.mjs +0 -374
  1291. package/dist/revision-BVp8S0e_.mjs.map +0 -1
  1292. package/dist/route-cache-QSOyDEw0.mjs +0 -20
  1293. package/dist/route-cache-QSOyDEw0.mjs.map +0 -1
  1294. package/dist/route-wire-Ca_HWCZ5.mjs +0 -197
  1295. package/dist/route-wire-Ca_HWCZ5.mjs.map +0 -1
  1296. package/dist/routes-BerZFrvV.mjs +0 -272
  1297. package/dist/routes-BerZFrvV.mjs.map +0 -1
  1298. package/dist/runner-BObHz5FC.d.mts +0 -68
  1299. package/dist/runner-BObHz5FC.d.mts.map +0 -1
  1300. package/dist/runner-C5NeAkBQ.mjs +0 -6595
  1301. package/dist/runner-C5NeAkBQ.mjs.map +0 -1
  1302. package/dist/schema-C4OBuv6Z.mjs +0 -13
  1303. package/dist/schema-C4OBuv6Z.mjs.map +0 -1
  1304. package/dist/schema-DJRfvM_o.mjs +0 -815
  1305. package/dist/schema-DJRfvM_o.mjs.map +0 -1
  1306. package/dist/scopes-BU03K7Uo.mjs +0 -34
  1307. package/dist/scopes-BU03K7Uo.mjs.map +0 -1
  1308. package/dist/search-DfVzks89.mjs +0 -450
  1309. package/dist/search-DfVzks89.mjs.map +0 -1
  1310. package/dist/sections-BMy4JVUz.mjs +0 -346
  1311. package/dist/sections-BMy4JVUz.mjs.map +0 -1
  1312. package/dist/seo-ClB-dw9w.mjs +0 -188
  1313. package/dist/seo-ClB-dw9w.mjs.map +0 -1
  1314. package/dist/seo-VZYOEy8f.mjs +0 -133
  1315. package/dist/seo-VZYOEy8f.mjs.map +0 -1
  1316. package/dist/service-Bo_usgSk.mjs +0 -150
  1317. package/dist/service-Bo_usgSk.mjs.map +0 -1
  1318. package/dist/session-user-DlpPdf8L.mjs +0 -61
  1319. package/dist/session-user-DlpPdf8L.mjs.map +0 -1
  1320. package/dist/settings-CWb84sDm.mjs +0 -452
  1321. package/dist/settings-CWb84sDm.mjs.map +0 -1
  1322. package/dist/settings-DS914jjE.mjs +0 -66
  1323. package/dist/settings-DS914jjE.mjs.map +0 -1
  1324. package/dist/settings-Dd1uivmQ.mjs +0 -73
  1325. package/dist/settings-Dd1uivmQ.mjs.map +0 -1
  1326. package/dist/setup-complete-BuNxAUiN.mjs +0 -65
  1327. package/dist/setup-complete-BuNxAUiN.mjs.map +0 -1
  1328. package/dist/setup-nonce-BnEAX0iy.mjs +0 -25
  1329. package/dist/setup-nonce-BnEAX0iy.mjs.map +0 -1
  1330. package/dist/site-domain-Bq5j5bVg.mjs +0 -131
  1331. package/dist/site-domain-Bq5j5bVg.mjs.map +0 -1
  1332. package/dist/site-settings-DRHfX7bq.mjs +0 -50
  1333. package/dist/site-settings-DRHfX7bq.mjs.map +0 -1
  1334. package/dist/site-url-MB685I5X.mjs +0 -45
  1335. package/dist/site-url-MB685I5X.mjs.map +0 -1
  1336. package/dist/sitemap-name-BTg2NJJv.mjs +0 -26
  1337. package/dist/sitemap-name-BTg2NJJv.mjs.map +0 -1
  1338. package/dist/slug-aVnUV4SL.mjs +0 -16
  1339. package/dist/slug-aVnUV4SL.mjs.map +0 -1
  1340. package/dist/slugify-bu2-jKia.mjs +0 -22
  1341. package/dist/slugify-bu2-jKia.mjs.map +0 -1
  1342. package/dist/snapshot-DYsG4uOq.mjs +0 -414
  1343. package/dist/snapshot-DYsG4uOq.mjs.map +0 -1
  1344. package/dist/ssrf-BcYjyM4M.mjs +0 -406
  1345. package/dist/ssrf-BcYjyM4M.mjs.map +0 -1
  1346. package/dist/stage-D8DWgPcO.mjs +0 -662
  1347. package/dist/stage-D8DWgPcO.mjs.map +0 -1
  1348. package/dist/staged-CD_imitH.mjs +0 -686
  1349. package/dist/staged-CD_imitH.mjs.map +0 -1
  1350. package/dist/state-CFbGZziM.mjs +0 -178
  1351. package/dist/state-CFbGZziM.mjs.map +0 -1
  1352. package/dist/status-BFNdxzKc.mjs +0 -30
  1353. package/dist/status-BFNdxzKc.mjs.map +0 -1
  1354. package/dist/storage-query-DRyu3bSU.d.mts +0 -1615
  1355. package/dist/storage-query-DRyu3bSU.d.mts.map +0 -1
  1356. package/dist/tar-DFjExb9X.mjs +0 -449
  1357. package/dist/tar-DFjExb9X.mjs.map +0 -1
  1358. package/dist/target-CWZs2-o6.mjs +0 -27
  1359. package/dist/target-CWZs2-o6.mjs.map +0 -1
  1360. package/dist/taxonomies-ChnU7Mc8.mjs +0 -697
  1361. package/dist/taxonomies-ChnU7Mc8.mjs.map +0 -1
  1362. package/dist/taxonomies-Dd9JJv_a.mjs +0 -939
  1363. package/dist/taxonomies-Dd9JJv_a.mjs.map +0 -1
  1364. package/dist/taxonomy-C_C_LBAU.mjs +0 -550
  1365. package/dist/taxonomy-C_C_LBAU.mjs.map +0 -1
  1366. package/dist/tokens-BnhSnGwJ.mjs +0 -171
  1367. package/dist/tokens-BnhSnGwJ.mjs.map +0 -1
  1368. package/dist/transaction-BVYIo_yu.mjs +0 -29
  1369. package/dist/transaction-BVYIo_yu.mjs.map +0 -1
  1370. package/dist/transfer-ClH6w6BV.mjs +0 -8873
  1371. package/dist/transfer-ClH6w6BV.mjs.map +0 -1
  1372. package/dist/transfer-WmWiR3xf.mjs +0 -166
  1373. package/dist/transfer-WmWiR3xf.mjs.map +0 -1
  1374. package/dist/transfer-download--ofRj9Cw.mjs +0 -33
  1375. package/dist/transfer-download--ofRj9Cw.mjs.map +0 -1
  1376. package/dist/transformations-Bx4lYY0Y.mjs +0 -196
  1377. package/dist/transformations-Bx4lYY0Y.mjs.map +0 -1
  1378. package/dist/transport-BjbqNiPI.mjs +0 -136
  1379. package/dist/transport-BjbqNiPI.mjs.map +0 -1
  1380. package/dist/transport-DxiXnbXk.d.mts +0 -42
  1381. package/dist/transport-DxiXnbXk.d.mts.map +0 -1
  1382. package/dist/trusted-proxy-BU3Nx9g1.mjs +0 -51
  1383. package/dist/trusted-proxy-BU3Nx9g1.mjs.map +0 -1
  1384. package/dist/turnstile-CJwvsOqw.mjs +0 -58
  1385. package/dist/turnstile-CJwvsOqw.mjs.map +0 -1
  1386. package/dist/types-BA3ey2QH.d.mts +0 -87
  1387. package/dist/types-BA3ey2QH.d.mts.map +0 -1
  1388. package/dist/types-BGmQ0uXs.mjs +0 -201
  1389. package/dist/types-BGmQ0uXs.mjs.map +0 -1
  1390. package/dist/types-Bwpzb5o6.d.mts +0 -227
  1391. package/dist/types-Bwpzb5o6.d.mts.map +0 -1
  1392. package/dist/types-CNB-dj6F.d.mts +0 -289
  1393. package/dist/types-CNB-dj6F.d.mts.map +0 -1
  1394. package/dist/types-CgfFGfO5.mjs +0 -16
  1395. package/dist/types-CgfFGfO5.mjs.map +0 -1
  1396. package/dist/types-Cj0_yZkn.mjs +0 -18
  1397. package/dist/types-Cj0_yZkn.mjs.map +0 -1
  1398. package/dist/types-D2NEXtgB.mjs +0 -127
  1399. package/dist/types-D2NEXtgB.mjs.map +0 -1
  1400. package/dist/types-DCFavOii.d.mts +0 -916
  1401. package/dist/types-DCFavOii.d.mts.map +0 -1
  1402. package/dist/types-DHO7Pd25.d.mts +0 -366
  1403. package/dist/types-DHO7Pd25.d.mts.map +0 -1
  1404. package/dist/types-DvqVxZXa.d.mts +0 -125
  1405. package/dist/types-DvqVxZXa.d.mts.map +0 -1
  1406. package/dist/types-QoPHm-2w.d.mts +0 -1741
  1407. package/dist/types-QoPHm-2w.d.mts.map +0 -1
  1408. package/dist/types-RLgeIpnF.d.mts +0 -374
  1409. package/dist/types-RLgeIpnF.d.mts.map +0 -1
  1410. package/dist/types-qHVygneX.mjs +0 -77
  1411. package/dist/types-qHVygneX.mjs.map +0 -1
  1412. package/dist/types-sUHaH7lC.mjs +0 -37
  1413. package/dist/types-sUHaH7lC.mjs.map +0 -1
  1414. package/dist/types-slSqujQL.d.mts +0 -204
  1415. package/dist/types-slSqujQL.d.mts.map +0 -1
  1416. package/dist/update-check-BxNg9T6N.mjs +0 -161
  1417. package/dist/update-check-BxNg9T6N.mjs.map +0 -1
  1418. package/dist/upload-attempts-DPFC4COv.mjs +0 -32
  1419. package/dist/upload-attempts-DPFC4COv.mjs.map +0 -1
  1420. package/dist/url-Dn3IStq8.mjs +0 -104
  1421. package/dist/url-Dn3IStq8.mjs.map +0 -1
  1422. package/dist/url-pattern-QATUE_rv.mjs +0 -41
  1423. package/dist/url-pattern-QATUE_rv.mjs.map +0 -1
  1424. package/dist/user-BlCTKVAm.mjs +0 -171
  1425. package/dist/user-BlCTKVAm.mjs.map +0 -1
  1426. package/dist/utils-TPt7w2cS.mjs +0 -442
  1427. package/dist/utils-TPt7w2cS.mjs.map +0 -1
  1428. package/dist/validate-DxYhJQA-.mjs +0 -524
  1429. package/dist/validate-DxYhJQA-.mjs.map +0 -1
  1430. package/dist/validate-emKxGC5F.d.mts +0 -468
  1431. package/dist/validate-emKxGC5F.d.mts.map +0 -1
  1432. package/dist/validation-Ckq4vsVg.mjs +0 -220
  1433. package/dist/validation-Ckq4vsVg.mjs.map +0 -1
  1434. package/dist/version-BZj18Q7G.mjs +0 -9
  1435. package/dist/version-BZj18Q7G.mjs.map +0 -1
  1436. package/dist/version-DHmGpcch.mjs +0 -7
  1437. package/dist/version-DHmGpcch.mjs.map +0 -1
  1438. package/dist/video-DytCnw3L.mjs +0 -54
  1439. package/dist/video-DytCnw3L.mjs.map +0 -1
  1440. package/dist/virtual-modules-DO954n7P.mjs +0 -515
  1441. package/dist/virtual-modules-DO954n7P.mjs.map +0 -1
  1442. package/dist/widgets-DA5XmvVC.mjs +0 -121
  1443. package/dist/widgets-DA5XmvVC.mjs.map +0 -1
  1444. package/dist/wxr-taxonomies-CrMonejI.d.mts +0 -34
  1445. package/dist/wxr-taxonomies-CrMonejI.d.mts.map +0 -1
  1446. package/dist/wxr-taxonomies-RgRG0d5e.mjs +0 -453
  1447. package/dist/wxr-taxonomies-RgRG0d5e.mjs.map +0 -1
  1448. package/dist/zod-generator-D0JKy94C.mjs +0 -424
  1449. package/dist/zod-generator-D0JKy94C.mjs.map +0 -1
  1450. /package/dist/{api-tokens-CdP49zVF.mjs → api-tokens-C7l0GUAF.mjs} +0 -0
  1451. /package/dist/{ssrf-DM0E-D_8.mjs → ssrf-BBXcxG-f.mjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.mjs","names":["virtualPlugins","virtualCreateDialect","virtualCreateCoalescingDialect","virtualCreateStorage","virtualCreateScheduler","virtualSandboxedPlugins","virtualMediaProviders","createRequestScopedDb","virtualCreateRequestScopedDb","virtualBuildTime"],"sources":["../../src/astro/middleware.ts"],"sourcesContent":["/**\n * EmDash middleware\n *\n * Thin wrapper that initializes EmDashRuntime and attaches it to locals.\n * All heavy lifting happens in EmDashRuntime.\n */\n\nimport type { APIContext } from \"astro\";\nimport { defineMiddleware } from \"astro:middleware\";\nimport type { Kysely } from \"kysely\";\n// Import from virtual modules (populated by integration at build time)\n// @ts-ignore - virtual module\nimport { buildTime as virtualBuildTime } from \"virtual:emdash/build\";\n// @ts-ignore - virtual module\nimport virtualConfig from \"virtual:emdash/config\";\n// @ts-ignore - virtual module\nimport {\n\tcreateCoalescingDialect as virtualCreateCoalescingDialect,\n\tcreateDialect as virtualCreateDialect,\n\tcreateRequestScopedDb as virtualCreateRequestScopedDb,\n} from \"virtual:emdash/dialect\";\nimport type { RequestScopedDbOpts } from \"virtual:emdash/dialect\";\n// @ts-ignore - virtual module\nimport { mediaProviders as virtualMediaProviders } from \"virtual:emdash/media-providers\";\n// @ts-ignore - virtual module\nimport { plugins as virtualPlugins } from \"virtual:emdash/plugins\";\n// @ts-ignore - virtual module\nimport * as virtualSandboxRunnerModule from \"virtual:emdash/sandbox-runner\";\n// @ts-ignore - virtual module\nimport { sandboxedPlugins as virtualSandboxedPlugins } from \"virtual:emdash/sandboxed-plugins\";\n// @ts-ignore - virtual module\nimport { createScheduler as virtualCreateScheduler } from \"virtual:emdash/scheduler\";\n// @ts-ignore - virtual module\nimport { createStorage as virtualCreateStorage } from \"virtual:emdash/storage\";\n\nimport { after } from \"../after.js\";\nimport { apiError } from \"../api/error.js\";\nimport { EmDashConfigurationError } from \"../config/errors.js\";\nimport {\n\tcreateRecorder,\n\tflushRecorder,\n\tisInstrumentationEnabled,\n} from \"../database/instrumentation.js\";\nimport {\n\tPendingMigrationsError,\n\tresolveRuntimeMigrationMode,\n\ttype RuntimeMigrationMode,\n} from \"../database/migrations/policy.js\";\nimport { markRequestScopedDb } from \"../database/request-scoped.js\";\nimport { createDeferredTaskTracker } from \"../deferred-tasks.js\";\nimport {\n\tDB_INIT_DEADLINE_MS,\n\tEmDashRuntime,\n\ttype RuntimeDependencies,\n\ttype SandboxedPluginEntry,\n\ttype MediaProviderEntry,\n\ttype CreateSchedulerFn,\n} from \"../emdash-runtime.js\";\nimport { setI18nConfig } from \"../i18n/config.js\";\nimport type { Database, Storage } from \"../index.js\";\nimport { createPublicMediaUrlResolver } from \"../media/url.js\";\nimport { getLastContentWriteAt } from \"../object-cache/index.js\";\nimport type { PluginContentCacheInvalidator } from \"../plugins/routes.js\";\nimport type { SandboxRunnerFactory } from \"../plugins/sandbox/types.js\";\nimport type { ResolvedPlugin } from \"../plugins/types.js\";\nimport { invalidateUrlPatternCache } from \"../query.js\";\nimport {\n\tcreateRequestMetrics,\n\tgetRequestContext,\n\ttype RequestMetrics,\n\trunWithContext,\n} from \"../request-context.js\";\nimport type { PublishedRef } from \"../scheduled-publish.js\";\nimport { parseCollectionSitemapName } from \"../seo/sitemap-name.js\";\nimport { EmDashStorageError } from \"../storage/types.js\";\nimport { isMissingTableError } from \"../utils/db-errors.js\";\nimport { createInitLock, type InitLock, initWithLock } from \"../utils/init-lock.js\";\nimport type { EmDashConfig } from \"./integration/runtime.js\";\nimport {\n\tASTRO_COOKIES_SYMBOL,\n\tcoordinateScopedDbLifecycle,\n\tfinishScoped,\n\trequestEndedAuthenticated,\n} from \"./middleware/scoped-db.js\";\nimport { wrapBodyForStreamMetrics } from \"./middleware/stream-end-metrics.js\";\nimport { prefetchLayoutData } from \"./prefetch.js\";\nimport {\n\tcreatePublicPluginApiRouteHandler,\n\tgetPublicPluginRouteMeta,\n} from \"./public-plugin-api-routes.js\";\nimport { resolveSessionUser } from \"./session-user.js\";\nimport type { EmDashHandlers } from \"./types.js\";\n\n// Public type for withEmDashRuntime() consumers (queue/scheduled handlers).\nexport type { EmDashRuntime } from \"../emdash-runtime.js\";\n\n/**\n * Runtime init lock reclaim deadline. Must be strictly larger than the db\n * init deadline: this lock wraps EmDashRuntime.create() → getDatabase() →\n * the db init lock, and equal deadlines would let this outer lock reclaim\n * (spawning a second cron scheduler and sandbox runner) while the inner db\n * init is legitimately still working through a contended migration.\n */\nconst RUNTIME_INIT_DEADLINE_MS = DB_INIT_DEADLINE_MS + 15_000;\n\n/**\n * Throttle for the anonymous-path runtime-init failure log. While a site is\n * stuck (e.g. a failing migration in its backoff window, #1744) every\n * anonymous request lands in that catch; one line per interval per isolate\n * keeps the failure visible without flooding logs on a busy site. Plain\n * module state (not globalThis): a duplicated SSR chunk just means an extra\n * log line, which is harmless.\n */\nconst RUNTIME_INIT_ERROR_LOG_INTERVAL_MS = 30_000;\nlet lastRuntimeInitErrorLogAt = 0;\n\n/**\n * Whether we've verified the database has been set up.\n * On a fresh deployment the first request may hit a public page, bypassing\n * runtime init. Without this check, template helpers like getSiteSettings()\n * would query an empty database and crash. Once verified (or once the runtime\n * has initialized via an admin/API request), this stays true for the worker's\n * lifetime.\n *\n * Stored on globalThis behind a Symbol key so the flag is a true singleton\n * even when the bundler duplicates this module across SSR chunks (same\n * pattern as request-cache.ts). A plain module-scoped `let` becomes multiple\n * independent variables, which would make the setup probe re-run far more\n * often than intended — and every re-run is another chance for a transient\n * DB error to be misread as \"fresh install\" and bounce visitors to setup.\n */\nconst SETUP_VERIFIED_KEY = Symbol.for(\"emdash:setup-verified\");\nconst setupFlagStore = globalThis as Record<symbol, unknown>;\n\nfunction isSetupVerified(): boolean {\n\treturn setupFlagStore[SETUP_VERIFIED_KEY] === true;\n}\n\nfunction markSetupVerified(): void {\n\tsetupFlagStore[SETUP_VERIFIED_KEY] = true;\n}\n\n/**\n * The runtime singleton and its init lock live on globalThis behind a\n * Symbol — same reasoning as SETUP_VERIFIED_KEY above: the bundler can\n * duplicate this module across SSR chunks, and a duplicated instance/lock\n * would mean multiple runtimes (each with its own cron scheduler) per\n * isolate, initializing and reclaiming independently.\n */\nconst RUNTIME_HOLDER_KEY = Symbol.for(\"emdash:runtime-holder\");\ninterface RuntimeHolder {\n\tinstance: EmDashRuntime | null;\n\tlock: InitLock;\n}\n\nfunction getRuntimeHolder(): RuntimeHolder {\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- globalThis symbol slot, written only below\n\tlet holder = setupFlagStore[RUNTIME_HOLDER_KEY] as RuntimeHolder | undefined;\n\tif (!holder) {\n\t\tholder = { instance: null, lock: createInitLock() };\n\t\tsetupFlagStore[RUNTIME_HOLDER_KEY] = holder;\n\t}\n\treturn holder;\n}\n\n/** Whether i18n config has been initialized from the virtual module */\nlet i18nInitialized = false;\n\n/**\n * Get EmDash configuration from virtual module\n */\nfunction getConfig(): EmDashConfig | null {\n\tif (virtualConfig && typeof virtualConfig === \"object\") {\n\t\t// Initialize i18n config on first access (once per worker lifetime)\n\t\tif (!i18nInitialized) {\n\t\t\ti18nInitialized = true;\n\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- virtual module checked as object above\n\t\t\tconst config = virtualConfig as Record<string, unknown>;\n\t\t\tif (config.i18n && typeof config.i18n === \"object\") {\n\t\t\t\tsetI18nConfig(\n\t\t\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- runtime-checked above\n\t\t\t\t\tconfig.i18n as {\n\t\t\t\t\t\tdefaultLocale: string;\n\t\t\t\t\t\tlocales: string[];\n\t\t\t\t\t\tfallback?: Record<string, string>;\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tsetI18nConfig(null);\n\t\t\t}\n\t\t}\n\n\t\treturn virtualConfig;\n\t}\n\treturn null;\n}\n\n/**\n * Get plugins from virtual module\n */\nfunction getPlugins(): ResolvedPlugin[] {\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- virtual module import is untyped (@ts-ignore above)\n\treturn (virtualPlugins as ResolvedPlugin[]) || [];\n}\n\n/**\n * Build runtime dependencies from virtual modules\n */\nfunction buildDependencies(\n\tconfig: EmDashConfig,\n\tmigrationMode: RuntimeMigrationMode,\n): RuntimeDependencies {\n\t/* eslint-disable typescript-eslint/no-unsafe-type-assertion --\n\t The virtual:emdash/* imports above use @ts-ignore because tsgo/IDE\n\t resolution can't see virtual-modules.d.ts in every consumer setup,\n\t so they arrive as `any`. The casts here line each entry up with\n\t RuntimeDependencies's expected shape. The contract is enforced by\n\t the integration that populates these virtual modules. */\n\tconst sandboxModule = virtualSandboxRunnerModule as Record<string, unknown>;\n\treturn {\n\t\tconfig,\n\t\tmigrationMode,\n\t\tplugins: getPlugins(),\n\t\tcreateDialect: virtualCreateDialect as (config: Record<string, unknown>) => unknown,\n\t\t// Optional: only batching backends (D1, DO) export this; undefined otherwise.\n\t\tcreateCoalescingDialect: virtualCreateCoalescingDialect as\n\t\t\t| ((config: Record<string, unknown>) => unknown)\n\t\t\t| undefined,\n\t\tcreateStorage: virtualCreateStorage as ((config: Record<string, unknown>) => Storage) | null,\n\t\tcreateScheduler: virtualCreateScheduler as CreateSchedulerFn | null,\n\t\tsandboxEnabled: sandboxModule.sandboxEnabled as boolean,\n\t\tsandboxBypassed: (sandboxModule.sandboxBypassed as boolean) ?? false,\n\t\tsandboxedPluginEntries: (virtualSandboxedPlugins as SandboxedPluginEntry[]) || [],\n\t\tcreateSandboxRunner: sandboxModule.createSandboxRunner as SandboxRunnerFactory | null,\n\t\tmediaProviderEntries: (virtualMediaProviders as MediaProviderEntry[]) || [],\n\t};\n\t/* eslint-enable typescript-eslint/no-unsafe-type-assertion */\n}\n\n/**\n * Get or create the runtime instance.\n *\n * When `initTimings` is provided, any timing samples recorded during a\n * genuine cold init are appended. Subsequent warm calls (hitting the\n * cached instance) push nothing — callers should treat an empty array\n * as \"warm, nothing to report\".\n */\nasync function getRuntime(\n\tconfig: EmDashConfig,\n\tmigrationMode: RuntimeMigrationMode,\n\tinitTimings?: Array<{ name: string; dur: number; desc?: string }>,\n): Promise<EmDashRuntime> {\n\t// Waiters poll rather than awaiting the initializing request's promise —\n\t// workerd flags cross-request promise resolution (warnings + potential\n\t// hangs). If the initializing request is cancelled mid-create (client\n\t// disconnect tears down its continuation, skipping any `finally`), the\n\t// anchored init keeps running under waitUntil and populates the cache;\n\t// failing that, the stale lock is reclaimed after a deadline instead of\n\t// hanging every subsequent request in the isolate until eviction.\n\tconst holder = getRuntimeHolder();\n\treturn initWithLock(\n\t\tholder.lock,\n\t\t() => holder.instance,\n\t\tasync (isCurrentClaim) => {\n\t\t\tconst deps = buildDependencies(config, migrationMode);\n\t\t\tconst runtime = await EmDashRuntime.create(deps, initTimings);\n\t\t\tif (isCurrentClaim()) {\n\t\t\t\tholder.instance = runtime;\n\t\t\t} else {\n\t\t\t\t// This init was reclaimed mid-flight (it ran past the deadline\n\t\t\t\t// and a waiter started its own). Don't overwrite the\n\t\t\t\t// reclaimer's published runtime, and stop this one's cron\n\t\t\t\t// scheduler so it doesn't keep firing unreferenced. The\n\t\t\t\t// runtime is still returned — it's fully functional for the\n\t\t\t\t// request that built it.\n\t\t\t\truntime.stopCron().catch((error: unknown) => {\n\t\t\t\t\tconsole.error(\"[emdash] failed to stop superseded runtime's cron:\", error);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn runtime;\n\t\t},\n\t\t{\n\t\t\tdeadlineMs: RUNTIME_INIT_DEADLINE_MS,\n\t\t\tanchor: (promise) => after(() => promise),\n\t\t},\n\t);\n}\n\n/**\n * Run scheduled maintenance (cron tasks, scheduled publishing, system cleanup)\n * outside any request. Resolves the runtime from the build-time virtual config\n * and the cached singleton — the same instance request handlers use.\n *\n * Wired into a platform heartbeat that is not a request: the Cloudflare Worker's\n * `scheduled()` handler (Cron Trigger) calls this. On Node the runtime's own\n * timer-based scheduler already drives the same work, so this isn't needed there.\n *\n * Returns the content promoted by the publishing sweep so the caller can purge\n * edge-cache tags for it. `onPublished` (optional) is awaited after each\n * collection's batch so the caller can invalidate edge-cache tags incrementally\n * rather than only after the whole sweep.\n */\nexport async function runScheduledTasks(\n\toptions: {\n\t\tonPublished?: (refs: PublishedRef[]) => Promise<void>;\n\t\tinvalidateContentCache?: PluginContentCacheInvalidator;\n\t} = {},\n): Promise<{ published: PublishedRef[] }> {\n\tconst config = getConfig();\n\tif (!config) return { published: [] };\n\treturn runOutsideRequest(config, (runtime) => runtime.runScheduledTasks(options));\n}\n\n/**\n * Run a callback against the EmDash runtime outside any HTTP request — from a\n * Cloudflare Queue consumer, a `scheduled()` handler, or any other\n * platform-event handler that has no request and therefore no `locals.emdash`.\n *\n * Resolves the same cached runtime singleton request handlers use, so hooks,\n * plugin state, and storage all behave exactly as they do during a request.\n * A typical queue consumer finishes a job by calling back into a plugin route:\n *\n * ```ts\n * import { withEmDashRuntime } from \"emdash/middleware\";\n *\n * async function queue(batch: MessageBatch) {\n * \tawait withEmDashRuntime(async (runtime) => {\n * \t\tfor (const message of batch.messages) {\n * \t\t\tawait runtime.handlePluginApiRoute(\n * \t\t\t\t\"my-plugin\",\n * \t\t\t\t\"POST\",\n * \t\t\t\t\"/finishJob\",\n * \t\t\t\tnew Request(\"https://internal/\", {\n * \t\t\t\t\tmethod: \"POST\",\n * \t\t\t\t\tbody: JSON.stringify(message.body),\n * \t\t\t\t}),\n * \t\t\t);\n * \t\t}\n * \t});\n * }\n * ```\n *\n * Server-only and fully trusted: the callback gets the raw runtime with no\n * auth or CSRF checks, same trust level as plugin cron. Never expose it to\n * user input without validating that input yourself.\n *\n * Throws when EmDash is not configured (no `emdash()` Astro integration).\n */\nexport async function withEmDashRuntime<T>(\n\trun: (runtime: EmDashRuntime) => T | Promise<T>,\n): Promise<T> {\n\tconst config = getConfig();\n\tif (!config) {\n\t\tthrow new Error(\n\t\t\t\"EmDash is not configured — withEmDashRuntime() requires the emdash() Astro integration.\",\n\t\t);\n\t}\n\treturn runOutsideRequest(config, async (runtime) => run(runtime));\n}\n\n/**\n * Shared plumbing for request-free entry points (`runScheduledTasks`,\n * `withEmDashRuntime`): resolve the runtime singleton, then run the callback\n * under an event-scoped db when the adapter needs one.\n *\n * Connection-backed adapters (e.g. Postgres over Hyperdrive) cannot reuse\n * the per-isolate singleton from a platform event: its socket belongs to the\n * request that opened it, and workerd rejects cross-event I/O. Open an\n * event-scoped connection and run the callback under it in ALS — the\n * runtime's db getter, the cron executor, and plugin contexts all resolve\n * the connection from ALS — then close it when required. Stateless adapters\n * that need primary routing can return a close-less scope; adapters with no\n * event scoping return null and keep using the singleton.\n */\nasync function runOutsideRequest<T>(\n\tconfig: EmDashConfig,\n\tfn: (runtime: EmDashRuntime) => Promise<T>,\n): Promise<T> {\n\tconst migrationMode = resolveConfiguredMigrationMode(config);\n\tif (getRequestContext()) {\n\t\tconst runtime = await getRuntime(config, migrationMode);\n\t\treturn runOutsideRequestWithRuntime(config, runtime, fn);\n\t}\n\n\tconst deferredTasks = createDeferredTaskTracker(() => {});\n\tconst context = {\n\t\teditMode: false,\n\t\tmetrics: createRequestMetrics(performance.now()),\n\t\tdeferredTasks,\n\t};\n\treturn runWithContext(context, async () => {\n\t\tconst runtime = await (async () => {\n\t\t\ttry {\n\t\t\t\treturn await getRuntime(config, migrationMode);\n\t\t\t} finally {\n\t\t\t\tdeferredTasks.settle();\n\t\t\t\tawait deferredTasks.settled;\n\t\t\t}\n\t\t})();\n\t\treturn runOutsideRequestWithRuntime(config, runtime, fn);\n\t});\n}\n\nasync function runOutsideRequestWithRuntime<T>(\n\tconfig: EmDashConfig,\n\truntime: EmDashRuntime,\n\tfn: (runtime: EmDashRuntime) => Promise<T>,\n): Promise<T> {\n\tconst scoped = createRequestScopedDb({\n\t\tconfig: config.database?.config,\n\t\tisAuthenticated: false,\n\t\t// Event handlers publish, clean up, or run jobs — a write workload —\n\t\t// so a connection-backed adapter routes them to the primary.\n\t\tisWrite: true,\n\t\tcanUseCachedBinding: false,\n\t\tcookies: NOOP_COOKIE_JAR,\n\t\turl: CRON_EVENT_URL,\n\t});\n\tif (!scoped) {\n\t\t// This adapter needs no event-specific routing or connection.\n\t\treturn fn(runtime);\n\t}\n\tconst { closed, deferredTasks, lifecycle } = coordinateScopedDbLifecycle(scoped);\n\n\tconst parent = getRequestContext();\n\tconst ctx = parent\n\t\t? { ...parent, db: scoped.db, deferredTasks }\n\t\t: {\n\t\t\t\teditMode: false,\n\t\t\t\tdb: scoped.db,\n\t\t\t\tmetrics: createRequestMetrics(performance.now()),\n\t\t\t\tdeferredTasks,\n\t\t\t};\n\ttry {\n\t\treturn await runWithContext(ctx, () => fn(runtime));\n\t} finally {\n\t\t// Guard both so a throw in teardown can't mask the callback result or\n\t\t// skip lifecycle settlement and leak the connection.\n\t\ttry {\n\t\t\tlifecycle.commit();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[emdash] event-scoped db commit failed:\", error);\n\t\t}\n\t\ttry {\n\t\t\tlifecycle.close?.();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[emdash] event-scoped db close failed:\", error);\n\t\t}\n\t\tawait closed;\n\t}\n}\n\n/**\n * A cookie jar that reads nothing and writes nothing, for request-scoped db\n * adapters invoked outside an HTTP request (the Cron Trigger sweep). Connection\n * adapters like Hyperdrive ignore cookies entirely; the D1 session adapter\n * reads/writes a bookmark cookie, but cron never reaches that path (it has no\n * `close()`), so the no-ops are never observed.\n */\nconst NOOP_COOKIE_JAR = {\n\tget: () => undefined,\n\tset: () => {},\n};\n\n/**\n * Synthetic URL for the cron sweep's request-scoped db opts. Only the D1\n * session adapter inspects `url` (for cookie `secure`), and cron doesn't take\n * that path, so the value is never used — it exists to satisfy the contract.\n */\nconst CRON_EVENT_URL = new URL(\"https://cron.emdash.internal/\");\n\nfunction resolveConfiguredMigrationMode(config: EmDashConfig): RuntimeMigrationMode {\n\tconst processOverride =\n\t\ttypeof process !== \"undefined\" && process.env ? process.env.EMDASH_MIGRATIONS_MODE : undefined;\n\tconst importMetaOverride = import.meta.env.EMDASH_MIGRATIONS_MODE;\n\treturn resolveRuntimeMigrationMode(config.migrations, {\n\t\tdev: import.meta.env.DEV,\n\t\toverride: processOverride ?? importMetaOverride,\n\t});\n}\n\nfunction pendingMigrationsResponse(error: PendingMigrationsError): Response {\n\tconsole.error(\"[emdash] database migrations are pending:\", error.pending.join(\", \"));\n\treturn migrationRequiredResponse();\n}\n\nfunction migrationRequiredResponse(): Response {\n\treturn new Response(\n\t\t\"Database migrations are required. Apply the deployment migration manifest and retry.\",\n\t\t{\n\t\t\tstatus: 503,\n\t\t\theaders: { \"Retry-After\": \"60\" },\n\t\t},\n\t);\n}\n\nfunction unmigratedDatabaseResponse(): Response {\n\treturn new Response(\n\t\t'<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"robots\" content=\"noindex\"><title>Site unavailable</title></head><body><p>This site\\'s database has not been migrated yet. <a href=\"/_emdash/admin/setup\">Set up EmDash</a></p></body></html>',\n\t\t{\n\t\t\tstatus: 503,\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"text/html; charset=utf-8\",\n\t\t\t\t\"Cache-Control\": \"no-store\",\n\t\t\t\t\"Retry-After\": \"60\",\n\t\t\t},\n\t\t},\n\t);\n}\n\nfunction runtimeConfigurationErrorResponse(error: unknown, pathname: string): Response | null {\n\tif (!pathname.startsWith(\"/_emdash/api/\")) return null;\n\tif (error instanceof EmDashConfigurationError) {\n\t\treturn apiError(error.code, error.message, 500);\n\t}\n\tif (error instanceof EmDashStorageError && error.code === \"BINDING_NOT_FOUND\") {\n\t\treturn apiError(error.code, error.message, 500);\n\t}\n\treturn null;\n}\n\n/**\n * Baseline security headers applied to all responses.\n * Admin routes get additional headers (strict CSP) from auth middleware.\n */\nfunction finalizeResponse(\n\tresponse: Response,\n\tserverTimings?: Array<{ name: string; dur: number; desc?: string }>,\n): Response {\n\tconst res = new Response(response.body, response);\n\tconst astroCookies = Reflect.get(response, ASTRO_COOKIES_SYMBOL);\n\tif (astroCookies !== undefined) {\n\t\tReflect.set(res, ASTRO_COOKIES_SYMBOL, astroCookies);\n\t}\n\t// Set-if-absent so a host app that sets stricter values on its own routes\n\t// wins. The middleware registers `order: 'pre'` (#1282), so on the response\n\t// path it runs *after* host middleware; unconditional `set()` would clobber\n\t// the host's headers on every public route (#1393). Mirrors the CSP guard.\n\tif (!res.headers.has(\"X-Content-Type-Options\")) {\n\t\tres.headers.set(\"X-Content-Type-Options\", \"nosniff\");\n\t}\n\tif (!res.headers.has(\"Referrer-Policy\")) {\n\t\tres.headers.set(\"Referrer-Policy\", \"strict-origin-when-cross-origin\");\n\t}\n\tif (!res.headers.has(\"Permissions-Policy\")) {\n\t\tres.headers.set(\"Permissions-Policy\", \"camera=(), microphone=(), geolocation=(), payment=()\");\n\t}\n\tif (!res.headers.has(\"Content-Security-Policy\")) {\n\t\tres.headers.set(\"X-Frame-Options\", \"SAMEORIGIN\");\n\t}\n\tif (serverTimings && serverTimings.length > 0) {\n\t\tres.headers.set(\n\t\t\t\"Server-Timing\",\n\t\t\tserverTimings\n\t\t\t\t.map((t) => {\n\t\t\t\t\tconst dur = Math.round(t.dur);\n\t\t\t\t\treturn t.desc ? `${t.name};dur=${dur};desc=\"${t.desc}\"` : `${t.name};dur=${dur}`;\n\t\t\t\t})\n\t\t\t\t.join(\", \"),\n\t\t);\n\t}\n\treturn res;\n}\n\n/**\n * Append always-on counters (db.*, cache.*) to the Server-Timing list.\n *\n * dur values for `count`, `hit`, `miss` are integer counts — Server-Timing\n * spec only models milliseconds, but browsers show whatever number is given,\n * which is the convention most projects use for non-time samples.\n */\nfunction pushMetricsTimings(\n\ttimings: Array<{ name: string; dur: number; desc?: string }>,\n\tmetrics: RequestMetrics,\n): void {\n\tif (metrics.dbCount > 0) {\n\t\ttimings.push({ name: \"db.total\", dur: metrics.dbTotalMs, desc: \"DB total\" });\n\t\ttimings.push({ name: \"db.count\", dur: metrics.dbCount, desc: \"Query count\" });\n\t\tif (metrics.dbFirstOffset !== null) {\n\t\t\ttimings.push({ name: \"db.first\", dur: metrics.dbFirstOffset, desc: \"First query at\" });\n\t\t}\n\t\tif (metrics.dbLastOffset !== null) {\n\t\t\ttimings.push({ name: \"db.last\", dur: metrics.dbLastOffset, desc: \"Last query at\" });\n\t\t}\n\t}\n\tif (metrics.rpcCount > 0) {\n\t\ttimings.push({ name: \"rpc.count\", dur: metrics.rpcCount, desc: \"DB round trips\" });\n\t}\n\tif (metrics.cacheHits + metrics.cacheMisses > 0) {\n\t\ttimings.push({ name: \"cache.hit\", dur: metrics.cacheHits, desc: \"Cache hits\" });\n\t\ttimings.push({ name: \"cache.miss\", dur: metrics.cacheMisses, desc: \"Cache misses\" });\n\t}\n}\n\n/** Public routes that require the runtime (sitemap, robots.txt, etc.) */\nconst PUBLIC_RUNTIME_ROUTES = new Set([\"/sitemap.xml\", \"/robots.txt\"]);\nconst SITEMAP_COLLECTION_RE = /^\\/sitemap-([^/]+)\\.xml$/;\n\n/** Whether `pathname` is a per-collection sitemap a collection could have. */\nfunction isCollectionSitemapPath(pathname: string): boolean {\n\tconst match = SITEMAP_COLLECTION_RE.exec(pathname);\n\treturn match !== null && parseCollectionSitemapName(match[1]!) !== null;\n}\n\nfunction isImageEndpointRequest(context: APIContext): boolean {\n\tconst route = virtualConfig?.imageEndpointRoute;\n\treturn typeof route === \"string\" && context.routePattern === route;\n}\n\n/** The runtime's storage adapter, or null when none is configured or it cannot be created. */\nfunction tryGetStorage(config: EmDashConfig, migrationMode: RuntimeMigrationMode): Storage | null {\n\ttry {\n\t\treturn EmDashRuntime.getStorage(buildDependencies(config, migrationMode));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Run an image endpoint request on the adapter's request-scoped db. Anything\n * on its path that queries (host middleware, the redirect middleware under a\n * custom endpoint route) must not fall back to the per-isolate singleton: a\n * request-bound connection (pg over Hyperdrive) reused by another request fails\n * or hangs on workerd's cross-request I/O guard. A signed-in request also gets\n * the db as `locals.emdash.db`, which the auth middleware resolves `locals.user`\n * with.\n *\n * The adapter's `commit()` is skipped: on D1 it sets the bookmark cookie, and a\n * response that sets a cookie is never stored by Workers Cache. This assumes\n * nothing on the image path writes data the client must read back; the\n * bookmark it sent still covers its earlier writes.\n */\nasync function runImageRequest(\n\tconfig: EmDashConfig,\n\tcontext: APIContext,\n\timageLocals: EmDashHandlers,\n\tsignedIn: boolean,\n\tmetrics: RequestMetrics,\n\tnext: () => Promise<Response>,\n): Promise<Response> {\n\tconst scoped = createRequestScopedDb({\n\t\tconfig: config.database?.config,\n\t\tisAuthenticated: signedIn,\n\t\tisWrite: false,\n\t\tcanUseCachedBinding: false,\n\t\tcookies: context.cookies,\n\t\turl: context.url,\n\t});\n\tif (!scoped) {\n\t\tif (signedIn) {\n\t\t\ttry {\n\t\t\t\tconst { getDb } = await import(\"../loader.js\");\n\t\t\t\timageLocals.db = await getDb();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"[emdash] image request could not open the database:\", error);\n\t\t\t}\n\t\t}\n\t\treturn finalizeResponse(await next());\n\t}\n\tif (signedIn) imageLocals.db = scoped.db;\n\tconst { deferredTasks, lifecycle } = coordinateScopedDbLifecycle({ ...scoped, commit: () => {} });\n\tconst parent = getRequestContext();\n\tconst ctx = parent\n\t\t? { ...parent, db: scoped.db, deferredTasks }\n\t\t: { editMode: false, db: scoped.db, metrics, deferredTasks };\n\treturn runWithContext(ctx, () =>\n\t\tfinishScoped(lifecycle, async () => finalizeResponse(await next())),\n\t);\n}\n\n/**\n * Ask the configured database adapter for a per-request scoped Kysely. The\n * adapter encapsulates any per-request semantics (D1 sessions, read-replica\n * routing, bookmark cookies, etc.); core just forwards the cookie jar and\n * request flags, registers the returned handle as a view of the configured\n * database, and wraps next() in ALS if a scope was returned.\n */\nfunction createRequestScopedDb(\n\topts: RequestScopedDbOpts,\n): { db: Kysely<Database>; commit: () => void; close?: () => void } | null {\n\tif (typeof virtualCreateRequestScopedDb !== \"function\") return null;\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- adapter returns Kysely<unknown>; cast to Database since core owns that type\n\tconst fn = virtualCreateRequestScopedDb as (\n\t\to: RequestScopedDbOpts,\n\t) => { db: Kysely<Database>; commit: () => void; close?: () => void } | null;\n\tconst scoped = fn(opts);\n\tif (scoped) markRequestScopedDb(scoped.db);\n\treturn scoped;\n}\n\nconst buildDate = virtualBuildTime ? new Date(virtualBuildTime) : null;\n\n/**\n * Fold the build timestamp into the route cache validator.\n *\n * `CacheHint.lastModified` describes the content, but the response also depends\n * on the build: `/_astro/*` names are content-hashed, and a deployment only\n * serves its own. Without the build dimension a code-only deploy answers a\n * returning visitor's conditional request with 304, leaving them on HTML whose\n * assets 404.\n *\n * Only a route that set a content validator gets the build dimension. The build\n * alone does not move when content is published, so as a page's only validator\n * it would answer every returning visitor with 304 until the next deploy.\n *\n * Prerendered pages are served by the host's static layer, which manages its\n * own validators — only on-demand responses need the build dimension.\n *\n * Only forward moves are covered. `Last-Modified` expresses newer, not\n * different, so after a rollback the earlier build still answers a conditional\n * request with 304 and the browser stays on the newer build's HTML.\n *\n * Must run after next(), once the route has set its hint. Astro keeps the later\n * of two dates, so a route's own hint still wins when content is newer.\n * `Astro.cache.set(false)` also clears `lastModified`, so for an opted-out\n * route the guard skips the build `set()` below, which would re-enable caching.\n */\nfunction applyBuildValidator(context: APIContext): void {\n\tif (context.isPrerendered || !buildDate || !context.cache?.enabled) return;\n\tif (!context.cache.options.lastModified) return;\n\tcontext.cache.set({ lastModified: buildDate });\n}\n\nconst UNSHARED_CACHE_CONTROL_RE = /\\b(?:private|no-store)\\b/i;\n\n/**\n * Route rules match by path, so a rule can cover responses rendered for a\n * signed-in user or marked private by the route itself. Opting them out of the\n * route cache keeps the shared edge cache from serving them to anyone else.\n *\n * Must run after next(): the route and its layout call `cache.set()` while\n * rendering, which turns caching back on.\n */\nfunction keepUnsharedResponsesOutOfRouteCache(context: APIContext, response: Response): void {\n\tif (!context.cache?.enabled) return;\n\tif (\n\t\tcontext.locals.user ||\n\t\tUNSHARED_CACHE_CONTROL_RE.test(response.headers.get(\"Cache-Control\") ?? \"\")\n\t) {\n\t\tcontext.cache.set(false);\n\t}\n}\n\nexport const onRequest = defineMiddleware(async (context, next) => {\n\tconst { request, locals, cookies } = context;\n\tconst url = context.url;\n\n\t// Fast path: routes outside /_emdash/ that plugins inject (e.g.,\n\t// /.well-known/atproto-client-metadata.json) skip the entire runtime\n\t// init + middleware chain. External servers fetch these with tight\n\t// timeouts (~1-2s) so they must respond quickly even on cold starts.\n\tif (!url.pathname.startsWith(\"/_emdash\") && virtualConfig?.authProviders) {\n\t\tconst isPluginFastRoute = virtualConfig.authProviders.some(\n\t\t\t(p: { routes?: { pattern?: string }[] }) =>\n\t\t\t\tp.routes?.some((r: { pattern?: string }) => r.pattern && url.pathname === r.pattern),\n\t\t);\n\t\tif (isPluginFastRoute) {\n\t\t\treturn finalizeResponse(await next());\n\t\t}\n\t}\n\n\tconst queryRecorder = isInstrumentationEnabled()\n\t\t? createRecorder(url.pathname, request.method, request.headers.get(\"x-perf-phase\") ?? \"default\")\n\t\t: undefined;\n\n\tconst metrics = createRequestMetrics(performance.now());\n\n\tconst run = async (): Promise<Response> => {\n\t\tconst config = getConfig();\n\t\tconst migrationMode = config ? resolveConfiguredMigrationMode(config) : \"auto\";\n\t\t// Process /_emdash routes and public routes with an active session\n\t\t// (logged-in editors need the runtime for toolbar/visual editing on public pages)\n\t\tconst isEmDashRoute = url.pathname.startsWith(\"/_emdash\");\n\t\tconst isPublicRuntimeRoute =\n\t\t\tPUBLIC_RUNTIME_ROUTES.has(url.pathname) || isCollectionSitemapPath(url.pathname);\n\n\t\t// Check for edit mode cookie - editors viewing public pages need the runtime\n\t\t// so auth middleware can verify their session for visual editing\n\t\tconst hasEditCookie = cookies.get(\"emdash-edit-mode\")?.value === \"true\";\n\t\tconst hasPreviewToken = url.searchParams.has(\"_preview\");\n\n\t\t// Playground mode: the playground middleware stashes the per-session DO database\n\t\t// on locals.__playgroundDb. When present, use runWithContext() to make it\n\t\t// available to getDb() and the runtime's db getter via the correct ALS instance.\n\t\tconst playgroundDb = locals.__playgroundDb;\n\n\t\t// Read the Astro session user once up-front. Both the anonymous fast path\n\t\t// and the full doInit path need this, and the session store is network-backed\n\t\t// (KV / Durable Object) so we want to avoid re-fetching on the hot path.\n\t\t// Skipped entirely for:\n\t\t// - prerendered requests (no session at build time)\n\t\t// - requests without an `astro-session` cookie (no session to look up)\n\t\t// The cookie check matters on Cloudflare Workers, where Astro's session\n\t\t// backend is KV: calling session.get() on every anonymous public request\n\t\t// turns normal traffic into a flood of KV read misses. See #733.\n\t\tconst hasSessionCookie = cookies.get(\"astro-session\") !== undefined;\n\t\tconst sessionUser =\n\t\t\tcontext.isPrerendered || !hasSessionCookie ? null : await resolveSessionUser(context.session);\n\n\t\t// The image endpoint EmDash installed reads media bytes from storage and\n\t\t// nothing else, so it needs neither the setup probe nor runtime init.\n\t\tconst imageStorage =\n\t\t\tconfig && !playgroundDb && isImageEndpointRequest(context)\n\t\t\t\t? tryGetStorage(config, migrationMode)\n\t\t\t\t: null;\n\t\tif (imageStorage) {\n\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- partial object; the image endpoint reads only storage, the auth middleware db\n\t\t\tconst imageLocals = { storage: imageStorage } as EmDashHandlers;\n\t\t\tlocals.emdash = imageLocals;\n\t\t\treturn runImageRequest(config, context, imageLocals, !!sessionUser, metrics, next);\n\t\t}\n\n\t\t// Credentialed API requests (API tokens `ec_pat_*`, OAuth tokens\n\t\t// `ec_oat_*`, and other Bearer credentials) carry no `astro-session`\n\t\t// cookie, so `sessionUser` is null for them -- yet they still expect\n\t\t// read-your-writes. The auth middleware that resolves the token runs\n\t\t// *after* this one, so `locals.user` isn't populated here; detect the\n\t\t// credential directly on the request. Request-scoped adapters use this to\n\t\t// keep such requests on the primary/uncached connection (not a lagging\n\t\t// read replica or the Hyperdrive query cache).\n\t\tconst hasBearerAuth = (request.headers.get(\"authorization\") ?? \"\")\n\t\t\t.toLowerCase()\n\t\t\t.startsWith(\"bearer \");\n\t\tconst isWrite = request.method !== \"GET\" && request.method !== \"HEAD\";\n\t\tconst isAuthenticated = !!sessionUser || hasBearerAuth;\n\t\tconst endedAuthenticated = () => requestEndedAuthenticated(isAuthenticated, cookies);\n\t\tconst canUseCachedBinding =\n\t\t\t!isAuthenticated &&\n\t\t\t!isWrite &&\n\t\t\t!playgroundDb &&\n\t\t\t!isEmDashRoute &&\n\t\t\t!hasEditCookie &&\n\t\t\t!hasPreviewToken;\n\n\t\tif (!isEmDashRoute && !isPublicRuntimeRoute && !hasEditCookie && !hasPreviewToken) {\n\t\t\tif (!sessionUser && !playgroundDb) {\n\t\t\t\tconst timings: Array<{ name: string; dur: number; desc?: string }> = [];\n\t\t\t\tconst mwStart = performance.now();\n\n\t\t\t\t// On a fresh deployment the database may be completely empty.\n\t\t\t\t// Public pages call getSiteSettings() / getMenu() via getDb(), which\n\t\t\t\t// bypasses runtime init and would crash with \"no such table: options\".\n\t\t\t\t// Do a one-time lightweight probe using the same getDb() instance the\n\t\t\t\t// page will use: if the migrations table doesn't exist, no migrations\n\t\t\t\t// have ever run, and the page may only render once runtime init has\n\t\t\t\t// migrated the database.\n\t\t\t\t// Skip the probe when prerendering: the build database is legitimately\n\t\t\t\t// empty in CI, and a response derived from it would be baked into the\n\t\t\t\t// static page (session reads are already skipped for prerender above\n\t\t\t\t// for the same reason).\n\t\t\t\t// Runtime init starts before the probe so the two round trips overlap.\n\t\t\t\t// Sub-phase timings are populated only on the cold init. Warm\n\t\t\t\t// requests hit the cached runtime and leave this empty.\n\t\t\t\tconst initSubTimings: Array<{ name: string; dur: number; desc?: string }> = [];\n\t\t\t\tconst runtimeInitStart = performance.now();\n\t\t\t\tconst runtimeInit = config ? getRuntime(config, migrationMode, initSubTimings) : undefined;\n\t\t\t\t// Awaited below unless the probe fails; then it settles in the background.\n\t\t\t\truntimeInit?.catch(() => {});\n\n\t\t\t\tlet unmigrated = false;\n\t\t\t\tlet probeFailed = false;\n\t\t\t\tif (migrationMode === \"auto\" && !isSetupVerified() && !context.isPrerendered) {\n\t\t\t\t\tconst t0 = performance.now();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { getDb } = await import(\"../loader.js\");\n\t\t\t\t\t\tconst db = await getDb();\n\t\t\t\t\t\tawait db.selectFrom(\"_emdash_migrations\").selectAll().limit(1).execute();\n\t\t\t\t\t\tmarkSetupVerified();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (isMissingTableError(error)) {\n\t\t\t\t\t\t\tunmigrated = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Any other failure (transient D1/replica error, timeout, cold-start\n\t\t\t\t\t\t\t// race, locked SQLite) must NOT be read as \"fresh install\". Leave the\n\t\t\t\t\t\t\t// flag unset so a later request can re-verify, and fall through to\n\t\t\t\t\t\t\t// render the page normally. Unless a runtime is already running,\n\t\t\t\t\t\t\t// don't wait for runtime init on this request: it connects to the\n\t\t\t\t\t\t\t// same database and would make the visitor wait through a second\n\t\t\t\t\t\t\t// timeout. getRuntime anchors it with after(), so it can still\n\t\t\t\t\t\t\t// finish for later requests.\n\t\t\t\t\t\t\tprobeFailed = !getRuntimeHolder().instance;\n\t\t\t\t\t\t\tconsole.error(\"Setup probe failed (non-fatal):\", error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttimings.push({ name: \"setup\", dur: performance.now() - t0, desc: \"Setup probe\" });\n\t\t\t\t}\n\n\t\t\t\t// Wait for the runtime for page:metadata and page:fragments hooks.\n\t\t\t\t// The runtime is a cached singleton — after the first request,\n\t\t\t\t// getRuntime() is just a null-check. This enables SEO plugins to\n\t\t\t\t// contribute meta tags for all visitors, not just logged-in editors,\n\t\t\t\t// except on a request whose setup probe just failed.\n\t\t\t\tif (runtimeInit && !probeFailed) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst runtime = await runtimeInit;\n\t\t\t\t\t\tmarkSetupVerified();\n\t\t\t\t\t\tconst handlePublicPluginApiRoute = createPublicPluginApiRouteHandler(runtime);\n\t\t\t\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- partial object; getPageRuntime() only checks for the page-contribution methods\n\t\t\t\t\t\tlocals.emdash = {\n\t\t\t\t\t\t\thandlePublicPluginApiRoute,\n\t\t\t\t\t\t\tgetPublicPluginRouteMeta: (pluginId, path) =>\n\t\t\t\t\t\t\t\tgetPublicPluginRouteMeta(runtime, pluginId, path),\n\t\t\t\t\t\t\tcollectPageMetadata: runtime.collectPageMetadata.bind(runtime),\n\t\t\t\t\t\t\tcollectPageFragments: runtime.collectPageFragments.bind(runtime),\n\t\t\t\t\t\t\tgetPublicMediaUrl: createPublicMediaUrlResolver(runtime.storage),\n\t\t\t\t\t\t\tstorage: runtime.storage,\n\t\t\t\t\t\t} as EmDashHandlers;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (error instanceof PendingMigrationsError) {\n\t\t\t\t\t\t\treturn pendingMigrationsResponse(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (migrationMode === \"manual\" && isMissingTableError(error)) {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\t\"[emdash] database schema is unavailable in manual migration mode:\",\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn migrationRequiredResponse();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Non-fatal — EmDashHead falls back to base SEO contributions —\n\t\t\t\t\t\t// but log it (throttled): a persistently failing init (e.g. a\n\t\t\t\t\t\t// failing migration, #1744) is otherwise invisible on the\n\t\t\t\t\t\t// anonymous path, silently degrading every public page.\n\t\t\t\t\t\tif (Date.now() - lastRuntimeInitErrorLogAt >= RUNTIME_INIT_ERROR_LOG_INTERVAL_MS) {\n\t\t\t\t\t\t\tlastRuntimeInitErrorLogAt = Date.now();\n\t\t\t\t\t\t\tconsole.error(\"[emdash] runtime init failed (page renders without CMS data):\", error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttimings.push({\n\t\t\t\t\t\tname: \"rt\",\n\t\t\t\t\t\tdur: performance.now() - runtimeInitStart,\n\t\t\t\t\t\tdesc: \"Runtime init\",\n\t\t\t\t\t});\n\t\t\t\t\t// Append cold-only sub-phase timings so the breakdown is visible\n\t\t\t\t\t// in Server-Timing (rt.db, rt.fts, rt.plugins, rt.site,\n\t\t\t\t\t// rt.sandbox, rt.market, rt.hooks, rt.cron).\n\t\t\t\t\tfor (const sub of initSubTimings) timings.push(sub);\n\t\t\t\t}\n\t\t\t\tif (unmigrated && !locals.emdash) {\n\t\t\t\t\treturn finalizeResponse(unmigratedDatabaseResponse(), timings);\n\t\t\t\t}\n\n\t\t\t\t// Even on the anonymous fast path we ask the adapter for a per-request\n\t\t\t\t// scoped db. For D1 with read replication this routes anonymous reads\n\t\t\t\t// to the nearest replica; for other adapters it's a no-op.\n\t\t\t\tconst lastContentWriteAt =\n\t\t\t\t\tcanUseCachedBinding && config?.database?.needsLastContentWriteAt\n\t\t\t\t\t\t? await getLastContentWriteAt()\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst anonScoped = createRequestScopedDb({\n\t\t\t\t\tconfig: config?.database?.config,\n\t\t\t\t\tisAuthenticated,\n\t\t\t\t\tendedAuthenticated,\n\t\t\t\t\tisWrite,\n\t\t\t\t\tcanUseCachedBinding,\n\t\t\t\t\tcookies,\n\t\t\t\t\turl,\n\t\t\t\t\tlastContentWriteAt,\n\t\t\t\t});\n\t\t\t\tconst runAnon = async () => {\n\t\t\t\t\tconst t0 = performance.now();\n\t\t\t\t\tconst response = await next();\n\t\t\t\t\ttimings.push({ name: \"render\", dur: performance.now() - t0, desc: \"Page render\" });\n\t\t\t\t\ttimings.push({ name: \"mw\", dur: performance.now() - mwStart, desc: \"Total middleware\" });\n\t\t\t\t\tpushMetricsTimings(timings, metrics);\n\t\t\t\t\t// Server-Timing only sees pre-stream queries; the stream-end\n\t\t\t\t\t// wrapper (instrumentation-gated, no-op otherwise) emits the\n\t\t\t\t\t// final counters once the body finishes streaming.\n\t\t\t\t\treturn wrapBodyForStreamMetrics(finalizeResponse(response, timings));\n\t\t\t\t};\n\t\t\t\tif (anonScoped) {\n\t\t\t\t\tconst { deferredTasks, lifecycle } = coordinateScopedDbLifecycle(anonScoped);\n\t\t\t\t\tconst parent = getRequestContext();\n\t\t\t\t\tconst ctx = parent\n\t\t\t\t\t\t? { ...parent, db: anonScoped.db, deferredTasks }\n\t\t\t\t\t\t: { editMode: false, db: anonScoped.db, metrics, deferredTasks };\n\t\t\t\t\t// Eagerly warm site-global layout data (menus, widget areas,\n\t\t\t\t\t// taxonomy terms, settings) concurrently so the layout's\n\t\t\t\t\t// per-component reads overlap into ~one wall-clock round trip and\n\t\t\t\t\t// hit a warm cache instead of serializing. Four guards:\n\t\t\t\t\t// - request-scoped (remote) backend only -- this branch implies it;\n\t\t\t\t\t// pointless on synchronous local SQLite.\n\t\t\t\t\t// - an adapter that can overlap queries -- without that, Kysely's\n\t\t\t\t\t// connection mutex (D1 sessions without `coalesce`) queues the\n\t\t\t\t\t// prefetch ahead of the page's own first query.\n\t\t\t\t\t// - HTML navigations only -- feeds/sitemaps/JSON don't render the\n\t\t\t\t\t// layout, so prefetching their chrome is pure waste.\n\t\t\t\t\t// - the work starts immediately, then after() keeps both it and the\n\t\t\t\t\t// request-scoped connection alive until the response also finishes.\n\t\t\t\t\t// Gate on the CLIENT'S PREFERRED type (leading media range), not a\n\t\t\t\t\t// substring -- browser navigations lead with `text/html`, while feed\n\t\t\t\t\t// readers lead with `application/rss+xml` etc. and only list\n\t\t\t\t\t// `text/html;q=0.8` later, so a substring match would leak onto feeds.\n\t\t\t\t\tconst acceptsHtml = (request.headers.get(\"accept\") ?? \"\")\n\t\t\t\t\t\t.split(\",\", 1)[0]!\n\t\t\t\t\t\t.trim()\n\t\t\t\t\t\t.startsWith(\"text/html\");\n\t\t\t\t\treturn runWithContext(ctx, async () => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tacceptsHtml &&\n\t\t\t\t\t\t\tanonScoped.db.getExecutor().adapter.supportsMultipleConnections !== false\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tafter(() => prefetchLayoutData());\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// commit() persists per-request state (e.g. the D1 bookmark cookie)\n\t\t\t\t\t\t// before the response is returned, even if render throws; close()\n\t\t\t\t\t\t// waits for stream-end and request-owned deferred work. See finishScoped.\n\t\t\t\t\t\treturn finishScoped(lifecycle, runAnon);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn runAnon();\n\t\t\t}\n\t\t}\n\n\t\tif (!config) {\n\t\t\tconsole.error(\"EmDash: No configuration found\");\n\t\t\treturn finalizeResponse(await next());\n\t\t}\n\n\t\t// In playground mode, wrap the entire runtime init + request handling in\n\t\t// runWithContext so that getDatabase() and all init queries use the real\n\t\t// DO database via the same AsyncLocalStorage instance as the loader.\n\t\tconst doInit = async () => {\n\t\t\tconst timings: Array<{ name: string; dur: number; desc?: string }> = [];\n\t\t\tconst mwStart = performance.now();\n\n\t\t\ttry {\n\t\t\t\t// Get or create runtime. Sub-phase timings (rt.db, rt.fts, rt.plugins,\n\t\t\t\t// rt.site, rt.sandbox, rt.market, rt.hooks, rt.cron) are populated\n\t\t\t\t// only on the cold init — subsequent warm calls find the cached\n\t\t\t\t// instance and `initSubTimings` stays empty.\n\t\t\t\tconst initSubTimings: Array<{ name: string; dur: number; desc?: string }> = [];\n\t\t\t\tlet t0 = performance.now();\n\t\t\t\tconst runtime = await getRuntime(config, migrationMode, initSubTimings);\n\t\t\t\ttimings.push({ name: \"rt\", dur: performance.now() - t0, desc: \"Runtime init\" });\n\t\t\t\t// Forward any sub-phase samples so cold-start breakdown is visible\n\t\t\t\t// in Server-Timing. Each phase appears prefixed \"rt.\" to distinguish\n\t\t\t\t// from the aggregate \"rt\" timing above.\n\t\t\t\tfor (const sub of initSubTimings) timings.push(sub);\n\n\t\t\t\t// Runtime initialization has satisfied the effective migration policy.\n\t\t\t\tmarkSetupVerified();\n\n\t\t\t\t// The manifest is no longer pre-loaded here. It's admin-only\n\t\t\t\t// content that public/anonymous requests never read, and\n\t\t\t\t// loading it on every request put logged-out hot paths on\n\t\t\t\t// the same staleness budget as admin operations. Admin\n\t\t\t\t// routes call `emdash.getManifest()` directly.\n\n\t\t\t\t// Attach to locals for route handlers\n\t\t\t\tlocals.emdash = {\n\t\t\t\t\t// Content handlers\n\t\t\t\t\thandleContentList: runtime.handleContentList.bind(runtime),\n\t\t\t\t\thandleContentGet: runtime.handleContentGet.bind(runtime),\n\t\t\t\t\thandleContentAuthors: runtime.handleContentAuthors.bind(runtime),\n\t\t\t\t\thandleContentCreate: runtime.handleContentCreate.bind(runtime),\n\t\t\t\t\thandleContentUpdate: runtime.handleContentUpdate.bind(runtime),\n\t\t\t\t\thandleContentDelete: runtime.handleContentDelete.bind(runtime),\n\n\t\t\t\t\t// Trash handlers\n\t\t\t\t\thandleContentListTrashed: runtime.handleContentListTrashed.bind(runtime),\n\t\t\t\t\thandleContentRestore: runtime.handleContentRestore.bind(runtime),\n\t\t\t\t\thandleContentPermanentDelete: runtime.handleContentPermanentDelete.bind(runtime),\n\t\t\t\t\thandleContentCountTrashed: runtime.handleContentCountTrashed.bind(runtime),\n\t\t\t\t\thandleContentGetIncludingTrashed: runtime.handleContentGetIncludingTrashed.bind(runtime),\n\n\t\t\t\t\t// Duplicate handler\n\t\t\t\t\thandleContentDuplicate: runtime.handleContentDuplicate.bind(runtime),\n\n\t\t\t\t\t// Publishing & Scheduling handlers\n\t\t\t\t\thandleContentPublish: runtime.handleContentPublish.bind(runtime),\n\t\t\t\t\thandleContentUnpublish: runtime.handleContentUnpublish.bind(runtime),\n\t\t\t\t\thandleContentSchedule: runtime.handleContentSchedule.bind(runtime),\n\t\t\t\t\thandleContentUnschedule: runtime.handleContentUnschedule.bind(runtime),\n\t\t\t\t\thandleContentCountScheduled: runtime.handleContentCountScheduled.bind(runtime),\n\t\t\t\t\thandleContentDiscardDraft: runtime.handleContentDiscardDraft.bind(runtime),\n\t\t\t\t\thandleContentCompare: runtime.handleContentCompare.bind(runtime),\n\t\t\t\t\thandleContentTranslations: runtime.handleContentTranslations.bind(runtime),\n\n\t\t\t\t\t// Media handlers\n\t\t\t\t\thandleMediaList: runtime.handleMediaList.bind(runtime),\n\t\t\t\t\thandleMediaGet: runtime.handleMediaGet.bind(runtime),\n\t\t\t\t\thandleMediaUpload: runtime.handleMediaUpload.bind(runtime),\n\t\t\t\t\thandleMediaCreate: runtime.handleMediaCreate.bind(runtime),\n\t\t\t\t\thandleMediaRegisterUpload: runtime.handleMediaRegisterUpload.bind(runtime),\n\t\t\t\t\thandleMediaUpdate: runtime.handleMediaUpdate.bind(runtime),\n\t\t\t\t\t...(runtime.handleMediaReplaceMetadata\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\thandleMediaReplaceMetadata: runtime.handleMediaReplaceMetadata.bind(runtime),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {}),\n\t\t\t\t\thandleMediaDelete: runtime.handleMediaDelete.bind(runtime),\n\n\t\t\t\t\t// Comment administration\n\t\t\t\t\t...(runtime.handleCommentModerate\n\t\t\t\t\t\t? { handleCommentModerate: runtime.handleCommentModerate.bind(runtime) }\n\t\t\t\t\t\t: {}),\n\n\t\t\t\t\t// Revision handlers\n\t\t\t\t\thandleRevisionList: runtime.handleRevisionList.bind(runtime),\n\t\t\t\t\thandleRevisionGet: runtime.handleRevisionGet.bind(runtime),\n\t\t\t\t\thandleRevisionRestore: runtime.handleRevisionRestore.bind(runtime),\n\n\t\t\t\t\t// Plugin routes\n\t\t\t\t\thandlePluginApiRoute: runtime.handlePluginApiRoute.bind(runtime),\n\t\t\t\t\tgetPluginEditorExtension: runtime.getPluginEditorExtension.bind(runtime),\n\t\t\t\t\tgetPluginEditorDraftSchema: runtime.getPluginEditorDraftSchema.bind(runtime),\n\t\t\t\t\thandlePublicPluginApiRoute: createPublicPluginApiRouteHandler(runtime),\n\t\t\t\t\tgetPublicPluginRouteMeta: (pluginId, path) =>\n\t\t\t\t\t\tgetPublicPluginRouteMeta(runtime, pluginId, path),\n\t\t\t\t\tgetPluginRouteMeta: runtime.getPluginRouteMeta.bind(runtime),\n\t\t\t\t\tgetPluginMcpTools: runtime.getPluginMcpTools.bind(runtime),\n\t\t\t\t\tgetEnabledPluginMcpTools: runtime.getEnabledPluginMcpTools.bind(runtime),\n\t\t\t\t\tserializePluginMcpConsent: runtime.serializePluginMcpConsent.bind(runtime),\n\t\t\t\t\thandlePluginMcpTool: runtime.handlePluginMcpTool.bind(runtime),\n\t\t\t\t\thandlePluginMcpDenied: runtime.handlePluginMcpDenied.bind(runtime),\n\n\t\t\t\t\t// Media provider methods\n\t\t\t\t\tgetMediaProvider: runtime.getMediaProvider.bind(runtime),\n\t\t\t\t\tgetMediaProviderList: runtime.getMediaProviderList.bind(runtime),\n\n\t\t\t\t\t// Page contribution methods (for EmDashHead/EmDashBodyStart/EmDashBodyEnd)\n\t\t\t\t\tcollectPageMetadata: runtime.collectPageMetadata.bind(runtime),\n\t\t\t\t\tcollectPageFragments: runtime.collectPageFragments.bind(runtime),\n\n\t\t\t\t\t// Lazy search index health check — search endpoints call this\n\t\t\t\t\t// before querying so a crash-corrupted index gets repaired on\n\t\t\t\t\t// first use rather than stalling every cold start.\n\t\t\t\t\tensureSearchHealthy: runtime.ensureSearchHealthy.bind(runtime),\n\n\t\t\t\t\t// Direct access (for advanced use cases)\n\t\t\t\t\tstorage: runtime.storage,\n\t\t\t\t\t// Lazy getter, not an eager snapshot: `locals.emdash` is built\n\t\t\t\t\t// before the per-request scoped db is installed in ALS, so reading\n\t\t\t\t\t// `runtime.db` here would capture the per-isolate singleton. Routes\n\t\t\t\t\t// access `emdash.db` later, during the request, when the scoped db\n\t\t\t\t\t// is active. For a stateless binding (D1) the two are equivalent,\n\t\t\t\t\t// but for a request-bound connection (pg/Hyperdrive) the singleton\n\t\t\t\t\t// belongs to the cold-start request and reusing it from a warm\n\t\t\t\t\t// request hangs on workerd's cross-request I/O guard.\n\t\t\t\t\tget db() {\n\t\t\t\t\t\treturn runtime.db;\n\t\t\t\t\t},\n\t\t\t\t\tgetPublicMediaUrl: createPublicMediaUrlResolver(runtime.storage),\n\t\t\t\t\thooks: runtime.hooks,\n\t\t\t\t\temail: runtime.email,\n\t\t\t\t\tconfiguredPlugins: runtime.configuredPlugins,\n\t\t\t\t\tsandboxedPluginEntries: runtime.sandboxedPluginEntries,\n\n\t\t\t\t\t// Configuration (for checking database type, auth mode, etc.)\n\t\t\t\t\tconfig,\n\n\t\t\t\t\t// Lazy manifest accessor — admin-only consumers call this on\n\t\t\t\t\t// demand. `requestCached` inside `getManifest` dedupes within\n\t\t\t\t\t// a single request.\n\t\t\t\t\tgetManifest: runtime.getManifest.bind(runtime),\n\n\t\t\t\t\t// Clear the URL pattern cache after schema mutations that\n\t\t\t\t\t// affect collection URL patterns.\n\t\t\t\t\tinvalidateUrlPatternCache,\n\n\t\t\t\t\t// Sandbox runner (for marketplace plugin install/update)\n\t\t\t\t\tgetSandboxRunner: runtime.getSandboxRunner.bind(runtime),\n\t\t\t\t\tisSandboxBypassed: runtime.isSandboxBypassed.bind(runtime),\n\n\t\t\t\t\t// Sync marketplace plugin states (after install/update/uninstall)\n\t\t\t\t\tsyncMarketplacePlugins: runtime.syncMarketplacePlugins.bind(runtime),\n\n\t\t\t\t\t// Sync registry plugin states (after install/update/uninstall)\n\t\t\t\t\tsyncRegistryPlugins: runtime.syncRegistryPlugins.bind(runtime),\n\t\t\t\t\trunPluginInstallLifecycle: runtime.runPluginInstallLifecycle.bind(runtime),\n\t\t\t\t\trunPluginActivateLifecycle: runtime.runPluginActivateLifecycle.bind(runtime),\n\t\t\t\t\trunPluginUninstallLifecycle: runtime.runPluginUninstallLifecycle.bind(runtime),\n\t\t\t\t\tgetRuntimePluginSettingsSchema: runtime.getRuntimePluginSettingsSchema.bind(runtime),\n\n\t\t\t\t\t// Update plugin enabled/disabled status and rebuild hook pipeline\n\t\t\t\t\tsetPluginStatus: runtime.setPluginStatus.bind(runtime),\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof PendingMigrationsError) {\n\t\t\t\t\treturn pendingMigrationsResponse(error);\n\t\t\t\t}\n\t\t\t\tif (migrationMode === \"manual\" && isMissingTableError(error)) {\n\t\t\t\t\tconsole.error(\"[emdash] database schema is unavailable in manual migration mode:\", error);\n\t\t\t\t\treturn migrationRequiredResponse();\n\t\t\t\t}\n\t\t\t\tconsole.error(\"EmDash middleware error:\", error);\n\t\t\t\tconst configurationError = runtimeConfigurationErrorResponse(error, url.pathname);\n\t\t\t\tif (configurationError) return configurationError;\n\t\t\t}\n\n\t\t\t// Ask the adapter for a request-scoped db. When it returns one, we stash\n\t\t\t// it in ALS so the runtime's db getter and loader's getDb() pick it up,\n\t\t\t// then call commit() after next() so the adapter can persist any\n\t\t\t// per-request state (e.g. a D1 bookmark cookie for read-your-writes).\n\t\t\tconst lastContentWriteAt =\n\t\t\t\tcanUseCachedBinding && config?.database?.needsLastContentWriteAt\n\t\t\t\t\t? await getLastContentWriteAt()\n\t\t\t\t\t: undefined;\n\t\t\tconst scoped = createRequestScopedDb({\n\t\t\t\tconfig: config?.database?.config,\n\t\t\t\tisAuthenticated,\n\t\t\t\tendedAuthenticated,\n\t\t\t\tisWrite,\n\t\t\t\tcanUseCachedBinding,\n\t\t\t\tcookies: context.cookies,\n\t\t\t\turl,\n\t\t\t\tlastContentWriteAt,\n\t\t\t});\n\n\t\t\tconst renderAndFinalize = async () => {\n\t\t\t\tconst t0 = performance.now();\n\t\t\t\tconst response = await next();\n\t\t\t\ttimings.push({ name: \"render\", dur: performance.now() - t0, desc: \"Page render\" });\n\t\t\t\ttimings.push({ name: \"mw\", dur: performance.now() - mwStart, desc: \"Total middleware\" });\n\t\t\t\tpushMetricsTimings(timings, metrics);\n\t\t\t\t// Server-Timing only sees pre-stream queries; the stream-end\n\t\t\t\t// wrapper (instrumentation-gated, no-op otherwise) emits the\n\t\t\t\t// final counters once the body finishes streaming.\n\t\t\t\treturn wrapBodyForStreamMetrics(finalizeResponse(response, timings));\n\t\t\t};\n\n\t\t\tif (scoped) {\n\t\t\t\tconst { deferredTasks, lifecycle } = coordinateScopedDbLifecycle(scoped);\n\t\t\t\tconst parent = getRequestContext();\n\t\t\t\tconst ctx = parent\n\t\t\t\t\t? { ...parent, db: scoped.db, deferredTasks }\n\t\t\t\t\t: { editMode: false, db: scoped.db, metrics, deferredTasks };\n\t\t\t\treturn runWithContext(ctx, () =>\n\t\t\t\t\t// commit() persists per-request state (e.g. the D1 bookmark cookie)\n\t\t\t\t\t// before the response returns, even if render throws; close()\n\t\t\t\t\t// waits for stream-end and request-owned deferred work. See finishScoped.\n\t\t\t\t\tfinishScoped(lifecycle, renderAndFinalize),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn renderAndFinalize();\n\t\t}; // end doInit\n\n\t\tif (playgroundDb) {\n\t\t\t// Read the edit-mode cookie to determine if visual editing is active.\n\t\t\t// Default to false -- editing is opt-in via the playground toolbar toggle.\n\t\t\tconst editMode = context.cookies.get(\"emdash-edit-mode\")?.value === \"true\";\n\t\t\t// Playground DBs are per-session isolated instances whose schema is\n\t\t\t// independent of the configured one — flag as isolated so schema-\n\t\t\t// derived caches (manifest, taxonomy defs) rebuild against it.\n\t\t\tconst parent = getRequestContext();\n\t\t\tconst ctx = parent\n\t\t\t\t? { ...parent, editMode, db: playgroundDb, dbIsIsolated: true }\n\t\t\t\t: { editMode, db: playgroundDb, dbIsIsolated: true, metrics };\n\t\t\treturn runWithContext(ctx, doInit);\n\t\t}\n\t\treturn doInit();\n\t};\n\n\ttry {\n\t\tconst response = await runWithContext({ editMode: false, queryRecorder, metrics }, run);\n\t\tapplyBuildValidator(context);\n\t\tkeepUnsharedResponsesOutOfRouteCache(context, response);\n\t\treturn response;\n\t} finally {\n\t\t// Streamed responses defer the flush to stream end (see\n\t\t// wrapBodyForStreamMetrics) so the log captures queries issued while\n\t\t// the body renders. Only flush here for responses that were not\n\t\t// wrapped (no body: redirects, 304s, bodyless errors), where all\n\t\t// queries have already run by the time middleware returns.\n\t\tif (queryRecorder && !queryRecorder.deferredFlush) flushRecorder(queryRecorder);\n\t}\n});\n\nexport default onRequest;\n"],"mappings":"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"}
1
+ {"version":3,"file":"middleware.mjs","names":["virtualPlugins","virtualCreateDialect","virtualCreateCoalescingDialect","virtualCreateStorage","virtualCreateScheduler","virtualSandboxedPlugins","virtualMediaProviders","createRequestScopedDb","virtualCreateRequestScopedDb","virtualBuildTime"],"sources":["../../src/astro/middleware.ts"],"sourcesContent":["/**\n * EmDash middleware\n *\n * Thin wrapper that initializes EmDashRuntime and attaches it to locals.\n * All heavy lifting happens in EmDashRuntime.\n */\n\nimport type { APIContext } from \"astro\";\nimport { defineMiddleware } from \"astro:middleware\";\nimport type { Kysely } from \"kysely\";\n// Import from virtual modules (populated by integration at build time)\n// @ts-ignore - virtual module\nimport { buildTime as virtualBuildTime } from \"virtual:emdash/build\";\n// @ts-ignore - virtual module\nimport virtualConfig from \"virtual:emdash/config\";\n// @ts-ignore - virtual module\nimport {\n\tcreateCoalescingDialect as virtualCreateCoalescingDialect,\n\tcreateDialect as virtualCreateDialect,\n\tcreateRequestScopedDb as virtualCreateRequestScopedDb,\n} from \"virtual:emdash/dialect\";\nimport type { RequestScopedDbOpts } from \"virtual:emdash/dialect\";\n// @ts-ignore - virtual module\nimport { mediaProviders as virtualMediaProviders } from \"virtual:emdash/media-providers\";\n// @ts-ignore - virtual module\nimport { plugins as virtualPlugins } from \"virtual:emdash/plugins\";\n// @ts-ignore - virtual module\nimport * as virtualSandboxRunnerModule from \"virtual:emdash/sandbox-runner\";\n// @ts-ignore - virtual module\nimport { sandboxedPlugins as virtualSandboxedPlugins } from \"virtual:emdash/sandboxed-plugins\";\n// @ts-ignore - virtual module\nimport { createScheduler as virtualCreateScheduler } from \"virtual:emdash/scheduler\";\n// @ts-ignore - virtual module\nimport { createStorage as virtualCreateStorage } from \"virtual:emdash/storage\";\n\nimport { after } from \"../after.js\";\nimport { apiError } from \"../api/error.js\";\nimport { EmDashConfigurationError } from \"../config/errors.js\";\nimport {\n\tcreateRecorder,\n\tflushRecorder,\n\tisInstrumentationEnabled,\n} from \"../database/instrumentation.js\";\nimport {\n\tisMigrationRequiredError,\n\tPendingMigrationsError,\n\tresolveRuntimeMigrationMode,\n\ttype RuntimeMigrationMode,\n} from \"../database/migrations/policy.js\";\nimport { markRequestScopedDb } from \"../database/request-scoped.js\";\nimport { createDeferredTaskTracker } from \"../deferred-tasks.js\";\nimport {\n\tDB_INIT_DEADLINE_MS,\n\tEmDashRuntime,\n\ttype RuntimeDependencies,\n\ttype SandboxedPluginEntry,\n\ttype MediaProviderEntry,\n\ttype CreateSchedulerFn,\n} from \"../emdash-runtime.js\";\nimport { setI18nConfig } from \"../i18n/config.js\";\nimport type { Database, Storage } from \"../index.js\";\nimport { createPublicMediaUrlResolver } from \"../media/url.js\";\nimport { getLastContentWriteAt } from \"../object-cache/index.js\";\nimport type { PluginContentCacheInvalidator } from \"../plugins/routes.js\";\nimport type { SandboxRunnerFactory } from \"../plugins/sandbox/types.js\";\nimport type { ResolvedPlugin } from \"../plugins/types.js\";\nimport { invalidateUrlPatternCache } from \"../query.js\";\nimport {\n\tcreateRequestMetrics,\n\tgetRequestContext,\n\ttype RequestMetrics,\n\trunWithContext,\n} from \"../request-context.js\";\nimport type { PublishedRef } from \"../scheduled-publish.js\";\nimport { parseCollectionSitemapName } from \"../seo/sitemap-name.js\";\nimport { EmDashStorageError } from \"../storage/types.js\";\nimport { isMissingTableError } from \"../utils/db-errors.js\";\nimport { createInitLock, type InitLock, initWithLock } from \"../utils/init-lock.js\";\nimport type { EmDashConfig } from \"./integration/runtime.js\";\nimport {\n\tASTRO_COOKIES_SYMBOL,\n\tcoordinateScopedDbLifecycle,\n\tfinishScoped,\n\trequestEndedAuthenticated,\n} from \"./middleware/scoped-db.js\";\nimport { wrapBodyForStreamMetrics } from \"./middleware/stream-end-metrics.js\";\nimport { prefetchLayoutData } from \"./prefetch.js\";\nimport {\n\tcreatePublicPluginApiRouteHandler,\n\tgetPublicPluginRouteMeta,\n} from \"./public-plugin-api-routes.js\";\nimport { resolveSessionUser } from \"./session-user.js\";\nimport type { EmDashHandlers } from \"./types.js\";\n\n// Public type for withEmDashRuntime() consumers (queue/scheduled handlers).\nexport type { EmDashRuntime } from \"../emdash-runtime.js\";\n\n/**\n * Runtime init lock reclaim deadline. Must be strictly larger than the db\n * init deadline: this lock wraps EmDashRuntime.create() → getDatabase() →\n * the db init lock, and equal deadlines would let this outer lock reclaim\n * (spawning a second cron scheduler and sandbox runner) while the inner db\n * init is legitimately still working through a contended migration.\n */\nconst RUNTIME_INIT_DEADLINE_MS = DB_INIT_DEADLINE_MS + 15_000;\n\n/**\n * Throttle for the anonymous-path runtime-init failure log. While a site is\n * stuck (e.g. a failing migration in its backoff window, #1744) every\n * anonymous request lands in that catch; one line per interval per isolate\n * keeps the failure visible without flooding logs on a busy site. Plain\n * module state (not globalThis): a duplicated SSR chunk just means an extra\n * log line, which is harmless.\n */\nconst RUNTIME_INIT_ERROR_LOG_INTERVAL_MS = 30_000;\nlet lastRuntimeInitErrorLogAt = 0;\n\n/**\n * Whether we've verified the database has been set up.\n * On a fresh deployment the first request may hit a public page, bypassing\n * runtime init. Without this check, template helpers like getSiteSettings()\n * would query an empty database and crash. Once verified (or once the runtime\n * has initialized via an admin/API request), this stays true for the worker's\n * lifetime.\n *\n * Stored on globalThis behind a Symbol key so the flag is a true singleton\n * even when the bundler duplicates this module across SSR chunks (same\n * pattern as request-cache.ts). A plain module-scoped `let` becomes multiple\n * independent variables, which would make the setup probe re-run far more\n * often than intended — and every re-run is another chance for a transient\n * DB error to be misread as \"fresh install\" and bounce visitors to setup.\n */\nconst SETUP_VERIFIED_KEY = Symbol.for(\"emdash:setup-verified\");\nconst setupFlagStore = globalThis as Record<symbol, unknown>;\n\nfunction isSetupVerified(): boolean {\n\treturn setupFlagStore[SETUP_VERIFIED_KEY] === true;\n}\n\nfunction markSetupVerified(): void {\n\tsetupFlagStore[SETUP_VERIFIED_KEY] = true;\n}\n\n/**\n * The runtime singleton and its init lock live on globalThis behind a\n * Symbol — same reasoning as SETUP_VERIFIED_KEY above: the bundler can\n * duplicate this module across SSR chunks, and a duplicated instance/lock\n * would mean multiple runtimes (each with its own cron scheduler) per\n * isolate, initializing and reclaiming independently.\n */\nconst RUNTIME_HOLDER_KEY = Symbol.for(\"emdash:runtime-holder\");\ninterface RuntimeHolder {\n\tinstance: EmDashRuntime | null;\n\tlock: InitLock;\n}\n\nfunction getRuntimeHolder(): RuntimeHolder {\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- globalThis symbol slot, written only below\n\tlet holder = setupFlagStore[RUNTIME_HOLDER_KEY] as RuntimeHolder | undefined;\n\tif (!holder) {\n\t\tholder = { instance: null, lock: createInitLock() };\n\t\tsetupFlagStore[RUNTIME_HOLDER_KEY] = holder;\n\t}\n\treturn holder;\n}\n\n/** Whether i18n config has been initialized from the virtual module */\nlet i18nInitialized = false;\n\n/**\n * Get EmDash configuration from virtual module\n */\nfunction getConfig(): EmDashConfig | null {\n\tif (virtualConfig && typeof virtualConfig === \"object\") {\n\t\t// Initialize i18n config on first access (once per worker lifetime)\n\t\tif (!i18nInitialized) {\n\t\t\ti18nInitialized = true;\n\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- virtual module checked as object above\n\t\t\tconst config = virtualConfig as Record<string, unknown>;\n\t\t\tif (config.i18n && typeof config.i18n === \"object\") {\n\t\t\t\tsetI18nConfig(\n\t\t\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- runtime-checked above\n\t\t\t\t\tconfig.i18n as {\n\t\t\t\t\t\tdefaultLocale: string;\n\t\t\t\t\t\tlocales: string[];\n\t\t\t\t\t\tfallback?: Record<string, string>;\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tsetI18nConfig(null);\n\t\t\t}\n\t\t}\n\n\t\treturn virtualConfig;\n\t}\n\treturn null;\n}\n\n/**\n * Get plugins from virtual module\n */\nfunction getPlugins(): ResolvedPlugin[] {\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- virtual module import is untyped (@ts-ignore above)\n\treturn (virtualPlugins as ResolvedPlugin[]) || [];\n}\n\n/**\n * Build runtime dependencies from virtual modules\n */\nfunction buildDependencies(\n\tconfig: EmDashConfig,\n\tmigrationMode: RuntimeMigrationMode,\n): RuntimeDependencies {\n\t/* eslint-disable typescript-eslint/no-unsafe-type-assertion --\n\t The virtual:emdash/* imports above use @ts-ignore because tsgo/IDE\n\t resolution can't see virtual-modules.d.ts in every consumer setup,\n\t so they arrive as `any`. The casts here line each entry up with\n\t RuntimeDependencies's expected shape. The contract is enforced by\n\t the integration that populates these virtual modules. */\n\tconst sandboxModule = virtualSandboxRunnerModule as Record<string, unknown>;\n\treturn {\n\t\tconfig,\n\t\tmigrationMode,\n\t\tplugins: getPlugins(),\n\t\tcreateDialect: virtualCreateDialect as (config: Record<string, unknown>) => unknown,\n\t\t// Optional: only batching backends (D1, DO) export this; undefined otherwise.\n\t\tcreateCoalescingDialect: virtualCreateCoalescingDialect as\n\t\t\t| ((config: Record<string, unknown>) => unknown)\n\t\t\t| undefined,\n\t\tcreateStorage: virtualCreateStorage as ((config: Record<string, unknown>) => Storage) | null,\n\t\tcreateScheduler: virtualCreateScheduler as CreateSchedulerFn | null,\n\t\tsandboxEnabled: sandboxModule.sandboxEnabled as boolean,\n\t\tsandboxBypassed: (sandboxModule.sandboxBypassed as boolean) ?? false,\n\t\tsandboxedPluginEntries: (virtualSandboxedPlugins as SandboxedPluginEntry[]) || [],\n\t\tcreateSandboxRunner: sandboxModule.createSandboxRunner as SandboxRunnerFactory | null,\n\t\tmediaProviderEntries: (virtualMediaProviders as MediaProviderEntry[]) || [],\n\t};\n\t/* eslint-enable typescript-eslint/no-unsafe-type-assertion */\n}\n\n/**\n * Get or create the runtime instance.\n *\n * When `initTimings` is provided, any timing samples recorded during a\n * genuine cold init are appended. Subsequent warm calls (hitting the\n * cached instance) push nothing — callers should treat an empty array\n * as \"warm, nothing to report\".\n */\nasync function getRuntime(\n\tconfig: EmDashConfig,\n\tmigrationMode: RuntimeMigrationMode,\n\tinitTimings?: Array<{ name: string; dur: number; desc?: string }>,\n): Promise<EmDashRuntime> {\n\t// Waiters poll rather than awaiting the initializing request's promise —\n\t// workerd flags cross-request promise resolution (warnings + potential\n\t// hangs). If the initializing request is cancelled mid-create (client\n\t// disconnect tears down its continuation, skipping any `finally`), the\n\t// anchored init keeps running under waitUntil and populates the cache;\n\t// failing that, the stale lock is reclaimed after a deadline instead of\n\t// hanging every subsequent request in the isolate until eviction.\n\tconst holder = getRuntimeHolder();\n\treturn initWithLock(\n\t\tholder.lock,\n\t\t() => holder.instance,\n\t\tasync (isCurrentClaim) => {\n\t\t\tconst deps = buildDependencies(config, migrationMode);\n\t\t\tconst runtime = await EmDashRuntime.create(deps, initTimings);\n\t\t\tif (isCurrentClaim()) {\n\t\t\t\tholder.instance = runtime;\n\t\t\t} else {\n\t\t\t\t// This init was reclaimed mid-flight (it ran past the deadline\n\t\t\t\t// and a waiter started its own). Don't overwrite the\n\t\t\t\t// reclaimer's published runtime, and stop this one's cron\n\t\t\t\t// scheduler so it doesn't keep firing unreferenced. The\n\t\t\t\t// runtime is still returned — it's fully functional for the\n\t\t\t\t// request that built it.\n\t\t\t\truntime.stopCron().catch((error: unknown) => {\n\t\t\t\t\tconsole.error(\"[emdash] failed to stop superseded runtime's cron:\", error);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn runtime;\n\t\t},\n\t\t{\n\t\t\tdeadlineMs: RUNTIME_INIT_DEADLINE_MS,\n\t\t\tanchor: (promise) => after(() => promise),\n\t\t},\n\t);\n}\n\n/**\n * Run scheduled maintenance (cron tasks, scheduled publishing, system cleanup)\n * outside any request. Resolves the runtime from the build-time virtual config\n * and the cached singleton — the same instance request handlers use.\n *\n * Wired into a platform heartbeat that is not a request: the Cloudflare Worker's\n * `scheduled()` handler (Cron Trigger) calls this. On Node the runtime's own\n * timer-based scheduler already drives the same work, so this isn't needed there.\n *\n * Returns the content promoted by the publishing sweep so the caller can purge\n * edge-cache tags for it. `onPublished` (optional) is awaited after each\n * collection's batch so the caller can invalidate edge-cache tags incrementally\n * rather than only after the whole sweep.\n */\nexport async function runScheduledTasks(\n\toptions: {\n\t\tonPublished?: (refs: PublishedRef[]) => Promise<void>;\n\t\tinvalidateContentCache?: PluginContentCacheInvalidator;\n\t} = {},\n): Promise<{ published: PublishedRef[] }> {\n\tconst config = getConfig();\n\tif (!config) return { published: [] };\n\treturn runOutsideRequest(config, (runtime) => runtime.runScheduledTasks(options));\n}\n\n/**\n * Run a callback against the EmDash runtime outside any HTTP request — from a\n * Cloudflare Queue consumer, a `scheduled()` handler, or any other\n * platform-event handler that has no request and therefore no `locals.emdash`.\n *\n * Resolves the same cached runtime singleton request handlers use, so hooks,\n * plugin state, and storage all behave exactly as they do during a request.\n * A typical queue consumer finishes a job by calling back into a plugin route:\n *\n * ```ts\n * import { withEmDashRuntime } from \"emdash/middleware\";\n *\n * async function queue(batch: MessageBatch) {\n * \tawait withEmDashRuntime(async (runtime) => {\n * \t\tfor (const message of batch.messages) {\n * \t\t\tawait runtime.handlePluginApiRoute(\n * \t\t\t\t\"my-plugin\",\n * \t\t\t\t\"POST\",\n * \t\t\t\t\"/finishJob\",\n * \t\t\t\tnew Request(\"https://internal/\", {\n * \t\t\t\t\tmethod: \"POST\",\n * \t\t\t\t\tbody: JSON.stringify(message.body),\n * \t\t\t\t}),\n * \t\t\t);\n * \t\t}\n * \t});\n * }\n * ```\n *\n * Server-only and fully trusted: the callback gets the raw runtime with no\n * auth or CSRF checks, same trust level as plugin cron. Never expose it to\n * user input without validating that input yourself.\n *\n * Throws when EmDash is not configured (no `emdash()` Astro integration).\n */\nexport async function withEmDashRuntime<T>(\n\trun: (runtime: EmDashRuntime) => T | Promise<T>,\n): Promise<T> {\n\tconst config = getConfig();\n\tif (!config) {\n\t\tthrow new Error(\n\t\t\t\"EmDash is not configured — withEmDashRuntime() requires the emdash() Astro integration.\",\n\t\t);\n\t}\n\treturn runOutsideRequest(config, async (runtime) => run(runtime));\n}\n\n/**\n * Shared plumbing for request-free entry points (`runScheduledTasks`,\n * `withEmDashRuntime`): resolve the runtime singleton, then run the callback\n * under an event-scoped db when the adapter needs one.\n *\n * Connection-backed adapters (e.g. Postgres over Hyperdrive) cannot reuse\n * the per-isolate singleton from a platform event: its socket belongs to the\n * request that opened it, and workerd rejects cross-event I/O. Open an\n * event-scoped connection and run the callback under it in ALS — the\n * runtime's db getter, the cron executor, and plugin contexts all resolve\n * the connection from ALS — then close it when required. Stateless adapters\n * that need primary routing can return a close-less scope; adapters with no\n * event scoping return null and keep using the singleton.\n */\nasync function runOutsideRequest<T>(\n\tconfig: EmDashConfig,\n\tfn: (runtime: EmDashRuntime) => Promise<T>,\n): Promise<T> {\n\tconst migrationMode = resolveConfiguredMigrationMode(config);\n\tif (getRequestContext()) {\n\t\tconst runtime = await getRuntime(config, migrationMode);\n\t\treturn runOutsideRequestWithRuntime(config, runtime, fn);\n\t}\n\n\tconst deferredTasks = createDeferredTaskTracker(() => {});\n\tconst context = {\n\t\teditMode: false,\n\t\tmetrics: createRequestMetrics(performance.now()),\n\t\tdeferredTasks,\n\t};\n\treturn runWithContext(context, async () => {\n\t\tconst runtime = await (async () => {\n\t\t\ttry {\n\t\t\t\treturn await getRuntime(config, migrationMode);\n\t\t\t} finally {\n\t\t\t\tdeferredTasks.settle();\n\t\t\t\tawait deferredTasks.settled;\n\t\t\t}\n\t\t})();\n\t\treturn runOutsideRequestWithRuntime(config, runtime, fn);\n\t});\n}\n\nasync function runOutsideRequestWithRuntime<T>(\n\tconfig: EmDashConfig,\n\truntime: EmDashRuntime,\n\tfn: (runtime: EmDashRuntime) => Promise<T>,\n): Promise<T> {\n\tconst scoped = createRequestScopedDb({\n\t\tconfig: config.database?.config,\n\t\tisAuthenticated: false,\n\t\t// Event handlers publish, clean up, or run jobs — a write workload —\n\t\t// so a connection-backed adapter routes them to the primary.\n\t\tisWrite: true,\n\t\tcanUseCachedBinding: false,\n\t\tcookies: NOOP_COOKIE_JAR,\n\t\turl: CRON_EVENT_URL,\n\t});\n\tif (!scoped) {\n\t\t// This adapter needs no event-specific routing or connection.\n\t\treturn fn(runtime);\n\t}\n\tconst { closed, deferredTasks, lifecycle } = coordinateScopedDbLifecycle(scoped);\n\n\tconst parent = getRequestContext();\n\tconst ctx = parent\n\t\t? { ...parent, db: scoped.db, deferredTasks }\n\t\t: {\n\t\t\t\teditMode: false,\n\t\t\t\tdb: scoped.db,\n\t\t\t\tmetrics: createRequestMetrics(performance.now()),\n\t\t\t\tdeferredTasks,\n\t\t\t};\n\ttry {\n\t\treturn await runWithContext(ctx, () => fn(runtime));\n\t} finally {\n\t\t// Guard both so a throw in teardown can't mask the callback result or\n\t\t// skip lifecycle settlement and leak the connection.\n\t\ttry {\n\t\t\tlifecycle.commit();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[emdash] event-scoped db commit failed:\", error);\n\t\t}\n\t\ttry {\n\t\t\tlifecycle.close?.();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[emdash] event-scoped db close failed:\", error);\n\t\t}\n\t\tawait closed;\n\t}\n}\n\n/**\n * A cookie jar that reads nothing and writes nothing, for request-scoped db\n * adapters invoked outside an HTTP request (the Cron Trigger sweep). Connection\n * adapters like Hyperdrive ignore cookies entirely; the D1 session adapter\n * reads/writes a bookmark cookie, but cron never reaches that path (it has no\n * `close()`), so the no-ops are never observed.\n */\nconst NOOP_COOKIE_JAR = {\n\tget: () => undefined,\n\tset: () => {},\n};\n\n/**\n * Synthetic URL for the cron sweep's request-scoped db opts. Only the D1\n * session adapter inspects `url` (for cookie `secure`), and cron doesn't take\n * that path, so the value is never used — it exists to satisfy the contract.\n */\nconst CRON_EVENT_URL = new URL(\"https://cron.emdash.internal/\");\n\nfunction resolveConfiguredMigrationMode(config: EmDashConfig): RuntimeMigrationMode {\n\tconst processOverride =\n\t\ttypeof process !== \"undefined\" && process.env ? process.env.EMDASH_MIGRATIONS_MODE : undefined;\n\tconst importMetaOverride = import.meta.env.EMDASH_MIGRATIONS_MODE;\n\treturn resolveRuntimeMigrationMode(config.migrations, {\n\t\tdev: import.meta.env.DEV,\n\t\toverride: processOverride ?? importMetaOverride,\n\t});\n}\n\nfunction pendingMigrationsResponse(error: PendingMigrationsError): Response {\n\tconsole.error(\"[emdash] database migrations are pending:\", error.pending.join(\", \"));\n\treturn migrationRequiredResponse();\n}\n\nfunction migrationRequiredErrorResponse(error: unknown): Response {\n\tif (error instanceof PendingMigrationsError) return pendingMigrationsResponse(error);\n\tif (Date.now() - lastRuntimeInitErrorLogAt >= RUNTIME_INIT_ERROR_LOG_INTERVAL_MS) {\n\t\tlastRuntimeInitErrorLogAt = Date.now();\n\t\tconsole.error(\n\t\t\t\"[emdash] database migrations are required:\",\n\t\t\terror instanceof Error ? error.message : error,\n\t\t);\n\t}\n\treturn migrationRequiredResponse();\n}\n\nfunction migrationRequiredResponse(): Response {\n\treturn new Response(\n\t\t\"Database migrations are required. Apply the deployment migration manifest and retry.\",\n\t\t{\n\t\t\tstatus: 503,\n\t\t\theaders: { \"Retry-After\": \"60\" },\n\t\t},\n\t);\n}\n\nfunction unmigratedDatabaseResponse(): Response {\n\treturn new Response(\n\t\t'<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"robots\" content=\"noindex\"><title>Site unavailable</title></head><body><p>This site\\'s database has not been migrated yet. <a href=\"/_emdash/admin/setup\">Set up EmDash</a></p></body></html>',\n\t\t{\n\t\t\tstatus: 503,\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"text/html; charset=utf-8\",\n\t\t\t\t\"Cache-Control\": \"no-store\",\n\t\t\t\t\"Retry-After\": \"60\",\n\t\t\t},\n\t\t},\n\t);\n}\n\nfunction runtimeConfigurationErrorResponse(error: unknown, pathname: string): Response | null {\n\tif (!pathname.startsWith(\"/_emdash/api/\")) return null;\n\tif (error instanceof EmDashConfigurationError) {\n\t\treturn apiError(error.code, error.message, 500);\n\t}\n\tif (error instanceof EmDashStorageError && error.code === \"BINDING_NOT_FOUND\") {\n\t\treturn apiError(error.code, error.message, 500);\n\t}\n\treturn null;\n}\n\n/**\n * Baseline security headers applied to all responses.\n * Admin routes get additional headers (strict CSP) from auth middleware.\n */\nfunction finalizeResponse(\n\tresponse: Response,\n\tserverTimings?: Array<{ name: string; dur: number; desc?: string }>,\n): Response {\n\tconst res = new Response(response.body, response);\n\tconst astroCookies = Reflect.get(response, ASTRO_COOKIES_SYMBOL);\n\tif (astroCookies !== undefined) {\n\t\tReflect.set(res, ASTRO_COOKIES_SYMBOL, astroCookies);\n\t}\n\t// Set-if-absent so a host app that sets stricter values on its own routes\n\t// wins. The middleware registers `order: 'pre'` (#1282), so on the response\n\t// path it runs *after* host middleware; unconditional `set()` would clobber\n\t// the host's headers on every public route (#1393). Mirrors the CSP guard.\n\tif (!res.headers.has(\"X-Content-Type-Options\")) {\n\t\tres.headers.set(\"X-Content-Type-Options\", \"nosniff\");\n\t}\n\tif (!res.headers.has(\"Referrer-Policy\")) {\n\t\tres.headers.set(\"Referrer-Policy\", \"strict-origin-when-cross-origin\");\n\t}\n\tif (!res.headers.has(\"Permissions-Policy\")) {\n\t\tres.headers.set(\"Permissions-Policy\", \"camera=(), microphone=(), geolocation=(), payment=()\");\n\t}\n\tif (!res.headers.has(\"Content-Security-Policy\")) {\n\t\tres.headers.set(\"X-Frame-Options\", \"SAMEORIGIN\");\n\t}\n\tif (serverTimings && serverTimings.length > 0) {\n\t\tres.headers.set(\n\t\t\t\"Server-Timing\",\n\t\t\tserverTimings\n\t\t\t\t.map((t) => {\n\t\t\t\t\tconst dur = Math.round(t.dur);\n\t\t\t\t\treturn t.desc ? `${t.name};dur=${dur};desc=\"${t.desc}\"` : `${t.name};dur=${dur}`;\n\t\t\t\t})\n\t\t\t\t.join(\", \"),\n\t\t);\n\t}\n\treturn res;\n}\n\n/**\n * Append always-on counters (db.*, cache.*) to the Server-Timing list.\n *\n * dur values for `count`, `hit`, `miss` are integer counts — Server-Timing\n * spec only models milliseconds, but browsers show whatever number is given,\n * which is the convention most projects use for non-time samples.\n */\nfunction pushMetricsTimings(\n\ttimings: Array<{ name: string; dur: number; desc?: string }>,\n\tmetrics: RequestMetrics,\n): void {\n\tif (metrics.dbCount > 0) {\n\t\ttimings.push({ name: \"db.total\", dur: metrics.dbTotalMs, desc: \"DB total\" });\n\t\ttimings.push({ name: \"db.count\", dur: metrics.dbCount, desc: \"Query count\" });\n\t\tif (metrics.dbFirstOffset !== null) {\n\t\t\ttimings.push({ name: \"db.first\", dur: metrics.dbFirstOffset, desc: \"First query at\" });\n\t\t}\n\t\tif (metrics.dbLastOffset !== null) {\n\t\t\ttimings.push({ name: \"db.last\", dur: metrics.dbLastOffset, desc: \"Last query at\" });\n\t\t}\n\t}\n\tif (metrics.rpcCount > 0) {\n\t\ttimings.push({ name: \"rpc.count\", dur: metrics.rpcCount, desc: \"DB round trips\" });\n\t}\n\tif (metrics.cacheHits + metrics.cacheMisses > 0) {\n\t\ttimings.push({ name: \"cache.hit\", dur: metrics.cacheHits, desc: \"Cache hits\" });\n\t\ttimings.push({ name: \"cache.miss\", dur: metrics.cacheMisses, desc: \"Cache misses\" });\n\t}\n}\n\n/** Public routes that require the runtime (sitemap, robots.txt, etc.) */\nconst PUBLIC_RUNTIME_ROUTES = new Set([\"/sitemap.xml\", \"/robots.txt\"]);\nconst SITEMAP_COLLECTION_RE = /^\\/sitemap-([^/]+)\\.xml$/;\n\n/** Whether `pathname` is a per-collection sitemap a collection could have. */\nfunction isCollectionSitemapPath(pathname: string): boolean {\n\tconst match = SITEMAP_COLLECTION_RE.exec(pathname);\n\treturn match !== null && parseCollectionSitemapName(match[1]!) !== null;\n}\n\nfunction isImageEndpointRequest(context: APIContext): boolean {\n\tconst route = virtualConfig?.imageEndpointRoute;\n\treturn typeof route === \"string\" && context.routePattern === route;\n}\n\n/** The runtime's storage adapter, or null when none is configured or it cannot be created. */\nfunction tryGetStorage(config: EmDashConfig, migrationMode: RuntimeMigrationMode): Storage | null {\n\ttry {\n\t\treturn EmDashRuntime.getStorage(buildDependencies(config, migrationMode));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Run an image endpoint request on the adapter's request-scoped db. Anything\n * on its path that queries (host middleware, the redirect middleware under a\n * custom endpoint route) must not fall back to the per-isolate singleton: a\n * request-bound connection (pg over Hyperdrive) reused by another request fails\n * or hangs on workerd's cross-request I/O guard. A signed-in request also gets\n * the db as `locals.emdash.db`, which the auth middleware resolves `locals.user`\n * with.\n *\n * The adapter's `commit()` is skipped: on D1 it sets the bookmark cookie, and a\n * response that sets a cookie is never stored by Workers Cache. This assumes\n * nothing on the image path writes data the client must read back; the\n * bookmark it sent still covers its earlier writes.\n */\nasync function runImageRequest(\n\tconfig: EmDashConfig,\n\tcontext: APIContext,\n\timageLocals: EmDashHandlers,\n\tsignedIn: boolean,\n\tmetrics: RequestMetrics,\n\tnext: () => Promise<Response>,\n): Promise<Response> {\n\tconst scoped = createRequestScopedDb({\n\t\tconfig: config.database?.config,\n\t\tisAuthenticated: signedIn,\n\t\tisWrite: false,\n\t\tcanUseCachedBinding: false,\n\t\tcookies: context.cookies,\n\t\turl: context.url,\n\t});\n\tif (!scoped) {\n\t\tif (signedIn) {\n\t\t\ttry {\n\t\t\t\tconst { getDb } = await import(\"../loader.js\");\n\t\t\t\timageLocals.db = await getDb();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"[emdash] image request could not open the database:\", error);\n\t\t\t}\n\t\t}\n\t\treturn finalizeResponse(await next());\n\t}\n\tif (signedIn) imageLocals.db = scoped.db;\n\tconst { deferredTasks, lifecycle } = coordinateScopedDbLifecycle({ ...scoped, commit: () => {} });\n\tconst parent = getRequestContext();\n\tconst ctx = parent\n\t\t? { ...parent, db: scoped.db, deferredTasks }\n\t\t: { editMode: false, db: scoped.db, metrics, deferredTasks };\n\treturn runWithContext(ctx, () =>\n\t\tfinishScoped(lifecycle, async () => finalizeResponse(await next())),\n\t);\n}\n\n/**\n * Ask the configured database adapter for a per-request scoped Kysely. The\n * adapter encapsulates any per-request semantics (D1 sessions, read-replica\n * routing, bookmark cookies, etc.); core just forwards the cookie jar and\n * request flags, registers the returned handle as a view of the configured\n * database, and wraps next() in ALS if a scope was returned.\n */\nfunction createRequestScopedDb(\n\topts: RequestScopedDbOpts,\n): { db: Kysely<Database>; commit: () => void; close?: () => void } | null {\n\tif (typeof virtualCreateRequestScopedDb !== \"function\") return null;\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- adapter returns Kysely<unknown>; cast to Database since core owns that type\n\tconst fn = virtualCreateRequestScopedDb as (\n\t\to: RequestScopedDbOpts,\n\t) => { db: Kysely<Database>; commit: () => void; close?: () => void } | null;\n\tconst scoped = fn(opts);\n\tif (scoped) markRequestScopedDb(scoped.db);\n\treturn scoped;\n}\n\nconst buildDate = virtualBuildTime ? new Date(virtualBuildTime) : null;\n\n/**\n * Fold the build timestamp into the route cache validator.\n *\n * `CacheHint.lastModified` describes the content, but the response also depends\n * on the build: `/_astro/*` names are content-hashed, and a deployment only\n * serves its own. Without the build dimension a code-only deploy answers a\n * returning visitor's conditional request with 304, leaving them on HTML whose\n * assets 404.\n *\n * Only a route that set a content validator gets the build dimension. The build\n * alone does not move when content is published, so as a page's only validator\n * it would answer every returning visitor with 304 until the next deploy.\n *\n * Prerendered pages are served by the host's static layer, which manages its\n * own validators — only on-demand responses need the build dimension.\n *\n * Only forward moves are covered. `Last-Modified` expresses newer, not\n * different, so after a rollback the earlier build still answers a conditional\n * request with 304 and the browser stays on the newer build's HTML.\n *\n * Must run after next(), once the route has set its hint. Astro keeps the later\n * of two dates, so a route's own hint still wins when content is newer.\n * `Astro.cache.set(false)` also clears `lastModified`, so for an opted-out\n * route the guard skips the build `set()` below, which would re-enable caching.\n */\nfunction applyBuildValidator(context: APIContext): void {\n\tif (context.isPrerendered || !buildDate || !context.cache?.enabled) return;\n\tif (!context.cache.options.lastModified) return;\n\tcontext.cache.set({ lastModified: buildDate });\n}\n\nconst UNSHARED_CACHE_CONTROL_RE = /\\b(?:private|no-store)\\b/i;\n\n/**\n * Route rules match by path, so a rule can cover responses rendered for a\n * signed-in user or marked private by the route itself. Opting them out of the\n * route cache keeps the shared edge cache from serving them to anyone else.\n *\n * Must run after next(): the route and its layout call `cache.set()` while\n * rendering, which turns caching back on.\n */\nfunction keepUnsharedResponsesOutOfRouteCache(context: APIContext, response: Response): void {\n\tif (!context.cache?.enabled) return;\n\tif (\n\t\tcontext.locals.user ||\n\t\tUNSHARED_CACHE_CONTROL_RE.test(response.headers.get(\"Cache-Control\") ?? \"\")\n\t) {\n\t\tcontext.cache.set(false);\n\t}\n}\n\nexport const onRequest = defineMiddleware(async (context, next) => {\n\tconst { request, locals, cookies } = context;\n\tconst url = context.url;\n\n\t// Fast path: routes outside /_emdash/ that plugins inject (e.g.,\n\t// /.well-known/atproto-client-metadata.json) skip the entire runtime\n\t// init + middleware chain. External servers fetch these with tight\n\t// timeouts (~1-2s) so they must respond quickly even on cold starts.\n\tif (!url.pathname.startsWith(\"/_emdash\") && virtualConfig?.authProviders) {\n\t\tconst isPluginFastRoute = virtualConfig.authProviders.some(\n\t\t\t(p: { routes?: { pattern?: string }[] }) =>\n\t\t\t\tp.routes?.some((r: { pattern?: string }) => r.pattern && url.pathname === r.pattern),\n\t\t);\n\t\tif (isPluginFastRoute) {\n\t\t\treturn finalizeResponse(await next());\n\t\t}\n\t}\n\n\tconst queryRecorder = isInstrumentationEnabled()\n\t\t? createRecorder(url.pathname, request.method, request.headers.get(\"x-perf-phase\") ?? \"default\")\n\t\t: undefined;\n\n\tconst metrics = createRequestMetrics(performance.now());\n\n\tconst run = async (): Promise<Response> => {\n\t\tconst config = getConfig();\n\t\tconst migrationMode = config ? resolveConfiguredMigrationMode(config) : \"auto\";\n\t\t// Process /_emdash routes and public routes with an active session\n\t\t// (logged-in editors need the runtime for toolbar/visual editing on public pages)\n\t\tconst isEmDashRoute = url.pathname.startsWith(\"/_emdash\");\n\t\tconst isPublicRuntimeRoute =\n\t\t\tPUBLIC_RUNTIME_ROUTES.has(url.pathname) || isCollectionSitemapPath(url.pathname);\n\n\t\t// Check for edit mode cookie - editors viewing public pages need the runtime\n\t\t// so auth middleware can verify their session for visual editing\n\t\tconst hasEditCookie = cookies.get(\"emdash-edit-mode\")?.value === \"true\";\n\t\tconst hasPreviewToken = url.searchParams.has(\"_preview\");\n\n\t\t// Playground mode: the playground middleware stashes the per-session DO database\n\t\t// on locals.__playgroundDb. When present, use runWithContext() to make it\n\t\t// available to getDb() and the runtime's db getter via the correct ALS instance.\n\t\tconst playgroundDb = locals.__playgroundDb;\n\n\t\t// Read the Astro session user once up-front. Both the anonymous fast path\n\t\t// and the full doInit path need this, and the session store is network-backed\n\t\t// (KV / Durable Object) so we want to avoid re-fetching on the hot path.\n\t\t// Skipped entirely for:\n\t\t// - prerendered requests (no session at build time)\n\t\t// - requests without an `astro-session` cookie (no session to look up)\n\t\t// The cookie check matters on Cloudflare Workers, where Astro's session\n\t\t// backend is KV: calling session.get() on every anonymous public request\n\t\t// turns normal traffic into a flood of KV read misses. See #733.\n\t\tconst hasSessionCookie = cookies.get(\"astro-session\") !== undefined;\n\t\tconst sessionUser =\n\t\t\tcontext.isPrerendered || !hasSessionCookie ? null : await resolveSessionUser(context.session);\n\n\t\t// The image endpoint EmDash installed reads media bytes from storage and\n\t\t// nothing else, so it needs neither the setup probe nor runtime init.\n\t\tconst imageStorage =\n\t\t\tconfig && !playgroundDb && isImageEndpointRequest(context)\n\t\t\t\t? tryGetStorage(config, migrationMode)\n\t\t\t\t: null;\n\t\tif (imageStorage) {\n\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- partial object; the image endpoint reads only storage, the auth middleware db\n\t\t\tconst imageLocals = { storage: imageStorage } as EmDashHandlers;\n\t\t\tlocals.emdash = imageLocals;\n\t\t\treturn runImageRequest(config, context, imageLocals, !!sessionUser, metrics, next);\n\t\t}\n\n\t\t// Credentialed API requests (API tokens `ec_pat_*`, OAuth tokens\n\t\t// `ec_oat_*`, and other Bearer credentials) carry no `astro-session`\n\t\t// cookie, so `sessionUser` is null for them -- yet they still expect\n\t\t// read-your-writes. The auth middleware that resolves the token runs\n\t\t// *after* this one, so `locals.user` isn't populated here; detect the\n\t\t// credential directly on the request. Request-scoped adapters use this to\n\t\t// keep such requests on the primary/uncached connection (not a lagging\n\t\t// read replica or the Hyperdrive query cache).\n\t\tconst hasBearerAuth = (request.headers.get(\"authorization\") ?? \"\")\n\t\t\t.toLowerCase()\n\t\t\t.startsWith(\"bearer \");\n\t\tconst isWrite = request.method !== \"GET\" && request.method !== \"HEAD\";\n\t\tconst isAuthenticated = !!sessionUser || hasBearerAuth;\n\t\tconst endedAuthenticated = () => requestEndedAuthenticated(isAuthenticated, cookies);\n\t\tconst canUseCachedBinding =\n\t\t\t!isAuthenticated &&\n\t\t\t!isWrite &&\n\t\t\t!playgroundDb &&\n\t\t\t!isEmDashRoute &&\n\t\t\t!hasEditCookie &&\n\t\t\t!hasPreviewToken;\n\n\t\tif (!isEmDashRoute && !isPublicRuntimeRoute && !hasEditCookie && !hasPreviewToken) {\n\t\t\tif (!sessionUser && !playgroundDb) {\n\t\t\t\tconst timings: Array<{ name: string; dur: number; desc?: string }> = [];\n\t\t\t\tconst mwStart = performance.now();\n\n\t\t\t\t// On a fresh deployment the database may be completely empty.\n\t\t\t\t// Public pages call getSiteSettings() / getMenu() via getDb(), which\n\t\t\t\t// bypasses runtime init and would crash with \"no such table: options\".\n\t\t\t\t// Do a one-time lightweight probe using the same getDb() instance the\n\t\t\t\t// page will use: if the migrations table doesn't exist, no migrations\n\t\t\t\t// have ever run, and the page may only render once runtime init has\n\t\t\t\t// migrated the database.\n\t\t\t\t// Skip the probe when prerendering: the build database is legitimately\n\t\t\t\t// empty in CI, and a response derived from it would be baked into the\n\t\t\t\t// static page (session reads are already skipped for prerender above\n\t\t\t\t// for the same reason).\n\t\t\t\t// Runtime init starts before the probe so the two round trips overlap.\n\t\t\t\t// Sub-phase timings are populated only on the cold init. Warm\n\t\t\t\t// requests hit the cached runtime and leave this empty.\n\t\t\t\tconst initSubTimings: Array<{ name: string; dur: number; desc?: string }> = [];\n\t\t\t\tconst runtimeInitStart = performance.now();\n\t\t\t\tconst runtimeInit = config ? getRuntime(config, migrationMode, initSubTimings) : undefined;\n\t\t\t\t// Awaited below unless the probe fails; then it settles in the background.\n\t\t\t\truntimeInit?.catch(() => {});\n\n\t\t\t\tlet unmigrated = false;\n\t\t\t\tlet probeFailed = false;\n\t\t\t\tif (migrationMode === \"auto\" && !isSetupVerified() && !context.isPrerendered) {\n\t\t\t\t\tconst t0 = performance.now();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { getDb } = await import(\"../loader.js\");\n\t\t\t\t\t\tconst db = await getDb();\n\t\t\t\t\t\tawait db.selectFrom(\"_emdash_migrations\").selectAll().limit(1).execute();\n\t\t\t\t\t\tmarkSetupVerified();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (isMissingTableError(error)) {\n\t\t\t\t\t\t\tunmigrated = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Any other failure (transient D1/replica error, timeout, cold-start\n\t\t\t\t\t\t\t// race, locked SQLite) must NOT be read as \"fresh install\". Leave the\n\t\t\t\t\t\t\t// flag unset so a later request can re-verify, and fall through to\n\t\t\t\t\t\t\t// render the page normally. Unless a runtime is already running,\n\t\t\t\t\t\t\t// don't wait for runtime init on this request: it connects to the\n\t\t\t\t\t\t\t// same database and would make the visitor wait through a second\n\t\t\t\t\t\t\t// timeout. getRuntime anchors it with after(), so it can still\n\t\t\t\t\t\t\t// finish for later requests.\n\t\t\t\t\t\t\tprobeFailed = !getRuntimeHolder().instance;\n\t\t\t\t\t\t\tconsole.error(\"Setup probe failed (non-fatal):\", error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttimings.push({ name: \"setup\", dur: performance.now() - t0, desc: \"Setup probe\" });\n\t\t\t\t}\n\n\t\t\t\t// Wait for the runtime for page:metadata and page:fragments hooks.\n\t\t\t\t// The runtime is a cached singleton — after the first request,\n\t\t\t\t// getRuntime() is just a null-check. This enables SEO plugins to\n\t\t\t\t// contribute meta tags for all visitors, not just logged-in editors,\n\t\t\t\t// except on a request whose setup probe just failed.\n\t\t\t\tif (runtimeInit && !probeFailed) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst runtime = await runtimeInit;\n\t\t\t\t\t\tmarkSetupVerified();\n\t\t\t\t\t\tconst handlePublicPluginApiRoute = createPublicPluginApiRouteHandler(runtime);\n\t\t\t\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- partial object; getPageRuntime() only checks for the page-contribution methods\n\t\t\t\t\t\tlocals.emdash = {\n\t\t\t\t\t\t\thandlePublicPluginApiRoute,\n\t\t\t\t\t\t\tgetPublicPluginRouteMeta: (pluginId, path) =>\n\t\t\t\t\t\t\t\tgetPublicPluginRouteMeta(runtime, pluginId, path),\n\t\t\t\t\t\t\tcollectPageMetadata: runtime.collectPageMetadata.bind(runtime),\n\t\t\t\t\t\t\tcollectPageFragments: runtime.collectPageFragments.bind(runtime),\n\t\t\t\t\t\t\tgetPublicMediaUrl: createPublicMediaUrlResolver(runtime.storage),\n\t\t\t\t\t\t\tstorage: runtime.storage,\n\t\t\t\t\t\t} as EmDashHandlers;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (isMigrationRequiredError(error)) {\n\t\t\t\t\t\t\treturn migrationRequiredErrorResponse(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (migrationMode === \"manual\" && isMissingTableError(error)) {\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\t\"[emdash] database schema is unavailable in manual migration mode:\",\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn migrationRequiredResponse();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Non-fatal — EmDashHead falls back to base SEO contributions —\n\t\t\t\t\t\t// but log it (throttled): a persistently failing init (e.g. a\n\t\t\t\t\t\t// failing migration, #1744) is otherwise invisible on the\n\t\t\t\t\t\t// anonymous path, silently degrading every public page.\n\t\t\t\t\t\tif (Date.now() - lastRuntimeInitErrorLogAt >= RUNTIME_INIT_ERROR_LOG_INTERVAL_MS) {\n\t\t\t\t\t\t\tlastRuntimeInitErrorLogAt = Date.now();\n\t\t\t\t\t\t\tconsole.error(\"[emdash] runtime init failed (page renders without CMS data):\", error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttimings.push({\n\t\t\t\t\t\tname: \"rt\",\n\t\t\t\t\t\tdur: performance.now() - runtimeInitStart,\n\t\t\t\t\t\tdesc: \"Runtime init\",\n\t\t\t\t\t});\n\t\t\t\t\t// Append cold-only sub-phase timings so the breakdown is visible\n\t\t\t\t\t// in Server-Timing (rt.db, rt.fts, rt.plugins, rt.site,\n\t\t\t\t\t// rt.sandbox, rt.market, rt.hooks, rt.cron).\n\t\t\t\t\tfor (const sub of initSubTimings) timings.push(sub);\n\t\t\t\t}\n\t\t\t\tif (unmigrated && !locals.emdash) {\n\t\t\t\t\treturn finalizeResponse(unmigratedDatabaseResponse(), timings);\n\t\t\t\t}\n\n\t\t\t\t// Even on the anonymous fast path we ask the adapter for a per-request\n\t\t\t\t// scoped db. For D1 with read replication this routes anonymous reads\n\t\t\t\t// to the nearest replica; for other adapters it's a no-op.\n\t\t\t\tconst lastContentWriteAt =\n\t\t\t\t\tcanUseCachedBinding && config?.database?.needsLastContentWriteAt\n\t\t\t\t\t\t? await getLastContentWriteAt()\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst anonScoped = createRequestScopedDb({\n\t\t\t\t\tconfig: config?.database?.config,\n\t\t\t\t\tisAuthenticated,\n\t\t\t\t\tendedAuthenticated,\n\t\t\t\t\tisWrite,\n\t\t\t\t\tcanUseCachedBinding,\n\t\t\t\t\tcookies,\n\t\t\t\t\turl,\n\t\t\t\t\tlastContentWriteAt,\n\t\t\t\t});\n\t\t\t\tconst runAnon = async () => {\n\t\t\t\t\tconst t0 = performance.now();\n\t\t\t\t\tconst response = await next();\n\t\t\t\t\ttimings.push({ name: \"render\", dur: performance.now() - t0, desc: \"Page render\" });\n\t\t\t\t\ttimings.push({ name: \"mw\", dur: performance.now() - mwStart, desc: \"Total middleware\" });\n\t\t\t\t\tpushMetricsTimings(timings, metrics);\n\t\t\t\t\t// Server-Timing only sees pre-stream queries; the stream-end\n\t\t\t\t\t// wrapper (instrumentation-gated, no-op otherwise) emits the\n\t\t\t\t\t// final counters once the body finishes streaming.\n\t\t\t\t\treturn wrapBodyForStreamMetrics(finalizeResponse(response, timings));\n\t\t\t\t};\n\t\t\t\tif (anonScoped) {\n\t\t\t\t\tconst { deferredTasks, lifecycle } = coordinateScopedDbLifecycle(anonScoped);\n\t\t\t\t\tconst parent = getRequestContext();\n\t\t\t\t\tconst ctx = parent\n\t\t\t\t\t\t? { ...parent, db: anonScoped.db, deferredTasks }\n\t\t\t\t\t\t: { editMode: false, db: anonScoped.db, metrics, deferredTasks };\n\t\t\t\t\t// Eagerly warm site-global layout data (menus, widget areas,\n\t\t\t\t\t// taxonomy terms, settings) concurrently so the layout's\n\t\t\t\t\t// per-component reads overlap into ~one wall-clock round trip and\n\t\t\t\t\t// hit a warm cache instead of serializing. Four guards:\n\t\t\t\t\t// - request-scoped (remote) backend only -- this branch implies it;\n\t\t\t\t\t// pointless on synchronous local SQLite.\n\t\t\t\t\t// - an adapter that can overlap queries -- without that, Kysely's\n\t\t\t\t\t// connection mutex (D1 sessions without `coalesce`) queues the\n\t\t\t\t\t// prefetch ahead of the page's own first query.\n\t\t\t\t\t// - HTML navigations only -- feeds/sitemaps/JSON don't render the\n\t\t\t\t\t// layout, so prefetching their chrome is pure waste.\n\t\t\t\t\t// - the work starts immediately, then after() keeps both it and the\n\t\t\t\t\t// request-scoped connection alive until the response also finishes.\n\t\t\t\t\t// Gate on the CLIENT'S PREFERRED type (leading media range), not a\n\t\t\t\t\t// substring -- browser navigations lead with `text/html`, while feed\n\t\t\t\t\t// readers lead with `application/rss+xml` etc. and only list\n\t\t\t\t\t// `text/html;q=0.8` later, so a substring match would leak onto feeds.\n\t\t\t\t\tconst acceptsHtml = (request.headers.get(\"accept\") ?? \"\")\n\t\t\t\t\t\t.split(\",\", 1)[0]!\n\t\t\t\t\t\t.trim()\n\t\t\t\t\t\t.startsWith(\"text/html\");\n\t\t\t\t\treturn runWithContext(ctx, async () => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tacceptsHtml &&\n\t\t\t\t\t\t\tanonScoped.db.getExecutor().adapter.supportsMultipleConnections !== false\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tafter(() => prefetchLayoutData());\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// commit() persists per-request state (e.g. the D1 bookmark cookie)\n\t\t\t\t\t\t// before the response is returned, even if render throws; close()\n\t\t\t\t\t\t// waits for stream-end and request-owned deferred work. See finishScoped.\n\t\t\t\t\t\treturn finishScoped(lifecycle, runAnon);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn runAnon();\n\t\t\t}\n\t\t}\n\n\t\tif (!config) {\n\t\t\tconsole.error(\"EmDash: No configuration found\");\n\t\t\treturn finalizeResponse(await next());\n\t\t}\n\n\t\t// In playground mode, wrap the entire runtime init + request handling in\n\t\t// runWithContext so that getDatabase() and all init queries use the real\n\t\t// DO database via the same AsyncLocalStorage instance as the loader.\n\t\tconst doInit = async () => {\n\t\t\tconst timings: Array<{ name: string; dur: number; desc?: string }> = [];\n\t\t\tconst mwStart = performance.now();\n\n\t\t\ttry {\n\t\t\t\t// Get or create runtime. Sub-phase timings (rt.db, rt.fts, rt.plugins,\n\t\t\t\t// rt.site, rt.sandbox, rt.market, rt.hooks, rt.cron) are populated\n\t\t\t\t// only on the cold init — subsequent warm calls find the cached\n\t\t\t\t// instance and `initSubTimings` stays empty.\n\t\t\t\tconst initSubTimings: Array<{ name: string; dur: number; desc?: string }> = [];\n\t\t\t\tlet t0 = performance.now();\n\t\t\t\tconst runtime = await getRuntime(config, migrationMode, initSubTimings);\n\t\t\t\ttimings.push({ name: \"rt\", dur: performance.now() - t0, desc: \"Runtime init\" });\n\t\t\t\t// Forward any sub-phase samples so cold-start breakdown is visible\n\t\t\t\t// in Server-Timing. Each phase appears prefixed \"rt.\" to distinguish\n\t\t\t\t// from the aggregate \"rt\" timing above.\n\t\t\t\tfor (const sub of initSubTimings) timings.push(sub);\n\n\t\t\t\t// Runtime initialization has satisfied the effective migration policy.\n\t\t\t\tmarkSetupVerified();\n\n\t\t\t\t// The manifest is no longer pre-loaded here. It's admin-only\n\t\t\t\t// content that public/anonymous requests never read, and\n\t\t\t\t// loading it on every request put logged-out hot paths on\n\t\t\t\t// the same staleness budget as admin operations. Admin\n\t\t\t\t// routes call `emdash.getManifest()` directly.\n\n\t\t\t\t// Attach to locals for route handlers\n\t\t\t\tlocals.emdash = {\n\t\t\t\t\t// Content handlers\n\t\t\t\t\thandleContentList: runtime.handleContentList.bind(runtime),\n\t\t\t\t\thandleContentGet: runtime.handleContentGet.bind(runtime),\n\t\t\t\t\thandleContentAuthors: runtime.handleContentAuthors.bind(runtime),\n\t\t\t\t\thandleContentCreate: runtime.handleContentCreate.bind(runtime),\n\t\t\t\t\thandleContentUpdate: runtime.handleContentUpdate.bind(runtime),\n\t\t\t\t\thandleContentDelete: runtime.handleContentDelete.bind(runtime),\n\n\t\t\t\t\t// Trash handlers\n\t\t\t\t\thandleContentListTrashed: runtime.handleContentListTrashed.bind(runtime),\n\t\t\t\t\thandleContentRestore: runtime.handleContentRestore.bind(runtime),\n\t\t\t\t\thandleContentPermanentDelete: runtime.handleContentPermanentDelete.bind(runtime),\n\t\t\t\t\thandleContentCountTrashed: runtime.handleContentCountTrashed.bind(runtime),\n\t\t\t\t\thandleContentGetIncludingTrashed: runtime.handleContentGetIncludingTrashed.bind(runtime),\n\n\t\t\t\t\t// Duplicate handler\n\t\t\t\t\thandleContentDuplicate: runtime.handleContentDuplicate.bind(runtime),\n\n\t\t\t\t\t// Publishing & Scheduling handlers\n\t\t\t\t\thandleContentPublish: runtime.handleContentPublish.bind(runtime),\n\t\t\t\t\thandleContentUnpublish: runtime.handleContentUnpublish.bind(runtime),\n\t\t\t\t\thandleContentSchedule: runtime.handleContentSchedule.bind(runtime),\n\t\t\t\t\thandleContentUnschedule: runtime.handleContentUnschedule.bind(runtime),\n\t\t\t\t\thandleContentCountScheduled: runtime.handleContentCountScheduled.bind(runtime),\n\t\t\t\t\thandleContentDiscardDraft: runtime.handleContentDiscardDraft.bind(runtime),\n\t\t\t\t\thandleContentCompare: runtime.handleContentCompare.bind(runtime),\n\t\t\t\t\thandleContentTranslations: runtime.handleContentTranslations.bind(runtime),\n\n\t\t\t\t\t// Media handlers\n\t\t\t\t\thandleMediaList: runtime.handleMediaList.bind(runtime),\n\t\t\t\t\thandleMediaGet: runtime.handleMediaGet.bind(runtime),\n\t\t\t\t\thandleMediaUpload: runtime.handleMediaUpload.bind(runtime),\n\t\t\t\t\thandleMediaCreate: runtime.handleMediaCreate.bind(runtime),\n\t\t\t\t\thandleMediaRegisterUpload: runtime.handleMediaRegisterUpload.bind(runtime),\n\t\t\t\t\thandleMediaUpdate: runtime.handleMediaUpdate.bind(runtime),\n\t\t\t\t\t...(runtime.handleMediaReplaceMetadata\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\thandleMediaReplaceMetadata: runtime.handleMediaReplaceMetadata.bind(runtime),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {}),\n\t\t\t\t\thandleMediaDelete: runtime.handleMediaDelete.bind(runtime),\n\n\t\t\t\t\t// Comment administration\n\t\t\t\t\t...(runtime.handleCommentModerate\n\t\t\t\t\t\t? { handleCommentModerate: runtime.handleCommentModerate.bind(runtime) }\n\t\t\t\t\t\t: {}),\n\n\t\t\t\t\t// Revision handlers\n\t\t\t\t\thandleRevisionList: runtime.handleRevisionList.bind(runtime),\n\t\t\t\t\thandleRevisionGet: runtime.handleRevisionGet.bind(runtime),\n\t\t\t\t\thandleRevisionRestore: runtime.handleRevisionRestore.bind(runtime),\n\n\t\t\t\t\t// Plugin routes\n\t\t\t\t\thandlePluginApiRoute: runtime.handlePluginApiRoute.bind(runtime),\n\t\t\t\t\tgetPluginEditorExtension: runtime.getPluginEditorExtension.bind(runtime),\n\t\t\t\t\tgetPluginEditorDraftSchema: runtime.getPluginEditorDraftSchema.bind(runtime),\n\t\t\t\t\thandlePublicPluginApiRoute: createPublicPluginApiRouteHandler(runtime),\n\t\t\t\t\tgetPublicPluginRouteMeta: (pluginId, path) =>\n\t\t\t\t\t\tgetPublicPluginRouteMeta(runtime, pluginId, path),\n\t\t\t\t\tgetPluginRouteMeta: runtime.getPluginRouteMeta.bind(runtime),\n\t\t\t\t\tgetPluginMcpTools: runtime.getPluginMcpTools.bind(runtime),\n\t\t\t\t\tgetEnabledPluginMcpTools: runtime.getEnabledPluginMcpTools.bind(runtime),\n\t\t\t\t\tserializePluginMcpConsent: runtime.serializePluginMcpConsent.bind(runtime),\n\t\t\t\t\thandlePluginMcpTool: runtime.handlePluginMcpTool.bind(runtime),\n\t\t\t\t\thandlePluginMcpDenied: runtime.handlePluginMcpDenied.bind(runtime),\n\n\t\t\t\t\t// Media provider methods\n\t\t\t\t\tgetMediaProvider: runtime.getMediaProvider.bind(runtime),\n\t\t\t\t\tgetMediaProviderList: runtime.getMediaProviderList.bind(runtime),\n\n\t\t\t\t\t// Page contribution methods (for EmDashHead/EmDashBodyStart/EmDashBodyEnd)\n\t\t\t\t\tcollectPageMetadata: runtime.collectPageMetadata.bind(runtime),\n\t\t\t\t\tcollectPageFragments: runtime.collectPageFragments.bind(runtime),\n\n\t\t\t\t\t// Lazy search index health check — search endpoints call this\n\t\t\t\t\t// before querying so a crash-corrupted index gets repaired on\n\t\t\t\t\t// first use rather than stalling every cold start.\n\t\t\t\t\tensureSearchHealthy: runtime.ensureSearchHealthy.bind(runtime),\n\n\t\t\t\t\t// Direct access (for advanced use cases)\n\t\t\t\t\tstorage: runtime.storage,\n\t\t\t\t\t// Lazy getter, not an eager snapshot: `locals.emdash` is built\n\t\t\t\t\t// before the per-request scoped db is installed in ALS, so reading\n\t\t\t\t\t// `runtime.db` here would capture the per-isolate singleton. Routes\n\t\t\t\t\t// access `emdash.db` later, during the request, when the scoped db\n\t\t\t\t\t// is active. For a stateless binding (D1) the two are equivalent,\n\t\t\t\t\t// but for a request-bound connection (pg/Hyperdrive) the singleton\n\t\t\t\t\t// belongs to the cold-start request and reusing it from a warm\n\t\t\t\t\t// request hangs on workerd's cross-request I/O guard.\n\t\t\t\t\tget db() {\n\t\t\t\t\t\treturn runtime.db;\n\t\t\t\t\t},\n\t\t\t\t\tgetPublicMediaUrl: createPublicMediaUrlResolver(runtime.storage),\n\t\t\t\t\thooks: runtime.hooks,\n\t\t\t\t\temail: runtime.email,\n\t\t\t\t\tconfiguredPlugins: runtime.configuredPlugins,\n\t\t\t\t\tsandboxedPluginEntries: runtime.sandboxedPluginEntries,\n\n\t\t\t\t\t// Configuration (for checking database type, auth mode, etc.)\n\t\t\t\t\tconfig,\n\n\t\t\t\t\t// Lazy manifest accessor — admin-only consumers call this on\n\t\t\t\t\t// demand. `requestCached` inside `getManifest` dedupes within\n\t\t\t\t\t// a single request.\n\t\t\t\t\tgetManifest: runtime.getManifest.bind(runtime),\n\n\t\t\t\t\t// Clear the URL pattern cache after schema mutations that\n\t\t\t\t\t// affect collection URL patterns.\n\t\t\t\t\tinvalidateUrlPatternCache,\n\n\t\t\t\t\t// Sandbox runner (for marketplace plugin install/update)\n\t\t\t\t\tgetSandboxRunner: runtime.getSandboxRunner.bind(runtime),\n\t\t\t\t\tisSandboxBypassed: runtime.isSandboxBypassed.bind(runtime),\n\n\t\t\t\t\t// Sync marketplace plugin states (after install/update/uninstall)\n\t\t\t\t\tsyncMarketplacePlugins: runtime.syncMarketplacePlugins.bind(runtime),\n\n\t\t\t\t\t// Sync registry plugin states (after install/update/uninstall)\n\t\t\t\t\tsyncRegistryPlugins: runtime.syncRegistryPlugins.bind(runtime),\n\t\t\t\t\trunPluginInstallLifecycle: runtime.runPluginInstallLifecycle.bind(runtime),\n\t\t\t\t\trunPluginActivateLifecycle: runtime.runPluginActivateLifecycle.bind(runtime),\n\t\t\t\t\trunPluginUninstallLifecycle: runtime.runPluginUninstallLifecycle.bind(runtime),\n\t\t\t\t\tgetRuntimePluginSettingsSchema: runtime.getRuntimePluginSettingsSchema.bind(runtime),\n\n\t\t\t\t\t// Update plugin enabled/disabled status and rebuild hook pipeline\n\t\t\t\t\tsetPluginStatus: runtime.setPluginStatus.bind(runtime),\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tif (isMigrationRequiredError(error)) {\n\t\t\t\t\treturn migrationRequiredErrorResponse(error);\n\t\t\t\t}\n\t\t\t\tif (migrationMode === \"manual\" && isMissingTableError(error)) {\n\t\t\t\t\tconsole.error(\"[emdash] database schema is unavailable in manual migration mode:\", error);\n\t\t\t\t\treturn migrationRequiredResponse();\n\t\t\t\t}\n\t\t\t\tconsole.error(\"EmDash middleware error:\", error);\n\t\t\t\tconst configurationError = runtimeConfigurationErrorResponse(error, url.pathname);\n\t\t\t\tif (configurationError) return configurationError;\n\t\t\t}\n\n\t\t\t// Ask the adapter for a request-scoped db. When it returns one, we stash\n\t\t\t// it in ALS so the runtime's db getter and loader's getDb() pick it up,\n\t\t\t// then call commit() after next() so the adapter can persist any\n\t\t\t// per-request state (e.g. a D1 bookmark cookie for read-your-writes).\n\t\t\tconst lastContentWriteAt =\n\t\t\t\tcanUseCachedBinding && config?.database?.needsLastContentWriteAt\n\t\t\t\t\t? await getLastContentWriteAt()\n\t\t\t\t\t: undefined;\n\t\t\tconst scoped = createRequestScopedDb({\n\t\t\t\tconfig: config?.database?.config,\n\t\t\t\tisAuthenticated,\n\t\t\t\tendedAuthenticated,\n\t\t\t\tisWrite,\n\t\t\t\tcanUseCachedBinding,\n\t\t\t\tcookies: context.cookies,\n\t\t\t\turl,\n\t\t\t\tlastContentWriteAt,\n\t\t\t});\n\n\t\t\tconst renderAndFinalize = async () => {\n\t\t\t\tconst t0 = performance.now();\n\t\t\t\tconst response = await next();\n\t\t\t\ttimings.push({ name: \"render\", dur: performance.now() - t0, desc: \"Page render\" });\n\t\t\t\ttimings.push({ name: \"mw\", dur: performance.now() - mwStart, desc: \"Total middleware\" });\n\t\t\t\tpushMetricsTimings(timings, metrics);\n\t\t\t\t// Server-Timing only sees pre-stream queries; the stream-end\n\t\t\t\t// wrapper (instrumentation-gated, no-op otherwise) emits the\n\t\t\t\t// final counters once the body finishes streaming.\n\t\t\t\treturn wrapBodyForStreamMetrics(finalizeResponse(response, timings));\n\t\t\t};\n\n\t\t\tif (scoped) {\n\t\t\t\tconst { deferredTasks, lifecycle } = coordinateScopedDbLifecycle(scoped);\n\t\t\t\tconst parent = getRequestContext();\n\t\t\t\tconst ctx = parent\n\t\t\t\t\t? { ...parent, db: scoped.db, deferredTasks }\n\t\t\t\t\t: { editMode: false, db: scoped.db, metrics, deferredTasks };\n\t\t\t\treturn runWithContext(ctx, () =>\n\t\t\t\t\t// commit() persists per-request state (e.g. the D1 bookmark cookie)\n\t\t\t\t\t// before the response returns, even if render throws; close()\n\t\t\t\t\t// waits for stream-end and request-owned deferred work. See finishScoped.\n\t\t\t\t\tfinishScoped(lifecycle, renderAndFinalize),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn renderAndFinalize();\n\t\t}; // end doInit\n\n\t\tif (playgroundDb) {\n\t\t\t// Read the edit-mode cookie to determine if visual editing is active.\n\t\t\t// Default to false -- editing is opt-in via the playground toolbar toggle.\n\t\t\tconst editMode = context.cookies.get(\"emdash-edit-mode\")?.value === \"true\";\n\t\t\t// Playground DBs are per-session isolated instances whose schema is\n\t\t\t// independent of the configured one — flag as isolated so schema-\n\t\t\t// derived caches (manifest, taxonomy defs) rebuild against it.\n\t\t\tconst parent = getRequestContext();\n\t\t\tconst ctx = parent\n\t\t\t\t? { ...parent, editMode, db: playgroundDb, dbIsIsolated: true }\n\t\t\t\t: { editMode, db: playgroundDb, dbIsIsolated: true, metrics };\n\t\t\treturn runWithContext(ctx, doInit);\n\t\t}\n\t\treturn doInit();\n\t};\n\n\ttry {\n\t\tconst response = await runWithContext({ editMode: false, queryRecorder, metrics }, run);\n\t\tapplyBuildValidator(context);\n\t\tkeepUnsharedResponsesOutOfRouteCache(context, response);\n\t\treturn response;\n\t} finally {\n\t\t// Streamed responses defer the flush to stream end (see\n\t\t// wrapBodyForStreamMetrics) so the log captures queries issued while\n\t\t// the body renders. Only flush here for responses that were not\n\t\t// wrapped (no body: redirects, 304s, bodyless errors), where all\n\t\t// queries have already run by the time middleware returns.\n\t\tif (queryRecorder && !queryRecorder.deferredFlush) flushRecorder(queryRecorder);\n\t}\n});\n\nexport default onRequest;\n"],"mappings":"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"}
@@ -1,20 +1,20 @@
1
- import "../../../../../config-CvmjJcVw.mjs";
1
+ import "../../../../../config-Cs_AwWXI.mjs";
2
2
  import "../../../../../base64-BQBZwXCx.mjs";
3
- import "../../../../../url-Dn3IStq8.mjs";
4
- import "../../../../../types-D2NEXtgB.mjs";
5
- import "../../../../../errors-B4f4It-2.mjs";
6
- import "../../../../../errors-BOYNdIo3.mjs";
7
- import "../../../../../settings-Dd1uivmQ.mjs";
8
- import "../../../../../site-settings-DRHfX7bq.mjs";
9
- import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-CVWeIOku.mjs";
10
- import { n as parseBody, t as isParseError } from "../../../../../parse-DgQ2NABT.mjs";
11
- import "../../../../../redirects-BEVSRMa2.mjs";
12
- import { g as allowedDomainUpdateBody } from "../../../../../entry-lock-Df6-XhIu.mjs";
13
- import "../../../../../media-1WC65OCB.mjs";
14
- import "../../../../../comments-yiRFx3w5.mjs";
15
- import "../../../../../byline-fields-BLXZnX7N.mjs";
16
- import "../../../../../menus-BSzwObhV.mjs";
17
- import "../../../../../status-BFNdxzKc.mjs";
3
+ import "../../../../../url-DTfGDJhI.mjs";
4
+ import "../../../../../types-DwhEvIVb.mjs";
5
+ import "../../../../../errors-DlJwot7q.mjs";
6
+ import "../../../../../errors-BMaCpLeS.mjs";
7
+ import "../../../../../settings-B3ZmPF_8.mjs";
8
+ import "../../../../../site-settings-uPkW0e6o.mjs";
9
+ import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-CT2SsX5S.mjs";
10
+ import { n as parseBody, t as isParseError } from "../../../../../parse-2W-E2f7w.mjs";
11
+ import "../../../../../redirects-BA_TvtuH.mjs";
12
+ import { g as allowedDomainUpdateBody } from "../../../../../entry-lock-DDuWaAiP.mjs";
13
+ import "../../../../../media-qTTHVkls.mjs";
14
+ import "../../../../../comments-DVjWJm8X.mjs";
15
+ import "../../../../../byline-fields-B1qHvRps.mjs";
16
+ import "../../../../../menus-BI6oBXco.mjs";
17
+ import "../../../../../status-DSURZwKS.mjs";
18
18
  import "../../../../../api/schemas/index.mjs";
19
19
  import { Role, roleFromLevel } from "@emdash-cms/auth";
20
20
  import { createKyselyAdapter } from "@emdash-cms/auth/adapters/kysely";
@@ -1,20 +1,20 @@
1
- import "../../../../../config-CvmjJcVw.mjs";
1
+ import "../../../../../config-Cs_AwWXI.mjs";
2
2
  import "../../../../../base64-BQBZwXCx.mjs";
3
- import "../../../../../url-Dn3IStq8.mjs";
4
- import "../../../../../types-D2NEXtgB.mjs";
5
- import "../../../../../errors-B4f4It-2.mjs";
6
- import "../../../../../errors-BOYNdIo3.mjs";
7
- import "../../../../../settings-Dd1uivmQ.mjs";
8
- import "../../../../../site-settings-DRHfX7bq.mjs";
9
- import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-CVWeIOku.mjs";
10
- import { n as parseBody, t as isParseError } from "../../../../../parse-DgQ2NABT.mjs";
11
- import "../../../../../redirects-BEVSRMa2.mjs";
12
- import { h as allowedDomainCreateBody } from "../../../../../entry-lock-Df6-XhIu.mjs";
13
- import "../../../../../media-1WC65OCB.mjs";
14
- import "../../../../../comments-yiRFx3w5.mjs";
15
- import "../../../../../byline-fields-BLXZnX7N.mjs";
16
- import "../../../../../menus-BSzwObhV.mjs";
17
- import "../../../../../status-BFNdxzKc.mjs";
3
+ import "../../../../../url-DTfGDJhI.mjs";
4
+ import "../../../../../types-DwhEvIVb.mjs";
5
+ import "../../../../../errors-DlJwot7q.mjs";
6
+ import "../../../../../errors-BMaCpLeS.mjs";
7
+ import "../../../../../settings-B3ZmPF_8.mjs";
8
+ import "../../../../../site-settings-uPkW0e6o.mjs";
9
+ import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-CT2SsX5S.mjs";
10
+ import { n as parseBody, t as isParseError } from "../../../../../parse-2W-E2f7w.mjs";
11
+ import "../../../../../redirects-BA_TvtuH.mjs";
12
+ import { h as allowedDomainCreateBody } from "../../../../../entry-lock-DDuWaAiP.mjs";
13
+ import "../../../../../media-qTTHVkls.mjs";
14
+ import "../../../../../comments-DVjWJm8X.mjs";
15
+ import "../../../../../byline-fields-B1qHvRps.mjs";
16
+ import "../../../../../menus-BI6oBXco.mjs";
17
+ import "../../../../../status-DSURZwKS.mjs";
18
18
  import "../../../../../api/schemas/index.mjs";
19
19
  import { Role, roleFromLevel } from "@emdash-cms/auth";
20
20
  import { createKyselyAdapter } from "@emdash-cms/auth/adapters/kysely";
@@ -1,11 +1,11 @@
1
1
  import "../../../../../after-PcEvMY_6.mjs";
2
2
  import "../../../../../base64-BQBZwXCx.mjs";
3
- import "../../../../../types-D2NEXtgB.mjs";
4
- import "../../../../../errors-B4f4It-2.mjs";
5
- import "../../../../../errors-BOYNdIo3.mjs";
6
- import { a as unwrapResult, r as handleError, t as apiError } from "../../../../../error-CVWeIOku.mjs";
7
- import "../../../../../api-tokens-CdP49zVF.mjs";
8
- import { i as handleApiTokenRevoke } from "../../../../../api-tokens-Bx38ZCQp.mjs";
3
+ import "../../../../../types-DwhEvIVb.mjs";
4
+ import "../../../../../errors-DlJwot7q.mjs";
5
+ import "../../../../../errors-BMaCpLeS.mjs";
6
+ import { a as unwrapResult, r as handleError, t as apiError } from "../../../../../error-CT2SsX5S.mjs";
7
+ import "../../../../../api-tokens-C7l0GUAF.mjs";
8
+ import { i as handleApiTokenRevoke } from "../../../../../api-tokens-DQ9Ee-vP.mjs";
9
9
  import { Role } from "@emdash-cms/auth";
10
10
 
11
11
  //#region src/astro/routes/api/admin/api-tokens/[id].ts
@@ -1,12 +1,12 @@
1
1
  import "../../../../../after-PcEvMY_6.mjs";
2
2
  import "../../../../../base64-BQBZwXCx.mjs";
3
- import "../../../../../types-D2NEXtgB.mjs";
4
- import "../../../../../errors-B4f4It-2.mjs";
5
- import "../../../../../errors-BOYNdIo3.mjs";
6
- import { a as unwrapResult, r as handleError, t as apiError } from "../../../../../error-CVWeIOku.mjs";
7
- import { n as parseBody, t as isParseError } from "../../../../../parse-DgQ2NABT.mjs";
8
- import { s as isValidScope } from "../../../../../api-tokens-CdP49zVF.mjs";
9
- import { n as handleApiTokenCreate, r as handleApiTokenList } from "../../../../../api-tokens-Bx38ZCQp.mjs";
3
+ import "../../../../../types-DwhEvIVb.mjs";
4
+ import "../../../../../errors-DlJwot7q.mjs";
5
+ import "../../../../../errors-BMaCpLeS.mjs";
6
+ import { a as unwrapResult, r as handleError, t as apiError } from "../../../../../error-CT2SsX5S.mjs";
7
+ import { n as parseBody, t as isParseError } from "../../../../../parse-2W-E2f7w.mjs";
8
+ import { s as isValidScope } from "../../../../../api-tokens-C7l0GUAF.mjs";
9
+ import { n as handleApiTokenCreate, r as handleApiTokenList } from "../../../../../api-tokens-DQ9Ee-vP.mjs";
10
10
  import { z } from "zod";
11
11
  import { Role } from "@emdash-cms/auth";
12
12
 
@@ -1,11 +1,11 @@
1
1
  import "../../../../../../base64-BQBZwXCx.mjs";
2
- import "../../../../../../types-D2NEXtgB.mjs";
3
- import "../../../../../../byline-registry-dvt4N3xV.mjs";
4
- import "../../../../../../errors-B4f4It-2.mjs";
5
- import "../../../../../../errors-BOYNdIo3.mjs";
6
- import { a as unwrapResult, i as requireDb, t as apiError } from "../../../../../../error-CVWeIOku.mjs";
7
- import { o as requirePerm } from "../../../../../../authorize-DPFBGbE6.mjs";
8
- import { s as handleBylineFieldUsage } from "../../../../../../byline-fields-4ClDC88c.mjs";
2
+ import "../../../../../../types-DwhEvIVb.mjs";
3
+ import "../../../../../../byline-registry-BhzpO41z.mjs";
4
+ import "../../../../../../errors-DlJwot7q.mjs";
5
+ import "../../../../../../errors-BMaCpLeS.mjs";
6
+ import { a as unwrapResult, i as requireDb, t as apiError } from "../../../../../../error-CT2SsX5S.mjs";
7
+ import { o as requirePerm } from "../../../../../../authorize-CoDsRRp5.mjs";
8
+ import { s as handleBylineFieldUsage } from "../../../../../../byline-fields-vYd_4Q1e.mjs";
9
9
 
10
10
  //#region src/astro/routes/api/admin/byline-fields/[slug]/usage.ts
11
11
  const prerender = false;
@@ -1,24 +1,24 @@
1
- import "../../../../../config-CvmjJcVw.mjs";
1
+ import "../../../../../config-Cs_AwWXI.mjs";
2
2
  import "../../../../../base64-BQBZwXCx.mjs";
3
- import "../../../../../url-Dn3IStq8.mjs";
4
- import "../../../../../types-D2NEXtgB.mjs";
5
- import "../../../../../byline-registry-dvt4N3xV.mjs";
6
- import "../../../../../errors-B4f4It-2.mjs";
7
- import "../../../../../errors-BOYNdIo3.mjs";
8
- import "../../../../../settings-Dd1uivmQ.mjs";
9
- import "../../../../../site-settings-DRHfX7bq.mjs";
10
- import { a as unwrapResult, i as requireDb, t as apiError } from "../../../../../error-CVWeIOku.mjs";
11
- import { n as parseBody, t as isParseError } from "../../../../../parse-DgQ2NABT.mjs";
12
- import "../../../../../redirects-BEVSRMa2.mjs";
13
- import "../../../../../entry-lock-Df6-XhIu.mjs";
14
- import "../../../../../media-1WC65OCB.mjs";
15
- import "../../../../../comments-yiRFx3w5.mjs";
16
- import { a as bylineFieldUpdateBody } from "../../../../../byline-fields-BLXZnX7N.mjs";
17
- import "../../../../../menus-BSzwObhV.mjs";
18
- import "../../../../../status-BFNdxzKc.mjs";
3
+ import "../../../../../url-DTfGDJhI.mjs";
4
+ import "../../../../../types-DwhEvIVb.mjs";
5
+ import "../../../../../byline-registry-BhzpO41z.mjs";
6
+ import "../../../../../errors-DlJwot7q.mjs";
7
+ import "../../../../../errors-BMaCpLeS.mjs";
8
+ import "../../../../../settings-B3ZmPF_8.mjs";
9
+ import "../../../../../site-settings-uPkW0e6o.mjs";
10
+ import { a as unwrapResult, i as requireDb, t as apiError } from "../../../../../error-CT2SsX5S.mjs";
11
+ import { n as parseBody, t as isParseError } from "../../../../../parse-2W-E2f7w.mjs";
12
+ import "../../../../../redirects-BA_TvtuH.mjs";
13
+ import "../../../../../entry-lock-DDuWaAiP.mjs";
14
+ import "../../../../../media-qTTHVkls.mjs";
15
+ import "../../../../../comments-DVjWJm8X.mjs";
16
+ import { a as bylineFieldUpdateBody } from "../../../../../byline-fields-B1qHvRps.mjs";
17
+ import "../../../../../menus-BI6oBXco.mjs";
18
+ import "../../../../../status-DSURZwKS.mjs";
19
19
  import "../../../../../api/schemas/index.mjs";
20
- import { o as requirePerm } from "../../../../../authorize-DPFBGbE6.mjs";
21
- import { n as handleBylineFieldDelete, o as handleBylineFieldUpdate, r as handleBylineFieldGet } from "../../../../../byline-fields-4ClDC88c.mjs";
20
+ import { o as requirePerm } from "../../../../../authorize-CoDsRRp5.mjs";
21
+ import { n as handleBylineFieldDelete, o as handleBylineFieldUpdate, r as handleBylineFieldGet } from "../../../../../byline-fields-vYd_4Q1e.mjs";
22
22
 
23
23
  //#region src/astro/routes/api/admin/byline-fields/[slug].ts
24
24
  const prerender = false;