emdash 0.41.0 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1483) hide show
  1. package/dist/action-token-DBki7IT4.mjs +26 -0
  2. package/dist/action-token-DBki7IT4.mjs.map +1 -0
  3. package/dist/activation-DDuqAat2.mjs +387 -0
  4. package/dist/activation-DDuqAat2.mjs.map +1 -0
  5. package/dist/adapters-BrZxU6vM.d.mts +171 -0
  6. package/dist/adapters-BrZxU6vM.d.mts.map +1 -0
  7. package/dist/allowed-origins-CFtudhyw.mjs +116 -0
  8. package/dist/allowed-origins-CFtudhyw.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +5 -4
  10. package/dist/api/route-utils.d.mts.map +1 -1
  11. package/dist/api/route-utils.mjs +52 -47
  12. package/dist/api/route-utils.mjs.map +1 -1
  13. package/dist/api/schemas/index.d.mts +2 -2
  14. package/dist/api/schemas/index.mjs +11 -10
  15. package/dist/api-CFQn8VLR.mjs +4973 -0
  16. package/dist/api-CFQn8VLR.mjs.map +1 -0
  17. package/dist/api-tokens-P3mAaQgr.mjs +166 -0
  18. package/dist/api-tokens-P3mAaQgr.mjs.map +1 -0
  19. package/dist/apply-C1kq5l7p.mjs +1672 -0
  20. package/dist/apply-C1kq5l7p.mjs.map +1 -0
  21. package/dist/approvals-l9sGqPmL.mjs +460 -0
  22. package/dist/approvals-l9sGqPmL.mjs.map +1 -0
  23. package/dist/artifact-fetch-CWxyELVI.mjs +659 -0
  24. package/dist/artifact-fetch-CWxyELVI.mjs.map +1 -0
  25. package/dist/astro/index.d.mts +14 -14
  26. package/dist/astro/index.d.mts.map +1 -1
  27. package/dist/astro/index.mjs +96 -546
  28. package/dist/astro/index.mjs.map +1 -1
  29. package/dist/astro/middleware/auth.d.mts +12 -12
  30. package/dist/astro/middleware/auth.mjs +10 -10
  31. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  32. package/dist/astro/middleware/redirect.d.mts.map +1 -1
  33. package/dist/astro/middleware/redirect.mjs +19 -9
  34. package/dist/astro/middleware/redirect.mjs.map +1 -1
  35. package/dist/astro/middleware/request-context.d.mts +2 -1
  36. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  37. package/dist/astro/middleware/request-context.mjs +15 -6
  38. package/dist/astro/middleware/request-context.mjs.map +1 -1
  39. package/dist/astro/middleware/setup.mjs +1 -1
  40. package/dist/astro/middleware.d.mts +12 -12
  41. package/dist/astro/middleware.mjs +114 -110
  42. package/dist/astro/middleware.mjs.map +1 -1
  43. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +15 -14
  44. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs.map +1 -1
  45. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +15 -14
  46. package/dist/astro/routes/api/admin/allowed-domains/index.mjs.map +1 -1
  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 +18 -17
  51. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs.map +1 -1
  52. package/dist/astro/routes/api/admin/byline-fields/index.mjs +18 -17
  53. package/dist/astro/routes/api/admin/byline-fields/index.mjs.map +1 -1
  54. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +18 -17
  55. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs.map +1 -1
  56. package/dist/astro/routes/api/admin/bylines/_id_/index.d.mts.map +1 -1
  57. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +36 -27
  58. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  59. package/dist/astro/routes/api/admin/bylines/_id_/translations.d.mts.map +1 -1
  60. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +32 -26
  61. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  62. package/dist/astro/routes/api/admin/bylines/index.d.mts.map +1 -1
  63. package/dist/astro/routes/api/admin/bylines/index.mjs +32 -26
  64. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  65. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +20 -19
  66. package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
  67. package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
  68. package/dist/astro/routes/api/admin/comments/bulk.mjs +19 -18
  69. package/dist/astro/routes/api/admin/comments/bulk.mjs.map +1 -1
  70. package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
  71. package/dist/astro/routes/api/admin/comments/index.mjs +19 -18
  72. package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -1
  73. package/dist/astro/routes/api/admin/core-update.d.mts +8 -0
  74. package/dist/astro/routes/api/admin/core-update.d.mts.map +1 -0
  75. package/dist/astro/routes/api/admin/core-update.mjs +28 -0
  76. package/dist/astro/routes/api/admin/core-update.mjs.map +1 -0
  77. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  78. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  79. package/dist/astro/routes/api/admin/media-usage/activation.mjs +21 -20
  80. package/dist/astro/routes/api/admin/media-usage/activation.mjs.map +1 -1
  81. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +23 -22
  82. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -1
  83. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +23 -22
  84. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -1
  85. package/dist/astro/routes/api/admin/media-usage/progress.mjs +26 -25
  86. package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
  87. package/dist/astro/routes/api/admin/media-usage/repair.mjs +32 -31
  88. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  89. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +23 -22
  90. package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +23 -22
  92. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -1
  93. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  94. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  95. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  96. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  97. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +75 -73
  98. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  99. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
  100. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +74 -72
  101. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +75 -73
  103. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  104. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +86 -83
  105. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  106. package/dist/astro/routes/api/admin/plugins/index.mjs +75 -73
  107. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  108. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.d.mts.map +1 -1
  109. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +10 -7
  110. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs.map +1 -1
  111. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +74 -72
  112. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  113. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +85 -82
  114. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  115. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +74 -72
  116. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  117. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +75 -73
  118. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  119. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +87 -84
  120. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  121. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -9
  122. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +77 -75
  123. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  124. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
  125. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +75 -73
  126. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  127. package/dist/astro/routes/api/admin/plugins/updates.mjs +74 -72
  128. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  129. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -6
  130. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +74 -72
  131. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  132. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.d.mts.map +1 -1
  133. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +10 -7
  134. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs.map +1 -1
  135. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +74 -72
  136. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  137. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
  138. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +42 -41
  139. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -1
  140. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +42 -41
  141. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
  142. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +44 -43
  143. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
  144. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +44 -43
  145. package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
  146. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +44 -43
  147. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -1
  148. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +45 -44
  149. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -1
  150. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +45 -44
  151. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -1
  152. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +44 -43
  153. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -1
  154. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +45 -44
  155. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
  156. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +46 -45
  157. package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
  158. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +44 -43
  159. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -1
  160. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +44 -43
  161. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -1
  162. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +46 -45
  163. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -1
  164. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +44 -43
  165. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -1
  166. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +46 -45
  167. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -1
  168. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +44 -43
  169. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -1
  170. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +44 -43
  171. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -1
  172. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +46 -45
  173. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -1
  174. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +44 -43
  175. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -1
  176. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +44 -43
  177. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
  178. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +46 -45
  179. package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
  180. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
  181. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
  182. package/dist/astro/routes/api/admin/users/_id_/index.mjs +16 -15
  183. package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -1
  184. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
  185. package/dist/astro/routes/api/admin/users/index.mjs +15 -14
  186. package/dist/astro/routes/api/admin/users/index.mjs.map +1 -1
  187. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  188. package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
  189. package/dist/astro/routes/api/auth/invite/complete.d.mts.map +1 -1
  190. package/dist/astro/routes/api/auth/invite/complete.mjs +23 -19
  191. package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -1
  192. package/dist/astro/routes/api/auth/invite/index.mjs +17 -16
  193. package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
  194. package/dist/astro/routes/api/auth/invite/register-options.mjs +18 -17
  195. package/dist/astro/routes/api/auth/invite/register-options.mjs.map +1 -1
  196. package/dist/astro/routes/api/auth/logout.mjs +5 -5
  197. package/dist/astro/routes/api/auth/magic-link/send.mjs +19 -18
  198. package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
  199. package/dist/astro/routes/api/auth/magic-link/verify.d.mts.map +1 -1
  200. package/dist/astro/routes/api/auth/magic-link/verify.mjs +19 -15
  201. package/dist/astro/routes/api/auth/magic-link/verify.mjs.map +1 -1
  202. package/dist/astro/routes/api/auth/me.mjs +16 -15
  203. package/dist/astro/routes/api/auth/me.mjs.map +1 -1
  204. package/dist/astro/routes/api/auth/mode.mjs +5 -5
  205. package/dist/astro/routes/api/auth/oauth/_provider_/callback.d.mts.map +1 -1
  206. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +13 -4
  207. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs.map +1 -1
  208. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  209. package/dist/astro/routes/api/auth/passkey/_id_.mjs +15 -14
  210. package/dist/astro/routes/api/auth/passkey/_id_.mjs.map +1 -1
  211. package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
  212. package/dist/astro/routes/api/auth/passkey/options.mjs +20 -19
  213. package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
  214. package/dist/astro/routes/api/auth/passkey/register/options.mjs +18 -17
  215. package/dist/astro/routes/api/auth/passkey/register/options.mjs.map +1 -1
  216. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +19 -18
  217. package/dist/astro/routes/api/auth/passkey/register/verify.mjs.map +1 -1
  218. package/dist/astro/routes/api/auth/passkey/verify.d.mts.map +1 -1
  219. package/dist/astro/routes/api/auth/passkey/verify.mjs +23 -19
  220. package/dist/astro/routes/api/auth/passkey/verify.mjs.map +1 -1
  221. package/dist/astro/routes/api/auth/signup/complete.d.mts.map +1 -1
  222. package/dist/astro/routes/api/auth/signup/complete.mjs +23 -19
  223. package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -1
  224. package/dist/astro/routes/api/auth/signup/request.mjs +18 -17
  225. package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
  226. package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
  227. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +13 -13
  228. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +20 -19
  229. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs.map +1 -1
  230. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
  231. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +18 -17
  232. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  233. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
  234. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +18 -17
  235. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
  236. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
  237. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +12 -11
  238. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs.map +1 -1
  239. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +33 -32
  240. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  241. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -17
  242. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  243. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +36 -35
  244. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  245. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +36 -35
  246. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  247. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  248. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  249. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +18 -17
  250. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  251. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +27 -26
  252. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  253. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
  254. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +18 -17
  255. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  256. package/dist/astro/routes/api/content/_collection_/_id_.mjs +18 -17
  257. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  258. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  259. package/dist/astro/routes/api/content/_collection_/index.mjs +16 -15
  260. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  261. package/dist/astro/routes/api/content/_collection_/trash.mjs +16 -15
  262. package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -1
  263. package/dist/astro/routes/api/dashboard.mjs +13 -11
  264. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  265. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  266. package/dist/astro/routes/api/health.mjs +6 -6
  267. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  268. package/dist/astro/routes/api/import/probe.mjs +25 -24
  269. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  270. package/dist/astro/routes/api/import/wordpress/analyze.mjs +6 -6
  271. package/dist/astro/routes/api/import/wordpress/execute.d.mts +14 -14
  272. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  273. package/dist/astro/routes/api/import/wordpress/execute.mjs +167 -21
  274. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  275. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  276. package/dist/astro/routes/api/import/wordpress/media.mjs +20 -19
  277. package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
  278. package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -18
  279. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  280. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  281. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +29 -28
  282. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  283. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  284. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -24
  285. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  286. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  287. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +36 -35
  288. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  289. package/dist/astro/routes/api/manifest.mjs +6 -6
  290. package/dist/astro/routes/api/mcp.mjs +167 -110
  291. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  292. package/dist/astro/routes/api/media/_id_/confirm.mjs +20 -19
  293. package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
  294. package/dist/astro/routes/api/media/_id_/replace.mjs +17 -16
  295. package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -1
  296. package/dist/astro/routes/api/media/_id_/upload.mjs +9 -9
  297. package/dist/astro/routes/api/media/_id_/usage.mjs +34 -33
  298. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  299. package/dist/astro/routes/api/media/_id_.mjs +32 -31
  300. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  301. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  302. package/dist/astro/routes/api/media/file/_...key_.mjs +9 -9
  303. package/dist/astro/routes/api/media/folders/_id_.mjs +17 -16
  304. package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -1
  305. package/dist/astro/routes/api/media/folders/index.mjs +17 -16
  306. package/dist/astro/routes/api/media/folders/index.mjs.map +1 -1
  307. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  308. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  309. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  310. package/dist/astro/routes/api/media/upload-url.mjs +19 -18
  311. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  312. package/dist/astro/routes/api/media.mjs +36 -35
  313. package/dist/astro/routes/api/media.mjs.map +1 -1
  314. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +19 -18
  315. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  316. package/dist/astro/routes/api/menus/_name_/items.mjs +19 -18
  317. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  318. package/dist/astro/routes/api/menus/_name_/reorder.mjs +19 -18
  319. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  320. package/dist/astro/routes/api/menus/_name_/translations.mjs +19 -18
  321. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  322. package/dist/astro/routes/api/menus/_name_.mjs +19 -18
  323. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  324. package/dist/astro/routes/api/menus/index.mjs +19 -18
  325. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  326. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  327. package/dist/astro/routes/api/oauth/device/authorize.mjs +8 -8
  328. package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
  329. package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
  330. package/dist/astro/routes/api/oauth/register.d.mts.map +1 -1
  331. package/dist/astro/routes/api/oauth/register.mjs +15 -7
  332. package/dist/astro/routes/api/oauth/register.mjs.map +1 -1
  333. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  334. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  335. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  336. package/dist/astro/routes/api/openapi.json.mjs +21 -20
  337. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  338. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +12 -11
  339. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
  340. package/dist/astro/routes/api/redirects/404s/index.mjs +20 -19
  341. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  342. package/dist/astro/routes/api/redirects/404s/summary.mjs +20 -19
  343. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  344. package/dist/astro/routes/api/redirects/_id_.mjs +20 -19
  345. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  346. package/dist/astro/routes/api/redirects/index.mjs +20 -19
  347. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  348. package/dist/astro/routes/api/relations/_id_/index.mjs +36 -35
  349. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  350. package/dist/astro/routes/api/relations/index.mjs +36 -35
  351. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  352. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  353. package/dist/astro/routes/api/revisions/_revisionId_/restore.d.mts.map +1 -1
  354. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +26 -6
  355. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs.map +1 -1
  356. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +74 -72
  357. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  358. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +74 -72
  359. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  360. package/dist/astro/routes/api/schema/block-types/index.mjs +74 -72
  361. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  362. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +74 -72
  363. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  364. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +74 -72
  365. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  366. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +74 -72
  367. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  368. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +74 -72
  369. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  370. package/dist/astro/routes/api/schema/collections/index.mjs +74 -72
  371. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  372. package/dist/astro/routes/api/schema/collections/reorder.mjs +74 -72
  373. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  374. package/dist/astro/routes/api/schema/index.mjs +17 -16
  375. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  376. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +74 -72
  377. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  378. package/dist/astro/routes/api/schema/orphans/index.mjs +74 -72
  379. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  380. package/dist/astro/routes/api/search/enable.mjs +20 -19
  381. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  382. package/dist/astro/routes/api/search/index.mjs +19 -18
  383. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  384. package/dist/astro/routes/api/search/rebuild.mjs +20 -19
  385. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  386. package/dist/astro/routes/api/search/stats.mjs +9 -9
  387. package/dist/astro/routes/api/search/suggest.mjs +19 -18
  388. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  389. package/dist/astro/routes/api/sections/_slug_.mjs +19 -18
  390. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  391. package/dist/astro/routes/api/sections/index.mjs +19 -18
  392. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  393. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  394. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  395. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  396. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  397. package/dist/astro/routes/api/settings/email.mjs +6 -6
  398. package/dist/astro/routes/api/settings.mjs +23 -22
  399. package/dist/astro/routes/api/settings.mjs.map +1 -1
  400. package/dist/astro/routes/api/setup/admin-verify.d.mts.map +1 -1
  401. package/dist/astro/routes/api/setup/admin-verify.mjs +26 -24
  402. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  403. package/dist/astro/routes/api/setup/admin.mjs +19 -18
  404. package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
  405. package/dist/astro/routes/api/setup/dev-bypass.mjs +47 -46
  406. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  407. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  408. package/dist/astro/routes/api/setup/index.mjs +52 -51
  409. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  410. package/dist/astro/routes/api/setup/status.mjs +6 -6
  411. package/dist/astro/routes/api/snapshot.mjs +8 -8
  412. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +25 -24
  413. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  414. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +25 -24
  415. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  416. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -24
  417. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  418. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +25 -24
  419. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  420. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +24 -23
  421. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  422. package/dist/astro/routes/api/taxonomies/_name_.mjs +25 -24
  423. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  424. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +42 -41
  425. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  426. package/dist/astro/routes/api/taxonomies/index.mjs +25 -24
  427. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  428. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  429. package/dist/astro/routes/api/typegen.d.mts.map +1 -1
  430. package/dist/astro/routes/api/typegen.mjs +8 -39
  431. package/dist/astro/routes/api/typegen.mjs.map +1 -1
  432. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  433. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +20 -19
  434. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs.map +1 -1
  435. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  436. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  437. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  438. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  439. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +17 -16
  440. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  441. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +20 -19
  442. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  443. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +20 -19
  444. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  445. package/dist/astro/routes/api/widget-areas/_name_.mjs +9 -9
  446. package/dist/astro/routes/api/widget-areas/index.mjs +20 -19
  447. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  448. package/dist/astro/routes/api/widget-components.mjs +5 -5
  449. package/dist/astro/routes/robots.txt.mjs +7 -7
  450. package/dist/astro/routes/sitemap-_collection_.xml.mjs +10 -10
  451. package/dist/astro/routes/sitemap.xml.mjs +8 -8
  452. package/dist/astro/types.d.mts +23 -17
  453. package/dist/astro/types.d.mts.map +1 -1
  454. package/dist/audit-BszbE_BP.mjs +127 -0
  455. package/dist/audit-BszbE_BP.mjs.map +1 -0
  456. package/dist/auth/providers/github.d.mts +1 -1
  457. package/dist/auth/providers/google.d.mts +1 -1
  458. package/dist/authoritative-records-dSvXCfzb.mjs +5172 -0
  459. package/dist/authoritative-records-dSvXCfzb.mjs.map +1 -0
  460. package/dist/authorize-soZXK7U0.mjs +49 -0
  461. package/dist/authorize-soZXK7U0.mjs.map +1 -0
  462. package/dist/backup-DQ3CABsO.mjs +246 -0
  463. package/dist/backup-DQ3CABsO.mjs.map +1 -0
  464. package/dist/block-types-DIG_KZwi.mjs +132 -0
  465. package/dist/block-types-DIG_KZwi.mjs.map +1 -0
  466. package/dist/block-values-BrTrtA-v.mjs +175 -0
  467. package/dist/block-values-BrTrtA-v.mjs.map +1 -0
  468. package/dist/byline-02tu_Uc-.mjs +909 -0
  469. package/dist/byline-02tu_Uc-.mjs.map +1 -0
  470. package/dist/byline-fields-B01Txzyx.mjs +123 -0
  471. package/dist/byline-fields-B01Txzyx.mjs.map +1 -0
  472. package/dist/byline-fields-DHJs0Mja.mjs +280 -0
  473. package/dist/byline-fields-DHJs0Mja.mjs.map +1 -0
  474. package/dist/byline-registry-dvt4N3xV.mjs +406 -0
  475. package/dist/byline-registry-dvt4N3xV.mjs.map +1 -0
  476. package/dist/bylines-COTwmMBF.mjs +150 -0
  477. package/dist/bylines-COTwmMBF.mjs.map +1 -0
  478. package/dist/bylines-D_S8UKRX.mjs +214 -0
  479. package/dist/bylines-D_S8UKRX.mjs.map +1 -0
  480. package/dist/cache-CPanL9IO.mjs +114 -0
  481. package/dist/cache-CPanL9IO.mjs.map +1 -0
  482. package/dist/canonical-CAecl1UQ.mjs +174 -0
  483. package/dist/canonical-CAecl1UQ.mjs.map +1 -0
  484. package/dist/capture-triggers-CdZfvHtF.mjs +362 -0
  485. package/dist/capture-triggers-CdZfvHtF.mjs.map +1 -0
  486. package/dist/challenge-store-CxZxPqaw.mjs +51 -0
  487. package/dist/challenge-store-CxZxPqaw.mjs.map +1 -0
  488. package/dist/checksum-DtH6m5uk.mjs +162 -0
  489. package/dist/checksum-DtH6m5uk.mjs.map +1 -0
  490. package/dist/chrome-tags-CKELm-bo.mjs +24 -0
  491. package/dist/chrome-tags-CKELm-bo.mjs.map +1 -0
  492. package/dist/chunks-DBmkKmBH.mjs +25 -0
  493. package/dist/chunks-DBmkKmBH.mjs.map +1 -0
  494. package/dist/cli/index.mjs +58 -911
  495. package/dist/cli/index.mjs.map +1 -1
  496. package/dist/client/cf-access.d.mts +1 -1
  497. package/dist/client/index.d.mts +39 -34
  498. package/dist/client/index.d.mts.map +1 -1
  499. package/dist/client/index.mjs +8 -3
  500. package/dist/client/index.mjs.map +1 -1
  501. package/dist/collection-deletion-JecE26cS.mjs +436 -0
  502. package/dist/collection-deletion-JecE26cS.mjs.map +1 -0
  503. package/dist/collection-deletion-processor-DgCfF3a1.mjs +217 -0
  504. package/dist/collection-deletion-processor-DgCfF3a1.mjs.map +1 -0
  505. package/dist/collection-slugs-cache-BNRAPNiu.mjs +85 -0
  506. package/dist/collection-slugs-cache-BNRAPNiu.mjs.map +1 -0
  507. package/dist/comment-Cq1UYN8_.mjs +313 -0
  508. package/dist/comment-Cq1UYN8_.mjs.map +1 -0
  509. package/dist/comment-reaction-DPeGAfjd.mjs +85 -0
  510. package/dist/comment-reaction-DPeGAfjd.mjs.map +1 -0
  511. package/dist/comments-BRtp992B.mjs +99 -0
  512. package/dist/comments-BRtp992B.mjs.map +1 -0
  513. package/dist/comments-Bi2j9IoX.mjs +195 -0
  514. package/dist/comments-Bi2j9IoX.mjs.map +1 -0
  515. package/dist/components-CQY-Sgm-.mjs +108 -0
  516. package/dist/components-CQY-Sgm-.mjs.map +1 -0
  517. package/dist/config-BnuORwSP.mjs +242 -0
  518. package/dist/config-BnuORwSP.mjs.map +1 -0
  519. package/dist/config-CDmPF4p7.d.mts +39 -0
  520. package/dist/config-CDmPF4p7.d.mts.map +1 -0
  521. package/dist/config-DHsDMpXc.d.mts +6707 -0
  522. package/dist/config-DHsDMpXc.d.mts.map +1 -0
  523. package/dist/connection-B9pIasFd.mjs +36 -0
  524. package/dist/connection-B9pIasFd.mjs.map +1 -0
  525. package/dist/content-RzEXY3QX.mjs +2020 -0
  526. package/dist/content-RzEXY3QX.mjs.map +1 -0
  527. package/dist/content-list-query-CnXfe1Nu.d.mts +26 -0
  528. package/dist/content-list-query-CnXfe1Nu.d.mts.map +1 -0
  529. package/dist/content-policy-Dm32n9C6.mjs +46 -0
  530. package/dist/content-policy-Dm32n9C6.mjs.map +1 -0
  531. package/dist/content-repair-B-k5JrVN.mjs +442 -0
  532. package/dist/content-repair-B-k5JrVN.mjs.map +1 -0
  533. package/dist/context-CtRvoSAj.mjs +2026 -0
  534. package/dist/context-CtRvoSAj.mjs.map +1 -0
  535. package/dist/credits-CAFPFhuk.mjs +110 -0
  536. package/dist/credits-CAFPFhuk.mjs.map +1 -0
  537. package/dist/cron-xe5XKqA-.mjs +306 -0
  538. package/dist/cron-xe5XKqA-.mjs.map +1 -0
  539. package/dist/dashboard-BoV4pwPP.mjs +151 -0
  540. package/dist/dashboard-BoV4pwPP.mjs.map +1 -0
  541. package/dist/db/index.d.mts +3 -3
  542. package/dist/db/index.mjs +1 -1
  543. package/dist/db/libsql-migrations.d.mts +1 -1
  544. package/dist/db/libsql-migrations.mjs +4 -4
  545. package/dist/db/libsql.d.mts +1 -1
  546. package/dist/db/postgres-migrations.d.mts +1 -1
  547. package/dist/db/postgres-migrations.mjs +4 -4
  548. package/dist/db/postgres.d.mts +1 -1
  549. package/dist/db/sqlite-migrations.d.mts +1 -1
  550. package/dist/db/sqlite-migrations.mjs +4 -4
  551. package/dist/db/sqlite.d.mts +1 -1
  552. package/dist/db/sqlite.mjs +1 -1
  553. package/dist/default-DaoYyFRS.mjs +81 -0
  554. package/dist/default-DaoYyFRS.mjs.map +1 -0
  555. package/dist/deferred-tasks-OBADxoFf.d.mts +9 -0
  556. package/dist/deferred-tasks-OBADxoFf.d.mts.map +1 -0
  557. package/dist/destination-r2zIAZ2S.mjs +18 -0
  558. package/dist/destination-r2zIAZ2S.mjs.map +1 -0
  559. package/dist/dev-typegen-8JlYYFno.mjs +29 -0
  560. package/dist/dev-typegen-8JlYYFno.mjs.map +1 -0
  561. package/dist/device-flow-CzKi6tID.mjs +521 -0
  562. package/dist/device-flow-CzKi6tID.mjs.map +1 -0
  563. package/dist/digest-DiYAoZpf.mjs +194 -0
  564. package/dist/digest-DiYAoZpf.mjs.map +1 -0
  565. package/dist/direct-executor-CsEmH_2m.mjs +104 -0
  566. package/dist/direct-executor-CsEmH_2m.mjs.map +1 -0
  567. package/dist/dist-Cfu8mMBs.mjs +810 -0
  568. package/dist/dist-Cfu8mMBs.mjs.map +1 -0
  569. package/dist/email-console-DmqVF5J_.mjs +50 -0
  570. package/dist/email-console-DmqVF5J_.mjs.map +1 -0
  571. package/dist/email-locale-B5OjmAj_.mjs +25 -0
  572. package/dist/email-locale-B5OjmAj_.mjs.map +1 -0
  573. package/dist/emdash-runtime-CMdYH2Of.mjs +4229 -0
  574. package/dist/emdash-runtime-CMdYH2Of.mjs.map +1 -0
  575. package/dist/enrich-BDdVNeDK.mjs +194 -0
  576. package/dist/enrich-BDdVNeDK.mjs.map +1 -0
  577. package/dist/entry-lock-B-1bUDxX.d.mts +4544 -0
  578. package/dist/entry-lock-B-1bUDxX.d.mts.map +1 -0
  579. package/dist/entry-lock-B5eaZEZP.mjs +163 -0
  580. package/dist/entry-lock-B5eaZEZP.mjs.map +1 -0
  581. package/dist/entry-lock-PP1JCXBB.mjs +1180 -0
  582. package/dist/entry-lock-PP1JCXBB.mjs.map +1 -0
  583. package/dist/entry-locks-DJAqVweV.mjs +167 -0
  584. package/dist/entry-locks-DJAqVweV.mjs.map +1 -0
  585. package/dist/env-types-BaTCgn-y.mjs +38 -0
  586. package/dist/env-types-BaTCgn-y.mjs.map +1 -0
  587. package/dist/error-CEdm_AWU.mjs +90 -0
  588. package/dist/error-CEdm_AWU.mjs.map +1 -0
  589. package/dist/errors-CNvATh_7.mjs +469 -0
  590. package/dist/errors-CNvATh_7.mjs.map +1 -0
  591. package/dist/errors-CjXd1LgH.mjs +120 -0
  592. package/dist/errors-CjXd1LgH.mjs.map +1 -0
  593. package/dist/escape-nJW7dR0s.mjs +9 -0
  594. package/dist/escape-nJW7dR0s.mjs.map +1 -0
  595. package/dist/fence-BrnQffdY.mjs +162 -0
  596. package/dist/fence-BrnQffdY.mjs.map +1 -0
  597. package/dist/field-defs-cache-DEkFYCDE.mjs +77 -0
  598. package/dist/field-defs-cache-DEkFYCDE.mjs.map +1 -0
  599. package/dist/field-map-Cp5hDSRU.mjs +83 -0
  600. package/dist/field-map-Cp5hDSRU.mjs.map +1 -0
  601. package/dist/focal-point-JX8kcOTQ.mjs +23 -0
  602. package/dist/focal-point-JX8kcOTQ.mjs.map +1 -0
  603. package/dist/fts-manager-DU03MxWu.mjs +443 -0
  604. package/dist/fts-manager-DU03MxWu.mjs.map +1 -0
  605. package/dist/gc-Gf9LOF42.mjs +75 -0
  606. package/dist/gc-Gf9LOF42.mjs.map +1 -0
  607. package/dist/hash-CY4QdeMJ.mjs +37 -0
  608. package/dist/hash-CY4QdeMJ.mjs.map +1 -0
  609. package/dist/hook-result-DjdVwWpw.d.mts +31 -0
  610. package/dist/hook-result-DjdVwWpw.d.mts.map +1 -0
  611. package/dist/hreflang-Bq0ahAd4.mjs +105 -0
  612. package/dist/hreflang-Bq0ahAd4.mjs.map +1 -0
  613. package/dist/hreflang-C7ETs0Tv.d.mts +50 -0
  614. package/dist/hreflang-C7ETs0Tv.d.mts.map +1 -0
  615. package/dist/http-route-dispatch-B2G7_OOm.mjs +339 -0
  616. package/dist/http-route-dispatch-B2G7_OOm.mjs.map +1 -0
  617. package/dist/identity-u3KgtUC9.mjs +35 -0
  618. package/dist/identity-u3KgtUC9.mjs.map +1 -0
  619. package/dist/import-CzP9ffo0.mjs +2020 -0
  620. package/dist/import-CzP9ffo0.mjs.map +1 -0
  621. package/dist/index-D1_ykO2u.d.mts +623 -0
  622. package/dist/index-D1_ykO2u.d.mts.map +1 -0
  623. package/dist/index.d.mts +24 -24
  624. package/dist/index.mjs +108 -104
  625. package/dist/install-finalization-TbcQozrV.mjs +58 -0
  626. package/dist/install-finalization-TbcQozrV.mjs.map +1 -0
  627. package/dist/keys-r08WvAng.mjs +61 -0
  628. package/dist/keys-r08WvAng.mjs.map +1 -0
  629. package/dist/kinds-CXY-fwQ6.mjs +974 -0
  630. package/dist/kinds-CXY-fwQ6.mjs.map +1 -0
  631. package/dist/lifecycle-CpebZNAA.mjs +25 -0
  632. package/dist/lifecycle-CpebZNAA.mjs.map +1 -0
  633. package/dist/load-dHcR5yh9.mjs +28 -0
  634. package/dist/load-dHcR5yh9.mjs.map +1 -0
  635. package/dist/loader-B_bcoE1h.mjs +1197 -0
  636. package/dist/loader-B_bcoE1h.mjs.map +1 -0
  637. package/dist/loops-Dn1i16FP.mjs +205 -0
  638. package/dist/loops-Dn1i16FP.mjs.map +1 -0
  639. package/dist/manifest-builder-D7Y8iirE.mjs +189 -0
  640. package/dist/manifest-builder-D7Y8iirE.mjs.map +1 -0
  641. package/dist/manifest-schema-gy37bD_D.mjs +496 -0
  642. package/dist/manifest-schema-gy37bD_D.mjs.map +1 -0
  643. package/dist/marketplace-tHWSsCUo.mjs +257 -0
  644. package/dist/marketplace-tHWSsCUo.mjs.map +1 -0
  645. package/dist/media/image-endpoint.mjs +1 -1
  646. package/dist/media/index.d.mts +1 -1
  647. package/dist/media/index.mjs +4 -4
  648. package/dist/media/local-runtime.d.mts +14 -14
  649. package/dist/media/local-runtime.mjs +7 -7
  650. package/dist/media-3v7mqAVX.mjs +294 -0
  651. package/dist/media-3v7mqAVX.mjs.map +1 -0
  652. package/dist/media-CputjGE1.mjs +373 -0
  653. package/dist/media-CputjGE1.mjs.map +1 -0
  654. package/dist/media-D1z_jisb.mjs +408 -0
  655. package/dist/media-D1z_jisb.mjs.map +1 -0
  656. package/dist/media-allowlist-D5a4d-RA.mjs +44 -0
  657. package/dist/media-allowlist-D5a4d-RA.mjs.map +1 -0
  658. package/dist/media-folders-D2VdVBf6.mjs +210 -0
  659. package/dist/media-folders-D2VdVBf6.mjs.map +1 -0
  660. package/dist/media-url-DloW2xrP.mjs +43 -0
  661. package/dist/media-url-DloW2xrP.mjs.map +1 -0
  662. package/dist/media-usage-B8q0owWQ.mjs +1629 -0
  663. package/dist/media-usage-B8q0owWQ.mjs.map +1 -0
  664. package/dist/media-usage-activation-CQWOOTJi.mjs +78 -0
  665. package/dist/media-usage-activation-CQWOOTJi.mjs.map +1 -0
  666. package/dist/media-usage-work-BC0qpkMD.mjs +152 -0
  667. package/dist/media-usage-work-BC0qpkMD.mjs.map +1 -0
  668. package/dist/media-usage-work-BlMjwPg8.mjs +586 -0
  669. package/dist/media-usage-work-BlMjwPg8.mjs.map +1 -0
  670. package/dist/menus-BQKqf0Up.mjs +92 -0
  671. package/dist/menus-BQKqf0Up.mjs.map +1 -0
  672. package/dist/menus-DiuhXKWf.mjs +3646 -0
  673. package/dist/menus-DiuhXKWf.mjs.map +1 -0
  674. package/dist/menus-trvc6_fW.mjs +753 -0
  675. package/dist/menus-trvc6_fW.mjs.map +1 -0
  676. package/dist/migrations/index.d.mts +1 -1
  677. package/dist/migrations/index.mjs +3 -3
  678. package/dist/mime-IZf-LHIS.mjs +36 -0
  679. package/dist/mime-IZf-LHIS.mjs.map +1 -0
  680. package/dist/mode-nh0ppSX5.mjs +23 -0
  681. package/dist/mode-nh0ppSX5.mjs.map +1 -0
  682. package/dist/node-sqlite-compat-CDOEcc97.mjs +63 -0
  683. package/dist/node-sqlite-compat-CDOEcc97.mjs.map +1 -0
  684. package/dist/normalize-BuWa0lvd.mjs +191 -0
  685. package/dist/normalize-BuWa0lvd.mjs.map +1 -0
  686. package/dist/oauth-authorization-BcRdGojQ.mjs +274 -0
  687. package/dist/oauth-authorization-BcRdGojQ.mjs.map +1 -0
  688. package/dist/oauth-clients-C-8WDTqj.mjs +266 -0
  689. package/dist/oauth-clients-C-8WDTqj.mjs.map +1 -0
  690. package/dist/oauth-state-store-CM5ZEYQS.mjs +50 -0
  691. package/dist/oauth-state-store-CM5ZEYQS.mjs.map +1 -0
  692. package/dist/oauth-user-lookup-DrrqvTZC.mjs +26 -0
  693. package/dist/oauth-user-lookup-DrrqvTZC.mjs.map +1 -0
  694. package/dist/object-cache/memory.d.mts +1 -1
  695. package/dist/object-cache-Bo6DGaC9.mjs +586 -0
  696. package/dist/object-cache-Bo6DGaC9.mjs.map +1 -0
  697. package/dist/options-C2IDQnD2.d.mts +81 -0
  698. package/dist/options-C2IDQnD2.d.mts.map +1 -0
  699. package/dist/ownership-DoeAIuTg.mjs +12 -0
  700. package/dist/ownership-DoeAIuTg.mjs.map +1 -0
  701. package/dist/page/index.d.mts +2 -2
  702. package/dist/page/index.mjs +6 -6
  703. package/dist/parse-D5Sw9wAI.d.mts +172 -0
  704. package/dist/parse-D5Sw9wAI.d.mts.map +1 -0
  705. package/dist/parse-Gt2l4Sld.mjs +81 -0
  706. package/dist/parse-Gt2l4Sld.mjs.map +1 -0
  707. package/dist/passkey-config-CkQsrcU-.mjs +46 -0
  708. package/dist/passkey-config-CkQsrcU-.mjs.map +1 -0
  709. package/dist/paths-DiENGBx5.mjs +77 -0
  710. package/dist/paths-DiENGBx5.mjs.map +1 -0
  711. package/dist/patterns-DyZJ67I7.mjs +140 -0
  712. package/dist/patterns-DyZJ67I7.mjs.map +1 -0
  713. package/dist/placeholder-Cq5wLDCX.d.mts +306 -0
  714. package/dist/placeholder-Cq5wLDCX.d.mts.map +1 -0
  715. package/dist/plan-BxCS1tl5.mjs +135 -0
  716. package/dist/plan-BxCS1tl5.mjs.map +1 -0
  717. package/dist/plugin-test-runtime.d.mts +14 -14
  718. package/dist/plugin-test-runtime.mjs +115 -111
  719. package/dist/plugin-types.d.mts +5 -3
  720. package/dist/plugin-types.d.mts.map +1 -1
  721. package/dist/plugin-types.mjs.map +1 -1
  722. package/dist/plugin-utils.d.mts +12 -12
  723. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  724. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  725. package/dist/plugins/adapt-sandbox-entry.mjs +48 -10
  726. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  727. package/dist/plugins/host.d.mts +6 -6
  728. package/dist/plugins/host.mjs +49 -44
  729. package/dist/plugins-BpLkXA1S.mjs +277 -0
  730. package/dist/plugins-BpLkXA1S.mjs.map +1 -0
  731. package/dist/policy-C1qpNxrr.mjs +45 -0
  732. package/dist/policy-C1qpNxrr.mjs.map +1 -0
  733. package/dist/portable-text-BnRuiR1-.mjs +307 -0
  734. package/dist/portable-text-BnRuiR1-.mjs.map +1 -0
  735. package/dist/preview-DU5rwz_m.mjs +107 -0
  736. package/dist/preview-DU5rwz_m.mjs.map +1 -0
  737. package/dist/protocol-B9GEhEyi.d.mts +61 -0
  738. package/dist/protocol-B9GEhEyi.d.mts.map +1 -0
  739. package/dist/public-submission-yZaTTfsC.mjs +250 -0
  740. package/dist/public-submission-yZaTTfsC.mjs.map +1 -0
  741. package/dist/public-url-B5a0QAh6.mjs +101 -0
  742. package/dist/public-url-B5a0QAh6.mjs.map +1 -0
  743. package/dist/query-6e2CQxUv.mjs +1161 -0
  744. package/dist/query-6e2CQxUv.mjs.map +1 -0
  745. package/dist/query-DC3bv__4.mjs +41 -0
  746. package/dist/query-DC3bv__4.mjs.map +1 -0
  747. package/dist/rate-limit-BXx3Ecp9.mjs +120 -0
  748. package/dist/rate-limit-BXx3Ecp9.mjs.map +1 -0
  749. package/dist/receipt-q1VK9jhj.mjs +43 -0
  750. package/dist/receipt-q1VK9jhj.mjs.map +1 -0
  751. package/dist/redirect-BvFKh8Sz.mjs +416 -0
  752. package/dist/redirect-BvFKh8Sz.mjs.map +1 -0
  753. package/dist/redirect-D1AmADlk.mjs +19 -0
  754. package/dist/redirect-D1AmADlk.mjs.map +1 -0
  755. package/dist/redirects-CWQMKYOS.mjs +446 -0
  756. package/dist/redirects-CWQMKYOS.mjs.map +1 -0
  757. package/dist/redirects-D4EWeXAo.mjs +148 -0
  758. package/dist/redirects-D4EWeXAo.mjs.map +1 -0
  759. package/dist/registry/testing.d.mts +16 -4
  760. package/dist/registry/testing.d.mts.map +1 -1
  761. package/dist/registry/testing.mjs +20 -10
  762. package/dist/registry/testing.mjs.map +1 -1
  763. package/dist/registry-CtHRqVe-.mjs +6771 -0
  764. package/dist/registry-CtHRqVe-.mjs.map +1 -0
  765. package/dist/relations-CVI2nbrn.mjs +776 -0
  766. package/dist/relations-CVI2nbrn.mjs.map +1 -0
  767. package/dist/request-cache-C4CIo5ad.mjs +104 -0
  768. package/dist/request-cache-C4CIo5ad.mjs.map +1 -0
  769. package/dist/request-context.d.mts +9 -1
  770. package/dist/request-context.d.mts.map +1 -1
  771. package/dist/request-context.mjs.map +1 -1
  772. package/dist/request-meta-B6blULFY.mjs +141 -0
  773. package/dist/request-meta-B6blULFY.mjs.map +1 -0
  774. package/dist/resolve-Cx0Pwz0-.mjs +100 -0
  775. package/dist/resolve-Cx0Pwz0-.mjs.map +1 -0
  776. package/dist/resolve-D-kqyKns.mjs +199 -0
  777. package/dist/resolve-D-kqyKns.mjs.map +1 -0
  778. package/dist/revision-CGkQA0e5.mjs +366 -0
  779. package/dist/revision-CGkQA0e5.mjs.map +1 -0
  780. package/dist/route-wire-DK600v4u.mjs +197 -0
  781. package/dist/route-wire-DK600v4u.mjs.map +1 -0
  782. package/dist/routes-DTduBPzX.mjs +272 -0
  783. package/dist/routes-DTduBPzX.mjs.map +1 -0
  784. package/dist/runner-CLpxmhl8.mjs +6197 -0
  785. package/dist/runner-CLpxmhl8.mjs.map +1 -0
  786. package/dist/runner-Ji7qyH2A.d.mts +68 -0
  787. package/dist/runner-Ji7qyH2A.d.mts.map +1 -0
  788. package/dist/runtime.d.mts +13 -13
  789. package/dist/runtime.mjs +3 -3
  790. package/dist/schema/project-env-types.d.mts +12 -0
  791. package/dist/schema/project-env-types.d.mts.map +1 -0
  792. package/dist/schema/project-env-types.mjs +86 -0
  793. package/dist/schema/project-env-types.mjs.map +1 -0
  794. package/dist/schema-BZPj3kwZ.mjs +13 -0
  795. package/dist/schema-BZPj3kwZ.mjs.map +1 -0
  796. package/dist/schema-Berj5VQx.mjs +815 -0
  797. package/dist/schema-Berj5VQx.mjs.map +1 -0
  798. package/dist/scopes-C1HJaIyf.mjs +34 -0
  799. package/dist/scopes-C1HJaIyf.mjs.map +1 -0
  800. package/dist/search-thYf8j9F.mjs +448 -0
  801. package/dist/search-thYf8j9F.mjs.map +1 -0
  802. package/dist/sections-2k1uIgJ0.mjs +346 -0
  803. package/dist/sections-2k1uIgJ0.mjs.map +1 -0
  804. package/dist/seed/index.d.mts +2 -2
  805. package/dist/seed/index.mjs +39 -38
  806. package/dist/seo/index.d.mts +3 -3
  807. package/dist/seo/index.mjs +24 -23
  808. package/dist/seo/index.mjs.map +1 -1
  809. package/dist/seo-C61bnPuV.mjs +114 -0
  810. package/dist/seo-C61bnPuV.mjs.map +1 -0
  811. package/dist/seo-DpYxmGaL.mjs +133 -0
  812. package/dist/seo-DpYxmGaL.mjs.map +1 -0
  813. package/dist/service-BFUImckH.mjs +150 -0
  814. package/dist/service-BFUImckH.mjs.map +1 -0
  815. package/dist/session-user-DVcHsFD5.mjs +61 -0
  816. package/dist/session-user-DVcHsFD5.mjs.map +1 -0
  817. package/dist/settings-B0zQj_Tj.mjs +61 -0
  818. package/dist/settings-B0zQj_Tj.mjs.map +1 -0
  819. package/dist/settings-BJjK_X7x.mjs +51 -0
  820. package/dist/settings-BJjK_X7x.mjs.map +1 -0
  821. package/dist/settings-BbVRRGDp.mjs +439 -0
  822. package/dist/settings-BbVRRGDp.mjs.map +1 -0
  823. package/dist/setup-complete-CuLcTDTU.mjs +65 -0
  824. package/dist/setup-complete-CuLcTDTU.mjs.map +1 -0
  825. package/dist/setup-nonce-CAQoY5PC.mjs +25 -0
  826. package/dist/setup-nonce-CAQoY5PC.mjs.map +1 -0
  827. package/dist/site-settings-AYFvhwQn.mjs +50 -0
  828. package/dist/site-settings-AYFvhwQn.mjs.map +1 -0
  829. package/dist/site-url-Ceq_AUK0.mjs +16 -0
  830. package/dist/site-url-Ceq_AUK0.mjs.map +1 -0
  831. package/dist/snapshot-Dzsn3NZa.mjs +414 -0
  832. package/dist/snapshot-Dzsn3NZa.mjs.map +1 -0
  833. package/dist/ssrf-DsmvZB80.mjs +406 -0
  834. package/dist/ssrf-DsmvZB80.mjs.map +1 -0
  835. package/dist/stage-Cf9PqdUB.mjs +662 -0
  836. package/dist/stage-Cf9PqdUB.mjs.map +1 -0
  837. package/dist/staged-Bw5eHbKS.mjs +686 -0
  838. package/dist/staged-Bw5eHbKS.mjs.map +1 -0
  839. package/dist/state-kGdOMQRY.mjs +153 -0
  840. package/dist/state-kGdOMQRY.mjs.map +1 -0
  841. package/dist/status-D39Fpy8R.mjs +30 -0
  842. package/dist/status-D39Fpy8R.mjs.map +1 -0
  843. package/dist/storage/local.d.mts +1 -1
  844. package/dist/storage/local.mjs +1 -1
  845. package/dist/storage/s3.d.mts +1 -1
  846. package/dist/storage/s3.mjs +1 -1
  847. package/dist/storage-query-C9bK0Dg6.d.mts +1614 -0
  848. package/dist/storage-query-C9bK0Dg6.d.mts.map +1 -0
  849. package/dist/tar-lDI_fzLD.mjs +449 -0
  850. package/dist/tar-lDI_fzLD.mjs.map +1 -0
  851. package/dist/target-DOFs5oUC.mjs +27 -0
  852. package/dist/target-DOFs5oUC.mjs.map +1 -0
  853. package/dist/taxonomies-DQGomz9p.mjs +939 -0
  854. package/dist/taxonomies-DQGomz9p.mjs.map +1 -0
  855. package/dist/taxonomies-DWv-OYT0.mjs +697 -0
  856. package/dist/taxonomies-DWv-OYT0.mjs.map +1 -0
  857. package/dist/taxonomy-BesdHIwi.mjs +525 -0
  858. package/dist/taxonomy-BesdHIwi.mjs.map +1 -0
  859. package/dist/tokens-BIGxi8sP.mjs +171 -0
  860. package/dist/tokens-BIGxi8sP.mjs.map +1 -0
  861. package/dist/transaction-BVYIo_yu.mjs +29 -0
  862. package/dist/transaction-BVYIo_yu.mjs.map +1 -0
  863. package/dist/transfer-BtzoaXLk.mjs +166 -0
  864. package/dist/transfer-BtzoaXLk.mjs.map +1 -0
  865. package/dist/transfer-DLu_6AXL.mjs +8856 -0
  866. package/dist/transfer-DLu_6AXL.mjs.map +1 -0
  867. package/dist/transfer-download-b_PCrqJJ.mjs +33 -0
  868. package/dist/transfer-download-b_PCrqJJ.mjs.map +1 -0
  869. package/dist/transformations-DdnpSdeC.mjs +196 -0
  870. package/dist/transformations-DdnpSdeC.mjs.map +1 -0
  871. package/dist/transport-flR-Zmds.d.mts +42 -0
  872. package/dist/transport-flR-Zmds.d.mts.map +1 -0
  873. package/dist/transport-umzEbgYO.mjs +136 -0
  874. package/dist/transport-umzEbgYO.mjs.map +1 -0
  875. package/dist/trusted-proxy-BqfQFs6a.mjs +51 -0
  876. package/dist/trusted-proxy-BqfQFs6a.mjs.map +1 -0
  877. package/dist/turnstile-IvQp2uyD.mjs +53 -0
  878. package/dist/turnstile-IvQp2uyD.mjs.map +1 -0
  879. package/dist/types-2V_MVPYy.d.mts +125 -0
  880. package/dist/types-2V_MVPYy.d.mts.map +1 -0
  881. package/dist/types-B-WCvzdi.d.mts +198 -0
  882. package/dist/types-B-WCvzdi.d.mts.map +1 -0
  883. package/dist/types-BGmQ0uXs.mjs +201 -0
  884. package/dist/types-BGmQ0uXs.mjs.map +1 -0
  885. package/dist/types-CVsmpTcU.mjs +18 -0
  886. package/dist/types-CVsmpTcU.mjs.map +1 -0
  887. package/dist/types-C_V-_vMS.d.mts +198 -0
  888. package/dist/types-C_V-_vMS.d.mts.map +1 -0
  889. package/dist/types-CdEMurNh.mjs +77 -0
  890. package/dist/types-CdEMurNh.mjs.map +1 -0
  891. package/dist/types-CsmwbOwa.mjs +22 -0
  892. package/dist/types-CsmwbOwa.mjs.map +1 -0
  893. package/dist/types-Cw-1it3n.d.mts +287 -0
  894. package/dist/types-Cw-1it3n.d.mts.map +1 -0
  895. package/dist/types-D7B20WFC.d.mts +374 -0
  896. package/dist/types-D7B20WFC.d.mts.map +1 -0
  897. package/dist/types-DGw8KMX_.mjs +16 -0
  898. package/dist/types-DGw8KMX_.mjs.map +1 -0
  899. package/dist/types-DZeDpzMc.d.mts +896 -0
  900. package/dist/types-DZeDpzMc.d.mts.map +1 -0
  901. package/dist/types-DuQAIPA-.d.mts +363 -0
  902. package/dist/types-DuQAIPA-.d.mts.map +1 -0
  903. package/dist/types-edRPQchz.d.mts +85 -0
  904. package/dist/types-edRPQchz.d.mts.map +1 -0
  905. package/dist/types-j6MBDjlZ.mjs +103 -0
  906. package/dist/types-j6MBDjlZ.mjs.map +1 -0
  907. package/dist/types-pOLeFKGq.d.mts +1720 -0
  908. package/dist/types-pOLeFKGq.d.mts.map +1 -0
  909. package/dist/update-check-CaZyFHZC.mjs +161 -0
  910. package/dist/update-check-CaZyFHZC.mjs.map +1 -0
  911. package/dist/upload-attempts-BodUoFBu.mjs +32 -0
  912. package/dist/upload-attempts-BodUoFBu.mjs.map +1 -0
  913. package/dist/url-Dn3IStq8.mjs +104 -0
  914. package/dist/url-Dn3IStq8.mjs.map +1 -0
  915. package/dist/url-pattern-DGAG6ZP2.mjs +41 -0
  916. package/dist/url-pattern-DGAG6ZP2.mjs.map +1 -0
  917. package/dist/user-BOvuF1sQ.mjs +171 -0
  918. package/dist/user-BOvuF1sQ.mjs.map +1 -0
  919. package/dist/utils-CoV-PYhg.mjs +439 -0
  920. package/dist/utils-CoV-PYhg.mjs.map +1 -0
  921. package/dist/validate-WkjGwBSO.mjs +516 -0
  922. package/dist/validate-WkjGwBSO.mjs.map +1 -0
  923. package/dist/validate-dK97qe7F.d.mts +468 -0
  924. package/dist/validate-dK97qe7F.d.mts.map +1 -0
  925. package/dist/validation-D-ICq_tY.mjs +219 -0
  926. package/dist/validation-D-ICq_tY.mjs.map +1 -0
  927. package/dist/version-DbT04wbH.mjs +9 -0
  928. package/dist/version-DbT04wbH.mjs.map +1 -0
  929. package/dist/version-IneBU54o.mjs +7 -0
  930. package/dist/version-IneBU54o.mjs.map +1 -0
  931. package/dist/virtual-modules-Brh6mRVe.mjs +516 -0
  932. package/dist/virtual-modules-Brh6mRVe.mjs.map +1 -0
  933. package/dist/widgets-D8T0xBYs.mjs +126 -0
  934. package/dist/widgets-D8T0xBYs.mjs.map +1 -0
  935. package/dist/wxr-taxonomies-B6iE8m9I.d.mts +34 -0
  936. package/dist/wxr-taxonomies-B6iE8m9I.d.mts.map +1 -0
  937. package/dist/wxr-taxonomies-DEzR9N7e.mjs +453 -0
  938. package/dist/wxr-taxonomies-DEzR9N7e.mjs.map +1 -0
  939. package/dist/zod-generator-DnfG5sGQ.mjs +424 -0
  940. package/dist/zod-generator-DnfG5sGQ.mjs.map +1 -0
  941. package/package.json +13 -14
  942. package/src/api/errors.ts +11 -0
  943. package/src/api/handlers/bulk-tag.ts +4 -4
  944. package/src/api/handlers/content.ts +39 -17
  945. package/src/api/handlers/index.ts +3 -0
  946. package/src/api/handlers/manifest.ts +2 -0
  947. package/src/api/handlers/media-upload.ts +3 -0
  948. package/src/api/handlers/media.ts +2 -2
  949. package/src/api/handlers/registry.ts +123 -70
  950. package/src/api/handlers/revision.ts +10 -2
  951. package/src/api/handlers/staged-references.ts +72 -6
  952. package/src/api/handlers/update-check.ts +236 -0
  953. package/src/api/redirect.ts +9 -1
  954. package/src/api/schemas/content.ts +4 -0
  955. package/src/api/schemas/import.ts +50 -14
  956. package/src/api/schemas/schema.ts +12 -6
  957. package/src/api/setup-complete.ts +49 -1
  958. package/src/api/types.ts +4 -0
  959. package/src/astro/dev-typegen.ts +15 -22
  960. package/src/astro/integration/dev-typegen.ts +32 -3
  961. package/src/astro/integration/index.ts +88 -22
  962. package/src/astro/integration/routes.ts +6 -0
  963. package/src/astro/integration/runtime.ts +33 -7
  964. package/src/astro/integration/virtual-modules.ts +1 -0
  965. package/src/astro/integration/vite-config.ts +16 -8
  966. package/src/astro/middleware/redirect.ts +15 -2
  967. package/src/astro/middleware/request-context.ts +13 -6
  968. package/src/astro/routes/api/admin/bylines/[id]/index.ts +11 -1
  969. package/src/astro/routes/api/admin/bylines/[id]/translations.ts +7 -1
  970. package/src/astro/routes/api/admin/bylines/index.ts +6 -1
  971. package/src/astro/routes/api/admin/core-update.ts +34 -0
  972. package/src/astro/routes/api/admin/plugins/marketplace/[id]/icon.ts +6 -2
  973. package/src/astro/routes/api/admin/themes/marketplace/[id]/thumbnail.ts +6 -2
  974. package/src/astro/routes/api/auth/invite/complete.ts +4 -4
  975. package/src/astro/routes/api/auth/magic-link/verify.ts +4 -1
  976. package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +9 -4
  977. package/src/astro/routes/api/auth/passkey/verify.ts +4 -4
  978. package/src/astro/routes/api/auth/signup/complete.ts +4 -4
  979. package/src/astro/routes/api/import/wordpress/execute.ts +252 -6
  980. package/src/astro/routes/api/import/wordpress/prepare.ts +1 -2
  981. package/src/astro/routes/api/oauth/register.ts +22 -2
  982. package/src/astro/routes/api/revisions/[revisionId]/restore.ts +17 -1
  983. package/src/astro/routes/api/setup/admin-verify.ts +6 -5
  984. package/src/astro/routes/api/typegen.ts +4 -46
  985. package/src/astro/session-user.ts +14 -0
  986. package/src/astro/types.ts +6 -0
  987. package/src/bylines/credits.ts +149 -0
  988. package/src/bylines/index.ts +4 -142
  989. package/src/cli/commands/seed.ts +2 -0
  990. package/src/cli/credentials.ts +1 -60
  991. package/src/cli/index.ts +0 -2
  992. package/src/client/index.ts +8 -2
  993. package/src/components/Image.astro +24 -13
  994. package/src/components/InlinePortableTextEditor.tsx +25 -8
  995. package/src/content/converters/portable-text-to-prosemirror.ts +23 -17
  996. package/src/content/converters/prosemirror-to-portable-text.ts +16 -5
  997. package/src/content/converters/types.ts +1 -0
  998. package/src/database/content-datetime.ts +111 -23
  999. package/src/database/migrations/036_i18n_menus_and_taxonomies.ts +132 -92
  1000. package/src/database/migrations/088_cron_oneshot_utc.ts +39 -0
  1001. package/src/database/migrations/089_auto_seed_completion.ts +13 -0
  1002. package/src/database/migrations/runner.ts +4 -0
  1003. package/src/database/repositories/comment.ts +2 -2
  1004. package/src/database/repositories/content.ts +15 -8
  1005. package/src/database/repositories/plugin-storage.ts +1 -1
  1006. package/src/database/repositories/redirect.ts +7 -2
  1007. package/src/database/repositories/relation.ts +2 -2
  1008. package/src/database/types.ts +1 -1
  1009. package/src/db/node-sqlite-compat.ts +63 -37
  1010. package/src/emdash-runtime.ts +63 -35
  1011. package/src/import/wxr-taxonomies.ts +163 -88
  1012. package/src/index.ts +10 -0
  1013. package/src/loader.ts +8 -1
  1014. package/src/mcp/server.ts +90 -8
  1015. package/src/media/usage/activation.ts +18 -9
  1016. package/src/migrations/config-loader.ts +5 -0
  1017. package/src/object-cache/index.ts +19 -7
  1018. package/src/object-cache/types.ts +3 -2
  1019. package/src/plugin-types.ts +7 -0
  1020. package/src/plugins/adapt-sandbox-entry.ts +47 -12
  1021. package/src/plugins/byline-access.ts +158 -0
  1022. package/src/plugins/context.ts +7 -1
  1023. package/src/plugins/cron.ts +27 -4
  1024. package/src/plugins/hooks.ts +47 -0
  1025. package/src/plugins/host.ts +1 -0
  1026. package/src/plugins/index.ts +10 -1
  1027. package/src/plugins/manifest-schema.ts +5 -1
  1028. package/src/plugins/marketplace.ts +48 -36
  1029. package/src/plugins/sandbox/proxy.ts +1 -0
  1030. package/src/plugins/types.ts +95 -0
  1031. package/src/query.ts +9 -2
  1032. package/src/redirects/cache.ts +11 -1
  1033. package/src/redirects/destination.ts +20 -0
  1034. package/src/redirects/loops.ts +10 -6
  1035. package/src/redirects/patterns.ts +12 -30
  1036. package/src/references/staged.ts +40 -0
  1037. package/src/registry/testing.ts +59 -14
  1038. package/src/request-context.ts +8 -0
  1039. package/src/schema/block-type-registry.ts +1 -1
  1040. package/src/schema/env-types.ts +37 -0
  1041. package/src/schema/project-env-types.ts +41 -0
  1042. package/src/schema/registry.ts +33 -2
  1043. package/src/schema/types.ts +5 -0
  1044. package/src/schema/url-pattern.ts +10 -0
  1045. package/src/schema/zod-generator.ts +11 -1
  1046. package/src/seed/apply.ts +34 -1
  1047. package/src/seed/ownership.ts +15 -0
  1048. package/src/seed/validate.ts +45 -2
  1049. package/src/transfer/analyze/validate.ts +113 -1
  1050. package/src/transfer/analyze/values.ts +104 -1
  1051. package/src/transfer/analyze/write-rules.ts +8 -0
  1052. package/src/utils/url.ts +58 -3
  1053. package/src/virtual-modules.d.ts +3 -0
  1054. package/dist/action-token-CbKDcPJi.mjs +0 -26
  1055. package/dist/action-token-CbKDcPJi.mjs.map +0 -1
  1056. package/dist/activation-PtniBLt9.mjs +0 -382
  1057. package/dist/activation-PtniBLt9.mjs.map +0 -1
  1058. package/dist/adapters-C_Tf5x90.d.mts +0 -171
  1059. package/dist/adapters-C_Tf5x90.d.mts.map +0 -1
  1060. package/dist/allowed-origins-U1z4TdEZ.mjs +0 -116
  1061. package/dist/allowed-origins-U1z4TdEZ.mjs.map +0 -1
  1062. package/dist/api-CXwQkV_m.mjs +0 -5122
  1063. package/dist/api-CXwQkV_m.mjs.map +0 -1
  1064. package/dist/api-tokens-89WlohEN.mjs +0 -166
  1065. package/dist/api-tokens-89WlohEN.mjs.map +0 -1
  1066. package/dist/apply-Do3KNnUk.mjs +0 -1659
  1067. package/dist/apply-Do3KNnUk.mjs.map +0 -1
  1068. package/dist/approvals-CAX9Yw33.mjs +0 -460
  1069. package/dist/approvals-CAX9Yw33.mjs.map +0 -1
  1070. package/dist/artifact-fetch-B9W4CEST.mjs +0 -659
  1071. package/dist/artifact-fetch-B9W4CEST.mjs.map +0 -1
  1072. package/dist/audit-CrgmE9LE.mjs +0 -127
  1073. package/dist/audit-CrgmE9LE.mjs.map +0 -1
  1074. package/dist/authoritative-records-C2YzIdbu.mjs +0 -5172
  1075. package/dist/authoritative-records-C2YzIdbu.mjs.map +0 -1
  1076. package/dist/authorize-WgdKF8QY.mjs +0 -49
  1077. package/dist/authorize-WgdKF8QY.mjs.map +0 -1
  1078. package/dist/backup-Ck8_lMO3.mjs +0 -246
  1079. package/dist/backup-Ck8_lMO3.mjs.map +0 -1
  1080. package/dist/block-types-BQ90asVI.mjs +0 -132
  1081. package/dist/block-types-BQ90asVI.mjs.map +0 -1
  1082. package/dist/block-values-ACFqgB1D.mjs +0 -175
  1083. package/dist/block-values-ACFqgB1D.mjs.map +0 -1
  1084. package/dist/bundle-Db1iNMv_.mjs +0 -667
  1085. package/dist/bundle-Db1iNMv_.mjs.map +0 -1
  1086. package/dist/byline-BayaYGoj.mjs +0 -909
  1087. package/dist/byline-BayaYGoj.mjs.map +0 -1
  1088. package/dist/byline-fields-B8HH-35f.mjs +0 -254
  1089. package/dist/byline-fields-B8HH-35f.mjs.map +0 -1
  1090. package/dist/byline-fields-hMPjf6Eu.mjs +0 -123
  1091. package/dist/byline-fields-hMPjf6Eu.mjs.map +0 -1
  1092. package/dist/byline-registry-B_EK_TQf.mjs +0 -406
  1093. package/dist/byline-registry-B_EK_TQf.mjs.map +0 -1
  1094. package/dist/bylines-DFAaFXWi.mjs +0 -214
  1095. package/dist/bylines-DFAaFXWi.mjs.map +0 -1
  1096. package/dist/bylines-DkIxUxmr.mjs +0 -232
  1097. package/dist/bylines-DkIxUxmr.mjs.map +0 -1
  1098. package/dist/cache-DkvhQ8XE.mjs +0 -108
  1099. package/dist/cache-DkvhQ8XE.mjs.map +0 -1
  1100. package/dist/canonical-CcSuuTlH.mjs +0 -174
  1101. package/dist/canonical-CcSuuTlH.mjs.map +0 -1
  1102. package/dist/capture-triggers-DJEoOTOq.mjs +0 -362
  1103. package/dist/capture-triggers-DJEoOTOq.mjs.map +0 -1
  1104. package/dist/challenge-store-CvBl81AQ.mjs +0 -51
  1105. package/dist/challenge-store-CvBl81AQ.mjs.map +0 -1
  1106. package/dist/checksum-CClweQzI.mjs +0 -162
  1107. package/dist/checksum-CClweQzI.mjs.map +0 -1
  1108. package/dist/chrome-tags-D5caJwwp.mjs +0 -24
  1109. package/dist/chrome-tags-D5caJwwp.mjs.map +0 -1
  1110. package/dist/chunks-DwBaj8aT.mjs +0 -25
  1111. package/dist/chunks-DwBaj8aT.mjs.map +0 -1
  1112. package/dist/collection-deletion-CLCdXsnV.mjs +0 -436
  1113. package/dist/collection-deletion-CLCdXsnV.mjs.map +0 -1
  1114. package/dist/collection-deletion-processor-hNw8x01F.mjs +0 -217
  1115. package/dist/collection-deletion-processor-hNw8x01F.mjs.map +0 -1
  1116. package/dist/collection-slugs-cache-CUuiduLq.mjs +0 -85
  1117. package/dist/collection-slugs-cache-CUuiduLq.mjs.map +0 -1
  1118. package/dist/comment-D2uvL63j.mjs +0 -313
  1119. package/dist/comment-D2uvL63j.mjs.map +0 -1
  1120. package/dist/comment-reaction-DevUuzg4.mjs +0 -85
  1121. package/dist/comment-reaction-DevUuzg4.mjs.map +0 -1
  1122. package/dist/comments-Cq0s7_hO.mjs +0 -195
  1123. package/dist/comments-Cq0s7_hO.mjs.map +0 -1
  1124. package/dist/comments-M4EDYAHw.mjs +0 -99
  1125. package/dist/comments-M4EDYAHw.mjs.map +0 -1
  1126. package/dist/components-CuIGwXMs.mjs +0 -108
  1127. package/dist/components-CuIGwXMs.mjs.map +0 -1
  1128. package/dist/config-52Ea5IWt.d.mts +0 -39
  1129. package/dist/config-52Ea5IWt.d.mts.map +0 -1
  1130. package/dist/config-CCz3xOLc.mjs +0 -242
  1131. package/dist/config-CCz3xOLc.mjs.map +0 -1
  1132. package/dist/config-D3d5Qudq.d.mts +0 -6669
  1133. package/dist/config-D3d5Qudq.d.mts.map +0 -1
  1134. package/dist/content-CbnufDsM.mjs +0 -2018
  1135. package/dist/content-CbnufDsM.mjs.map +0 -1
  1136. package/dist/content-list-query-D_7B1FE5.d.mts +0 -26
  1137. package/dist/content-list-query-D_7B1FE5.d.mts.map +0 -1
  1138. package/dist/content-policy-CYu6K1KB.mjs +0 -46
  1139. package/dist/content-policy-CYu6K1KB.mjs.map +0 -1
  1140. package/dist/content-repair-DlDUgFGp.mjs +0 -442
  1141. package/dist/content-repair-DlDUgFGp.mjs.map +0 -1
  1142. package/dist/context-CGQLA1-a.mjs +0 -1922
  1143. package/dist/context-CGQLA1-a.mjs.map +0 -1
  1144. package/dist/cron-c4D5C5Fx.mjs +0 -284
  1145. package/dist/cron-c4D5C5Fx.mjs.map +0 -1
  1146. package/dist/dashboard-CBq9kmOn.mjs +0 -151
  1147. package/dist/dashboard-CBq9kmOn.mjs.map +0 -1
  1148. package/dist/default-DPsys51U.mjs +0 -81
  1149. package/dist/default-DPsys51U.mjs.map +0 -1
  1150. package/dist/deferred-tasks-CZ7rzBdo.d.mts +0 -9
  1151. package/dist/deferred-tasks-CZ7rzBdo.d.mts.map +0 -1
  1152. package/dist/dev-typegen-HRxwLRcT.mjs +0 -29
  1153. package/dist/dev-typegen-HRxwLRcT.mjs.map +0 -1
  1154. package/dist/device-flow-OcSqE9uY.mjs +0 -521
  1155. package/dist/device-flow-OcSqE9uY.mjs.map +0 -1
  1156. package/dist/digest-DVZ--cE9.mjs +0 -194
  1157. package/dist/digest-DVZ--cE9.mjs.map +0 -1
  1158. package/dist/direct-executor-DyjAqkpT.mjs +0 -104
  1159. package/dist/direct-executor-DyjAqkpT.mjs.map +0 -1
  1160. package/dist/dist-FPR93_xf.mjs +0 -810
  1161. package/dist/dist-FPR93_xf.mjs.map +0 -1
  1162. package/dist/email-console-DyQIgEnz.mjs +0 -50
  1163. package/dist/email-console-DyQIgEnz.mjs.map +0 -1
  1164. package/dist/email-locale-BYb16rVd.mjs +0 -25
  1165. package/dist/email-locale-BYb16rVd.mjs.map +0 -1
  1166. package/dist/emdash-runtime-CrzxJFmF.mjs +0 -4214
  1167. package/dist/emdash-runtime-CrzxJFmF.mjs.map +0 -1
  1168. package/dist/enrich-DBtCncE2.mjs +0 -194
  1169. package/dist/enrich-DBtCncE2.mjs.map +0 -1
  1170. package/dist/entry-lock-BN5y4YbO.d.mts +0 -4481
  1171. package/dist/entry-lock-BN5y4YbO.d.mts.map +0 -1
  1172. package/dist/entry-lock-BaRBHCsH.mjs +0 -1173
  1173. package/dist/entry-lock-BaRBHCsH.mjs.map +0 -1
  1174. package/dist/entry-lock-C6NcnZPV.mjs +0 -163
  1175. package/dist/entry-lock-C6NcnZPV.mjs.map +0 -1
  1176. package/dist/entry-locks-BTyQLdbC.mjs +0 -167
  1177. package/dist/entry-locks-BTyQLdbC.mjs.map +0 -1
  1178. package/dist/error-BfsNNrIE.mjs +0 -90
  1179. package/dist/error-BfsNNrIE.mjs.map +0 -1
  1180. package/dist/errors-BN1QAnEY.mjs +0 -460
  1181. package/dist/errors-BN1QAnEY.mjs.map +0 -1
  1182. package/dist/errors-Bt3goF8I.mjs +0 -120
  1183. package/dist/errors-Bt3goF8I.mjs.map +0 -1
  1184. package/dist/escape-BveidMa2.mjs +0 -9
  1185. package/dist/escape-BveidMa2.mjs.map +0 -1
  1186. package/dist/fence-Bb_IbCxI.mjs +0 -162
  1187. package/dist/fence-Bb_IbCxI.mjs.map +0 -1
  1188. package/dist/field-defs-cache-CsZctvbu.mjs +0 -77
  1189. package/dist/field-defs-cache-CsZctvbu.mjs.map +0 -1
  1190. package/dist/field-map-6m9rF49t.mjs +0 -83
  1191. package/dist/field-map-6m9rF49t.mjs.map +0 -1
  1192. package/dist/focal-point-CZ3d1wK5.mjs +0 -23
  1193. package/dist/focal-point-CZ3d1wK5.mjs.map +0 -1
  1194. package/dist/fts-manager-CCaZTp8y.mjs +0 -443
  1195. package/dist/fts-manager-CCaZTp8y.mjs.map +0 -1
  1196. package/dist/gc-xowRjczI.mjs +0 -75
  1197. package/dist/gc-xowRjczI.mjs.map +0 -1
  1198. package/dist/hash-COVK27Pc.mjs +0 -37
  1199. package/dist/hash-COVK27Pc.mjs.map +0 -1
  1200. package/dist/hook-result-CYSk0XFe.d.mts +0 -31
  1201. package/dist/hook-result-CYSk0XFe.d.mts.map +0 -1
  1202. package/dist/hreflang-CChPV7jx.mjs +0 -105
  1203. package/dist/hreflang-CChPV7jx.mjs.map +0 -1
  1204. package/dist/hreflang-DRslq3QI.d.mts +0 -50
  1205. package/dist/hreflang-DRslq3QI.d.mts.map +0 -1
  1206. package/dist/http-route-dispatch-CAdp2onn.mjs +0 -339
  1207. package/dist/http-route-dispatch-CAdp2onn.mjs.map +0 -1
  1208. package/dist/identity-NVTOOQyq.mjs +0 -35
  1209. package/dist/identity-NVTOOQyq.mjs.map +0 -1
  1210. package/dist/import-wpSO2N0x.mjs +0 -2020
  1211. package/dist/import-wpSO2N0x.mjs.map +0 -1
  1212. package/dist/index-CDs2wq4X.d.mts +0 -623
  1213. package/dist/index-CDs2wq4X.d.mts.map +0 -1
  1214. package/dist/install-finalization-D9R9R-W8.mjs +0 -58
  1215. package/dist/install-finalization-D9R9R-W8.mjs.map +0 -1
  1216. package/dist/keys-Bck6LBfF.mjs +0 -61
  1217. package/dist/keys-Bck6LBfF.mjs.map +0 -1
  1218. package/dist/kinds-CYmRESWj.mjs +0 -974
  1219. package/dist/kinds-CYmRESWj.mjs.map +0 -1
  1220. package/dist/lifecycle-C815ZQfV.mjs +0 -25
  1221. package/dist/lifecycle-C815ZQfV.mjs.map +0 -1
  1222. package/dist/load-D99axixL.mjs +0 -28
  1223. package/dist/load-D99axixL.mjs.map +0 -1
  1224. package/dist/loader-CrRPfkHS.mjs +0 -1197
  1225. package/dist/loader-CrRPfkHS.mjs.map +0 -1
  1226. package/dist/loops-DMKlygqX.mjs +0 -203
  1227. package/dist/loops-DMKlygqX.mjs.map +0 -1
  1228. package/dist/manifest-builder-BQzCHNgB.mjs +0 -189
  1229. package/dist/manifest-builder-BQzCHNgB.mjs.map +0 -1
  1230. package/dist/manifest-schema-Ci2gmd0u.mjs +0 -492
  1231. package/dist/manifest-schema-Ci2gmd0u.mjs.map +0 -1
  1232. package/dist/media-BUQePMxP.mjs +0 -373
  1233. package/dist/media-BUQePMxP.mjs.map +0 -1
  1234. package/dist/media-DH8ibNlY.mjs +0 -294
  1235. package/dist/media-DH8ibNlY.mjs.map +0 -1
  1236. package/dist/media-OEIQ3bVc.mjs +0 -408
  1237. package/dist/media-OEIQ3bVc.mjs.map +0 -1
  1238. package/dist/media-allowlist-pYtaBA95.mjs +0 -44
  1239. package/dist/media-allowlist-pYtaBA95.mjs.map +0 -1
  1240. package/dist/media-folders-Bf8_s4de.mjs +0 -210
  1241. package/dist/media-folders-Bf8_s4de.mjs.map +0 -1
  1242. package/dist/media-url-C6klEuNd.mjs +0 -43
  1243. package/dist/media-url-C6klEuNd.mjs.map +0 -1
  1244. package/dist/media-usage-D7Y64m6v.mjs +0 -1629
  1245. package/dist/media-usage-D7Y64m6v.mjs.map +0 -1
  1246. package/dist/media-usage-activation-DrqbmgLA.mjs +0 -78
  1247. package/dist/media-usage-activation-DrqbmgLA.mjs.map +0 -1
  1248. package/dist/media-usage-work-DommYhYA.mjs +0 -152
  1249. package/dist/media-usage-work-DommYhYA.mjs.map +0 -1
  1250. package/dist/media-usage-work-HU63hNDu.mjs +0 -586
  1251. package/dist/media-usage-work-HU63hNDu.mjs.map +0 -1
  1252. package/dist/menus-BQfusWEC.mjs +0 -3608
  1253. package/dist/menus-BQfusWEC.mjs.map +0 -1
  1254. package/dist/menus-BtwjQt5s.mjs +0 -753
  1255. package/dist/menus-BtwjQt5s.mjs.map +0 -1
  1256. package/dist/menus-p_M1V7J_.mjs +0 -139
  1257. package/dist/menus-p_M1V7J_.mjs.map +0 -1
  1258. package/dist/mime-C94qBG-P.mjs +0 -36
  1259. package/dist/mime-C94qBG-P.mjs.map +0 -1
  1260. package/dist/mode-DpYW3w6U.mjs +0 -23
  1261. package/dist/mode-DpYW3w6U.mjs.map +0 -1
  1262. package/dist/node-sqlite-compat-pWFw0lcc.mjs +0 -46
  1263. package/dist/node-sqlite-compat-pWFw0lcc.mjs.map +0 -1
  1264. package/dist/normalize-DduyxBjf.mjs +0 -191
  1265. package/dist/normalize-DduyxBjf.mjs.map +0 -1
  1266. package/dist/oauth-authorization-DAXsH1H9.mjs +0 -274
  1267. package/dist/oauth-authorization-DAXsH1H9.mjs.map +0 -1
  1268. package/dist/oauth-clients-DENiDQri.mjs +0 -266
  1269. package/dist/oauth-clients-DENiDQri.mjs.map +0 -1
  1270. package/dist/oauth-state-store-y8mEYVq9.mjs +0 -50
  1271. package/dist/oauth-state-store-y8mEYVq9.mjs.map +0 -1
  1272. package/dist/oauth-user-lookup-CtTYAy-O.mjs +0 -26
  1273. package/dist/oauth-user-lookup-CtTYAy-O.mjs.map +0 -1
  1274. package/dist/object-cache-CqWNY5uP.mjs +0 -582
  1275. package/dist/object-cache-CqWNY5uP.mjs.map +0 -1
  1276. package/dist/options-BYa1FgIM.d.mts +0 -81
  1277. package/dist/options-BYa1FgIM.d.mts.map +0 -1
  1278. package/dist/parse-CORGGhHf.mjs +0 -81
  1279. package/dist/parse-CORGGhHf.mjs.map +0 -1
  1280. package/dist/parse-avNM1xWV.d.mts +0 -168
  1281. package/dist/parse-avNM1xWV.d.mts.map +0 -1
  1282. package/dist/passkey-config-Dih5YeIS.mjs +0 -46
  1283. package/dist/passkey-config-Dih5YeIS.mjs.map +0 -1
  1284. package/dist/paths-d51RFm8M.mjs +0 -77
  1285. package/dist/paths-d51RFm8M.mjs.map +0 -1
  1286. package/dist/patterns-CoqlXUvk.mjs +0 -145
  1287. package/dist/patterns-CoqlXUvk.mjs.map +0 -1
  1288. package/dist/placeholder-D2aksPMF.d.mts +0 -306
  1289. package/dist/placeholder-D2aksPMF.d.mts.map +0 -1
  1290. package/dist/plan-DqeZKuaR.mjs +0 -135
  1291. package/dist/plan-DqeZKuaR.mjs.map +0 -1
  1292. package/dist/plugins-Bb7oqjQA.mjs +0 -277
  1293. package/dist/plugins-Bb7oqjQA.mjs.map +0 -1
  1294. package/dist/policy-BcEqut3n.mjs +0 -45
  1295. package/dist/policy-BcEqut3n.mjs.map +0 -1
  1296. package/dist/portable-text-DXE8ymtD.mjs +0 -307
  1297. package/dist/portable-text-DXE8ymtD.mjs.map +0 -1
  1298. package/dist/preview-DEDWbwA_.mjs +0 -107
  1299. package/dist/preview-DEDWbwA_.mjs.map +0 -1
  1300. package/dist/protocol-BJbTzvwl.d.mts +0 -61
  1301. package/dist/protocol-BJbTzvwl.d.mts.map +0 -1
  1302. package/dist/public-submission-D9c9S14m.mjs +0 -250
  1303. package/dist/public-submission-D9c9S14m.mjs.map +0 -1
  1304. package/dist/public-url-CIRe-2T6.mjs +0 -101
  1305. package/dist/public-url-CIRe-2T6.mjs.map +0 -1
  1306. package/dist/query-BzifXlPS.mjs +0 -1156
  1307. package/dist/query-BzifXlPS.mjs.map +0 -1
  1308. package/dist/query-OzMJ6vJP.mjs +0 -41
  1309. package/dist/query-OzMJ6vJP.mjs.map +0 -1
  1310. package/dist/rate-limit-Csp60Vik.mjs +0 -120
  1311. package/dist/rate-limit-Csp60Vik.mjs.map +0 -1
  1312. package/dist/receipt-B-aU4hpJ.mjs +0 -43
  1313. package/dist/receipt-B-aU4hpJ.mjs.map +0 -1
  1314. package/dist/redirect-CDSw1sU3.mjs +0 -17
  1315. package/dist/redirect-CDSw1sU3.mjs.map +0 -1
  1316. package/dist/redirect-D1ArbO85.mjs +0 -411
  1317. package/dist/redirect-D1ArbO85.mjs.map +0 -1
  1318. package/dist/redirects-BjTwDTsV.mjs +0 -148
  1319. package/dist/redirects-BjTwDTsV.mjs.map +0 -1
  1320. package/dist/redirects-Ck50kH3n.mjs +0 -446
  1321. package/dist/redirects-Ck50kH3n.mjs.map +0 -1
  1322. package/dist/registry-CFcNCayZ.mjs +0 -6754
  1323. package/dist/registry-CFcNCayZ.mjs.map +0 -1
  1324. package/dist/relations-Cfaa1fDl.mjs +0 -776
  1325. package/dist/relations-Cfaa1fDl.mjs.map +0 -1
  1326. package/dist/request-cache-iHRlHx1d.mjs +0 -104
  1327. package/dist/request-cache-iHRlHx1d.mjs.map +0 -1
  1328. package/dist/request-meta-D47mqyev.mjs +0 -141
  1329. package/dist/request-meta-D47mqyev.mjs.map +0 -1
  1330. package/dist/resolve-BPE8sMvx.mjs +0 -99
  1331. package/dist/resolve-BPE8sMvx.mjs.map +0 -1
  1332. package/dist/resolve-C0s1E_fH.mjs +0 -199
  1333. package/dist/resolve-C0s1E_fH.mjs.map +0 -1
  1334. package/dist/revision-j1p4-bOj.mjs +0 -302
  1335. package/dist/revision-j1p4-bOj.mjs.map +0 -1
  1336. package/dist/route-wire-C9PJV9aL.mjs +0 -197
  1337. package/dist/route-wire-C9PJV9aL.mjs.map +0 -1
  1338. package/dist/routes-lyYw0mMf.mjs +0 -272
  1339. package/dist/routes-lyYw0mMf.mjs.map +0 -1
  1340. package/dist/runner-B3eyB9Gb.mjs +0 -6121
  1341. package/dist/runner-B3eyB9Gb.mjs.map +0 -1
  1342. package/dist/runner-DoYH2Jcu.d.mts +0 -68
  1343. package/dist/runner-DoYH2Jcu.d.mts.map +0 -1
  1344. package/dist/schema-BAayK46S.mjs +0 -13
  1345. package/dist/schema-BAayK46S.mjs.map +0 -1
  1346. package/dist/schema-Gqcl-8G4.mjs +0 -815
  1347. package/dist/schema-Gqcl-8G4.mjs.map +0 -1
  1348. package/dist/scopes-BqPOKoKf.mjs +0 -34
  1349. package/dist/scopes-BqPOKoKf.mjs.map +0 -1
  1350. package/dist/search-YJKPIEV6.mjs +0 -448
  1351. package/dist/search-YJKPIEV6.mjs.map +0 -1
  1352. package/dist/sections-BR_e-wK5.mjs +0 -346
  1353. package/dist/sections-BR_e-wK5.mjs.map +0 -1
  1354. package/dist/seo-Dsj8hy3j.mjs +0 -114
  1355. package/dist/seo-Dsj8hy3j.mjs.map +0 -1
  1356. package/dist/seo-XvH4LNNp.mjs +0 -133
  1357. package/dist/seo-XvH4LNNp.mjs.map +0 -1
  1358. package/dist/service-BsVG05gS.mjs +0 -150
  1359. package/dist/service-BsVG05gS.mjs.map +0 -1
  1360. package/dist/session-user-DgKbYrlj.mjs +0 -51
  1361. package/dist/session-user-DgKbYrlj.mjs.map +0 -1
  1362. package/dist/settings-CNPUntkh.mjs +0 -51
  1363. package/dist/settings-CNPUntkh.mjs.map +0 -1
  1364. package/dist/settings-D5EHi0Tk.mjs +0 -439
  1365. package/dist/settings-D5EHi0Tk.mjs.map +0 -1
  1366. package/dist/settings-DSfE7wOa.mjs +0 -61
  1367. package/dist/settings-DSfE7wOa.mjs.map +0 -1
  1368. package/dist/setup-complete-B8W8sJ9v.mjs +0 -26
  1369. package/dist/setup-complete-B8W8sJ9v.mjs.map +0 -1
  1370. package/dist/setup-nonce-DnSBP260.mjs +0 -25
  1371. package/dist/setup-nonce-DnSBP260.mjs.map +0 -1
  1372. package/dist/site-settings-NGzdrt7O.mjs +0 -50
  1373. package/dist/site-settings-NGzdrt7O.mjs.map +0 -1
  1374. package/dist/site-url-D6JB7tLW.mjs +0 -16
  1375. package/dist/site-url-D6JB7tLW.mjs.map +0 -1
  1376. package/dist/snapshot-CdcwwWAf.mjs +0 -414
  1377. package/dist/snapshot-CdcwwWAf.mjs.map +0 -1
  1378. package/dist/ssrf-Dv0_tRpo.mjs +0 -406
  1379. package/dist/ssrf-Dv0_tRpo.mjs.map +0 -1
  1380. package/dist/stage-CUjhED3P.mjs +0 -662
  1381. package/dist/stage-CUjhED3P.mjs.map +0 -1
  1382. package/dist/staged-C36IWXff.mjs +0 -659
  1383. package/dist/staged-C36IWXff.mjs.map +0 -1
  1384. package/dist/state-CKouMCSY.mjs +0 -153
  1385. package/dist/state-CKouMCSY.mjs.map +0 -1
  1386. package/dist/status-lzyj4Uu7.mjs +0 -30
  1387. package/dist/status-lzyj4Uu7.mjs.map +0 -1
  1388. package/dist/storage-query-B-cWcTjJ.d.mts +0 -1594
  1389. package/dist/storage-query-B-cWcTjJ.d.mts.map +0 -1
  1390. package/dist/tar-DsTXX6ch.mjs +0 -449
  1391. package/dist/tar-DsTXX6ch.mjs.map +0 -1
  1392. package/dist/target-DLQCwp_Z.mjs +0 -27
  1393. package/dist/target-DLQCwp_Z.mjs.map +0 -1
  1394. package/dist/taxonomies-BlAjr4BL.mjs +0 -697
  1395. package/dist/taxonomies-BlAjr4BL.mjs.map +0 -1
  1396. package/dist/taxonomies-Byyo7LOZ.mjs +0 -939
  1397. package/dist/taxonomies-Byyo7LOZ.mjs.map +0 -1
  1398. package/dist/taxonomy-CKDwM61Y.mjs +0 -525
  1399. package/dist/taxonomy-CKDwM61Y.mjs.map +0 -1
  1400. package/dist/tokens-BojXlk49.mjs +0 -171
  1401. package/dist/tokens-BojXlk49.mjs.map +0 -1
  1402. package/dist/transaction-DLPQWik1.mjs +0 -29
  1403. package/dist/transaction-DLPQWik1.mjs.map +0 -1
  1404. package/dist/transfer-XSTh2BCr.mjs +0 -8706
  1405. package/dist/transfer-XSTh2BCr.mjs.map +0 -1
  1406. package/dist/transfer-download-DkoCDA9d.mjs +0 -33
  1407. package/dist/transfer-download-DkoCDA9d.mjs.map +0 -1
  1408. package/dist/transfer-iQ26J-RT.mjs +0 -166
  1409. package/dist/transfer-iQ26J-RT.mjs.map +0 -1
  1410. package/dist/transformations-C7RQabKQ.mjs +0 -196
  1411. package/dist/transformations-C7RQabKQ.mjs.map +0 -1
  1412. package/dist/transport-D3RulfD6.mjs +0 -136
  1413. package/dist/transport-D3RulfD6.mjs.map +0 -1
  1414. package/dist/transport-DhlZlf4D.d.mts +0 -42
  1415. package/dist/transport-DhlZlf4D.d.mts.map +0 -1
  1416. package/dist/trusted-proxy-B6ECOZJc.mjs +0 -51
  1417. package/dist/trusted-proxy-B6ECOZJc.mjs.map +0 -1
  1418. package/dist/turnstile-lqUiY7lP.mjs +0 -53
  1419. package/dist/turnstile-lqUiY7lP.mjs.map +0 -1
  1420. package/dist/types-4Dn9bZhu.mjs +0 -77
  1421. package/dist/types-4Dn9bZhu.mjs.map +0 -1
  1422. package/dist/types-5LSo7PPx.d.mts +0 -85
  1423. package/dist/types-5LSo7PPx.d.mts.map +0 -1
  1424. package/dist/types-BQ3hwYJT.d.mts +0 -896
  1425. package/dist/types-BQ3hwYJT.d.mts.map +0 -1
  1426. package/dist/types-BYEk7qo3.d.mts +0 -198
  1427. package/dist/types-BYEk7qo3.d.mts.map +0 -1
  1428. package/dist/types-CJKsWVFR.mjs +0 -199
  1429. package/dist/types-CJKsWVFR.mjs.map +0 -1
  1430. package/dist/types-Ca_w8mmY.d.mts +0 -363
  1431. package/dist/types-Ca_w8mmY.d.mts.map +0 -1
  1432. package/dist/types-CkE41ZAG.mjs +0 -18
  1433. package/dist/types-CkE41ZAG.mjs.map +0 -1
  1434. package/dist/types-D0aJW2uR.d.mts +0 -1641
  1435. package/dist/types-D0aJW2uR.d.mts.map +0 -1
  1436. package/dist/types-DbpN4Qto.d.mts +0 -372
  1437. package/dist/types-DbpN4Qto.d.mts.map +0 -1
  1438. package/dist/types-ILDI1sdY.mjs +0 -16
  1439. package/dist/types-ILDI1sdY.mjs.map +0 -1
  1440. package/dist/types-OC5c-edM.mjs +0 -22
  1441. package/dist/types-OC5c-edM.mjs.map +0 -1
  1442. package/dist/types-aOOxRSx6.mjs +0 -103
  1443. package/dist/types-aOOxRSx6.mjs.map +0 -1
  1444. package/dist/types-m1WbUffD.d.mts +0 -198
  1445. package/dist/types-m1WbUffD.d.mts.map +0 -1
  1446. package/dist/types-uxLoPBio.d.mts +0 -124
  1447. package/dist/types-uxLoPBio.d.mts.map +0 -1
  1448. package/dist/types-we5uR-tV.d.mts +0 -287
  1449. package/dist/types-we5uR-tV.d.mts.map +0 -1
  1450. package/dist/upload-attempts-DduMy6B0.mjs +0 -32
  1451. package/dist/upload-attempts-DduMy6B0.mjs.map +0 -1
  1452. package/dist/url-pattern-B3EwxAAk.mjs +0 -33
  1453. package/dist/url-pattern-B3EwxAAk.mjs.map +0 -1
  1454. package/dist/user-ElwQjTQT.mjs +0 -171
  1455. package/dist/user-ElwQjTQT.mjs.map +0 -1
  1456. package/dist/utils-BlAXmfOG.mjs +0 -439
  1457. package/dist/utils-BlAXmfOG.mjs.map +0 -1
  1458. package/dist/validate-CH0X5b2c.d.mts +0 -468
  1459. package/dist/validate-CH0X5b2c.d.mts.map +0 -1
  1460. package/dist/validate-CfgRpcjA.mjs +0 -492
  1461. package/dist/validate-CfgRpcjA.mjs.map +0 -1
  1462. package/dist/validation-DvYJtv4k.mjs +0 -218
  1463. package/dist/validation-DvYJtv4k.mjs.map +0 -1
  1464. package/dist/version-DgYjhTud.mjs +0 -9
  1465. package/dist/version-DgYjhTud.mjs.map +0 -1
  1466. package/dist/version-Dq71scUb.mjs +0 -7
  1467. package/dist/version-Dq71scUb.mjs.map +0 -1
  1468. package/dist/widgets-ChFIj0be.mjs +0 -126
  1469. package/dist/widgets-ChFIj0be.mjs.map +0 -1
  1470. package/dist/wxr-taxonomies-CBZMp2YX.mjs +0 -372
  1471. package/dist/wxr-taxonomies-CBZMp2YX.mjs.map +0 -1
  1472. package/dist/wxr-taxonomies-DlKDpWN1.d.mts +0 -34
  1473. package/dist/wxr-taxonomies-DlKDpWN1.d.mts.map +0 -1
  1474. package/dist/zod-generator-DmTKI-Ig.mjs +0 -426
  1475. package/dist/zod-generator-DmTKI-Ig.mjs.map +0 -1
  1476. package/src/cli/commands/bundle-utils.ts +0 -408
  1477. package/src/cli/commands/bundle.ts +0 -659
  1478. package/src/cli/commands/plugin-init.ts +0 -417
  1479. package/src/cli/commands/plugin-validate.ts +0 -31
  1480. package/src/cli/commands/plugin.ts +0 -33
  1481. package/src/cli/commands/publish.ts +0 -721
  1482. /package/dist/{api-tokens-FaG1zPsj.mjs → api-tokens-BLz2MtQs.mjs} +0 -0
  1483. /package/dist/{ssrf-DZOt8Qof.mjs → ssrf-tA45vIPX.mjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"verify.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/auth/passkey/verify.ts"],"sourcesContent":["/**\n * POST /_emdash/api/auth/passkey/verify\n *\n * Verify a passkey authentication and create a session\n */\n\nimport type { APIRoute } from \"astro\";\n\nexport const prerender = false;\n\nimport { createKyselyAdapter } from \"@emdash-cms/auth/adapters/kysely\";\nimport { authenticateWithPasskey, PasskeyAuthenticationError } from \"@emdash-cms/auth/passkey\";\n\nimport { apiError, apiSuccess, handleError } from \"#api/error.js\";\nimport { isParseError, parseBody } from \"#api/parse.js\";\nimport { getPublicOrigin } from \"#api/public-url.js\";\nimport { passkeyVerifyBody } from \"#api/schemas.js\";\nimport { getConfiguredAllowedOrigins, validateAllowedOrigins } from \"#auth/allowed-origins.js\";\nimport { createChallengeStore } from \"#auth/challenge-store.js\";\nimport { getPasskeyConfig } from \"#auth/passkey-config.js\";\nimport { OptionsRepository } from \"#db/repositories/options.js\";\n\nexport const POST: APIRoute = async ({ request, locals, session }) => {\n\tconst { emdash } = locals;\n\n\tif (!emdash?.db) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\ttry {\n\t\tconst body = await parseBody(request, passkeyVerifyBody);\n\t\tif (isParseError(body)) return body;\n\n\t\t// Get passkey config\n\t\tconst url = new URL(request.url);\n\t\tconst options = new OptionsRepository(emdash.db);\n\t\tconst siteName = (await options.get<string>(\"emdash:site_title\")) ?? undefined;\n\t\tconst siteUrl = getPublicOrigin(url, emdash?.config);\n\t\tconst allowedOrigins = validateAllowedOrigins(\n\t\t\tsiteUrl,\n\t\t\tgetConfiguredAllowedOrigins(emdash?.config),\n\t\t);\n\t\tconst passkeyConfig = getPasskeyConfig(url, siteName, siteUrl, allowedOrigins);\n\n\t\t// Authenticate with passkey\n\t\tconst adapter = createKyselyAdapter(emdash.db);\n\t\tconst challengeStore = createChallengeStore(emdash.db);\n\n\t\tconst user = await authenticateWithPasskey(\n\t\t\tpasskeyConfig,\n\t\t\tadapter,\n\t\t\tbody.credential,\n\t\t\tchallengeStore,\n\t\t);\n\n\t\t// Create session\n\t\tif (session) {\n\t\t\tsession.set(\"user\", { id: user.id });\n\t\t}\n\n\t\treturn apiSuccess({\n\t\t\tsuccess: true,\n\t\t\tuser: {\n\t\t\t\tid: user.id,\n\t\t\t\temail: user.email,\n\t\t\t\tname: user.name,\n\t\t\t\trole: user.role,\n\t\t\t},\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof PasskeyAuthenticationError) {\n\t\t\treturn apiError(\"UNAUTHORIZED\", \"Authentication failed\", 401);\n\t\t}\n\n\t\treturn handleError(error, \"Authentication failed\", \"PASSKEY_VERIFY_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAa,YAAY;AAczB,MAAa,OAAiB,OAAO,EAAE,SAAS,QAAQ,cAAc;CACrE,MAAM,EAAE,WAAW;AAEnB,KAAI,CAAC,QAAQ,GACZ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;AAGpE,KAAI;EACH,MAAM,OAAO,MAAM,UAAU,SAAS,kBAAkB;AACxD,MAAI,aAAa,KAAK,CAAE,QAAO;EAG/B,MAAM,MAAM,IAAI,IAAI,QAAQ,IAAI;EAEhC,MAAM,WAAY,MADF,IAAI,kBAAkB,OAAO,GAAG,CAChB,IAAY,oBAAoB,IAAK;EACrE,MAAM,UAAU,gBAAgB,KAAK,QAAQ,OAAO;EAKpD,MAAM,gBAAgB,iBAAiB,KAAK,UAAU,SAJ/B,uBACtB,SACA,4BAA4B,QAAQ,OAAO,CAC3C,CAC6E;EAG9E,MAAM,UAAU,oBAAoB,OAAO,GAAG;EAC9C,MAAM,iBAAiB,qBAAqB,OAAO,GAAG;EAEtD,MAAM,OAAO,MAAM,wBAClB,eACA,SACA,KAAK,YACL,eACA;AAGD,MAAI,QACH,SAAQ,IAAI,QAAQ,EAAE,IAAI,KAAK,IAAI,CAAC;AAGrC,SAAO,WAAW;GACjB,SAAS;GACT,MAAM;IACL,IAAI,KAAK;IACT,OAAO,KAAK;IACZ,MAAM,KAAK;IACX,MAAM,KAAK;IACX;GACD,CAAC;UACM,OAAO;AACf,MAAI,iBAAiB,2BACpB,QAAO,SAAS,gBAAgB,yBAAyB,IAAI;AAG9D,SAAO,YAAY,OAAO,yBAAyB,uBAAuB"}
1
+ {"version":3,"file":"verify.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/auth/passkey/verify.ts"],"sourcesContent":["/**\n * POST /_emdash/api/auth/passkey/verify\n *\n * Verify a passkey authentication and create a session\n */\n\nimport type { APIRoute } from \"astro\";\n\nexport const prerender = false;\n\nimport { createKyselyAdapter } from \"@emdash-cms/auth/adapters/kysely\";\nimport { authenticateWithPasskey, PasskeyAuthenticationError } from \"@emdash-cms/auth/passkey\";\n\nimport { apiError, apiSuccess, handleError } from \"#api/error.js\";\nimport { isParseError, parseBody } from \"#api/parse.js\";\nimport { getPublicOrigin } from \"#api/public-url.js\";\nimport { passkeyVerifyBody } from \"#api/schemas.js\";\nimport { getConfiguredAllowedOrigins, validateAllowedOrigins } from \"#auth/allowed-origins.js\";\nimport { createChallengeStore } from \"#auth/challenge-store.js\";\nimport { getPasskeyConfig } from \"#auth/passkey-config.js\";\nimport { OptionsRepository } from \"#db/repositories/options.js\";\n\nimport { sessionUnavailableError } from \"../../../../session-user.js\";\n\nexport const POST: APIRoute = async ({ request, locals, session }) => {\n\tconst { emdash } = locals;\n\n\tif (!emdash?.db) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\tif (!session) return sessionUnavailableError();\n\n\ttry {\n\t\tconst body = await parseBody(request, passkeyVerifyBody);\n\t\tif (isParseError(body)) return body;\n\n\t\t// Get passkey config\n\t\tconst url = new URL(request.url);\n\t\tconst options = new OptionsRepository(emdash.db);\n\t\tconst siteName = (await options.get<string>(\"emdash:site_title\")) ?? undefined;\n\t\tconst siteUrl = getPublicOrigin(url, emdash?.config);\n\t\tconst allowedOrigins = validateAllowedOrigins(\n\t\t\tsiteUrl,\n\t\t\tgetConfiguredAllowedOrigins(emdash?.config),\n\t\t);\n\t\tconst passkeyConfig = getPasskeyConfig(url, siteName, siteUrl, allowedOrigins);\n\n\t\t// Authenticate with passkey\n\t\tconst adapter = createKyselyAdapter(emdash.db);\n\t\tconst challengeStore = createChallengeStore(emdash.db);\n\n\t\tconst user = await authenticateWithPasskey(\n\t\t\tpasskeyConfig,\n\t\t\tadapter,\n\t\t\tbody.credential,\n\t\t\tchallengeStore,\n\t\t);\n\n\t\tsession.set(\"user\", { id: user.id });\n\n\t\treturn apiSuccess({\n\t\t\tsuccess: true,\n\t\t\tuser: {\n\t\t\t\tid: user.id,\n\t\t\t\temail: user.email,\n\t\t\t\tname: user.name,\n\t\t\t\trole: user.role,\n\t\t\t},\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof PasskeyAuthenticationError) {\n\t\t\treturn apiError(\"UNAUTHORIZED\", \"Authentication failed\", 401);\n\t\t}\n\n\t\treturn handleError(error, \"Authentication failed\", \"PASSKEY_VERIFY_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAa,YAAY;AAgBzB,MAAa,OAAiB,OAAO,EAAE,SAAS,QAAQ,cAAc;CACrE,MAAM,EAAE,WAAW;AAEnB,KAAI,CAAC,QAAQ,GACZ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;AAEpE,KAAI,CAAC,QAAS,QAAO,yBAAyB;AAE9C,KAAI;EACH,MAAM,OAAO,MAAM,UAAU,SAAS,kBAAkB;AACxD,MAAI,aAAa,KAAK,CAAE,QAAO;EAG/B,MAAM,MAAM,IAAI,IAAI,QAAQ,IAAI;EAEhC,MAAM,WAAY,MADF,IAAI,kBAAkB,OAAO,GAAG,CAChB,IAAY,oBAAoB,IAAK;EACrE,MAAM,UAAU,gBAAgB,KAAK,QAAQ,OAAO;EAKpD,MAAM,gBAAgB,iBAAiB,KAAK,UAAU,SAJ/B,uBACtB,SACA,4BAA4B,QAAQ,OAAO,CAC3C,CAC6E;EAG9E,MAAM,UAAU,oBAAoB,OAAO,GAAG;EAC9C,MAAM,iBAAiB,qBAAqB,OAAO,GAAG;EAEtD,MAAM,OAAO,MAAM,wBAClB,eACA,SACA,KAAK,YACL,eACA;AAED,UAAQ,IAAI,QAAQ,EAAE,IAAI,KAAK,IAAI,CAAC;AAEpC,SAAO,WAAW;GACjB,SAAS;GACT,MAAM;IACL,IAAI,KAAK;IACT,OAAO,KAAK;IACZ,MAAM,KAAK;IACX,MAAM,KAAK;IACX;GACD,CAAC;UACM,OAAO;AACf,MAAI,iBAAiB,2BACpB,QAAO,SAAS,gBAAgB,yBAAyB,IAAI;AAG9D,SAAO,YAAY,OAAO,yBAAyB,uBAAuB"}
@@ -1 +1 @@
1
- {"version":3,"file":"complete.d.mts","names":[],"sources":["../../../../../../src/astro/routes/api/auth/signup/complete.ts"],"mappings":";;;cASa,SAAA;AAAA,cAeA,IAAA,EAAM,QAAA"}
1
+ {"version":3,"file":"complete.d.mts","names":[],"sources":["../../../../../../src/astro/routes/api/auth/signup/complete.ts"],"mappings":";;;cASa,SAAA;AAAA,cAiBA,IAAA,EAAM,QAAA"}
@@ -1,25 +1,28 @@
1
1
  import "../../../../../config-CvmjJcVw.mjs";
2
+ import "../../../../../after-PcEvMY_6.mjs";
2
3
  import { t as OptionsRepository } from "../../../../../options-DhrI7eMv.mjs";
3
4
  import "../../../../../base64-DvnNgP7e.mjs";
4
- import "../../../../../types-aOOxRSx6.mjs";
5
- import "../../../../../errors-Bt3goF8I.mjs";
6
- import "../../../../../settings-DSfE7wOa.mjs";
7
- import "../../../../../site-settings-NGzdrt7O.mjs";
8
- import "../../../../../errors-BN1QAnEY.mjs";
9
- import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-BfsNNrIE.mjs";
10
- import { n as parseBody, t as isParseError } from "../../../../../parse-CORGGhHf.mjs";
11
- import "../../../../../redirects-BjTwDTsV.mjs";
12
- import "../../../../../entry-lock-BaRBHCsH.mjs";
13
- import "../../../../../media-OEIQ3bVc.mjs";
14
- import "../../../../../comments-M4EDYAHw.mjs";
15
- import { k as signupCompleteBody } from "../../../../../byline-fields-B8HH-35f.mjs";
16
- import "../../../../../menus-p_M1V7J_.mjs";
17
- import "../../../../../status-lzyj4Uu7.mjs";
5
+ import "../../../../../url-Dn3IStq8.mjs";
6
+ import "../../../../../types-j6MBDjlZ.mjs";
7
+ import "../../../../../errors-CjXd1LgH.mjs";
8
+ import "../../../../../errors-CNvATh_7.mjs";
9
+ import "../../../../../settings-B0zQj_Tj.mjs";
10
+ import "../../../../../site-settings-AYFvhwQn.mjs";
11
+ import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-CEdm_AWU.mjs";
12
+ import { n as parseBody, t as isParseError } from "../../../../../parse-Gt2l4Sld.mjs";
13
+ import "../../../../../redirects-D4EWeXAo.mjs";
14
+ import "../../../../../entry-lock-PP1JCXBB.mjs";
15
+ import "../../../../../media-D1z_jisb.mjs";
16
+ import "../../../../../comments-BRtp992B.mjs";
17
+ import { M as signupCompleteBody } from "../../../../../byline-fields-DHJs0Mja.mjs";
18
+ import "../../../../../menus-BQKqf0Up.mjs";
19
+ import "../../../../../status-D39Fpy8R.mjs";
18
20
  import "../../../../../api/schemas/index.mjs";
19
- import { r as getPublicOrigin } from "../../../../../public-url-CIRe-2T6.mjs";
20
- import { n as validateAllowedOrigins, t as getConfiguredAllowedOrigins } from "../../../../../allowed-origins-U1z4TdEZ.mjs";
21
- import { n as createChallengeStore } from "../../../../../challenge-store-CvBl81AQ.mjs";
22
- import { t as getPasskeyConfig } from "../../../../../passkey-config-Dih5YeIS.mjs";
21
+ import { r as getPublicOrigin } from "../../../../../public-url-B5a0QAh6.mjs";
22
+ import { n as validateAllowedOrigins, t as getConfiguredAllowedOrigins } from "../../../../../allowed-origins-CFtudhyw.mjs";
23
+ import { n as createChallengeStore } from "../../../../../challenge-store-CxZxPqaw.mjs";
24
+ import { r as sessionUnavailableError } from "../../../../../session-user-DVcHsFD5.mjs";
25
+ import { t as getPasskeyConfig } from "../../../../../passkey-config-CkQsrcU-.mjs";
23
26
  import { SignupError, completeSignup } from "@emdash-cms/auth";
24
27
  import { createKyselyAdapter } from "@emdash-cms/auth/adapters/kysely";
25
28
  import { registerPasskey, verifyRegistrationResponse } from "@emdash-cms/auth/passkey";
@@ -29,6 +32,7 @@ const prerender = false;
29
32
  const POST = async ({ request, locals, session }) => {
30
33
  const { emdash } = locals;
31
34
  if (!emdash?.db) return apiError("NOT_CONFIGURED", "EmDash is not initialized", 500);
35
+ if (!session) return sessionUnavailableError();
32
36
  try {
33
37
  const body = await parseBody(request, signupCompleteBody);
34
38
  if (isParseError(body)) return body;
@@ -41,7 +45,7 @@ const POST = async ({ request, locals, session }) => {
41
45
  const verified = await verifyRegistrationResponse(passkeyConfig, body.credential, challengeStore);
42
46
  const user = await completeSignup(adapter, body.token, { name: body.name });
43
47
  await registerPasskey(adapter, user.id, verified, "Initial passkey");
44
- if (session) session.set("user", { id: user.id });
48
+ session.set("user", { id: user.id });
45
49
  return apiSuccess({
46
50
  success: true,
47
51
  user: {
@@ -1 +1 @@
1
- {"version":3,"file":"complete.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/auth/signup/complete.ts"],"sourcesContent":["/**\n * POST /_emdash/api/auth/signup/complete\n *\n * Complete self-signup by registering a passkey for the new user.\n * This creates the user account and establishes a session.\n */\n\nimport type { APIRoute } from \"astro\";\n\nexport const prerender = false;\n\nimport { completeSignup, SignupError } from \"@emdash-cms/auth\";\nimport { createKyselyAdapter } from \"@emdash-cms/auth/adapters/kysely\";\nimport { verifyRegistrationResponse, registerPasskey } from \"@emdash-cms/auth/passkey\";\n\nimport { apiError, apiSuccess, handleError } from \"#api/error.js\";\nimport { isParseError, parseBody } from \"#api/parse.js\";\nimport { getPublicOrigin } from \"#api/public-url.js\";\nimport { signupCompleteBody } from \"#api/schemas.js\";\nimport { getConfiguredAllowedOrigins, validateAllowedOrigins } from \"#auth/allowed-origins.js\";\nimport { createChallengeStore } from \"#auth/challenge-store.js\";\nimport { getPasskeyConfig } from \"#auth/passkey-config.js\";\nimport { OptionsRepository } from \"#db/repositories/options.js\";\n\nexport const POST: APIRoute = async ({ request, locals, session }) => {\n\tconst { emdash } = locals;\n\n\tif (!emdash?.db) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\ttry {\n\t\tconst body = await parseBody(request, signupCompleteBody);\n\t\tif (isParseError(body)) return body;\n\n\t\tconst adapter = createKyselyAdapter(emdash.db);\n\n\t\t// Get passkey config\n\t\tconst url = new URL(request.url);\n\t\tconst options = new OptionsRepository(emdash.db);\n\t\tconst siteName = (await options.get<string>(\"emdash:site_title\")) ?? undefined;\n\t\tconst siteUrl = getPublicOrigin(url, emdash?.config);\n\t\tconst allowedOrigins = validateAllowedOrigins(\n\t\t\tsiteUrl,\n\t\t\tgetConfiguredAllowedOrigins(emdash?.config),\n\t\t);\n\t\tconst passkeyConfig = getPasskeyConfig(url, siteName, siteUrl, allowedOrigins);\n\n\t\t// Verify the passkey registration response\n\t\tconst challengeStore = createChallengeStore(emdash.db);\n\t\tconst verified = await verifyRegistrationResponse(\n\t\t\tpasskeyConfig,\n\t\t\tbody.credential,\n\t\t\tchallengeStore,\n\t\t);\n\n\t\t// Complete the signup - creates the user\n\t\tconst user = await completeSignup(adapter, body.token, {\n\t\t\tname: body.name,\n\t\t});\n\n\t\t// Register the passkey for the new user\n\t\tawait registerPasskey(adapter, user.id, verified, \"Initial passkey\");\n\n\t\t// Create session\n\t\tif (session) {\n\t\t\tsession.set(\"user\", { id: user.id });\n\t\t}\n\n\t\treturn apiSuccess({\n\t\t\tsuccess: true,\n\t\t\tuser: {\n\t\t\t\tid: user.id,\n\t\t\t\temail: user.email,\n\t\t\t\tname: user.name,\n\t\t\t\trole: user.role,\n\t\t\t},\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof SignupError) {\n\t\t\tconst statusMap: Record<string, number> = {\n\t\t\t\tinvalid_token: 404,\n\t\t\t\ttoken_expired: 410,\n\t\t\t\tuser_exists: 409,\n\t\t\t\tdomain_not_allowed: 403,\n\t\t\t};\n\t\t\treturn apiError(error.code.toUpperCase(), error.message, statusMap[error.code] ?? 400);\n\t\t}\n\n\t\treturn handleError(error, \"Failed to complete signup\", \"SIGNUP_COMPLETE_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAa,YAAY;AAezB,MAAa,OAAiB,OAAO,EAAE,SAAS,QAAQ,cAAc;CACrE,MAAM,EAAE,WAAW;AAEnB,KAAI,CAAC,QAAQ,GACZ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;AAGpE,KAAI;EACH,MAAM,OAAO,MAAM,UAAU,SAAS,mBAAmB;AACzD,MAAI,aAAa,KAAK,CAAE,QAAO;EAE/B,MAAM,UAAU,oBAAoB,OAAO,GAAG;EAG9C,MAAM,MAAM,IAAI,IAAI,QAAQ,IAAI;EAEhC,MAAM,WAAY,MADF,IAAI,kBAAkB,OAAO,GAAG,CAChB,IAAY,oBAAoB,IAAK;EACrE,MAAM,UAAU,gBAAgB,KAAK,QAAQ,OAAO;EAKpD,MAAM,gBAAgB,iBAAiB,KAAK,UAAU,SAJ/B,uBACtB,SACA,4BAA4B,QAAQ,OAAO,CAC3C,CAC6E;EAG9E,MAAM,iBAAiB,qBAAqB,OAAO,GAAG;EACtD,MAAM,WAAW,MAAM,2BACtB,eACA,KAAK,YACL,eACA;EAGD,MAAM,OAAO,MAAM,eAAe,SAAS,KAAK,OAAO,EACtD,MAAM,KAAK,MACX,CAAC;AAGF,QAAM,gBAAgB,SAAS,KAAK,IAAI,UAAU,kBAAkB;AAGpE,MAAI,QACH,SAAQ,IAAI,QAAQ,EAAE,IAAI,KAAK,IAAI,CAAC;AAGrC,SAAO,WAAW;GACjB,SAAS;GACT,MAAM;IACL,IAAI,KAAK;IACT,OAAO,KAAK;IACZ,MAAM,KAAK;IACX,MAAM,KAAK;IACX;GACD,CAAC;UACM,OAAO;AACf,MAAI,iBAAiB,YAOpB,QAAO,SAAS,MAAM,KAAK,aAAa,EAAE,MAAM,SANN;GACzC,eAAe;GACf,eAAe;GACf,aAAa;GACb,oBAAoB;GACpB,CACkE,MAAM,SAAS,IAAI;AAGvF,SAAO,YAAY,OAAO,6BAA6B,wBAAwB"}
1
+ {"version":3,"file":"complete.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/auth/signup/complete.ts"],"sourcesContent":["/**\n * POST /_emdash/api/auth/signup/complete\n *\n * Complete self-signup by registering a passkey for the new user.\n * This creates the user account and establishes a session.\n */\n\nimport type { APIRoute } from \"astro\";\n\nexport const prerender = false;\n\nimport { completeSignup, SignupError } from \"@emdash-cms/auth\";\nimport { createKyselyAdapter } from \"@emdash-cms/auth/adapters/kysely\";\nimport { verifyRegistrationResponse, registerPasskey } from \"@emdash-cms/auth/passkey\";\n\nimport { apiError, apiSuccess, handleError } from \"#api/error.js\";\nimport { isParseError, parseBody } from \"#api/parse.js\";\nimport { getPublicOrigin } from \"#api/public-url.js\";\nimport { signupCompleteBody } from \"#api/schemas.js\";\nimport { getConfiguredAllowedOrigins, validateAllowedOrigins } from \"#auth/allowed-origins.js\";\nimport { createChallengeStore } from \"#auth/challenge-store.js\";\nimport { getPasskeyConfig } from \"#auth/passkey-config.js\";\nimport { OptionsRepository } from \"#db/repositories/options.js\";\n\nimport { sessionUnavailableError } from \"../../../../session-user.js\";\n\nexport const POST: APIRoute = async ({ request, locals, session }) => {\n\tconst { emdash } = locals;\n\n\tif (!emdash?.db) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\tif (!session) return sessionUnavailableError();\n\n\ttry {\n\t\tconst body = await parseBody(request, signupCompleteBody);\n\t\tif (isParseError(body)) return body;\n\n\t\tconst adapter = createKyselyAdapter(emdash.db);\n\n\t\t// Get passkey config\n\t\tconst url = new URL(request.url);\n\t\tconst options = new OptionsRepository(emdash.db);\n\t\tconst siteName = (await options.get<string>(\"emdash:site_title\")) ?? undefined;\n\t\tconst siteUrl = getPublicOrigin(url, emdash?.config);\n\t\tconst allowedOrigins = validateAllowedOrigins(\n\t\t\tsiteUrl,\n\t\t\tgetConfiguredAllowedOrigins(emdash?.config),\n\t\t);\n\t\tconst passkeyConfig = getPasskeyConfig(url, siteName, siteUrl, allowedOrigins);\n\n\t\t// Verify the passkey registration response\n\t\tconst challengeStore = createChallengeStore(emdash.db);\n\t\tconst verified = await verifyRegistrationResponse(\n\t\t\tpasskeyConfig,\n\t\t\tbody.credential,\n\t\t\tchallengeStore,\n\t\t);\n\n\t\t// Complete the signup - creates the user\n\t\tconst user = await completeSignup(adapter, body.token, {\n\t\t\tname: body.name,\n\t\t});\n\n\t\t// Register the passkey for the new user\n\t\tawait registerPasskey(adapter, user.id, verified, \"Initial passkey\");\n\n\t\tsession.set(\"user\", { id: user.id });\n\n\t\treturn apiSuccess({\n\t\t\tsuccess: true,\n\t\t\tuser: {\n\t\t\t\tid: user.id,\n\t\t\t\temail: user.email,\n\t\t\t\tname: user.name,\n\t\t\t\trole: user.role,\n\t\t\t},\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof SignupError) {\n\t\t\tconst statusMap: Record<string, number> = {\n\t\t\t\tinvalid_token: 404,\n\t\t\t\ttoken_expired: 410,\n\t\t\t\tuser_exists: 409,\n\t\t\t\tdomain_not_allowed: 403,\n\t\t\t};\n\t\t\treturn apiError(error.code.toUpperCase(), error.message, statusMap[error.code] ?? 400);\n\t\t}\n\n\t\treturn handleError(error, \"Failed to complete signup\", \"SIGNUP_COMPLETE_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAa,YAAY;AAiBzB,MAAa,OAAiB,OAAO,EAAE,SAAS,QAAQ,cAAc;CACrE,MAAM,EAAE,WAAW;AAEnB,KAAI,CAAC,QAAQ,GACZ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;AAEpE,KAAI,CAAC,QAAS,QAAO,yBAAyB;AAE9C,KAAI;EACH,MAAM,OAAO,MAAM,UAAU,SAAS,mBAAmB;AACzD,MAAI,aAAa,KAAK,CAAE,QAAO;EAE/B,MAAM,UAAU,oBAAoB,OAAO,GAAG;EAG9C,MAAM,MAAM,IAAI,IAAI,QAAQ,IAAI;EAEhC,MAAM,WAAY,MADF,IAAI,kBAAkB,OAAO,GAAG,CAChB,IAAY,oBAAoB,IAAK;EACrE,MAAM,UAAU,gBAAgB,KAAK,QAAQ,OAAO;EAKpD,MAAM,gBAAgB,iBAAiB,KAAK,UAAU,SAJ/B,uBACtB,SACA,4BAA4B,QAAQ,OAAO,CAC3C,CAC6E;EAG9E,MAAM,iBAAiB,qBAAqB,OAAO,GAAG;EACtD,MAAM,WAAW,MAAM,2BACtB,eACA,KAAK,YACL,eACA;EAGD,MAAM,OAAO,MAAM,eAAe,SAAS,KAAK,OAAO,EACtD,MAAM,KAAK,MACX,CAAC;AAGF,QAAM,gBAAgB,SAAS,KAAK,IAAI,UAAU,kBAAkB;AAEpE,UAAQ,IAAI,QAAQ,EAAE,IAAI,KAAK,IAAI,CAAC;AAEpC,SAAO,WAAW;GACjB,SAAS;GACT,MAAM;IACL,IAAI,KAAK;IACT,OAAO,KAAK;IACZ,MAAM,KAAK;IACX,MAAM,KAAK;IACX;GACD,CAAC;UACM,OAAO;AACf,MAAI,iBAAiB,YAOpB,QAAO,SAAS,MAAM,KAAK,aAAa,EAAE,MAAM,SANN;GACzC,eAAe;GACf,eAAe;GACf,aAAa;GACb,oBAAoB;GACpB,CACkE,MAAM,SAAS,IAAI;AAGvF,SAAO,YAAY,OAAO,6BAA6B,wBAAwB"}
@@ -1,24 +1,25 @@
1
1
  import "../../../../../config-CvmjJcVw.mjs";
2
2
  import { t as OptionsRepository } from "../../../../../options-DhrI7eMv.mjs";
3
3
  import "../../../../../base64-DvnNgP7e.mjs";
4
- import "../../../../../types-aOOxRSx6.mjs";
5
- import "../../../../../errors-Bt3goF8I.mjs";
6
- import "../../../../../settings-DSfE7wOa.mjs";
7
- import "../../../../../site-settings-NGzdrt7O.mjs";
8
- import "../../../../../errors-BN1QAnEY.mjs";
9
- import { n as apiSuccess, t as apiError } from "../../../../../error-BfsNNrIE.mjs";
10
- import { n as parseBody, t as isParseError } from "../../../../../parse-CORGGhHf.mjs";
11
- import "../../../../../redirects-BjTwDTsV.mjs";
12
- import "../../../../../entry-lock-BaRBHCsH.mjs";
13
- import "../../../../../media-OEIQ3bVc.mjs";
14
- import "../../../../../comments-M4EDYAHw.mjs";
15
- import { A as signupRequestBody } from "../../../../../byline-fields-B8HH-35f.mjs";
16
- import "../../../../../menus-p_M1V7J_.mjs";
17
- import "../../../../../status-lzyj4Uu7.mjs";
4
+ import "../../../../../url-Dn3IStq8.mjs";
5
+ import "../../../../../types-j6MBDjlZ.mjs";
6
+ import "../../../../../errors-CjXd1LgH.mjs";
7
+ import "../../../../../errors-CNvATh_7.mjs";
8
+ import "../../../../../settings-B0zQj_Tj.mjs";
9
+ import "../../../../../site-settings-AYFvhwQn.mjs";
10
+ import { n as apiSuccess, t as apiError } from "../../../../../error-CEdm_AWU.mjs";
11
+ import { n as parseBody, t as isParseError } from "../../../../../parse-Gt2l4Sld.mjs";
12
+ import "../../../../../redirects-D4EWeXAo.mjs";
13
+ import "../../../../../entry-lock-PP1JCXBB.mjs";
14
+ import "../../../../../media-D1z_jisb.mjs";
15
+ import "../../../../../comments-BRtp992B.mjs";
16
+ import { N as signupRequestBody } from "../../../../../byline-fields-DHJs0Mja.mjs";
17
+ import "../../../../../menus-BQKqf0Up.mjs";
18
+ import "../../../../../status-D39Fpy8R.mjs";
18
19
  import "../../../../../api/schemas/index.mjs";
19
- import { t as getTrustedProxyHeaders } from "../../../../../trusted-proxy-B6ECOZJc.mjs";
20
- import { t as getSiteBaseUrl } from "../../../../../site-url-D6JB7tLW.mjs";
21
- import { n as getClientIp, t as checkRateLimit } from "../../../../../rate-limit-Csp60Vik.mjs";
20
+ import { t as getTrustedProxyHeaders } from "../../../../../trusted-proxy-BqfQFs6a.mjs";
21
+ import { t as getSiteBaseUrl } from "../../../../../site-url-Ceq_AUK0.mjs";
22
+ import { n as getClientIp, t as checkRateLimit } from "../../../../../rate-limit-BXx3Ecp9.mjs";
22
23
  import { requestSignup } from "@emdash-cms/auth";
23
24
  import { createKyselyAdapter } from "@emdash-cms/auth/adapters/kysely";
24
25
 
@@ -1 +1 @@
1
- {"version":3,"file":"request.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/auth/signup/request.ts"],"sourcesContent":["/**\n * POST /_emdash/api/auth/signup/request\n *\n * Request self-signup. Sends verification email if domain is allowed.\n * Always returns 200 to prevent email enumeration.\n *\n * Rate limited: 3 requests per 5 minutes per IP. Mirrors magic-link/send.\n */\n\nimport type { APIRoute } from \"astro\";\n\nexport const prerender = false;\n\nimport { requestSignup } from \"@emdash-cms/auth\";\nimport { createKyselyAdapter } from \"@emdash-cms/auth/adapters/kysely\";\n\nimport { apiError, apiSuccess } from \"#api/error.js\";\nimport { isParseError, parseBody } from \"#api/parse.js\";\nimport { signupRequestBody } from \"#api/schemas.js\";\nimport { getSiteBaseUrl } from \"#api/site-url.js\";\nimport { checkRateLimit, getClientIp } from \"#auth/rate-limit.js\";\nimport { getTrustedProxyHeaders } from \"#auth/trusted-proxy.js\";\nimport { OptionsRepository } from \"#db/repositories/options.js\";\n\n// Generic response body used for both the real success path and the\n// rate-limited / domain-disallowed paths. Keeping them identical prevents\n// the caller from distinguishing between them.\nconst GENERIC_SUCCESS = {\n\tsuccess: true,\n\tmessage: \"If your email domain is allowed, you'll receive a verification email.\",\n};\n\nexport const POST: APIRoute = async ({ request, locals }) => {\n\tconst { emdash } = locals;\n\n\tif (!emdash?.db) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\t// Check if email pipeline is available\n\tif (!emdash.email?.isAvailable()) {\n\t\treturn apiError(\n\t\t\t\"EMAIL_NOT_CONFIGURED\",\n\t\t\t\"Email not configured. Self-signup is unavailable.\",\n\t\t\t503,\n\t\t);\n\t}\n\n\ttry {\n\t\t// Parse the body first — this avoids burning a rate-limit slot on\n\t\t// malformed input and keeps the timing of the rate-limited and\n\t\t// real paths aligned.\n\t\tconst body = await parseBody(request, signupRequestBody);\n\t\tif (isParseError(body)) return body;\n\n\t\t// Rate limit: 3 requests per 300 seconds per IP. Matches magic-link/send.\n\t\tconst ip = getClientIp(request, getTrustedProxyHeaders(emdash.config));\n\t\tconst rateLimit = await checkRateLimit(emdash.db, ip, \"signup/request\", 3, 300);\n\t\tif (!rateLimit.allowed) {\n\t\t\t// Return success-shaped response to avoid revealing rate limiting\n\t\t\t// (and by extension, the fact that the caller is probing).\n\t\t\treturn apiSuccess(GENERIC_SUCCESS);\n\t\t}\n\n\t\tconst adapter = createKyselyAdapter(emdash.db);\n\n\t\t// Get site config for signup email\n\t\tconst options = new OptionsRepository(emdash.db);\n\t\tconst siteName = (await options.get<string>(\"emdash:site_title\")) || \"EmDash\";\n\n\t\t// Use the configured site URL (stored option as fallback) to prevent Host header spoofing in signup emails\n\t\tconst baseUrl = await getSiteBaseUrl(emdash.db, request, emdash.config);\n\n\t\t// Request signup - this handles all checks internally and fails silently\n\t\t// if domain not allowed or user exists (to prevent enumeration)\n\t\tawait requestSignup(\n\t\t\t{\n\t\t\t\tbaseUrl,\n\t\t\t\tsiteName,\n\t\t\t\temail: (message) => emdash.email!.send(message, \"system\"),\n\t\t\t},\n\t\t\tadapter,\n\t\t\tbody.email.toLowerCase().trim(),\n\t\t);\n\n\t\t// Always return success to prevent email enumeration\n\t\treturn apiSuccess(GENERIC_SUCCESS);\n\t} catch (error) {\n\t\tconsole.error(\"Signup request error:\", error);\n\n\t\t// Don't reveal internal errors - just return generic success\n\t\t// to prevent information leakage\n\t\treturn apiSuccess(GENERIC_SUCCESS);\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAWA,MAAa,YAAY;AAgBzB,MAAM,kBAAkB;CACvB,SAAS;CACT,SAAS;CACT;AAED,MAAa,OAAiB,OAAO,EAAE,SAAS,aAAa;CAC5D,MAAM,EAAE,WAAW;AAEnB,KAAI,CAAC,QAAQ,GACZ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;AAIpE,KAAI,CAAC,OAAO,OAAO,aAAa,CAC/B,QAAO,SACN,wBACA,qDACA,IACA;AAGF,KAAI;EAIH,MAAM,OAAO,MAAM,UAAU,SAAS,kBAAkB;AACxD,MAAI,aAAa,KAAK,CAAE,QAAO;EAG/B,MAAM,KAAK,YAAY,SAAS,uBAAuB,OAAO,OAAO,CAAC;AAEtE,MAAI,EADc,MAAM,eAAe,OAAO,IAAI,IAAI,kBAAkB,GAAG,IAAI,EAChE,QAGd,QAAO,WAAW,gBAAgB;EAGnC,MAAM,UAAU,oBAAoB,OAAO,GAAG;EAI9C,MAAM,WAAY,MADF,IAAI,kBAAkB,OAAO,GAAG,CAChB,IAAY,oBAAoB,IAAK;AAOrE,QAAM,cACL;GACC,SANc,MAAM,eAAe,OAAO,IAAI,SAAS,OAAO,OAAO;GAOrE;GACA,QAAQ,YAAY,OAAO,MAAO,KAAK,SAAS,SAAS;GACzD,EACD,SACA,KAAK,MAAM,aAAa,CAAC,MAAM,CAC/B;AAGD,SAAO,WAAW,gBAAgB;UAC1B,OAAO;AACf,UAAQ,MAAM,yBAAyB,MAAM;AAI7C,SAAO,WAAW,gBAAgB"}
1
+ {"version":3,"file":"request.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/auth/signup/request.ts"],"sourcesContent":["/**\n * POST /_emdash/api/auth/signup/request\n *\n * Request self-signup. Sends verification email if domain is allowed.\n * Always returns 200 to prevent email enumeration.\n *\n * Rate limited: 3 requests per 5 minutes per IP. Mirrors magic-link/send.\n */\n\nimport type { APIRoute } from \"astro\";\n\nexport const prerender = false;\n\nimport { requestSignup } from \"@emdash-cms/auth\";\nimport { createKyselyAdapter } from \"@emdash-cms/auth/adapters/kysely\";\n\nimport { apiError, apiSuccess } from \"#api/error.js\";\nimport { isParseError, parseBody } from \"#api/parse.js\";\nimport { signupRequestBody } from \"#api/schemas.js\";\nimport { getSiteBaseUrl } from \"#api/site-url.js\";\nimport { checkRateLimit, getClientIp } from \"#auth/rate-limit.js\";\nimport { getTrustedProxyHeaders } from \"#auth/trusted-proxy.js\";\nimport { OptionsRepository } from \"#db/repositories/options.js\";\n\n// Generic response body used for both the real success path and the\n// rate-limited / domain-disallowed paths. Keeping them identical prevents\n// the caller from distinguishing between them.\nconst GENERIC_SUCCESS = {\n\tsuccess: true,\n\tmessage: \"If your email domain is allowed, you'll receive a verification email.\",\n};\n\nexport const POST: APIRoute = async ({ request, locals }) => {\n\tconst { emdash } = locals;\n\n\tif (!emdash?.db) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\t// Check if email pipeline is available\n\tif (!emdash.email?.isAvailable()) {\n\t\treturn apiError(\n\t\t\t\"EMAIL_NOT_CONFIGURED\",\n\t\t\t\"Email not configured. Self-signup is unavailable.\",\n\t\t\t503,\n\t\t);\n\t}\n\n\ttry {\n\t\t// Parse the body first — this avoids burning a rate-limit slot on\n\t\t// malformed input and keeps the timing of the rate-limited and\n\t\t// real paths aligned.\n\t\tconst body = await parseBody(request, signupRequestBody);\n\t\tif (isParseError(body)) return body;\n\n\t\t// Rate limit: 3 requests per 300 seconds per IP. Matches magic-link/send.\n\t\tconst ip = getClientIp(request, getTrustedProxyHeaders(emdash.config));\n\t\tconst rateLimit = await checkRateLimit(emdash.db, ip, \"signup/request\", 3, 300);\n\t\tif (!rateLimit.allowed) {\n\t\t\t// Return success-shaped response to avoid revealing rate limiting\n\t\t\t// (and by extension, the fact that the caller is probing).\n\t\t\treturn apiSuccess(GENERIC_SUCCESS);\n\t\t}\n\n\t\tconst adapter = createKyselyAdapter(emdash.db);\n\n\t\t// Get site config for signup email\n\t\tconst options = new OptionsRepository(emdash.db);\n\t\tconst siteName = (await options.get<string>(\"emdash:site_title\")) || \"EmDash\";\n\n\t\t// Use the configured site URL (stored option as fallback) to prevent Host header spoofing in signup emails\n\t\tconst baseUrl = await getSiteBaseUrl(emdash.db, request, emdash.config);\n\n\t\t// Request signup - this handles all checks internally and fails silently\n\t\t// if domain not allowed or user exists (to prevent enumeration)\n\t\tawait requestSignup(\n\t\t\t{\n\t\t\t\tbaseUrl,\n\t\t\t\tsiteName,\n\t\t\t\temail: (message) => emdash.email!.send(message, \"system\"),\n\t\t\t},\n\t\t\tadapter,\n\t\t\tbody.email.toLowerCase().trim(),\n\t\t);\n\n\t\t// Always return success to prevent email enumeration\n\t\treturn apiSuccess(GENERIC_SUCCESS);\n\t} catch (error) {\n\t\tconsole.error(\"Signup request error:\", error);\n\n\t\t// Don't reveal internal errors - just return generic success\n\t\t// to prevent information leakage\n\t\treturn apiSuccess(GENERIC_SUCCESS);\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,MAAa,YAAY;AAgBzB,MAAM,kBAAkB;CACvB,SAAS;CACT,SAAS;CACT;AAED,MAAa,OAAiB,OAAO,EAAE,SAAS,aAAa;CAC5D,MAAM,EAAE,WAAW;AAEnB,KAAI,CAAC,QAAQ,GACZ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;AAIpE,KAAI,CAAC,OAAO,OAAO,aAAa,CAC/B,QAAO,SACN,wBACA,qDACA,IACA;AAGF,KAAI;EAIH,MAAM,OAAO,MAAM,UAAU,SAAS,kBAAkB;AACxD,MAAI,aAAa,KAAK,CAAE,QAAO;EAG/B,MAAM,KAAK,YAAY,SAAS,uBAAuB,OAAO,OAAO,CAAC;AAEtE,MAAI,EADc,MAAM,eAAe,OAAO,IAAI,IAAI,kBAAkB,GAAG,IAAI,EAChE,QAGd,QAAO,WAAW,gBAAgB;EAGnC,MAAM,UAAU,oBAAoB,OAAO,GAAG;EAI9C,MAAM,WAAY,MADF,IAAI,kBAAkB,OAAO,GAAG,CAChB,IAAY,oBAAoB,IAAK;AAOrE,QAAM,cACL;GACC,SANc,MAAM,eAAe,OAAO,IAAI,SAAS,OAAO,OAAO;GAOrE;GACA,QAAQ,YAAY,OAAO,MAAO,KAAK,SAAS,SAAS;GACzD,EACD,SACA,KAAK,MAAM,aAAa,CAAC,MAAM,CAC/B;AAGD,SAAO,WAAW,gBAAgB;UAC1B,OAAO;AACf,UAAQ,MAAM,yBAAyB,MAAM;AAI7C,SAAO,WAAW,gBAAgB"}
@@ -1,8 +1,8 @@
1
1
  import "../../../../../base64-DvnNgP7e.mjs";
2
- import "../../../../../types-aOOxRSx6.mjs";
3
- import "../../../../../errors-Bt3goF8I.mjs";
4
- import "../../../../../errors-BN1QAnEY.mjs";
5
- import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-BfsNNrIE.mjs";
2
+ import "../../../../../types-j6MBDjlZ.mjs";
3
+ import "../../../../../errors-CjXd1LgH.mjs";
4
+ import "../../../../../errors-CNvATh_7.mjs";
5
+ import { n as apiSuccess, r as handleError, t as apiError } from "../../../../../error-CEdm_AWU.mjs";
6
6
  import { SignupError, roleFromLevel, validateSignupToken } from "@emdash-cms/auth";
7
7
  import { createKyselyAdapter } from "@emdash-cms/auth/adapters/kysely";
8
8
 
@@ -2,19 +2,19 @@ import "../../../../../../after-PcEvMY_6.mjs";
2
2
  import "../../../../../../options-DhrI7eMv.mjs";
3
3
  import "../../../../../../base64-DvnNgP7e.mjs";
4
4
  import "../../../../../../secrets-CIi0nFiR.mjs";
5
- import "../../../../../../object-cache-CqWNY5uP.mjs";
6
- import "../../../../../../types-aOOxRSx6.mjs";
7
- import "../../../../../../comment-D2uvL63j.mjs";
8
- import "../../../../../../errors-Bt3goF8I.mjs";
9
- import "../../../../../../errors-BN1QAnEY.mjs";
10
- import { a as unwrapResult, i as requireDb, r as handleError, t as apiError } from "../../../../../../error-BfsNNrIE.mjs";
11
- import "../../../../../../parse-CORGGhHf.mjs";
12
- import "../../../../../../comments-M4EDYAHw.mjs";
13
- import "../../../../../../site-url-D6JB7tLW.mjs";
14
- import { t as submitPublicComment } from "../../../../../../public-submission-D9c9S14m.mjs";
15
- import { o as handleCommentList } from "../../../../../../comments-Cq0s7_hO.mjs";
16
- import "../../../../../../rate-limit-Csp60Vik.mjs";
17
- import "../../../../../../service-BsVG05gS.mjs";
5
+ import "../../../../../../object-cache-Bo6DGaC9.mjs";
6
+ import "../../../../../../types-j6MBDjlZ.mjs";
7
+ import "../../../../../../comment-Cq1UYN8_.mjs";
8
+ import "../../../../../../errors-CjXd1LgH.mjs";
9
+ import "../../../../../../errors-CNvATh_7.mjs";
10
+ import { a as unwrapResult, i as requireDb, r as handleError, t as apiError } from "../../../../../../error-CEdm_AWU.mjs";
11
+ import "../../../../../../parse-Gt2l4Sld.mjs";
12
+ import "../../../../../../comments-BRtp992B.mjs";
13
+ import "../../../../../../site-url-Ceq_AUK0.mjs";
14
+ import { t as submitPublicComment } from "../../../../../../public-submission-yZaTTfsC.mjs";
15
+ import { o as handleCommentList } from "../../../../../../comments-Bi2j9IoX.mjs";
16
+ import "../../../../../../rate-limit-BXx3Ecp9.mjs";
17
+ import "../../../../../../service-BFUImckH.mjs";
18
18
 
19
19
  //#region src/astro/routes/api/comments/[collection]/[contentId]/index.ts
20
20
  const prerender = false;
@@ -3,26 +3,27 @@ import "../../../../../../after-PcEvMY_6.mjs";
3
3
  import "../../../../../../options-DhrI7eMv.mjs";
4
4
  import "../../../../../../base64-DvnNgP7e.mjs";
5
5
  import { a as resolveSecretsCached } from "../../../../../../secrets-CIi0nFiR.mjs";
6
- import { u as invalidateCommentObjectCache } from "../../../../../../object-cache-CqWNY5uP.mjs";
7
- import "../../../../../../types-aOOxRSx6.mjs";
8
- import "../../../../../../comment-D2uvL63j.mjs";
9
- import "../../../../../../errors-Bt3goF8I.mjs";
10
- import "../../../../../../settings-DSfE7wOa.mjs";
11
- import "../../../../../../site-settings-NGzdrt7O.mjs";
12
- import "../../../../../../errors-BN1QAnEY.mjs";
13
- import { a as unwrapResult, i as requireDb, n as apiSuccess, r as handleError, t as apiError } from "../../../../../../error-BfsNNrIE.mjs";
14
- import { n as parseBody, t as isParseError } from "../../../../../../parse-CORGGhHf.mjs";
15
- import "../../../../../../redirects-BjTwDTsV.mjs";
16
- import "../../../../../../entry-lock-BaRBHCsH.mjs";
17
- import "../../../../../../media-OEIQ3bVc.mjs";
18
- import { l as createReactionBody } from "../../../../../../comments-M4EDYAHw.mjs";
19
- import "../../../../../../byline-fields-B8HH-35f.mjs";
20
- import "../../../../../../menus-p_M1V7J_.mjs";
21
- import "../../../../../../status-lzyj4Uu7.mjs";
6
+ import { u as invalidateCommentObjectCache } from "../../../../../../object-cache-Bo6DGaC9.mjs";
7
+ import "../../../../../../url-Dn3IStq8.mjs";
8
+ import "../../../../../../types-j6MBDjlZ.mjs";
9
+ import "../../../../../../comment-Cq1UYN8_.mjs";
10
+ import "../../../../../../errors-CjXd1LgH.mjs";
11
+ import "../../../../../../errors-CNvATh_7.mjs";
12
+ import "../../../../../../settings-B0zQj_Tj.mjs";
13
+ import "../../../../../../site-settings-AYFvhwQn.mjs";
14
+ import { a as unwrapResult, i as requireDb, n as apiSuccess, r as handleError, t as apiError } from "../../../../../../error-CEdm_AWU.mjs";
15
+ import { n as parseBody, t as isParseError } from "../../../../../../parse-Gt2l4Sld.mjs";
16
+ import "../../../../../../redirects-D4EWeXAo.mjs";
17
+ import "../../../../../../entry-lock-PP1JCXBB.mjs";
18
+ import "../../../../../../media-D1z_jisb.mjs";
19
+ import { l as createReactionBody } from "../../../../../../comments-BRtp992B.mjs";
20
+ import "../../../../../../byline-fields-DHJs0Mja.mjs";
21
+ import "../../../../../../menus-BQKqf0Up.mjs";
22
+ import "../../../../../../status-D39Fpy8R.mjs";
22
23
  import "../../../../../../api/schemas/index.mjs";
23
- import { t as extractRequestMeta } from "../../../../../../request-meta-D47mqyev.mjs";
24
- import { t as CommentReactionRepository } from "../../../../../../comment-reaction-DevUuzg4.mjs";
25
- import { s as hashIp } from "../../../../../../comments-Cq0s7_hO.mjs";
24
+ import { t as extractRequestMeta } from "../../../../../../request-meta-B6blULFY.mjs";
25
+ import { t as CommentReactionRepository } from "../../../../../../comment-reaction-DPeGAfjd.mjs";
26
+ import { s as hashIp } from "../../../../../../comments-Bi2j9IoX.mjs";
26
27
 
27
28
  //#region src/api/handlers/comment-reactions.ts
28
29
  /** Max reactions a single voter may register per window before throttling. */
@@ -1 +1 @@
1
- {"version":3,"file":"reactions.mjs","names":[],"sources":["../../../../../../../src/api/handlers/comment-reactions.ts","../../../../../../../src/astro/routes/api/comments/[collection]/[contentId]/reactions.ts"],"sourcesContent":["/**\n * Comment reaction handlers (Tier 1 of the best-in-class comments RFC).\n *\n * Business logic for toggling reactions and reading aggregate counts. Route\n * files stay thin wrappers; these return `ApiResult<T>`.\n */\n\nimport type { Kysely } from \"kysely\";\n\nimport {\n\tCommentReactionRepository,\n\ttype ReactionCounts,\n} from \"#db/repositories/comment-reaction.js\";\nimport type { Database } from \"#db/types.js\";\n\nimport { invalidateCommentObjectCache } from \"../../object-cache/index.js\";\nimport type { ApiResult } from \"../types.js\";\n\n/** Max reactions a single voter may register per window before throttling. */\nconst REACTION_RATE_LIMIT = 30;\nconst REACTION_RATE_WINDOW_MINUTES = 10;\n\n/**\n * Reactions the system accepts. Positive-only for now (matches the shipped\n * widget); kept as an allowlist so a voter can't spam arbitrary reaction\n * strings and bloat a comment's count map. Extend (or make configurable) as\n * the UI grows.\n */\nconst ALLOWED_REACTIONS: ReadonlySet<string> = new Set([\"like\"]);\n\nexport interface ReactionToggleResult {\n\tcommentId: string;\n\treaction: string;\n\t/** true if the reaction was added, false if an existing one was removed */\n\treacted: boolean;\n\t/** updated counts for this comment after the toggle */\n\tcounts: ReactionCounts;\n}\n\nexport interface ReactionCountsResult {\n\t/** comment id -> reaction counts */\n\treactions: Record<string, ReactionCounts>;\n\t/** comment id -> reactions the current voter has active (omitted if anonymous) */\n\tviewer?: Record<string, string[]>;\n}\n\n/**\n * Toggle a reaction for a voter on an approved comment belonging to the given\n * content item. Rate-limited per voter.\n */\nexport async function handleReactionToggle(\n\tdb: Kysely<Database>,\n\tparams: {\n\t\tcollection: string;\n\t\tcontentId: string;\n\t\tcommentId: string;\n\t\treaction: string;\n\t\tvoterHash: string;\n\t},\n): Promise<ApiResult<ReactionToggleResult>> {\n\ttry {\n\t\tconst { collection, contentId, commentId, reaction, voterHash } = params;\n\n\t\tif (!ALLOWED_REACTIONS.has(reaction)) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"VALIDATION_ERROR\", message: \"Unsupported reaction\" },\n\t\t\t};\n\t\t}\n\n\t\t// The comment must exist, be approved, and belong to this content item.\n\t\tconst comment = await db\n\t\t\t.selectFrom(\"_emdash_comments\")\n\t\t\t.select([\"id\", \"status\"])\n\t\t\t.where(\"id\", \"=\", commentId)\n\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t.where(\"content_id\", \"=\", contentId)\n\t\t\t.executeTakeFirst();\n\n\t\tif (!comment) {\n\t\t\treturn { success: false, error: { code: \"NOT_FOUND\", message: \"Comment not found\" } };\n\t\t}\n\t\tif (comment.status !== \"approved\") {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"COMMENT_NOT_APPROVED\", message: \"Cannot react to this comment\" },\n\t\t\t};\n\t\t}\n\n\t\tconst repo = new CommentReactionRepository(db);\n\n\t\tconst recent = await repo.countRecentByVoter(voterHash, REACTION_RATE_WINDOW_MINUTES);\n\t\tif (recent >= REACTION_RATE_LIMIT) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"RATE_LIMITED\", message: \"Too many reactions. Please try again later.\" },\n\t\t\t};\n\t\t}\n\n\t\tconst { reacted } = await repo.toggle({ commentId, reaction, voterHash });\n\t\tconst countsMap = await repo.countsForComments([commentId]);\n\n\t\t// Reaction counts (and `best` ordering) are folded into cached getComments\n\t\t// reads, so a toggle must orphan them.\n\t\tinvalidateCommentObjectCache();\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: { commentId, reaction, reacted, counts: countsMap.get(commentId) ?? {} },\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"REACTION_TOGGLE_ERROR\", message: \"Failed to toggle reaction\" },\n\t\t};\n\t}\n}\n\n/**\n * Read aggregate reaction counts for every approved comment on a content item,\n * plus (optionally) which reactions the current voter has active.\n */\nexport async function handleReactionCounts(\n\tdb: Kysely<Database>,\n\tcollection: string,\n\tcontentId: string,\n\tvoterHash?: string,\n): Promise<ApiResult<ReactionCountsResult>> {\n\ttry {\n\t\tconst comments = await db\n\t\t\t.selectFrom(\"_emdash_comments\")\n\t\t\t.select(\"id\")\n\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t.where(\"content_id\", \"=\", contentId)\n\t\t\t.where(\"status\", \"=\", \"approved\")\n\t\t\t.execute();\n\n\t\tconst ids = comments.map((c) => c.id);\n\t\tconst repo = new CommentReactionRepository(db);\n\n\t\tconst countsMap = await repo.countsForComments(ids);\n\t\tconst reactions: Record<string, ReactionCounts> = {};\n\t\tfor (const [id, counts] of countsMap) {\n\t\t\treactions[id] = counts;\n\t\t}\n\n\t\tconst data: ReactionCountsResult = { reactions };\n\n\t\tif (voterHash) {\n\t\t\tconst viewerMap = await repo.viewerReactions(ids, voterHash);\n\t\t\tconst viewer: Record<string, string[]> = {};\n\t\t\tfor (const [id, list] of viewerMap) {\n\t\t\t\tviewer[id] = list;\n\t\t\t}\n\t\t\tdata.viewer = viewer;\n\t\t}\n\n\t\treturn { success: true, data };\n\t} catch {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"REACTION_COUNTS_ERROR\", message: \"Failed to read reactions\" },\n\t\t};\n\t}\n}\n","/**\n * Public comment reaction endpoints (Tier 1 of the best-in-class comments RFC).\n *\n * GET /_emdash/api/comments/:collection/:contentId/reactions\n * - Aggregate reaction counts for the content's approved comments, plus the\n * current visitor's active reactions.\n * POST /_emdash/api/comments/:collection/:contentId/reactions\n * - Toggle a reaction on a comment. Public, honeypot- and rate-limit-gated.\n *\n * Inherits the `/_emdash/api/comments/` public prefix (no auth); the POST still\n * requires the `X-EmDash-Request: 1` CSRF header like the comment POST.\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { apiError, apiSuccess, handleError, requireDb, unwrapResult } from \"#api/error.js\";\nimport { handleReactionCounts, handleReactionToggle } from \"#api/handlers/comment-reactions.js\";\nimport { hashIp } from \"#api/handlers/comments.js\";\nimport { isParseError, parseBody } from \"#api/parse.js\";\nimport { createReactionBody } from \"#api/schemas.js\";\nimport { resolveSecretsCached } from \"#config/secrets.js\";\nimport { extractRequestMeta } from \"#plugins/request-meta.js\";\n\nexport const prerender = false;\n\nexport const GET: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash } = locals;\n\tconst { collection, contentId } = params;\n\n\tif (!collection || !contentId) {\n\t\treturn apiError(\"VALIDATION_ERROR\", \"Collection and content ID required\", 400);\n\t}\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\ttry {\n\t\t// Salted voter hash from request IP (same primitive as comment ip_hash).\n\t\t// Behind Cloudflare (CF-Connecting-IP) or a configured trusted proxy this\n\t\t// is per-visitor. Without a trusted IP it collapses to a shared \"unknown\"\n\t\t// bucket, so reaction dedup degrades for those visitors — a real\n\t\t// per-visitor token is Tier 2 (visitor identity). Operators should set\n\t\t// trustedProxyHeaders; see the comment ingest route for the same note.\n\t\tconst meta = extractRequestMeta(request, emdash.config);\n\t\tlet voterHash = \"unknown\";\n\t\tif (meta.ip) {\n\t\t\tconst { ipSalt } = await resolveSecretsCached(emdash.db);\n\t\t\tvoterHash = await hashIp(meta.ip, ipSalt);\n\t\t}\n\n\t\tconst result = await handleReactionCounts(emdash.db, collection, contentId, voterHash);\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to read reactions\", \"REACTION_COUNTS_ERROR\");\n\t}\n};\n\nexport const POST: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash } = locals;\n\tconst { collection, contentId } = params;\n\n\tif (!collection || !contentId) {\n\t\treturn apiError(\"VALIDATION_ERROR\", \"Collection and content ID required\", 400);\n\t}\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\ttry {\n\t\tconst body = await parseBody(request, createReactionBody);\n\t\tif (isParseError(body)) return body;\n\n\t\t// Anti-spam: honeypot — hidden field filled only by bots. Silently accept.\n\t\tif (body.website_url) {\n\t\t\treturn apiSuccess({ reacted: false, counts: {} });\n\t\t}\n\n\t\tconst meta = extractRequestMeta(request, emdash.config);\n\t\tlet voterHash = \"unknown\";\n\t\tif (meta.ip) {\n\t\t\tconst { ipSalt } = await resolveSecretsCached(emdash.db);\n\t\t\tvoterHash = await hashIp(meta.ip, ipSalt);\n\t\t}\n\n\t\tconst result = await handleReactionToggle(emdash.db, {\n\t\t\tcollection,\n\t\t\tcontentId,\n\t\t\tcommentId: body.commentId,\n\t\t\treaction: body.reaction,\n\t\t\tvoterHash,\n\t\t});\n\n\t\treturn unwrapResult(result, 200);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to toggle reaction\", \"REACTION_TOGGLE_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,MAAM,sBAAsB;AAC5B,MAAM,+BAA+B;;;;;;;AAQrC,MAAM,oBAAyC,IAAI,IAAI,CAAC,OAAO,CAAC;;;;;AAsBhE,eAAsB,qBACrB,IACA,QAO2C;AAC3C,KAAI;EACH,MAAM,EAAE,YAAY,WAAW,WAAW,UAAU,cAAc;AAElE,MAAI,CAAC,kBAAkB,IAAI,SAAS,CACnC,QAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAoB,SAAS;IAAwB;GACpE;EAIF,MAAM,UAAU,MAAM,GACpB,WAAW,mBAAmB,CAC9B,OAAO,CAAC,MAAM,SAAS,CAAC,CACxB,MAAM,MAAM,KAAK,UAAU,CAC3B,MAAM,cAAc,KAAK,WAAW,CACpC,MAAM,cAAc,KAAK,UAAU,CACnC,kBAAkB;AAEpB,MAAI,CAAC,QACJ,QAAO;GAAE,SAAS;GAAO,OAAO;IAAE,MAAM;IAAa,SAAS;IAAqB;GAAE;AAEtF,MAAI,QAAQ,WAAW,WACtB,QAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAwB,SAAS;IAAgC;GAChF;EAGF,MAAM,OAAO,IAAI,0BAA0B,GAAG;AAG9C,MADe,MAAM,KAAK,mBAAmB,WAAW,6BAA6B,IACvE,oBACb,QAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAgB,SAAS;IAA+C;GACvF;EAGF,MAAM,EAAE,YAAY,MAAM,KAAK,OAAO;GAAE;GAAW;GAAU;GAAW,CAAC;EACzE,MAAM,YAAY,MAAM,KAAK,kBAAkB,CAAC,UAAU,CAAC;AAI3D,gCAA8B;AAE9B,SAAO;GACN,SAAS;GACT,MAAM;IAAE;IAAW;IAAU;IAAS,QAAQ,UAAU,IAAI,UAAU,IAAI,EAAE;IAAE;GAC9E;SACM;AACP,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAyB,SAAS;IAA6B;GAC9E;;;;;;;AAQH,eAAsB,qBACrB,IACA,YACA,WACA,WAC2C;AAC3C,KAAI;EASH,MAAM,OARW,MAAM,GACrB,WAAW,mBAAmB,CAC9B,OAAO,KAAK,CACZ,MAAM,cAAc,KAAK,WAAW,CACpC,MAAM,cAAc,KAAK,UAAU,CACnC,MAAM,UAAU,KAAK,WAAW,CAChC,SAAS,EAEU,KAAK,MAAM,EAAE,GAAG;EACrC,MAAM,OAAO,IAAI,0BAA0B,GAAG;EAE9C,MAAM,YAAY,MAAM,KAAK,kBAAkB,IAAI;EACnD,MAAM,YAA4C,EAAE;AACpD,OAAK,MAAM,CAAC,IAAI,WAAW,UAC1B,WAAU,MAAM;EAGjB,MAAM,OAA6B,EAAE,WAAW;AAEhD,MAAI,WAAW;GACd,MAAM,YAAY,MAAM,KAAK,gBAAgB,KAAK,UAAU;GAC5D,MAAM,SAAmC,EAAE;AAC3C,QAAK,MAAM,CAAC,IAAI,SAAS,UACxB,QAAO,MAAM;AAEd,QAAK,SAAS;;AAGf,SAAO;GAAE,SAAS;GAAM;GAAM;SACvB;AACP,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAyB,SAAS;IAA4B;GAC7E;;;;;;AC3IH,MAAa,YAAY;AAEzB,MAAa,MAAgB,OAAO,EAAE,QAAQ,SAAS,aAAa;CACnE,MAAM,EAAE,WAAW;CACnB,MAAM,EAAE,YAAY,cAAc;AAElC,KAAI,CAAC,cAAc,CAAC,UACnB,QAAO,SAAS,oBAAoB,sCAAsC,IAAI;CAG/E,MAAM,QAAQ,UAAU,QAAQ,GAAG;AACnC,KAAI,MAAO,QAAO;AAElB,KAAI;EAOH,MAAM,OAAO,mBAAmB,SAAS,OAAO,OAAO;EACvD,IAAI,YAAY;AAChB,MAAI,KAAK,IAAI;GACZ,MAAM,EAAE,WAAW,MAAM,qBAAqB,OAAO,GAAG;AACxD,eAAY,MAAM,OAAO,KAAK,IAAI,OAAO;;AAI1C,SAAO,aADQ,MAAM,qBAAqB,OAAO,IAAI,YAAY,WAAW,UAAU,CAC3D;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,4BAA4B,wBAAwB;;;AAIhF,MAAa,OAAiB,OAAO,EAAE,QAAQ,SAAS,aAAa;CACpE,MAAM,EAAE,WAAW;CACnB,MAAM,EAAE,YAAY,cAAc;AAElC,KAAI,CAAC,cAAc,CAAC,UACnB,QAAO,SAAS,oBAAoB,sCAAsC,IAAI;CAG/E,MAAM,QAAQ,UAAU,QAAQ,GAAG;AACnC,KAAI,MAAO,QAAO;AAElB,KAAI;EACH,MAAM,OAAO,MAAM,UAAU,SAAS,mBAAmB;AACzD,MAAI,aAAa,KAAK,CAAE,QAAO;AAG/B,MAAI,KAAK,YACR,QAAO,WAAW;GAAE,SAAS;GAAO,QAAQ,EAAE;GAAE,CAAC;EAGlD,MAAM,OAAO,mBAAmB,SAAS,OAAO,OAAO;EACvD,IAAI,YAAY;AAChB,MAAI,KAAK,IAAI;GACZ,MAAM,EAAE,WAAW,MAAM,qBAAqB,OAAO,GAAG;AACxD,eAAY,MAAM,OAAO,KAAK,IAAI,OAAO;;AAW1C,SAAO,aARQ,MAAM,qBAAqB,OAAO,IAAI;GACpD;GACA;GACA,WAAW,KAAK;GAChB,UAAU,KAAK;GACf;GACA,CAAC,EAE0B,IAAI;UACxB,OAAO;AACf,SAAO,YAAY,OAAO,6BAA6B,wBAAwB"}
1
+ {"version":3,"file":"reactions.mjs","names":[],"sources":["../../../../../../../src/api/handlers/comment-reactions.ts","../../../../../../../src/astro/routes/api/comments/[collection]/[contentId]/reactions.ts"],"sourcesContent":["/**\n * Comment reaction handlers (Tier 1 of the best-in-class comments RFC).\n *\n * Business logic for toggling reactions and reading aggregate counts. Route\n * files stay thin wrappers; these return `ApiResult<T>`.\n */\n\nimport type { Kysely } from \"kysely\";\n\nimport {\n\tCommentReactionRepository,\n\ttype ReactionCounts,\n} from \"#db/repositories/comment-reaction.js\";\nimport type { Database } from \"#db/types.js\";\n\nimport { invalidateCommentObjectCache } from \"../../object-cache/index.js\";\nimport type { ApiResult } from \"../types.js\";\n\n/** Max reactions a single voter may register per window before throttling. */\nconst REACTION_RATE_LIMIT = 30;\nconst REACTION_RATE_WINDOW_MINUTES = 10;\n\n/**\n * Reactions the system accepts. Positive-only for now (matches the shipped\n * widget); kept as an allowlist so a voter can't spam arbitrary reaction\n * strings and bloat a comment's count map. Extend (or make configurable) as\n * the UI grows.\n */\nconst ALLOWED_REACTIONS: ReadonlySet<string> = new Set([\"like\"]);\n\nexport interface ReactionToggleResult {\n\tcommentId: string;\n\treaction: string;\n\t/** true if the reaction was added, false if an existing one was removed */\n\treacted: boolean;\n\t/** updated counts for this comment after the toggle */\n\tcounts: ReactionCounts;\n}\n\nexport interface ReactionCountsResult {\n\t/** comment id -> reaction counts */\n\treactions: Record<string, ReactionCounts>;\n\t/** comment id -> reactions the current voter has active (omitted if anonymous) */\n\tviewer?: Record<string, string[]>;\n}\n\n/**\n * Toggle a reaction for a voter on an approved comment belonging to the given\n * content item. Rate-limited per voter.\n */\nexport async function handleReactionToggle(\n\tdb: Kysely<Database>,\n\tparams: {\n\t\tcollection: string;\n\t\tcontentId: string;\n\t\tcommentId: string;\n\t\treaction: string;\n\t\tvoterHash: string;\n\t},\n): Promise<ApiResult<ReactionToggleResult>> {\n\ttry {\n\t\tconst { collection, contentId, commentId, reaction, voterHash } = params;\n\n\t\tif (!ALLOWED_REACTIONS.has(reaction)) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"VALIDATION_ERROR\", message: \"Unsupported reaction\" },\n\t\t\t};\n\t\t}\n\n\t\t// The comment must exist, be approved, and belong to this content item.\n\t\tconst comment = await db\n\t\t\t.selectFrom(\"_emdash_comments\")\n\t\t\t.select([\"id\", \"status\"])\n\t\t\t.where(\"id\", \"=\", commentId)\n\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t.where(\"content_id\", \"=\", contentId)\n\t\t\t.executeTakeFirst();\n\n\t\tif (!comment) {\n\t\t\treturn { success: false, error: { code: \"NOT_FOUND\", message: \"Comment not found\" } };\n\t\t}\n\t\tif (comment.status !== \"approved\") {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"COMMENT_NOT_APPROVED\", message: \"Cannot react to this comment\" },\n\t\t\t};\n\t\t}\n\n\t\tconst repo = new CommentReactionRepository(db);\n\n\t\tconst recent = await repo.countRecentByVoter(voterHash, REACTION_RATE_WINDOW_MINUTES);\n\t\tif (recent >= REACTION_RATE_LIMIT) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"RATE_LIMITED\", message: \"Too many reactions. Please try again later.\" },\n\t\t\t};\n\t\t}\n\n\t\tconst { reacted } = await repo.toggle({ commentId, reaction, voterHash });\n\t\tconst countsMap = await repo.countsForComments([commentId]);\n\n\t\t// Reaction counts (and `best` ordering) are folded into cached getComments\n\t\t// reads, so a toggle must orphan them.\n\t\tinvalidateCommentObjectCache();\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: { commentId, reaction, reacted, counts: countsMap.get(commentId) ?? {} },\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"REACTION_TOGGLE_ERROR\", message: \"Failed to toggle reaction\" },\n\t\t};\n\t}\n}\n\n/**\n * Read aggregate reaction counts for every approved comment on a content item,\n * plus (optionally) which reactions the current voter has active.\n */\nexport async function handleReactionCounts(\n\tdb: Kysely<Database>,\n\tcollection: string,\n\tcontentId: string,\n\tvoterHash?: string,\n): Promise<ApiResult<ReactionCountsResult>> {\n\ttry {\n\t\tconst comments = await db\n\t\t\t.selectFrom(\"_emdash_comments\")\n\t\t\t.select(\"id\")\n\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t.where(\"content_id\", \"=\", contentId)\n\t\t\t.where(\"status\", \"=\", \"approved\")\n\t\t\t.execute();\n\n\t\tconst ids = comments.map((c) => c.id);\n\t\tconst repo = new CommentReactionRepository(db);\n\n\t\tconst countsMap = await repo.countsForComments(ids);\n\t\tconst reactions: Record<string, ReactionCounts> = {};\n\t\tfor (const [id, counts] of countsMap) {\n\t\t\treactions[id] = counts;\n\t\t}\n\n\t\tconst data: ReactionCountsResult = { reactions };\n\n\t\tif (voterHash) {\n\t\t\tconst viewerMap = await repo.viewerReactions(ids, voterHash);\n\t\t\tconst viewer: Record<string, string[]> = {};\n\t\t\tfor (const [id, list] of viewerMap) {\n\t\t\t\tviewer[id] = list;\n\t\t\t}\n\t\t\tdata.viewer = viewer;\n\t\t}\n\n\t\treturn { success: true, data };\n\t} catch {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"REACTION_COUNTS_ERROR\", message: \"Failed to read reactions\" },\n\t\t};\n\t}\n}\n","/**\n * Public comment reaction endpoints (Tier 1 of the best-in-class comments RFC).\n *\n * GET /_emdash/api/comments/:collection/:contentId/reactions\n * - Aggregate reaction counts for the content's approved comments, plus the\n * current visitor's active reactions.\n * POST /_emdash/api/comments/:collection/:contentId/reactions\n * - Toggle a reaction on a comment. Public, honeypot- and rate-limit-gated.\n *\n * Inherits the `/_emdash/api/comments/` public prefix (no auth); the POST still\n * requires the `X-EmDash-Request: 1` CSRF header like the comment POST.\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { apiError, apiSuccess, handleError, requireDb, unwrapResult } from \"#api/error.js\";\nimport { handleReactionCounts, handleReactionToggle } from \"#api/handlers/comment-reactions.js\";\nimport { hashIp } from \"#api/handlers/comments.js\";\nimport { isParseError, parseBody } from \"#api/parse.js\";\nimport { createReactionBody } from \"#api/schemas.js\";\nimport { resolveSecretsCached } from \"#config/secrets.js\";\nimport { extractRequestMeta } from \"#plugins/request-meta.js\";\n\nexport const prerender = false;\n\nexport const GET: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash } = locals;\n\tconst { collection, contentId } = params;\n\n\tif (!collection || !contentId) {\n\t\treturn apiError(\"VALIDATION_ERROR\", \"Collection and content ID required\", 400);\n\t}\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\ttry {\n\t\t// Salted voter hash from request IP (same primitive as comment ip_hash).\n\t\t// Behind Cloudflare (CF-Connecting-IP) or a configured trusted proxy this\n\t\t// is per-visitor. Without a trusted IP it collapses to a shared \"unknown\"\n\t\t// bucket, so reaction dedup degrades for those visitors — a real\n\t\t// per-visitor token is Tier 2 (visitor identity). Operators should set\n\t\t// trustedProxyHeaders; see the comment ingest route for the same note.\n\t\tconst meta = extractRequestMeta(request, emdash.config);\n\t\tlet voterHash = \"unknown\";\n\t\tif (meta.ip) {\n\t\t\tconst { ipSalt } = await resolveSecretsCached(emdash.db);\n\t\t\tvoterHash = await hashIp(meta.ip, ipSalt);\n\t\t}\n\n\t\tconst result = await handleReactionCounts(emdash.db, collection, contentId, voterHash);\n\t\treturn unwrapResult(result);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to read reactions\", \"REACTION_COUNTS_ERROR\");\n\t}\n};\n\nexport const POST: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash } = locals;\n\tconst { collection, contentId } = params;\n\n\tif (!collection || !contentId) {\n\t\treturn apiError(\"VALIDATION_ERROR\", \"Collection and content ID required\", 400);\n\t}\n\n\tconst dbErr = requireDb(emdash?.db);\n\tif (dbErr) return dbErr;\n\n\ttry {\n\t\tconst body = await parseBody(request, createReactionBody);\n\t\tif (isParseError(body)) return body;\n\n\t\t// Anti-spam: honeypot — hidden field filled only by bots. Silently accept.\n\t\tif (body.website_url) {\n\t\t\treturn apiSuccess({ reacted: false, counts: {} });\n\t\t}\n\n\t\tconst meta = extractRequestMeta(request, emdash.config);\n\t\tlet voterHash = \"unknown\";\n\t\tif (meta.ip) {\n\t\t\tconst { ipSalt } = await resolveSecretsCached(emdash.db);\n\t\t\tvoterHash = await hashIp(meta.ip, ipSalt);\n\t\t}\n\n\t\tconst result = await handleReactionToggle(emdash.db, {\n\t\t\tcollection,\n\t\t\tcontentId,\n\t\t\tcommentId: body.commentId,\n\t\t\treaction: body.reaction,\n\t\t\tvoterHash,\n\t\t});\n\n\t\treturn unwrapResult(result, 200);\n\t} catch (error) {\n\t\treturn handleError(error, \"Failed to toggle reaction\", \"REACTION_TOGGLE_ERROR\");\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,MAAM,sBAAsB;AAC5B,MAAM,+BAA+B;;;;;;;AAQrC,MAAM,oBAAyC,IAAI,IAAI,CAAC,OAAO,CAAC;;;;;AAsBhE,eAAsB,qBACrB,IACA,QAO2C;AAC3C,KAAI;EACH,MAAM,EAAE,YAAY,WAAW,WAAW,UAAU,cAAc;AAElE,MAAI,CAAC,kBAAkB,IAAI,SAAS,CACnC,QAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAoB,SAAS;IAAwB;GACpE;EAIF,MAAM,UAAU,MAAM,GACpB,WAAW,mBAAmB,CAC9B,OAAO,CAAC,MAAM,SAAS,CAAC,CACxB,MAAM,MAAM,KAAK,UAAU,CAC3B,MAAM,cAAc,KAAK,WAAW,CACpC,MAAM,cAAc,KAAK,UAAU,CACnC,kBAAkB;AAEpB,MAAI,CAAC,QACJ,QAAO;GAAE,SAAS;GAAO,OAAO;IAAE,MAAM;IAAa,SAAS;IAAqB;GAAE;AAEtF,MAAI,QAAQ,WAAW,WACtB,QAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAwB,SAAS;IAAgC;GAChF;EAGF,MAAM,OAAO,IAAI,0BAA0B,GAAG;AAG9C,MADe,MAAM,KAAK,mBAAmB,WAAW,6BAA6B,IACvE,oBACb,QAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAgB,SAAS;IAA+C;GACvF;EAGF,MAAM,EAAE,YAAY,MAAM,KAAK,OAAO;GAAE;GAAW;GAAU;GAAW,CAAC;EACzE,MAAM,YAAY,MAAM,KAAK,kBAAkB,CAAC,UAAU,CAAC;AAI3D,gCAA8B;AAE9B,SAAO;GACN,SAAS;GACT,MAAM;IAAE;IAAW;IAAU;IAAS,QAAQ,UAAU,IAAI,UAAU,IAAI,EAAE;IAAE;GAC9E;SACM;AACP,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAyB,SAAS;IAA6B;GAC9E;;;;;;;AAQH,eAAsB,qBACrB,IACA,YACA,WACA,WAC2C;AAC3C,KAAI;EASH,MAAM,OARW,MAAM,GACrB,WAAW,mBAAmB,CAC9B,OAAO,KAAK,CACZ,MAAM,cAAc,KAAK,WAAW,CACpC,MAAM,cAAc,KAAK,UAAU,CACnC,MAAM,UAAU,KAAK,WAAW,CAChC,SAAS,EAEU,KAAK,MAAM,EAAE,GAAG;EACrC,MAAM,OAAO,IAAI,0BAA0B,GAAG;EAE9C,MAAM,YAAY,MAAM,KAAK,kBAAkB,IAAI;EACnD,MAAM,YAA4C,EAAE;AACpD,OAAK,MAAM,CAAC,IAAI,WAAW,UAC1B,WAAU,MAAM;EAGjB,MAAM,OAA6B,EAAE,WAAW;AAEhD,MAAI,WAAW;GACd,MAAM,YAAY,MAAM,KAAK,gBAAgB,KAAK,UAAU;GAC5D,MAAM,SAAmC,EAAE;AAC3C,QAAK,MAAM,CAAC,IAAI,SAAS,UACxB,QAAO,MAAM;AAEd,QAAK,SAAS;;AAGf,SAAO;GAAE,SAAS;GAAM;GAAM;SACvB;AACP,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAyB,SAAS;IAA4B;GAC7E;;;;;;AC3IH,MAAa,YAAY;AAEzB,MAAa,MAAgB,OAAO,EAAE,QAAQ,SAAS,aAAa;CACnE,MAAM,EAAE,WAAW;CACnB,MAAM,EAAE,YAAY,cAAc;AAElC,KAAI,CAAC,cAAc,CAAC,UACnB,QAAO,SAAS,oBAAoB,sCAAsC,IAAI;CAG/E,MAAM,QAAQ,UAAU,QAAQ,GAAG;AACnC,KAAI,MAAO,QAAO;AAElB,KAAI;EAOH,MAAM,OAAO,mBAAmB,SAAS,OAAO,OAAO;EACvD,IAAI,YAAY;AAChB,MAAI,KAAK,IAAI;GACZ,MAAM,EAAE,WAAW,MAAM,qBAAqB,OAAO,GAAG;AACxD,eAAY,MAAM,OAAO,KAAK,IAAI,OAAO;;AAI1C,SAAO,aADQ,MAAM,qBAAqB,OAAO,IAAI,YAAY,WAAW,UAAU,CAC3D;UACnB,OAAO;AACf,SAAO,YAAY,OAAO,4BAA4B,wBAAwB;;;AAIhF,MAAa,OAAiB,OAAO,EAAE,QAAQ,SAAS,aAAa;CACpE,MAAM,EAAE,WAAW;CACnB,MAAM,EAAE,YAAY,cAAc;AAElC,KAAI,CAAC,cAAc,CAAC,UACnB,QAAO,SAAS,oBAAoB,sCAAsC,IAAI;CAG/E,MAAM,QAAQ,UAAU,QAAQ,GAAG;AACnC,KAAI,MAAO,QAAO;AAElB,KAAI;EACH,MAAM,OAAO,MAAM,UAAU,SAAS,mBAAmB;AACzD,MAAI,aAAa,KAAK,CAAE,QAAO;AAG/B,MAAI,KAAK,YACR,QAAO,WAAW;GAAE,SAAS;GAAO,QAAQ,EAAE;GAAE,CAAC;EAGlD,MAAM,OAAO,mBAAmB,SAAS,OAAO,OAAO;EACvD,IAAI,YAAY;AAChB,MAAI,KAAK,IAAI;GACZ,MAAM,EAAE,WAAW,MAAM,qBAAqB,OAAO,GAAG;AACxD,eAAY,MAAM,OAAO,KAAK,IAAI,OAAO;;AAW1C,SAAO,aARQ,MAAM,qBAAqB,OAAO,IAAI;GACpD;GACA;GACA,WAAW,KAAK;GAChB,UAAU,KAAK;GACf;GACA,CAAC,EAE0B,IAAI;UACxB,OAAO;AACf,SAAO,YAAY,OAAO,6BAA6B,wBAAwB"}
@@ -1,9 +1,9 @@
1
1
  import "../../../../../../base64-DvnNgP7e.mjs";
2
- import "../../../../../../types-aOOxRSx6.mjs";
3
- import "../../../../../../errors-Bt3goF8I.mjs";
4
- import "../../../../../../errors-BN1QAnEY.mjs";
5
- import { a as unwrapResult, t as apiError } from "../../../../../../error-BfsNNrIE.mjs";
6
- import { i as requirePerm } from "../../../../../../authorize-WgdKF8QY.mjs";
2
+ import "../../../../../../types-j6MBDjlZ.mjs";
3
+ import "../../../../../../errors-CjXd1LgH.mjs";
4
+ import "../../../../../../errors-CNvATh_7.mjs";
5
+ import { a as unwrapResult, t as apiError } from "../../../../../../error-CEdm_AWU.mjs";
6
+ import { i as requirePerm } from "../../../../../../authorize-soZXK7U0.mjs";
7
7
 
8
8
  //#region src/astro/routes/api/content/[collection]/[id]/compare.ts
9
9
  const prerender = false;
@@ -1,24 +1,25 @@
1
1
  import "../../../../../../dialect-helpers-7_IqPdh9.mjs";
2
2
  import "../../../../../../config-CvmjJcVw.mjs";
3
3
  import "../../../../../../base64-DvnNgP7e.mjs";
4
- import "../../../../../../types-aOOxRSx6.mjs";
5
- import "../../../../../../entry-locks-BTyQLdbC.mjs";
6
- import "../../../../../../errors-Bt3goF8I.mjs";
7
- import "../../../../../../settings-DSfE7wOa.mjs";
8
- import "../../../../../../site-settings-NGzdrt7O.mjs";
9
- import { n as mapErrorStatus } from "../../../../../../errors-BN1QAnEY.mjs";
10
- import { a as unwrapResult, t as apiError } from "../../../../../../error-BfsNNrIE.mjs";
11
- import { r as parseOptionalBody, t as isParseError } from "../../../../../../parse-CORGGhHf.mjs";
12
- import "../../../../../../redirects-BjTwDTsV.mjs";
13
- import { Lt as contentRevisionConditionBody } from "../../../../../../entry-lock-BaRBHCsH.mjs";
14
- import "../../../../../../media-OEIQ3bVc.mjs";
15
- import "../../../../../../comments-M4EDYAHw.mjs";
16
- import "../../../../../../byline-fields-B8HH-35f.mjs";
17
- import "../../../../../../menus-p_M1V7J_.mjs";
18
- import "../../../../../../status-lzyj4Uu7.mjs";
4
+ import "../../../../../../url-Dn3IStq8.mjs";
5
+ import "../../../../../../types-j6MBDjlZ.mjs";
6
+ import "../../../../../../entry-locks-DJAqVweV.mjs";
7
+ import "../../../../../../errors-CjXd1LgH.mjs";
8
+ import { n as mapErrorStatus } from "../../../../../../errors-CNvATh_7.mjs";
9
+ import "../../../../../../settings-B0zQj_Tj.mjs";
10
+ import "../../../../../../site-settings-AYFvhwQn.mjs";
11
+ import { a as unwrapResult, t as apiError } from "../../../../../../error-CEdm_AWU.mjs";
12
+ import { r as parseOptionalBody, t as isParseError } from "../../../../../../parse-Gt2l4Sld.mjs";
13
+ import "../../../../../../redirects-D4EWeXAo.mjs";
14
+ import { Lt as contentRevisionConditionBody } from "../../../../../../entry-lock-PP1JCXBB.mjs";
15
+ import "../../../../../../media-D1z_jisb.mjs";
16
+ import "../../../../../../comments-BRtp992B.mjs";
17
+ import "../../../../../../byline-fields-DHJs0Mja.mjs";
18
+ import "../../../../../../menus-BQKqf0Up.mjs";
19
+ import "../../../../../../status-D39Fpy8R.mjs";
19
20
  import "../../../../../../api/schemas/index.mjs";
20
- import { r as requireOwnerPerm } from "../../../../../../authorize-WgdKF8QY.mjs";
21
- import { t as claimEntryLockForWrite } from "../../../../../../entry-lock-C6NcnZPV.mjs";
21
+ import { r as requireOwnerPerm } from "../../../../../../authorize-soZXK7U0.mjs";
22
+ import { t as claimEntryLockForWrite } from "../../../../../../entry-lock-B5eaZEZP.mjs";
22
23
 
23
24
  //#region src/astro/routes/api/content/[collection]/[id]/discard-draft.ts
24
25
  const prerender = false;
@@ -1 +1 @@
1
- {"version":3,"file":"discard-draft.mjs","names":[],"sources":["../../../../../../../src/astro/routes/api/content/[collection]/[id]/discard-draft.ts"],"sourcesContent":["/**\n * Discard draft changes - reverts to live version\n *\n * POST /_emdash/api/content/{collection}/{id}/discard-draft\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requireOwnerPerm } from \"#api/authorize.js\";\nimport { apiError, mapErrorStatus, unwrapResult } from \"#api/error.js\";\nimport { claimEntryLockForWrite } from \"#api/handlers/entry-lock.js\";\nimport { isParseError, parseOptionalBody } from \"#api/parse.js\";\nimport { contentRevisionConditionBody } from \"#api/schemas.js\";\n\nexport const prerender = false;\n\nexport const POST: APIRoute = async ({ params, request, locals, url, cache }) => {\n\tconst { emdash, user } = locals;\n\tconst collection = params.collection!;\n\tconst id = params.id!;\n\n\tif (!emdash?.handleContentDiscardDraft || !emdash?.handleContentGet) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\tconst body = await parseOptionalBody(request, contentRevisionConditionBody, {});\n\tif (isParseError(body)) return body;\n\n\tconst locale = url.searchParams.get(\"locale\") || undefined;\n\n\t// Fetch item to check ownership\n\tconst existing = await emdash.handleContentGet(collection, id, locale);\n\tif (!existing.success) {\n\t\treturn apiError(\n\t\t\texisting.error?.code ?? \"UNKNOWN_ERROR\",\n\t\t\texisting.error?.message ?? \"Unknown error\",\n\t\t\tmapErrorStatus(existing.error?.code),\n\t\t);\n\t}\n\tconst existingData =\n\t\texisting.data && typeof existing.data === \"object\"\n\t\t\t? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check above\n\t\t\t\t(existing.data as Record<string, unknown>)\n\t\t\t: undefined;\n\t// Handler returns { item, _rev } — extract the item for ownership check\n\tconst existingItem =\n\t\texistingData?.item && typeof existingData.item === \"object\"\n\t\t\t? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check above\n\t\t\t\t(existingData.item as Record<string, unknown>)\n\t\t\t: existingData;\n\tconst authorId = typeof existingItem?.authorId === \"string\" ? existingItem.authorId : \"\";\n\tconst denied = requireOwnerPerm(user, authorId, \"content:edit_own\", \"content:edit_any\");\n\tif (denied) return denied;\n\n\tconst resolvedId = typeof existingItem?.id === \"string\" ? existingItem.id : id;\n\n\tconst refusal = await claimEntryLockForWrite(emdash.db, collection, resolvedId, user!.id, {\n\t\toverride: body?.overrideLock,\n\t});\n\tif (refusal) {\n\t\treturn apiError(refusal.code, refusal.message, mapErrorStatus(refusal.code), {\n\t\t\t...refusal.details,\n\t\t});\n\t}\n\n\tconst result = await emdash.handleContentDiscardDraft(collection, resolvedId, {\n\t\t_rev: body?._rev,\n\t});\n\n\tif (!result.success) return unwrapResult(result);\n\n\tif (cache?.enabled) await cache.invalidate({ tags: [collection, resolvedId] });\n\n\treturn unwrapResult(result);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAa,YAAY;AAEzB,MAAa,OAAiB,OAAO,EAAE,QAAQ,SAAS,QAAQ,KAAK,YAAY;CAChF,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,aAAa,OAAO;CAC1B,MAAM,KAAK,OAAO;AAElB,KAAI,CAAC,QAAQ,6BAA6B,CAAC,QAAQ,iBAClD,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;CAEpE,MAAM,OAAO,MAAM,kBAAkB,SAAS,8BAA8B,EAAE,CAAC;AAC/E,KAAI,aAAa,KAAK,CAAE,QAAO;CAE/B,MAAM,SAAS,IAAI,aAAa,IAAI,SAAS,IAAI;CAGjD,MAAM,WAAW,MAAM,OAAO,iBAAiB,YAAY,IAAI,OAAO;AACtE,KAAI,CAAC,SAAS,QACb,QAAO,SACN,SAAS,OAAO,QAAQ,iBACxB,SAAS,OAAO,WAAW,iBAC3B,eAAe,SAAS,OAAO,KAAK,CACpC;CAEF,MAAM,eACL,SAAS,QAAQ,OAAO,SAAS,SAAS,WAEvC,SAAS,OACT;CAEJ,MAAM,eACL,cAAc,QAAQ,OAAO,aAAa,SAAS,WAEhD,aAAa,OACb;CAEJ,MAAM,SAAS,iBAAiB,MADf,OAAO,cAAc,aAAa,WAAW,aAAa,WAAW,IACtC,oBAAoB,mBAAmB;AACvF,KAAI,OAAQ,QAAO;CAEnB,MAAM,aAAa,OAAO,cAAc,OAAO,WAAW,aAAa,KAAK;CAE5E,MAAM,UAAU,MAAM,uBAAuB,OAAO,IAAI,YAAY,YAAY,KAAM,IAAI,EACzF,UAAU,MAAM,cAChB,CAAC;AACF,KAAI,QACH,QAAO,SAAS,QAAQ,MAAM,QAAQ,SAAS,eAAe,QAAQ,KAAK,EAAE,EAC5E,GAAG,QAAQ,SACX,CAAC;CAGH,MAAM,SAAS,MAAM,OAAO,0BAA0B,YAAY,YAAY,EAC7E,MAAM,MAAM,MACZ,CAAC;AAEF,KAAI,CAAC,OAAO,QAAS,QAAO,aAAa,OAAO;AAEhD,KAAI,OAAO,QAAS,OAAM,MAAM,WAAW,EAAE,MAAM,CAAC,YAAY,WAAW,EAAE,CAAC;AAE9E,QAAO,aAAa,OAAO"}
1
+ {"version":3,"file":"discard-draft.mjs","names":[],"sources":["../../../../../../../src/astro/routes/api/content/[collection]/[id]/discard-draft.ts"],"sourcesContent":["/**\n * Discard draft changes - reverts to live version\n *\n * POST /_emdash/api/content/{collection}/{id}/discard-draft\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requireOwnerPerm } from \"#api/authorize.js\";\nimport { apiError, mapErrorStatus, unwrapResult } from \"#api/error.js\";\nimport { claimEntryLockForWrite } from \"#api/handlers/entry-lock.js\";\nimport { isParseError, parseOptionalBody } from \"#api/parse.js\";\nimport { contentRevisionConditionBody } from \"#api/schemas.js\";\n\nexport const prerender = false;\n\nexport const POST: APIRoute = async ({ params, request, locals, url, cache }) => {\n\tconst { emdash, user } = locals;\n\tconst collection = params.collection!;\n\tconst id = params.id!;\n\n\tif (!emdash?.handleContentDiscardDraft || !emdash?.handleContentGet) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\tconst body = await parseOptionalBody(request, contentRevisionConditionBody, {});\n\tif (isParseError(body)) return body;\n\n\tconst locale = url.searchParams.get(\"locale\") || undefined;\n\n\t// Fetch item to check ownership\n\tconst existing = await emdash.handleContentGet(collection, id, locale);\n\tif (!existing.success) {\n\t\treturn apiError(\n\t\t\texisting.error?.code ?? \"UNKNOWN_ERROR\",\n\t\t\texisting.error?.message ?? \"Unknown error\",\n\t\t\tmapErrorStatus(existing.error?.code),\n\t\t);\n\t}\n\tconst existingData =\n\t\texisting.data && typeof existing.data === \"object\"\n\t\t\t? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check above\n\t\t\t\t(existing.data as Record<string, unknown>)\n\t\t\t: undefined;\n\t// Handler returns { item, _rev } — extract the item for ownership check\n\tconst existingItem =\n\t\texistingData?.item && typeof existingData.item === \"object\"\n\t\t\t? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check above\n\t\t\t\t(existingData.item as Record<string, unknown>)\n\t\t\t: existingData;\n\tconst authorId = typeof existingItem?.authorId === \"string\" ? existingItem.authorId : \"\";\n\tconst denied = requireOwnerPerm(user, authorId, \"content:edit_own\", \"content:edit_any\");\n\tif (denied) return denied;\n\n\tconst resolvedId = typeof existingItem?.id === \"string\" ? existingItem.id : id;\n\n\tconst refusal = await claimEntryLockForWrite(emdash.db, collection, resolvedId, user!.id, {\n\t\toverride: body?.overrideLock,\n\t});\n\tif (refusal) {\n\t\treturn apiError(refusal.code, refusal.message, mapErrorStatus(refusal.code), {\n\t\t\t...refusal.details,\n\t\t});\n\t}\n\n\tconst result = await emdash.handleContentDiscardDraft(collection, resolvedId, {\n\t\t_rev: body?._rev,\n\t});\n\n\tif (!result.success) return unwrapResult(result);\n\n\tif (cache?.enabled) await cache.invalidate({ tags: [collection, resolvedId] });\n\n\treturn unwrapResult(result);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAa,YAAY;AAEzB,MAAa,OAAiB,OAAO,EAAE,QAAQ,SAAS,QAAQ,KAAK,YAAY;CAChF,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,aAAa,OAAO;CAC1B,MAAM,KAAK,OAAO;AAElB,KAAI,CAAC,QAAQ,6BAA6B,CAAC,QAAQ,iBAClD,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;CAEpE,MAAM,OAAO,MAAM,kBAAkB,SAAS,8BAA8B,EAAE,CAAC;AAC/E,KAAI,aAAa,KAAK,CAAE,QAAO;CAE/B,MAAM,SAAS,IAAI,aAAa,IAAI,SAAS,IAAI;CAGjD,MAAM,WAAW,MAAM,OAAO,iBAAiB,YAAY,IAAI,OAAO;AACtE,KAAI,CAAC,SAAS,QACb,QAAO,SACN,SAAS,OAAO,QAAQ,iBACxB,SAAS,OAAO,WAAW,iBAC3B,eAAe,SAAS,OAAO,KAAK,CACpC;CAEF,MAAM,eACL,SAAS,QAAQ,OAAO,SAAS,SAAS,WAEvC,SAAS,OACT;CAEJ,MAAM,eACL,cAAc,QAAQ,OAAO,aAAa,SAAS,WAEhD,aAAa,OACb;CAEJ,MAAM,SAAS,iBAAiB,MADf,OAAO,cAAc,aAAa,WAAW,aAAa,WAAW,IACtC,oBAAoB,mBAAmB;AACvF,KAAI,OAAQ,QAAO;CAEnB,MAAM,aAAa,OAAO,cAAc,OAAO,WAAW,aAAa,KAAK;CAE5E,MAAM,UAAU,MAAM,uBAAuB,OAAO,IAAI,YAAY,YAAY,KAAM,IAAI,EACzF,UAAU,MAAM,cAChB,CAAC;AACF,KAAI,QACH,QAAO,SAAS,QAAQ,MAAM,QAAQ,SAAS,eAAe,QAAQ,KAAK,EAAE,EAC5E,GAAG,QAAQ,SACX,CAAC;CAGH,MAAM,SAAS,MAAM,OAAO,0BAA0B,YAAY,YAAY,EAC7E,MAAM,MAAM,MACZ,CAAC;AAEF,KAAI,CAAC,OAAO,QAAS,QAAO,aAAa,OAAO;AAEhD,KAAI,OAAO,QAAS,OAAM,MAAM,WAAW,EAAE,MAAM,CAAC,YAAY,WAAW,EAAE,CAAC;AAE9E,QAAO,aAAa,OAAO"}
@@ -1,9 +1,9 @@
1
1
  import "../../../../../../base64-DvnNgP7e.mjs";
2
- import "../../../../../../types-aOOxRSx6.mjs";
3
- import "../../../../../../errors-Bt3goF8I.mjs";
4
- import { n as mapErrorStatus } from "../../../../../../errors-BN1QAnEY.mjs";
5
- import { a as unwrapResult, t as apiError } from "../../../../../../error-BfsNNrIE.mjs";
6
- import { i as requirePerm, r as requireOwnerPerm } from "../../../../../../authorize-WgdKF8QY.mjs";
2
+ import "../../../../../../types-j6MBDjlZ.mjs";
3
+ import "../../../../../../errors-CjXd1LgH.mjs";
4
+ import { n as mapErrorStatus } from "../../../../../../errors-CNvATh_7.mjs";
5
+ import { a as unwrapResult, t as apiError } from "../../../../../../error-CEdm_AWU.mjs";
6
+ import { i as requirePerm, r as requireOwnerPerm } from "../../../../../../authorize-soZXK7U0.mjs";
7
7
 
8
8
  //#region src/astro/routes/api/content/[collection]/[id]/duplicate.ts
9
9
  const prerender = false;
@@ -1,24 +1,25 @@
1
1
  import "../../../../../../dialect-helpers-7_IqPdh9.mjs";
2
2
  import "../../../../../../config-CvmjJcVw.mjs";
3
3
  import "../../../../../../base64-DvnNgP7e.mjs";
4
- import "../../../../../../types-aOOxRSx6.mjs";
5
- import "../../../../../../entry-locks-BTyQLdbC.mjs";
6
- import "../../../../../../errors-Bt3goF8I.mjs";
7
- import "../../../../../../settings-DSfE7wOa.mjs";
8
- import "../../../../../../site-settings-NGzdrt7O.mjs";
9
- import { n as mapErrorStatus } from "../../../../../../errors-BN1QAnEY.mjs";
10
- import { a as unwrapResult, t as apiError } from "../../../../../../error-BfsNNrIE.mjs";
11
- import { r as parseOptionalBody, t as isParseError } from "../../../../../../parse-CORGGhHf.mjs";
12
- import "../../../../../../redirects-BjTwDTsV.mjs";
13
- import { t as entryLockAcquireBody } from "../../../../../../entry-lock-BaRBHCsH.mjs";
14
- import "../../../../../../media-OEIQ3bVc.mjs";
15
- import "../../../../../../comments-M4EDYAHw.mjs";
16
- import "../../../../../../byline-fields-B8HH-35f.mjs";
17
- import "../../../../../../menus-p_M1V7J_.mjs";
18
- import "../../../../../../status-lzyj4Uu7.mjs";
4
+ import "../../../../../../url-Dn3IStq8.mjs";
5
+ import "../../../../../../types-j6MBDjlZ.mjs";
6
+ import "../../../../../../entry-locks-DJAqVweV.mjs";
7
+ import "../../../../../../errors-CjXd1LgH.mjs";
8
+ import { n as mapErrorStatus } from "../../../../../../errors-CNvATh_7.mjs";
9
+ import "../../../../../../settings-B0zQj_Tj.mjs";
10
+ import "../../../../../../site-settings-AYFvhwQn.mjs";
11
+ import { a as unwrapResult, t as apiError } from "../../../../../../error-CEdm_AWU.mjs";
12
+ import { r as parseOptionalBody, t as isParseError } from "../../../../../../parse-Gt2l4Sld.mjs";
13
+ import "../../../../../../redirects-D4EWeXAo.mjs";
14
+ import { t as entryLockAcquireBody } from "../../../../../../entry-lock-PP1JCXBB.mjs";
15
+ import "../../../../../../media-D1z_jisb.mjs";
16
+ import "../../../../../../comments-BRtp992B.mjs";
17
+ import "../../../../../../byline-fields-DHJs0Mja.mjs";
18
+ import "../../../../../../menus-BQKqf0Up.mjs";
19
+ import "../../../../../../status-D39Fpy8R.mjs";
19
20
  import "../../../../../../api/schemas/index.mjs";
20
- import { r as requireOwnerPerm } from "../../../../../../authorize-WgdKF8QY.mjs";
21
- import { i as handleEntryLockRelease, n as handleEntryLockAcquire, r as handleEntryLockRead } from "../../../../../../entry-lock-C6NcnZPV.mjs";
21
+ import { r as requireOwnerPerm } from "../../../../../../authorize-soZXK7U0.mjs";
22
+ import { i as handleEntryLockRelease, n as handleEntryLockAcquire, r as handleEntryLockRead } from "../../../../../../entry-lock-B5eaZEZP.mjs";
22
23
 
23
24
  //#region src/astro/routes/api/content/[collection]/[id]/lock.ts
24
25
  const prerender = false;
@@ -1 +1 @@
1
- {"version":3,"file":"lock.mjs","names":[],"sources":["../../../../../../../src/astro/routes/api/content/[collection]/[id]/lock.ts"],"sourcesContent":["/**\n * Entry edit lock\n *\n * GET /_emdash/api/content/{collection}/{id}/lock - Read the current holder\n * POST /_emdash/api/content/{collection}/{id}/lock - Take or refresh the lock\n * DELETE /_emdash/api/content/{collection}/{id}/lock - Release the caller's lock\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requireOwnerPerm } from \"#api/authorize.js\";\nimport { apiError, mapErrorStatus, unwrapResult } from \"#api/error.js\";\nimport {\n\thandleEntryLockAcquire,\n\thandleEntryLockRead,\n\thandleEntryLockRelease,\n} from \"#api/handlers/entry-lock.js\";\nimport { isParseError, parseOptionalBody } from \"#api/parse.js\";\nimport { entryLockAcquireBody } from \"#api/schemas.js\";\n\nexport const prerender = false;\n\ninterface ResolvedEntry {\n\tresolvedId: string;\n\tuserId: string;\n}\n\n/**\n * Resolves the entry the way every other single-entry route does, and applies\n * the same edit permission, since holding a lock is the prelude to a write.\n */\nasync function resolveEntry(\n\tlocals: App.Locals,\n\tcollection: string,\n\tid: string,\n\tlocale: string | undefined,\n): Promise<ResolvedEntry | Response> {\n\tconst { emdash, user } = locals;\n\tif (!emdash?.handleContentGet) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\tconst existing = await emdash.handleContentGet(collection, id, locale);\n\tif (!existing.success) {\n\t\treturn apiError(\n\t\t\texisting.error?.code ?? \"UNKNOWN_ERROR\",\n\t\t\texisting.error?.message ?? \"Unknown error\",\n\t\t\tmapErrorStatus(existing.error?.code),\n\t\t);\n\t}\n\n\tconst existingData =\n\t\texisting.data && typeof existing.data === \"object\"\n\t\t\t? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check above\n\t\t\t\t(existing.data as Record<string, unknown>)\n\t\t\t: undefined;\n\tconst existingItem =\n\t\texistingData?.item && typeof existingData.item === \"object\"\n\t\t\t? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check above\n\t\t\t\t(existingData.item as Record<string, unknown>)\n\t\t\t: existingData;\n\tconst authorId = typeof existingItem?.authorId === \"string\" ? existingItem.authorId : \"\";\n\tconst denied = requireOwnerPerm(user, authorId, \"content:edit_own\", \"content:edit_any\");\n\tif (denied) return denied;\n\n\treturn {\n\t\tresolvedId: typeof existingItem?.id === \"string\" ? existingItem.id : id,\n\t\tuserId: user!.id,\n\t};\n}\n\nexport const GET: APIRoute = async ({ params, locals, url }) => {\n\tconst collection = params.collection!;\n\tconst id = params.id!;\n\tconst resolved = await resolveEntry(\n\t\tlocals,\n\t\tcollection,\n\t\tid,\n\t\turl.searchParams.get(\"locale\") || undefined,\n\t);\n\tif (resolved instanceof Response) return resolved;\n\n\treturn unwrapResult(\n\t\tawait handleEntryLockRead(locals.emdash.db, collection, resolved.resolvedId, resolved.userId),\n\t);\n};\n\nexport const POST: APIRoute = async ({ params, request, locals, url }) => {\n\tconst collection = params.collection!;\n\tconst id = params.id!;\n\tconst body = await parseOptionalBody(request, entryLockAcquireBody, {});\n\tif (isParseError(body)) return body;\n\n\tconst resolved = await resolveEntry(\n\t\tlocals,\n\t\tcollection,\n\t\tid,\n\t\turl.searchParams.get(\"locale\") || undefined,\n\t);\n\tif (resolved instanceof Response) return resolved;\n\n\treturn unwrapResult(\n\t\tawait handleEntryLockAcquire(\n\t\t\tlocals.emdash.db,\n\t\t\tcollection,\n\t\t\tresolved.resolvedId,\n\t\t\tresolved.userId,\n\t\t\t{ takeover: body?.takeover, token: body?.token },\n\t\t),\n\t);\n};\n\nexport const DELETE: APIRoute = async ({ params, locals, url }) => {\n\tconst collection = params.collection!;\n\tconst id = params.id!;\n\tconst resolved = await resolveEntry(\n\t\tlocals,\n\t\tcollection,\n\t\tid,\n\t\turl.searchParams.get(\"locale\") || undefined,\n\t);\n\tif (resolved instanceof Response) return resolved;\n\n\treturn unwrapResult(\n\t\tawait handleEntryLockRelease(\n\t\t\tlocals.emdash.db,\n\t\t\tcollection,\n\t\t\tresolved.resolvedId,\n\t\t\tresolved.userId,\n\t\t\t{ token: url.searchParams.get(\"token\") ?? undefined },\n\t\t),\n\t);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAoBA,MAAa,YAAY;;;;;AAWzB,eAAe,aACd,QACA,YACA,IACA,QACoC;CACpC,MAAM,EAAE,QAAQ,SAAS;AACzB,KAAI,CAAC,QAAQ,iBACZ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;CAGpE,MAAM,WAAW,MAAM,OAAO,iBAAiB,YAAY,IAAI,OAAO;AACtE,KAAI,CAAC,SAAS,QACb,QAAO,SACN,SAAS,OAAO,QAAQ,iBACxB,SAAS,OAAO,WAAW,iBAC3B,eAAe,SAAS,OAAO,KAAK,CACpC;CAGF,MAAM,eACL,SAAS,QAAQ,OAAO,SAAS,SAAS,WAEvC,SAAS,OACT;CACJ,MAAM,eACL,cAAc,QAAQ,OAAO,aAAa,SAAS,WAEhD,aAAa,OACb;CAEJ,MAAM,SAAS,iBAAiB,MADf,OAAO,cAAc,aAAa,WAAW,aAAa,WAAW,IACtC,oBAAoB,mBAAmB;AACvF,KAAI,OAAQ,QAAO;AAEnB,QAAO;EACN,YAAY,OAAO,cAAc,OAAO,WAAW,aAAa,KAAK;EACrE,QAAQ,KAAM;EACd;;AAGF,MAAa,MAAgB,OAAO,EAAE,QAAQ,QAAQ,UAAU;CAC/D,MAAM,aAAa,OAAO;CAC1B,MAAM,KAAK,OAAO;CAClB,MAAM,WAAW,MAAM,aACtB,QACA,YACA,IACA,IAAI,aAAa,IAAI,SAAS,IAAI,OAClC;AACD,KAAI,oBAAoB,SAAU,QAAO;AAEzC,QAAO,aACN,MAAM,oBAAoB,OAAO,OAAO,IAAI,YAAY,SAAS,YAAY,SAAS,OAAO,CAC7F;;AAGF,MAAa,OAAiB,OAAO,EAAE,QAAQ,SAAS,QAAQ,UAAU;CACzE,MAAM,aAAa,OAAO;CAC1B,MAAM,KAAK,OAAO;CAClB,MAAM,OAAO,MAAM,kBAAkB,SAAS,sBAAsB,EAAE,CAAC;AACvE,KAAI,aAAa,KAAK,CAAE,QAAO;CAE/B,MAAM,WAAW,MAAM,aACtB,QACA,YACA,IACA,IAAI,aAAa,IAAI,SAAS,IAAI,OAClC;AACD,KAAI,oBAAoB,SAAU,QAAO;AAEzC,QAAO,aACN,MAAM,uBACL,OAAO,OAAO,IACd,YACA,SAAS,YACT,SAAS,QACT;EAAE,UAAU,MAAM;EAAU,OAAO,MAAM;EAAO,CAChD,CACD;;AAGF,MAAa,SAAmB,OAAO,EAAE,QAAQ,QAAQ,UAAU;CAClE,MAAM,aAAa,OAAO;CAC1B,MAAM,KAAK,OAAO;CAClB,MAAM,WAAW,MAAM,aACtB,QACA,YACA,IACA,IAAI,aAAa,IAAI,SAAS,IAAI,OAClC;AACD,KAAI,oBAAoB,SAAU,QAAO;AAEzC,QAAO,aACN,MAAM,uBACL,OAAO,OAAO,IACd,YACA,SAAS,YACT,SAAS,QACT,EAAE,OAAO,IAAI,aAAa,IAAI,QAAQ,IAAI,QAAW,CACrD,CACD"}
1
+ {"version":3,"file":"lock.mjs","names":[],"sources":["../../../../../../../src/astro/routes/api/content/[collection]/[id]/lock.ts"],"sourcesContent":["/**\n * Entry edit lock\n *\n * GET /_emdash/api/content/{collection}/{id}/lock - Read the current holder\n * POST /_emdash/api/content/{collection}/{id}/lock - Take or refresh the lock\n * DELETE /_emdash/api/content/{collection}/{id}/lock - Release the caller's lock\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requireOwnerPerm } from \"#api/authorize.js\";\nimport { apiError, mapErrorStatus, unwrapResult } from \"#api/error.js\";\nimport {\n\thandleEntryLockAcquire,\n\thandleEntryLockRead,\n\thandleEntryLockRelease,\n} from \"#api/handlers/entry-lock.js\";\nimport { isParseError, parseOptionalBody } from \"#api/parse.js\";\nimport { entryLockAcquireBody } from \"#api/schemas.js\";\n\nexport const prerender = false;\n\ninterface ResolvedEntry {\n\tresolvedId: string;\n\tuserId: string;\n}\n\n/**\n * Resolves the entry the way every other single-entry route does, and applies\n * the same edit permission, since holding a lock is the prelude to a write.\n */\nasync function resolveEntry(\n\tlocals: App.Locals,\n\tcollection: string,\n\tid: string,\n\tlocale: string | undefined,\n): Promise<ResolvedEntry | Response> {\n\tconst { emdash, user } = locals;\n\tif (!emdash?.handleContentGet) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\tconst existing = await emdash.handleContentGet(collection, id, locale);\n\tif (!existing.success) {\n\t\treturn apiError(\n\t\t\texisting.error?.code ?? \"UNKNOWN_ERROR\",\n\t\t\texisting.error?.message ?? \"Unknown error\",\n\t\t\tmapErrorStatus(existing.error?.code),\n\t\t);\n\t}\n\n\tconst existingData =\n\t\texisting.data && typeof existing.data === \"object\"\n\t\t\t? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check above\n\t\t\t\t(existing.data as Record<string, unknown>)\n\t\t\t: undefined;\n\tconst existingItem =\n\t\texistingData?.item && typeof existingData.item === \"object\"\n\t\t\t? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check above\n\t\t\t\t(existingData.item as Record<string, unknown>)\n\t\t\t: existingData;\n\tconst authorId = typeof existingItem?.authorId === \"string\" ? existingItem.authorId : \"\";\n\tconst denied = requireOwnerPerm(user, authorId, \"content:edit_own\", \"content:edit_any\");\n\tif (denied) return denied;\n\n\treturn {\n\t\tresolvedId: typeof existingItem?.id === \"string\" ? existingItem.id : id,\n\t\tuserId: user!.id,\n\t};\n}\n\nexport const GET: APIRoute = async ({ params, locals, url }) => {\n\tconst collection = params.collection!;\n\tconst id = params.id!;\n\tconst resolved = await resolveEntry(\n\t\tlocals,\n\t\tcollection,\n\t\tid,\n\t\turl.searchParams.get(\"locale\") || undefined,\n\t);\n\tif (resolved instanceof Response) return resolved;\n\n\treturn unwrapResult(\n\t\tawait handleEntryLockRead(locals.emdash.db, collection, resolved.resolvedId, resolved.userId),\n\t);\n};\n\nexport const POST: APIRoute = async ({ params, request, locals, url }) => {\n\tconst collection = params.collection!;\n\tconst id = params.id!;\n\tconst body = await parseOptionalBody(request, entryLockAcquireBody, {});\n\tif (isParseError(body)) return body;\n\n\tconst resolved = await resolveEntry(\n\t\tlocals,\n\t\tcollection,\n\t\tid,\n\t\turl.searchParams.get(\"locale\") || undefined,\n\t);\n\tif (resolved instanceof Response) return resolved;\n\n\treturn unwrapResult(\n\t\tawait handleEntryLockAcquire(\n\t\t\tlocals.emdash.db,\n\t\t\tcollection,\n\t\t\tresolved.resolvedId,\n\t\t\tresolved.userId,\n\t\t\t{ takeover: body?.takeover, token: body?.token },\n\t\t),\n\t);\n};\n\nexport const DELETE: APIRoute = async ({ params, locals, url }) => {\n\tconst collection = params.collection!;\n\tconst id = params.id!;\n\tconst resolved = await resolveEntry(\n\t\tlocals,\n\t\tcollection,\n\t\tid,\n\t\turl.searchParams.get(\"locale\") || undefined,\n\t);\n\tif (resolved instanceof Response) return resolved;\n\n\treturn unwrapResult(\n\t\tawait handleEntryLockRelease(\n\t\t\tlocals.emdash.db,\n\t\t\tcollection,\n\t\t\tresolved.resolvedId,\n\t\t\tresolved.userId,\n\t\t\t{ token: url.searchParams.get(\"token\") ?? undefined },\n\t\t),\n\t);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAoBA,MAAa,YAAY;;;;;AAWzB,eAAe,aACd,QACA,YACA,IACA,QACoC;CACpC,MAAM,EAAE,QAAQ,SAAS;AACzB,KAAI,CAAC,QAAQ,iBACZ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;CAGpE,MAAM,WAAW,MAAM,OAAO,iBAAiB,YAAY,IAAI,OAAO;AACtE,KAAI,CAAC,SAAS,QACb,QAAO,SACN,SAAS,OAAO,QAAQ,iBACxB,SAAS,OAAO,WAAW,iBAC3B,eAAe,SAAS,OAAO,KAAK,CACpC;CAGF,MAAM,eACL,SAAS,QAAQ,OAAO,SAAS,SAAS,WAEvC,SAAS,OACT;CACJ,MAAM,eACL,cAAc,QAAQ,OAAO,aAAa,SAAS,WAEhD,aAAa,OACb;CAEJ,MAAM,SAAS,iBAAiB,MADf,OAAO,cAAc,aAAa,WAAW,aAAa,WAAW,IACtC,oBAAoB,mBAAmB;AACvF,KAAI,OAAQ,QAAO;AAEnB,QAAO;EACN,YAAY,OAAO,cAAc,OAAO,WAAW,aAAa,KAAK;EACrE,QAAQ,KAAM;EACd;;AAGF,MAAa,MAAgB,OAAO,EAAE,QAAQ,QAAQ,UAAU;CAC/D,MAAM,aAAa,OAAO;CAC1B,MAAM,KAAK,OAAO;CAClB,MAAM,WAAW,MAAM,aACtB,QACA,YACA,IACA,IAAI,aAAa,IAAI,SAAS,IAAI,OAClC;AACD,KAAI,oBAAoB,SAAU,QAAO;AAEzC,QAAO,aACN,MAAM,oBAAoB,OAAO,OAAO,IAAI,YAAY,SAAS,YAAY,SAAS,OAAO,CAC7F;;AAGF,MAAa,OAAiB,OAAO,EAAE,QAAQ,SAAS,QAAQ,UAAU;CACzE,MAAM,aAAa,OAAO;CAC1B,MAAM,KAAK,OAAO;CAClB,MAAM,OAAO,MAAM,kBAAkB,SAAS,sBAAsB,EAAE,CAAC;AACvE,KAAI,aAAa,KAAK,CAAE,QAAO;CAE/B,MAAM,WAAW,MAAM,aACtB,QACA,YACA,IACA,IAAI,aAAa,IAAI,SAAS,IAAI,OAClC;AACD,KAAI,oBAAoB,SAAU,QAAO;AAEzC,QAAO,aACN,MAAM,uBACL,OAAO,OAAO,IACd,YACA,SAAS,YACT,SAAS,QACT;EAAE,UAAU,MAAM;EAAU,OAAO,MAAM;EAAO,CAChD,CACD;;AAGF,MAAa,SAAmB,OAAO,EAAE,QAAQ,QAAQ,UAAU;CAClE,MAAM,aAAa,OAAO;CAC1B,MAAM,KAAK,OAAO;CAClB,MAAM,WAAW,MAAM,aACtB,QACA,YACA,IACA,IAAI,aAAa,IAAI,SAAS,IAAI,OAClC;AACD,KAAI,oBAAoB,SAAU,QAAO;AAEzC,QAAO,aACN,MAAM,uBACL,OAAO,OAAO,IACd,YACA,SAAS,YACT,SAAS,QACT,EAAE,OAAO,IAAI,aAAa,IAAI,QAAQ,IAAI,QAAW,CACrD,CACD"}
@@ -1,9 +1,9 @@
1
1
  import "../../../../../../base64-DvnNgP7e.mjs";
2
- import "../../../../../../types-aOOxRSx6.mjs";
3
- import "../../../../../../errors-Bt3goF8I.mjs";
4
- import "../../../../../../errors-BN1QAnEY.mjs";
5
- import { a as unwrapResult, t as apiError } from "../../../../../../error-BfsNNrIE.mjs";
6
- import { i as requirePerm } from "../../../../../../authorize-WgdKF8QY.mjs";
2
+ import "../../../../../../types-j6MBDjlZ.mjs";
3
+ import "../../../../../../errors-CjXd1LgH.mjs";
4
+ import "../../../../../../errors-CNvATh_7.mjs";
5
+ import { a as unwrapResult, t as apiError } from "../../../../../../error-CEdm_AWU.mjs";
6
+ import { i as requirePerm } from "../../../../../../authorize-soZXK7U0.mjs";
7
7
 
8
8
  //#region src/astro/routes/api/content/[collection]/[id]/permanent.ts
9
9
  const prerender = false;