emdash 0.40.1 → 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 (1515) 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 -46
  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 +106 -560
  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 -107
  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 -69
  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 -68
  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 -69
  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 -79
  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 -69
  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 -68
  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 -78
  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 -68
  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 -69
  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 -80
  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 -71
  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 -69
  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 -68
  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 -68
  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 -68
  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.d.mts +1 -2
  244. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts.map +1 -1
  245. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +44 -54
  246. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  247. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +36 -30
  248. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  249. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  250. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  251. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +18 -17
  252. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  253. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +27 -25
  254. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  255. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
  256. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +18 -17
  257. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  258. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  259. package/dist/astro/routes/api/content/_collection_/_id_.mjs +19 -18
  260. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  261. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  262. package/dist/astro/routes/api/content/_collection_/index.mjs +16 -15
  263. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  264. package/dist/astro/routes/api/content/_collection_/trash.mjs +16 -15
  265. package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -1
  266. package/dist/astro/routes/api/dashboard.mjs +13 -10
  267. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  268. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  269. package/dist/astro/routes/api/health.mjs +6 -6
  270. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  271. package/dist/astro/routes/api/import/probe.mjs +25 -24
  272. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  273. package/dist/astro/routes/api/import/wordpress/analyze.mjs +6 -6
  274. package/dist/astro/routes/api/import/wordpress/execute.d.mts +14 -14
  275. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  276. package/dist/astro/routes/api/import/wordpress/execute.mjs +167 -21
  277. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  278. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  279. package/dist/astro/routes/api/import/wordpress/media.mjs +20 -19
  280. package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
  281. package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -18
  282. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  283. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  284. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +29 -28
  285. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  286. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  287. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -24
  288. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  289. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  290. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +36 -35
  291. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  292. package/dist/astro/routes/api/manifest.mjs +6 -6
  293. package/dist/astro/routes/api/mcp.mjs +167 -110
  294. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  295. package/dist/astro/routes/api/media/_id_/confirm.mjs +20 -19
  296. package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
  297. package/dist/astro/routes/api/media/_id_/replace.mjs +17 -16
  298. package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -1
  299. package/dist/astro/routes/api/media/_id_/upload.mjs +9 -9
  300. package/dist/astro/routes/api/media/_id_/usage.mjs +34 -33
  301. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  302. package/dist/astro/routes/api/media/_id_.mjs +32 -31
  303. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  304. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  305. package/dist/astro/routes/api/media/file/_...key_.mjs +9 -9
  306. package/dist/astro/routes/api/media/folders/_id_.mjs +17 -16
  307. package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -1
  308. package/dist/astro/routes/api/media/folders/index.mjs +17 -16
  309. package/dist/astro/routes/api/media/folders/index.mjs.map +1 -1
  310. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  311. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  312. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  313. package/dist/astro/routes/api/media/upload-url.mjs +19 -18
  314. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  315. package/dist/astro/routes/api/media.mjs +36 -35
  316. package/dist/astro/routes/api/media.mjs.map +1 -1
  317. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +19 -18
  318. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  319. package/dist/astro/routes/api/menus/_name_/items.mjs +19 -18
  320. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  321. package/dist/astro/routes/api/menus/_name_/reorder.mjs +19 -18
  322. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  323. package/dist/astro/routes/api/menus/_name_/translations.mjs +19 -18
  324. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  325. package/dist/astro/routes/api/menus/_name_.mjs +19 -18
  326. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  327. package/dist/astro/routes/api/menus/index.mjs +19 -18
  328. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  329. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  330. package/dist/astro/routes/api/oauth/device/authorize.d.mts +2 -1
  331. package/dist/astro/routes/api/oauth/device/authorize.d.mts.map +1 -1
  332. package/dist/astro/routes/api/oauth/device/authorize.mjs +23 -9
  333. package/dist/astro/routes/api/oauth/device/authorize.mjs.map +1 -1
  334. package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
  335. package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
  336. package/dist/astro/routes/api/oauth/register.d.mts.map +1 -1
  337. package/dist/astro/routes/api/oauth/register.mjs +15 -7
  338. package/dist/astro/routes/api/oauth/register.mjs.map +1 -1
  339. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  340. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  341. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  342. package/dist/astro/routes/api/openapi.json.mjs +21 -20
  343. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  344. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +12 -11
  345. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
  346. package/dist/astro/routes/api/redirects/404s/index.mjs +20 -19
  347. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  348. package/dist/astro/routes/api/redirects/404s/summary.mjs +20 -19
  349. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  350. package/dist/astro/routes/api/redirects/_id_.mjs +20 -19
  351. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  352. package/dist/astro/routes/api/redirects/index.mjs +20 -19
  353. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  354. package/dist/astro/routes/api/relations/_id_/index.mjs +36 -30
  355. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  356. package/dist/astro/routes/api/relations/index.mjs +38 -32
  357. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  358. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  359. package/dist/astro/routes/api/revisions/_revisionId_/restore.d.mts.map +1 -1
  360. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +26 -6
  361. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs.map +1 -1
  362. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +74 -68
  363. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  364. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +74 -68
  365. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  366. package/dist/astro/routes/api/schema/block-types/index.mjs +74 -68
  367. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  368. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +76 -70
  369. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  370. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +74 -68
  371. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  372. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +74 -68
  373. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  374. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +74 -68
  375. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  376. package/dist/astro/routes/api/schema/collections/index.mjs +74 -68
  377. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  378. package/dist/astro/routes/api/schema/collections/reorder.mjs +74 -68
  379. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  380. package/dist/astro/routes/api/schema/index.mjs +17 -16
  381. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  382. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +74 -68
  383. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  384. package/dist/astro/routes/api/schema/orphans/index.mjs +74 -68
  385. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  386. package/dist/astro/routes/api/search/enable.mjs +20 -19
  387. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  388. package/dist/astro/routes/api/search/index.mjs +19 -18
  389. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  390. package/dist/astro/routes/api/search/rebuild.mjs +20 -19
  391. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  392. package/dist/astro/routes/api/search/stats.mjs +9 -9
  393. package/dist/astro/routes/api/search/suggest.mjs +19 -18
  394. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  395. package/dist/astro/routes/api/sections/_slug_.mjs +19 -18
  396. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  397. package/dist/astro/routes/api/sections/index.mjs +19 -18
  398. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  399. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  400. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  401. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  402. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  403. package/dist/astro/routes/api/settings/email.mjs +6 -6
  404. package/dist/astro/routes/api/settings.mjs +23 -22
  405. package/dist/astro/routes/api/settings.mjs.map +1 -1
  406. package/dist/astro/routes/api/setup/admin-verify.d.mts.map +1 -1
  407. package/dist/astro/routes/api/setup/admin-verify.mjs +26 -24
  408. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  409. package/dist/astro/routes/api/setup/admin.mjs +19 -18
  410. package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
  411. package/dist/astro/routes/api/setup/dev-bypass.mjs +47 -40
  412. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  413. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  414. package/dist/astro/routes/api/setup/index.mjs +52 -45
  415. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  416. package/dist/astro/routes/api/setup/status.mjs +6 -6
  417. package/dist/astro/routes/api/snapshot.mjs +8 -8
  418. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +25 -24
  419. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  420. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +25 -24
  421. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  422. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -24
  423. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  424. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +25 -24
  425. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  426. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +24 -23
  427. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  428. package/dist/astro/routes/api/taxonomies/_name_.mjs +25 -24
  429. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  430. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +42 -40
  431. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  432. package/dist/astro/routes/api/taxonomies/index.mjs +25 -24
  433. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  434. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  435. package/dist/astro/routes/api/typegen.d.mts.map +1 -1
  436. package/dist/astro/routes/api/typegen.mjs +8 -39
  437. package/dist/astro/routes/api/typegen.mjs.map +1 -1
  438. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  439. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +20 -19
  440. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs.map +1 -1
  441. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  442. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  443. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  444. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  445. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +17 -16
  446. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  447. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +20 -19
  448. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  449. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +20 -19
  450. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  451. package/dist/astro/routes/api/widget-areas/_name_.mjs +9 -9
  452. package/dist/astro/routes/api/widget-areas/index.mjs +20 -19
  453. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  454. package/dist/astro/routes/api/widget-components.mjs +5 -5
  455. package/dist/astro/routes/robots.txt.mjs +7 -7
  456. package/dist/astro/routes/sitemap-_collection_.xml.mjs +10 -10
  457. package/dist/astro/routes/sitemap.xml.mjs +8 -8
  458. package/dist/astro/types.d.mts +30 -18
  459. package/dist/astro/types.d.mts.map +1 -1
  460. package/dist/audit-BszbE_BP.mjs +127 -0
  461. package/dist/audit-BszbE_BP.mjs.map +1 -0
  462. package/dist/auth/providers/github.d.mts +1 -1
  463. package/dist/auth/providers/google.d.mts +1 -1
  464. package/dist/authoritative-records-dSvXCfzb.mjs +5172 -0
  465. package/dist/authoritative-records-dSvXCfzb.mjs.map +1 -0
  466. package/dist/authorize-soZXK7U0.mjs +49 -0
  467. package/dist/authorize-soZXK7U0.mjs.map +1 -0
  468. package/dist/backup-DQ3CABsO.mjs +246 -0
  469. package/dist/backup-DQ3CABsO.mjs.map +1 -0
  470. package/dist/block-types-DIG_KZwi.mjs +132 -0
  471. package/dist/block-types-DIG_KZwi.mjs.map +1 -0
  472. package/dist/block-values-BrTrtA-v.mjs +175 -0
  473. package/dist/block-values-BrTrtA-v.mjs.map +1 -0
  474. package/dist/byline-02tu_Uc-.mjs +909 -0
  475. package/dist/byline-02tu_Uc-.mjs.map +1 -0
  476. package/dist/byline-fields-B01Txzyx.mjs +123 -0
  477. package/dist/byline-fields-B01Txzyx.mjs.map +1 -0
  478. package/dist/byline-fields-DHJs0Mja.mjs +280 -0
  479. package/dist/byline-fields-DHJs0Mja.mjs.map +1 -0
  480. package/dist/byline-registry-dvt4N3xV.mjs +406 -0
  481. package/dist/byline-registry-dvt4N3xV.mjs.map +1 -0
  482. package/dist/bylines-COTwmMBF.mjs +150 -0
  483. package/dist/bylines-COTwmMBF.mjs.map +1 -0
  484. package/dist/bylines-D_S8UKRX.mjs +214 -0
  485. package/dist/bylines-D_S8UKRX.mjs.map +1 -0
  486. package/dist/cache-CPanL9IO.mjs +114 -0
  487. package/dist/cache-CPanL9IO.mjs.map +1 -0
  488. package/dist/canonical-CAecl1UQ.mjs +174 -0
  489. package/dist/canonical-CAecl1UQ.mjs.map +1 -0
  490. package/dist/capture-triggers-CdZfvHtF.mjs +362 -0
  491. package/dist/capture-triggers-CdZfvHtF.mjs.map +1 -0
  492. package/dist/challenge-store-CxZxPqaw.mjs +51 -0
  493. package/dist/challenge-store-CxZxPqaw.mjs.map +1 -0
  494. package/dist/checksum-DtH6m5uk.mjs +162 -0
  495. package/dist/checksum-DtH6m5uk.mjs.map +1 -0
  496. package/dist/chrome-tags-CKELm-bo.mjs +24 -0
  497. package/dist/chrome-tags-CKELm-bo.mjs.map +1 -0
  498. package/dist/chunks-DBmkKmBH.mjs +25 -0
  499. package/dist/chunks-DBmkKmBH.mjs.map +1 -0
  500. package/dist/cli/index.mjs +380 -1620
  501. package/dist/cli/index.mjs.map +1 -1
  502. package/dist/client/cf-access.d.mts +1 -1
  503. package/dist/client/index.d.mts +39 -34
  504. package/dist/client/index.d.mts.map +1 -1
  505. package/dist/client/index.mjs +8 -3
  506. package/dist/client/index.mjs.map +1 -1
  507. package/dist/collection-deletion-JecE26cS.mjs +436 -0
  508. package/dist/collection-deletion-JecE26cS.mjs.map +1 -0
  509. package/dist/collection-deletion-processor-DgCfF3a1.mjs +217 -0
  510. package/dist/collection-deletion-processor-DgCfF3a1.mjs.map +1 -0
  511. package/dist/collection-slugs-cache-BNRAPNiu.mjs +85 -0
  512. package/dist/collection-slugs-cache-BNRAPNiu.mjs.map +1 -0
  513. package/dist/comment-Cq1UYN8_.mjs +313 -0
  514. package/dist/comment-Cq1UYN8_.mjs.map +1 -0
  515. package/dist/comment-reaction-DPeGAfjd.mjs +85 -0
  516. package/dist/comment-reaction-DPeGAfjd.mjs.map +1 -0
  517. package/dist/comments-BRtp992B.mjs +99 -0
  518. package/dist/comments-BRtp992B.mjs.map +1 -0
  519. package/dist/comments-Bi2j9IoX.mjs +195 -0
  520. package/dist/comments-Bi2j9IoX.mjs.map +1 -0
  521. package/dist/components-CQY-Sgm-.mjs +108 -0
  522. package/dist/components-CQY-Sgm-.mjs.map +1 -0
  523. package/dist/config-BnuORwSP.mjs +242 -0
  524. package/dist/config-BnuORwSP.mjs.map +1 -0
  525. package/dist/config-CDmPF4p7.d.mts +39 -0
  526. package/dist/config-CDmPF4p7.d.mts.map +1 -0
  527. package/dist/config-DHsDMpXc.d.mts +6707 -0
  528. package/dist/config-DHsDMpXc.d.mts.map +1 -0
  529. package/dist/connection-B9pIasFd.mjs +36 -0
  530. package/dist/connection-B9pIasFd.mjs.map +1 -0
  531. package/dist/content-RzEXY3QX.mjs +2020 -0
  532. package/dist/content-RzEXY3QX.mjs.map +1 -0
  533. package/dist/content-list-query-CnXfe1Nu.d.mts +26 -0
  534. package/dist/content-list-query-CnXfe1Nu.d.mts.map +1 -0
  535. package/dist/content-policy-Dm32n9C6.mjs +46 -0
  536. package/dist/content-policy-Dm32n9C6.mjs.map +1 -0
  537. package/dist/content-repair-B-k5JrVN.mjs +442 -0
  538. package/dist/content-repair-B-k5JrVN.mjs.map +1 -0
  539. package/dist/context-CtRvoSAj.mjs +2026 -0
  540. package/dist/context-CtRvoSAj.mjs.map +1 -0
  541. package/dist/credits-CAFPFhuk.mjs +110 -0
  542. package/dist/credits-CAFPFhuk.mjs.map +1 -0
  543. package/dist/cron-xe5XKqA-.mjs +306 -0
  544. package/dist/cron-xe5XKqA-.mjs.map +1 -0
  545. package/dist/dashboard-BoV4pwPP.mjs +151 -0
  546. package/dist/dashboard-BoV4pwPP.mjs.map +1 -0
  547. package/dist/db/index.d.mts +3 -3
  548. package/dist/db/index.mjs +1 -1
  549. package/dist/db/libsql-migrations.d.mts +1 -1
  550. package/dist/db/libsql-migrations.mjs +4 -4
  551. package/dist/db/libsql.d.mts +1 -1
  552. package/dist/db/postgres-migrations.d.mts +1 -1
  553. package/dist/db/postgres-migrations.mjs +4 -4
  554. package/dist/db/postgres.d.mts +1 -1
  555. package/dist/db/sqlite-migrations.d.mts +1 -1
  556. package/dist/db/sqlite-migrations.mjs +4 -4
  557. package/dist/db/sqlite.d.mts +1 -1
  558. package/dist/db/sqlite.mjs +1 -1
  559. package/dist/default-DaoYyFRS.mjs +81 -0
  560. package/dist/default-DaoYyFRS.mjs.map +1 -0
  561. package/dist/deferred-tasks-OBADxoFf.d.mts +9 -0
  562. package/dist/deferred-tasks-OBADxoFf.d.mts.map +1 -0
  563. package/dist/destination-r2zIAZ2S.mjs +18 -0
  564. package/dist/destination-r2zIAZ2S.mjs.map +1 -0
  565. package/dist/dev-typegen-8JlYYFno.mjs +29 -0
  566. package/dist/dev-typegen-8JlYYFno.mjs.map +1 -0
  567. package/dist/device-flow-CzKi6tID.mjs +521 -0
  568. package/dist/device-flow-CzKi6tID.mjs.map +1 -0
  569. package/dist/digest-DiYAoZpf.mjs +194 -0
  570. package/dist/digest-DiYAoZpf.mjs.map +1 -0
  571. package/dist/direct-executor-CsEmH_2m.mjs +104 -0
  572. package/dist/direct-executor-CsEmH_2m.mjs.map +1 -0
  573. package/dist/dist-Cfu8mMBs.mjs +810 -0
  574. package/dist/dist-Cfu8mMBs.mjs.map +1 -0
  575. package/dist/email-console-DmqVF5J_.mjs +50 -0
  576. package/dist/email-console-DmqVF5J_.mjs.map +1 -0
  577. package/dist/email-locale-B5OjmAj_.mjs +25 -0
  578. package/dist/email-locale-B5OjmAj_.mjs.map +1 -0
  579. package/dist/emdash-runtime-CMdYH2Of.mjs +4229 -0
  580. package/dist/emdash-runtime-CMdYH2Of.mjs.map +1 -0
  581. package/dist/enrich-BDdVNeDK.mjs +194 -0
  582. package/dist/enrich-BDdVNeDK.mjs.map +1 -0
  583. package/dist/entry-lock-B-1bUDxX.d.mts +4544 -0
  584. package/dist/entry-lock-B-1bUDxX.d.mts.map +1 -0
  585. package/dist/entry-lock-B5eaZEZP.mjs +163 -0
  586. package/dist/entry-lock-B5eaZEZP.mjs.map +1 -0
  587. package/dist/entry-lock-PP1JCXBB.mjs +1180 -0
  588. package/dist/entry-lock-PP1JCXBB.mjs.map +1 -0
  589. package/dist/entry-locks-DJAqVweV.mjs +167 -0
  590. package/dist/entry-locks-DJAqVweV.mjs.map +1 -0
  591. package/dist/env-types-BaTCgn-y.mjs +38 -0
  592. package/dist/env-types-BaTCgn-y.mjs.map +1 -0
  593. package/dist/error-CEdm_AWU.mjs +90 -0
  594. package/dist/error-CEdm_AWU.mjs.map +1 -0
  595. package/dist/errors-CNvATh_7.mjs +469 -0
  596. package/dist/errors-CNvATh_7.mjs.map +1 -0
  597. package/dist/errors-CjXd1LgH.mjs +120 -0
  598. package/dist/errors-CjXd1LgH.mjs.map +1 -0
  599. package/dist/escape-nJW7dR0s.mjs +9 -0
  600. package/dist/escape-nJW7dR0s.mjs.map +1 -0
  601. package/dist/fence-BrnQffdY.mjs +162 -0
  602. package/dist/fence-BrnQffdY.mjs.map +1 -0
  603. package/dist/field-defs-cache-DEkFYCDE.mjs +77 -0
  604. package/dist/field-defs-cache-DEkFYCDE.mjs.map +1 -0
  605. package/dist/field-map-Cp5hDSRU.mjs +83 -0
  606. package/dist/field-map-Cp5hDSRU.mjs.map +1 -0
  607. package/dist/focal-point-JX8kcOTQ.mjs +23 -0
  608. package/dist/focal-point-JX8kcOTQ.mjs.map +1 -0
  609. package/dist/fts-manager-DU03MxWu.mjs +443 -0
  610. package/dist/fts-manager-DU03MxWu.mjs.map +1 -0
  611. package/dist/gc-Gf9LOF42.mjs +75 -0
  612. package/dist/gc-Gf9LOF42.mjs.map +1 -0
  613. package/dist/hash-CY4QdeMJ.mjs +37 -0
  614. package/dist/hash-CY4QdeMJ.mjs.map +1 -0
  615. package/dist/hook-result-DjdVwWpw.d.mts +31 -0
  616. package/dist/hook-result-DjdVwWpw.d.mts.map +1 -0
  617. package/dist/hreflang-Bq0ahAd4.mjs +105 -0
  618. package/dist/hreflang-Bq0ahAd4.mjs.map +1 -0
  619. package/dist/hreflang-C7ETs0Tv.d.mts +50 -0
  620. package/dist/hreflang-C7ETs0Tv.d.mts.map +1 -0
  621. package/dist/http-route-dispatch-B2G7_OOm.mjs +339 -0
  622. package/dist/http-route-dispatch-B2G7_OOm.mjs.map +1 -0
  623. package/dist/identity-u3KgtUC9.mjs +35 -0
  624. package/dist/identity-u3KgtUC9.mjs.map +1 -0
  625. package/dist/import-CzP9ffo0.mjs +2020 -0
  626. package/dist/import-CzP9ffo0.mjs.map +1 -0
  627. package/dist/index-D1_ykO2u.d.mts +623 -0
  628. package/dist/index-D1_ykO2u.d.mts.map +1 -0
  629. package/dist/index.d.mts +24 -24
  630. package/dist/index.mjs +108 -102
  631. package/dist/install-finalization-TbcQozrV.mjs +58 -0
  632. package/dist/install-finalization-TbcQozrV.mjs.map +1 -0
  633. package/dist/keys-r08WvAng.mjs +61 -0
  634. package/dist/keys-r08WvAng.mjs.map +1 -0
  635. package/dist/kinds-CXY-fwQ6.mjs +974 -0
  636. package/dist/kinds-CXY-fwQ6.mjs.map +1 -0
  637. package/dist/lifecycle-CpebZNAA.mjs +25 -0
  638. package/dist/lifecycle-CpebZNAA.mjs.map +1 -0
  639. package/dist/load-dHcR5yh9.mjs +28 -0
  640. package/dist/load-dHcR5yh9.mjs.map +1 -0
  641. package/dist/loader-B_bcoE1h.mjs +1197 -0
  642. package/dist/loader-B_bcoE1h.mjs.map +1 -0
  643. package/dist/loops-Dn1i16FP.mjs +205 -0
  644. package/dist/loops-Dn1i16FP.mjs.map +1 -0
  645. package/dist/manifest-builder-D7Y8iirE.mjs +189 -0
  646. package/dist/manifest-builder-D7Y8iirE.mjs.map +1 -0
  647. package/dist/manifest-schema-gy37bD_D.mjs +496 -0
  648. package/dist/manifest-schema-gy37bD_D.mjs.map +1 -0
  649. package/dist/marketplace-tHWSsCUo.mjs +257 -0
  650. package/dist/marketplace-tHWSsCUo.mjs.map +1 -0
  651. package/dist/media/image-endpoint.mjs +1 -1
  652. package/dist/media/index.d.mts +1 -1
  653. package/dist/media/index.mjs +4 -4
  654. package/dist/media/local-runtime.d.mts +14 -14
  655. package/dist/media/local-runtime.mjs +7 -7
  656. package/dist/media-3v7mqAVX.mjs +294 -0
  657. package/dist/media-3v7mqAVX.mjs.map +1 -0
  658. package/dist/media-CputjGE1.mjs +373 -0
  659. package/dist/media-CputjGE1.mjs.map +1 -0
  660. package/dist/media-D1z_jisb.mjs +408 -0
  661. package/dist/media-D1z_jisb.mjs.map +1 -0
  662. package/dist/media-allowlist-D5a4d-RA.mjs +44 -0
  663. package/dist/media-allowlist-D5a4d-RA.mjs.map +1 -0
  664. package/dist/media-folders-D2VdVBf6.mjs +210 -0
  665. package/dist/media-folders-D2VdVBf6.mjs.map +1 -0
  666. package/dist/media-url-DloW2xrP.mjs +43 -0
  667. package/dist/media-url-DloW2xrP.mjs.map +1 -0
  668. package/dist/media-usage-B8q0owWQ.mjs +1629 -0
  669. package/dist/media-usage-B8q0owWQ.mjs.map +1 -0
  670. package/dist/media-usage-activation-CQWOOTJi.mjs +78 -0
  671. package/dist/media-usage-activation-CQWOOTJi.mjs.map +1 -0
  672. package/dist/media-usage-work-BC0qpkMD.mjs +152 -0
  673. package/dist/media-usage-work-BC0qpkMD.mjs.map +1 -0
  674. package/dist/media-usage-work-BlMjwPg8.mjs +586 -0
  675. package/dist/media-usage-work-BlMjwPg8.mjs.map +1 -0
  676. package/dist/menus-BQKqf0Up.mjs +92 -0
  677. package/dist/menus-BQKqf0Up.mjs.map +1 -0
  678. package/dist/menus-DiuhXKWf.mjs +3646 -0
  679. package/dist/menus-DiuhXKWf.mjs.map +1 -0
  680. package/dist/menus-trvc6_fW.mjs +753 -0
  681. package/dist/menus-trvc6_fW.mjs.map +1 -0
  682. package/dist/migrations/index.d.mts +1 -1
  683. package/dist/migrations/index.mjs +3 -3
  684. package/dist/mime-IZf-LHIS.mjs +36 -0
  685. package/dist/mime-IZf-LHIS.mjs.map +1 -0
  686. package/dist/mode-nh0ppSX5.mjs +23 -0
  687. package/dist/mode-nh0ppSX5.mjs.map +1 -0
  688. package/dist/node-sqlite-compat-CDOEcc97.mjs +63 -0
  689. package/dist/node-sqlite-compat-CDOEcc97.mjs.map +1 -0
  690. package/dist/normalize-BuWa0lvd.mjs +191 -0
  691. package/dist/normalize-BuWa0lvd.mjs.map +1 -0
  692. package/dist/oauth-authorization-BcRdGojQ.mjs +274 -0
  693. package/dist/oauth-authorization-BcRdGojQ.mjs.map +1 -0
  694. package/dist/oauth-clients-C-8WDTqj.mjs +266 -0
  695. package/dist/oauth-clients-C-8WDTqj.mjs.map +1 -0
  696. package/dist/oauth-state-store-CM5ZEYQS.mjs +50 -0
  697. package/dist/oauth-state-store-CM5ZEYQS.mjs.map +1 -0
  698. package/dist/oauth-user-lookup-DrrqvTZC.mjs +26 -0
  699. package/dist/oauth-user-lookup-DrrqvTZC.mjs.map +1 -0
  700. package/dist/object-cache/memory.d.mts +1 -1
  701. package/dist/object-cache-Bo6DGaC9.mjs +586 -0
  702. package/dist/object-cache-Bo6DGaC9.mjs.map +1 -0
  703. package/dist/options-C2IDQnD2.d.mts +81 -0
  704. package/dist/options-C2IDQnD2.d.mts.map +1 -0
  705. package/dist/ownership-DoeAIuTg.mjs +12 -0
  706. package/dist/ownership-DoeAIuTg.mjs.map +1 -0
  707. package/dist/page/index.d.mts +2 -2
  708. package/dist/page/index.mjs +6 -6
  709. package/dist/parse-D5Sw9wAI.d.mts +172 -0
  710. package/dist/parse-D5Sw9wAI.d.mts.map +1 -0
  711. package/dist/parse-Gt2l4Sld.mjs +81 -0
  712. package/dist/parse-Gt2l4Sld.mjs.map +1 -0
  713. package/dist/passkey-config-CkQsrcU-.mjs +46 -0
  714. package/dist/passkey-config-CkQsrcU-.mjs.map +1 -0
  715. package/dist/paths-DiENGBx5.mjs +77 -0
  716. package/dist/paths-DiENGBx5.mjs.map +1 -0
  717. package/dist/patterns-DyZJ67I7.mjs +140 -0
  718. package/dist/patterns-DyZJ67I7.mjs.map +1 -0
  719. package/dist/placeholder-Cq5wLDCX.d.mts +306 -0
  720. package/dist/placeholder-Cq5wLDCX.d.mts.map +1 -0
  721. package/dist/plan-BxCS1tl5.mjs +135 -0
  722. package/dist/plan-BxCS1tl5.mjs.map +1 -0
  723. package/dist/plugin-test-runtime.d.mts +14 -14
  724. package/dist/plugin-test-runtime.mjs +115 -108
  725. package/dist/plugin-types.d.mts +5 -3
  726. package/dist/plugin-types.d.mts.map +1 -1
  727. package/dist/plugin-types.mjs.map +1 -1
  728. package/dist/plugin-utils.d.mts +12 -12
  729. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  730. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  731. package/dist/plugins/adapt-sandbox-entry.mjs +48 -10
  732. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  733. package/dist/plugins/host.d.mts +6 -6
  734. package/dist/plugins/host.mjs +49 -43
  735. package/dist/plugins-BpLkXA1S.mjs +277 -0
  736. package/dist/plugins-BpLkXA1S.mjs.map +1 -0
  737. package/dist/policy-C1qpNxrr.mjs +45 -0
  738. package/dist/policy-C1qpNxrr.mjs.map +1 -0
  739. package/dist/portable-text-BnRuiR1-.mjs +307 -0
  740. package/dist/portable-text-BnRuiR1-.mjs.map +1 -0
  741. package/dist/preview-DU5rwz_m.mjs +107 -0
  742. package/dist/preview-DU5rwz_m.mjs.map +1 -0
  743. package/dist/protocol-B9GEhEyi.d.mts +61 -0
  744. package/dist/protocol-B9GEhEyi.d.mts.map +1 -0
  745. package/dist/public-submission-yZaTTfsC.mjs +250 -0
  746. package/dist/public-submission-yZaTTfsC.mjs.map +1 -0
  747. package/dist/public-url-B5a0QAh6.mjs +101 -0
  748. package/dist/public-url-B5a0QAh6.mjs.map +1 -0
  749. package/dist/query-6e2CQxUv.mjs +1161 -0
  750. package/dist/query-6e2CQxUv.mjs.map +1 -0
  751. package/dist/query-DC3bv__4.mjs +41 -0
  752. package/dist/query-DC3bv__4.mjs.map +1 -0
  753. package/dist/rate-limit-BXx3Ecp9.mjs +120 -0
  754. package/dist/rate-limit-BXx3Ecp9.mjs.map +1 -0
  755. package/dist/receipt-q1VK9jhj.mjs +43 -0
  756. package/dist/receipt-q1VK9jhj.mjs.map +1 -0
  757. package/dist/redirect-BvFKh8Sz.mjs +416 -0
  758. package/dist/redirect-BvFKh8Sz.mjs.map +1 -0
  759. package/dist/redirect-D1AmADlk.mjs +19 -0
  760. package/dist/redirect-D1AmADlk.mjs.map +1 -0
  761. package/dist/redirects-CWQMKYOS.mjs +446 -0
  762. package/dist/redirects-CWQMKYOS.mjs.map +1 -0
  763. package/dist/redirects-D4EWeXAo.mjs +148 -0
  764. package/dist/redirects-D4EWeXAo.mjs.map +1 -0
  765. package/dist/registry/testing.d.mts +16 -4
  766. package/dist/registry/testing.d.mts.map +1 -1
  767. package/dist/registry/testing.mjs +20 -10
  768. package/dist/registry/testing.mjs.map +1 -1
  769. package/dist/registry-CtHRqVe-.mjs +6771 -0
  770. package/dist/registry-CtHRqVe-.mjs.map +1 -0
  771. package/dist/relations-CVI2nbrn.mjs +776 -0
  772. package/dist/relations-CVI2nbrn.mjs.map +1 -0
  773. package/dist/request-cache-C4CIo5ad.mjs +104 -0
  774. package/dist/request-cache-C4CIo5ad.mjs.map +1 -0
  775. package/dist/request-context.d.mts +9 -1
  776. package/dist/request-context.d.mts.map +1 -1
  777. package/dist/request-context.mjs.map +1 -1
  778. package/dist/request-meta-B6blULFY.mjs +141 -0
  779. package/dist/request-meta-B6blULFY.mjs.map +1 -0
  780. package/dist/resolve-Cx0Pwz0-.mjs +100 -0
  781. package/dist/resolve-Cx0Pwz0-.mjs.map +1 -0
  782. package/dist/resolve-D-kqyKns.mjs +199 -0
  783. package/dist/resolve-D-kqyKns.mjs.map +1 -0
  784. package/dist/revision-CGkQA0e5.mjs +366 -0
  785. package/dist/revision-CGkQA0e5.mjs.map +1 -0
  786. package/dist/route-wire-DK600v4u.mjs +197 -0
  787. package/dist/route-wire-DK600v4u.mjs.map +1 -0
  788. package/dist/routes-DTduBPzX.mjs +272 -0
  789. package/dist/routes-DTduBPzX.mjs.map +1 -0
  790. package/dist/runner-CLpxmhl8.mjs +6197 -0
  791. package/dist/runner-CLpxmhl8.mjs.map +1 -0
  792. package/dist/runner-Ji7qyH2A.d.mts +68 -0
  793. package/dist/runner-Ji7qyH2A.d.mts.map +1 -0
  794. package/dist/runtime.d.mts +13 -13
  795. package/dist/runtime.mjs +3 -3
  796. package/dist/schema/project-env-types.d.mts +12 -0
  797. package/dist/schema/project-env-types.d.mts.map +1 -0
  798. package/dist/schema/project-env-types.mjs +86 -0
  799. package/dist/schema/project-env-types.mjs.map +1 -0
  800. package/dist/schema-BZPj3kwZ.mjs +13 -0
  801. package/dist/schema-BZPj3kwZ.mjs.map +1 -0
  802. package/dist/schema-Berj5VQx.mjs +815 -0
  803. package/dist/schema-Berj5VQx.mjs.map +1 -0
  804. package/dist/scopes-C1HJaIyf.mjs +34 -0
  805. package/dist/scopes-C1HJaIyf.mjs.map +1 -0
  806. package/dist/search-thYf8j9F.mjs +448 -0
  807. package/dist/search-thYf8j9F.mjs.map +1 -0
  808. package/dist/sections-2k1uIgJ0.mjs +346 -0
  809. package/dist/sections-2k1uIgJ0.mjs.map +1 -0
  810. package/dist/seed/index.d.mts +2 -2
  811. package/dist/seed/index.mjs +39 -32
  812. package/dist/seo/index.d.mts +3 -3
  813. package/dist/seo/index.mjs +24 -22
  814. package/dist/seo/index.mjs.map +1 -1
  815. package/dist/seo-C61bnPuV.mjs +114 -0
  816. package/dist/seo-C61bnPuV.mjs.map +1 -0
  817. package/dist/seo-DpYxmGaL.mjs +133 -0
  818. package/dist/seo-DpYxmGaL.mjs.map +1 -0
  819. package/dist/service-BFUImckH.mjs +150 -0
  820. package/dist/service-BFUImckH.mjs.map +1 -0
  821. package/dist/session-user-DVcHsFD5.mjs +61 -0
  822. package/dist/session-user-DVcHsFD5.mjs.map +1 -0
  823. package/dist/settings-B0zQj_Tj.mjs +61 -0
  824. package/dist/settings-B0zQj_Tj.mjs.map +1 -0
  825. package/dist/settings-BJjK_X7x.mjs +51 -0
  826. package/dist/settings-BJjK_X7x.mjs.map +1 -0
  827. package/dist/settings-BbVRRGDp.mjs +439 -0
  828. package/dist/settings-BbVRRGDp.mjs.map +1 -0
  829. package/dist/setup-complete-CuLcTDTU.mjs +65 -0
  830. package/dist/setup-complete-CuLcTDTU.mjs.map +1 -0
  831. package/dist/setup-nonce-CAQoY5PC.mjs +25 -0
  832. package/dist/setup-nonce-CAQoY5PC.mjs.map +1 -0
  833. package/dist/site-settings-AYFvhwQn.mjs +50 -0
  834. package/dist/site-settings-AYFvhwQn.mjs.map +1 -0
  835. package/dist/site-url-Ceq_AUK0.mjs +16 -0
  836. package/dist/site-url-Ceq_AUK0.mjs.map +1 -0
  837. package/dist/snapshot-Dzsn3NZa.mjs +414 -0
  838. package/dist/snapshot-Dzsn3NZa.mjs.map +1 -0
  839. package/dist/ssrf-DsmvZB80.mjs +406 -0
  840. package/dist/ssrf-DsmvZB80.mjs.map +1 -0
  841. package/dist/stage-Cf9PqdUB.mjs +662 -0
  842. package/dist/stage-Cf9PqdUB.mjs.map +1 -0
  843. package/dist/staged-Bw5eHbKS.mjs +686 -0
  844. package/dist/staged-Bw5eHbKS.mjs.map +1 -0
  845. package/dist/state-kGdOMQRY.mjs +153 -0
  846. package/dist/state-kGdOMQRY.mjs.map +1 -0
  847. package/dist/status-D39Fpy8R.mjs +30 -0
  848. package/dist/status-D39Fpy8R.mjs.map +1 -0
  849. package/dist/storage/local.d.mts +1 -1
  850. package/dist/storage/local.mjs +1 -1
  851. package/dist/storage/s3.d.mts +1 -1
  852. package/dist/storage/s3.mjs +1 -1
  853. package/dist/storage-query-C9bK0Dg6.d.mts +1614 -0
  854. package/dist/storage-query-C9bK0Dg6.d.mts.map +1 -0
  855. package/dist/tar-lDI_fzLD.mjs +449 -0
  856. package/dist/tar-lDI_fzLD.mjs.map +1 -0
  857. package/dist/target-DOFs5oUC.mjs +27 -0
  858. package/dist/target-DOFs5oUC.mjs.map +1 -0
  859. package/dist/taxonomies-DQGomz9p.mjs +939 -0
  860. package/dist/taxonomies-DQGomz9p.mjs.map +1 -0
  861. package/dist/taxonomies-DWv-OYT0.mjs +697 -0
  862. package/dist/taxonomies-DWv-OYT0.mjs.map +1 -0
  863. package/dist/taxonomy-BesdHIwi.mjs +525 -0
  864. package/dist/taxonomy-BesdHIwi.mjs.map +1 -0
  865. package/dist/tokens-BIGxi8sP.mjs +171 -0
  866. package/dist/tokens-BIGxi8sP.mjs.map +1 -0
  867. package/dist/transaction-BVYIo_yu.mjs +29 -0
  868. package/dist/transaction-BVYIo_yu.mjs.map +1 -0
  869. package/dist/transfer-BtzoaXLk.mjs +166 -0
  870. package/dist/transfer-BtzoaXLk.mjs.map +1 -0
  871. package/dist/transfer-DLu_6AXL.mjs +8856 -0
  872. package/dist/transfer-DLu_6AXL.mjs.map +1 -0
  873. package/dist/transfer-download-b_PCrqJJ.mjs +33 -0
  874. package/dist/transfer-download-b_PCrqJJ.mjs.map +1 -0
  875. package/dist/transformations-DdnpSdeC.mjs +196 -0
  876. package/dist/transformations-DdnpSdeC.mjs.map +1 -0
  877. package/dist/transport-flR-Zmds.d.mts +42 -0
  878. package/dist/transport-flR-Zmds.d.mts.map +1 -0
  879. package/dist/transport-umzEbgYO.mjs +136 -0
  880. package/dist/transport-umzEbgYO.mjs.map +1 -0
  881. package/dist/trusted-proxy-BqfQFs6a.mjs +51 -0
  882. package/dist/trusted-proxy-BqfQFs6a.mjs.map +1 -0
  883. package/dist/turnstile-IvQp2uyD.mjs +53 -0
  884. package/dist/turnstile-IvQp2uyD.mjs.map +1 -0
  885. package/dist/types-2V_MVPYy.d.mts +125 -0
  886. package/dist/types-2V_MVPYy.d.mts.map +1 -0
  887. package/dist/types-B-WCvzdi.d.mts +198 -0
  888. package/dist/types-B-WCvzdi.d.mts.map +1 -0
  889. package/dist/types-BGmQ0uXs.mjs +201 -0
  890. package/dist/types-BGmQ0uXs.mjs.map +1 -0
  891. package/dist/types-CVsmpTcU.mjs +18 -0
  892. package/dist/types-CVsmpTcU.mjs.map +1 -0
  893. package/dist/types-C_V-_vMS.d.mts +198 -0
  894. package/dist/types-C_V-_vMS.d.mts.map +1 -0
  895. package/dist/types-CdEMurNh.mjs +77 -0
  896. package/dist/types-CdEMurNh.mjs.map +1 -0
  897. package/dist/types-CsmwbOwa.mjs +22 -0
  898. package/dist/types-CsmwbOwa.mjs.map +1 -0
  899. package/dist/types-Cw-1it3n.d.mts +287 -0
  900. package/dist/types-Cw-1it3n.d.mts.map +1 -0
  901. package/dist/types-D7B20WFC.d.mts +374 -0
  902. package/dist/types-D7B20WFC.d.mts.map +1 -0
  903. package/dist/types-DGw8KMX_.mjs +16 -0
  904. package/dist/types-DGw8KMX_.mjs.map +1 -0
  905. package/dist/types-DZeDpzMc.d.mts +896 -0
  906. package/dist/types-DZeDpzMc.d.mts.map +1 -0
  907. package/dist/types-DuQAIPA-.d.mts +363 -0
  908. package/dist/types-DuQAIPA-.d.mts.map +1 -0
  909. package/dist/types-edRPQchz.d.mts +85 -0
  910. package/dist/types-edRPQchz.d.mts.map +1 -0
  911. package/dist/types-j6MBDjlZ.mjs +103 -0
  912. package/dist/types-j6MBDjlZ.mjs.map +1 -0
  913. package/dist/types-pOLeFKGq.d.mts +1720 -0
  914. package/dist/types-pOLeFKGq.d.mts.map +1 -0
  915. package/dist/update-check-CaZyFHZC.mjs +161 -0
  916. package/dist/update-check-CaZyFHZC.mjs.map +1 -0
  917. package/dist/upload-attempts-BodUoFBu.mjs +32 -0
  918. package/dist/upload-attempts-BodUoFBu.mjs.map +1 -0
  919. package/dist/url-Dn3IStq8.mjs +104 -0
  920. package/dist/url-Dn3IStq8.mjs.map +1 -0
  921. package/dist/url-pattern-DGAG6ZP2.mjs +41 -0
  922. package/dist/url-pattern-DGAG6ZP2.mjs.map +1 -0
  923. package/dist/user-BOvuF1sQ.mjs +171 -0
  924. package/dist/user-BOvuF1sQ.mjs.map +1 -0
  925. package/dist/utils-CoV-PYhg.mjs +439 -0
  926. package/dist/utils-CoV-PYhg.mjs.map +1 -0
  927. package/dist/validate-WkjGwBSO.mjs +516 -0
  928. package/dist/validate-WkjGwBSO.mjs.map +1 -0
  929. package/dist/validate-dK97qe7F.d.mts +468 -0
  930. package/dist/validate-dK97qe7F.d.mts.map +1 -0
  931. package/dist/validation-D-ICq_tY.mjs +219 -0
  932. package/dist/validation-D-ICq_tY.mjs.map +1 -0
  933. package/dist/version-DbT04wbH.mjs +9 -0
  934. package/dist/version-DbT04wbH.mjs.map +1 -0
  935. package/dist/version-IneBU54o.mjs +7 -0
  936. package/dist/version-IneBU54o.mjs.map +1 -0
  937. package/dist/virtual-modules-Brh6mRVe.mjs +516 -0
  938. package/dist/virtual-modules-Brh6mRVe.mjs.map +1 -0
  939. package/dist/widgets-D8T0xBYs.mjs +126 -0
  940. package/dist/widgets-D8T0xBYs.mjs.map +1 -0
  941. package/dist/wxr-taxonomies-B6iE8m9I.d.mts +34 -0
  942. package/dist/wxr-taxonomies-B6iE8m9I.d.mts.map +1 -0
  943. package/dist/wxr-taxonomies-DEzR9N7e.mjs +453 -0
  944. package/dist/wxr-taxonomies-DEzR9N7e.mjs.map +1 -0
  945. package/dist/zod-generator-DnfG5sGQ.mjs +424 -0
  946. package/dist/zod-generator-DnfG5sGQ.mjs.map +1 -0
  947. package/package.json +15 -15
  948. package/src/api/errors.ts +11 -0
  949. package/src/api/handlers/bulk-tag.ts +4 -4
  950. package/src/api/handlers/content.ts +631 -32
  951. package/src/api/handlers/device-flow.ts +74 -21
  952. package/src/api/handlers/index.ts +3 -0
  953. package/src/api/handlers/manifest.ts +81 -5
  954. package/src/api/handlers/media-upload.ts +3 -0
  955. package/src/api/handlers/media.ts +2 -2
  956. package/src/api/handlers/registry.ts +123 -70
  957. package/src/api/handlers/relations.ts +638 -157
  958. package/src/api/handlers/revision.ts +40 -2
  959. package/src/api/handlers/schema.ts +403 -1
  960. package/src/api/handlers/staged-references.ts +208 -0
  961. package/src/api/handlers/update-check.ts +236 -0
  962. package/src/api/handlers/validate-references.ts +146 -0
  963. package/src/api/redirect.ts +9 -1
  964. package/src/api/schemas/content.ts +17 -0
  965. package/src/api/schemas/import.ts +50 -14
  966. package/src/api/schemas/relations.ts +54 -44
  967. package/src/api/schemas/schema.ts +26 -6
  968. package/src/api/setup-complete.ts +49 -1
  969. package/src/api/types.ts +4 -0
  970. package/src/astro/dev-typegen.ts +15 -22
  971. package/src/astro/integration/dev-typegen.ts +32 -3
  972. package/src/astro/integration/index.ts +88 -22
  973. package/src/astro/integration/routes.ts +21 -19
  974. package/src/astro/integration/runtime.ts +33 -7
  975. package/src/astro/integration/virtual-modules.ts +1 -0
  976. package/src/astro/integration/vite-config.ts +16 -8
  977. package/src/astro/middleware/redirect.ts +15 -2
  978. package/src/astro/middleware/request-context.ts +13 -6
  979. package/src/astro/routes/api/admin/bylines/[id]/index.ts +11 -1
  980. package/src/astro/routes/api/admin/bylines/[id]/translations.ts +7 -1
  981. package/src/astro/routes/api/admin/bylines/index.ts +6 -1
  982. package/src/astro/routes/api/admin/core-update.ts +34 -0
  983. package/src/astro/routes/api/admin/plugins/marketplace/[id]/icon.ts +6 -2
  984. package/src/astro/routes/api/admin/themes/marketplace/[id]/thumbnail.ts +6 -2
  985. package/src/astro/routes/api/auth/invite/complete.ts +4 -4
  986. package/src/astro/routes/api/auth/magic-link/verify.ts +4 -1
  987. package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +9 -4
  988. package/src/astro/routes/api/auth/passkey/verify.ts +4 -4
  989. package/src/astro/routes/api/auth/signup/complete.ts +4 -4
  990. package/src/astro/routes/api/content/[collection]/[id]/references/[relation]/children.ts +11 -54
  991. package/src/astro/routes/api/content/[collection]/[id].ts +3 -1
  992. package/src/astro/routes/api/import/wordpress/execute.ts +252 -6
  993. package/src/astro/routes/api/import/wordpress/prepare.ts +1 -2
  994. package/src/astro/routes/api/oauth/device/authorize.ts +33 -4
  995. package/src/astro/routes/api/oauth/register.ts +22 -2
  996. package/src/astro/routes/api/relations/index.ts +4 -4
  997. package/src/astro/routes/api/revisions/[revisionId]/restore.ts +17 -1
  998. package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +6 -2
  999. package/src/astro/routes/api/setup/admin-verify.ts +6 -5
  1000. package/src/astro/routes/api/typegen.ts +4 -46
  1001. package/src/astro/session-user.ts +14 -0
  1002. package/src/astro/types.ts +11 -0
  1003. package/src/bylines/credits.ts +149 -0
  1004. package/src/bylines/index.ts +4 -142
  1005. package/src/cli/commands/export-seed.ts +510 -89
  1006. package/src/cli/commands/seed.ts +2 -0
  1007. package/src/cli/credentials.ts +1 -60
  1008. package/src/cli/index.ts +0 -2
  1009. package/src/client/index.ts +8 -2
  1010. package/src/components/Image.astro +24 -13
  1011. package/src/components/InlinePortableTextEditor.tsx +25 -8
  1012. package/src/components/WidgetArea.astro +3 -2
  1013. package/src/content/converters/portable-text-to-prosemirror.ts +23 -17
  1014. package/src/content/converters/prosemirror-to-portable-text.ts +16 -5
  1015. package/src/content/converters/types.ts +1 -0
  1016. package/src/database/content-datetime.ts +111 -23
  1017. package/src/database/migrations/036_i18n_menus_and_taxonomies.ts +132 -92
  1018. package/src/database/migrations/086_relations_structural.ts +197 -0
  1019. package/src/database/migrations/087_reference_field_relations.ts +407 -0
  1020. package/src/database/migrations/088_cron_oneshot_utc.ts +39 -0
  1021. package/src/database/migrations/089_auto_seed_completion.ts +13 -0
  1022. package/src/database/migrations/runner.ts +8 -0
  1023. package/src/database/reference-backfill.ts +141 -0
  1024. package/src/database/repositories/comment.ts +2 -2
  1025. package/src/database/repositories/content.ts +58 -16
  1026. package/src/database/repositories/plugin-storage.ts +1 -1
  1027. package/src/database/repositories/redirect.ts +7 -2
  1028. package/src/database/repositories/relation.ts +622 -210
  1029. package/src/database/repositories/revision.ts +16 -0
  1030. package/src/database/repositories/types.ts +38 -0
  1031. package/src/database/transaction.ts +12 -1
  1032. package/src/database/types.ts +15 -6
  1033. package/src/db/node-sqlite-compat.ts +63 -37
  1034. package/src/emdash-runtime.ts +149 -46
  1035. package/src/import/wxr-taxonomies.ts +163 -88
  1036. package/src/index.ts +20 -0
  1037. package/src/loader.ts +177 -23
  1038. package/src/mcp/server.ts +90 -8
  1039. package/src/media/usage/activation.ts +18 -9
  1040. package/src/migrations/config-loader.ts +5 -0
  1041. package/src/object-cache/index.ts +19 -7
  1042. package/src/object-cache/types.ts +3 -2
  1043. package/src/plugin-types.ts +7 -0
  1044. package/src/plugins/adapt-sandbox-entry.ts +47 -12
  1045. package/src/plugins/byline-access.ts +158 -0
  1046. package/src/plugins/context.ts +7 -1
  1047. package/src/plugins/cron.ts +27 -4
  1048. package/src/plugins/hooks.ts +47 -0
  1049. package/src/plugins/host.ts +1 -0
  1050. package/src/plugins/index.ts +10 -1
  1051. package/src/plugins/manifest-schema.ts +5 -1
  1052. package/src/plugins/marketplace.ts +48 -36
  1053. package/src/plugins/sandbox/proxy.ts +1 -0
  1054. package/src/plugins/types.ts +95 -0
  1055. package/src/query.ts +464 -27
  1056. package/src/redirects/cache.ts +11 -1
  1057. package/src/redirects/destination.ts +20 -0
  1058. package/src/redirects/loops.ts +10 -6
  1059. package/src/redirects/patterns.ts +12 -30
  1060. package/src/references/field-map.ts +115 -0
  1061. package/src/references/resolve.ts +160 -0
  1062. package/src/references/staged.ts +157 -0
  1063. package/src/references/types.ts +16 -0
  1064. package/src/registry/artifact-fetch.ts +45 -271
  1065. package/src/registry/testing.ts +59 -14
  1066. package/src/request-context.ts +8 -0
  1067. package/src/schema/block-type-registry.ts +1 -1
  1068. package/src/schema/env-types.ts +37 -0
  1069. package/src/schema/project-env-types.ts +41 -0
  1070. package/src/schema/registry.ts +132 -26
  1071. package/src/schema/types.ts +63 -0
  1072. package/src/schema/url-pattern.ts +10 -0
  1073. package/src/schema/zod-generator.ts +78 -2
  1074. package/src/seed/apply.ts +553 -63
  1075. package/src/seed/ownership.ts +15 -0
  1076. package/src/seed/types.ts +36 -2
  1077. package/src/seed/validate.ts +123 -4
  1078. package/src/transfer/analyze/unique-keys.ts +3 -12
  1079. package/src/transfer/analyze/validate.ts +178 -40
  1080. package/src/transfer/analyze/values.ts +116 -2
  1081. package/src/transfer/analyze/write-rules.ts +8 -0
  1082. package/src/transfer/export/readers.ts +12 -8
  1083. package/src/transfer/format/columns.ts +26 -6
  1084. package/src/transfer/format/kinds.ts +21 -5
  1085. package/src/transfer/import/context.ts +8 -1
  1086. package/src/transfer/ops/package-index.ts +1 -1
  1087. package/src/utils/url.ts +58 -3
  1088. package/src/virtual-modules.d.ts +3 -0
  1089. package/dist/action-token-DYwe4Pk0.mjs +0 -26
  1090. package/dist/action-token-DYwe4Pk0.mjs.map +0 -1
  1091. package/dist/activation-LOkDM5WT.mjs +0 -382
  1092. package/dist/activation-LOkDM5WT.mjs.map +0 -1
  1093. package/dist/adapters-B64LbYcB.d.mts +0 -171
  1094. package/dist/adapters-B64LbYcB.d.mts.map +0 -1
  1095. package/dist/allowed-origins-CHB8oZNM.mjs +0 -116
  1096. package/dist/allowed-origins-CHB8oZNM.mjs.map +0 -1
  1097. package/dist/api-CuyNEHZG.mjs +0 -4718
  1098. package/dist/api-CuyNEHZG.mjs.map +0 -1
  1099. package/dist/api-tokens-s4i4aUp_.mjs +0 -166
  1100. package/dist/api-tokens-s4i4aUp_.mjs.map +0 -1
  1101. package/dist/apply-npY1TAhG.mjs +0 -1366
  1102. package/dist/apply-npY1TAhG.mjs.map +0 -1
  1103. package/dist/approvals-CqMfNxak.mjs +0 -460
  1104. package/dist/approvals-CqMfNxak.mjs.map +0 -1
  1105. package/dist/artifact-fetch-DZMOGZ3-.mjs +0 -818
  1106. package/dist/artifact-fetch-DZMOGZ3-.mjs.map +0 -1
  1107. package/dist/astro/routes/api/relations/_id_/translations.d.mts +0 -8
  1108. package/dist/astro/routes/api/relations/_id_/translations.d.mts.map +0 -1
  1109. package/dist/astro/routes/api/relations/_id_/translations.mjs +0 -47
  1110. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +0 -1
  1111. package/dist/audit-RfCugiSB.mjs +0 -127
  1112. package/dist/audit-RfCugiSB.mjs.map +0 -1
  1113. package/dist/authoritative-records-CoJvBXAD.mjs +0 -5172
  1114. package/dist/authoritative-records-CoJvBXAD.mjs.map +0 -1
  1115. package/dist/authorize-seCifOMJ.mjs +0 -49
  1116. package/dist/authorize-seCifOMJ.mjs.map +0 -1
  1117. package/dist/backup-BQRj3afm.mjs +0 -246
  1118. package/dist/backup-BQRj3afm.mjs.map +0 -1
  1119. package/dist/block-type-registry-DUI_3KxT.mjs +0 -6709
  1120. package/dist/block-type-registry-DUI_3KxT.mjs.map +0 -1
  1121. package/dist/block-types-BmZmLmAD.mjs +0 -132
  1122. package/dist/block-types-BmZmLmAD.mjs.map +0 -1
  1123. package/dist/block-values-C_VIPr5t.mjs +0 -175
  1124. package/dist/block-values-C_VIPr5t.mjs.map +0 -1
  1125. package/dist/byline-DYmkXqvo.mjs +0 -909
  1126. package/dist/byline-DYmkXqvo.mjs.map +0 -1
  1127. package/dist/byline-fields-D28AT-Fh.mjs +0 -123
  1128. package/dist/byline-fields-D28AT-Fh.mjs.map +0 -1
  1129. package/dist/byline-registry-gnKscbQX.mjs +0 -406
  1130. package/dist/byline-registry-gnKscbQX.mjs.map +0 -1
  1131. package/dist/bylines-BPwJqoYH.mjs +0 -232
  1132. package/dist/bylines-BPwJqoYH.mjs.map +0 -1
  1133. package/dist/bylines-ukLaYpVZ.mjs +0 -214
  1134. package/dist/bylines-ukLaYpVZ.mjs.map +0 -1
  1135. package/dist/cache-m7UEkRFV.mjs +0 -108
  1136. package/dist/cache-m7UEkRFV.mjs.map +0 -1
  1137. package/dist/canonical-YhEQezjg.mjs +0 -174
  1138. package/dist/canonical-YhEQezjg.mjs.map +0 -1
  1139. package/dist/capture-triggers-kJyl_yyM.mjs +0 -362
  1140. package/dist/capture-triggers-kJyl_yyM.mjs.map +0 -1
  1141. package/dist/challenge-store-ppU6Uv13.mjs +0 -51
  1142. package/dist/challenge-store-ppU6Uv13.mjs.map +0 -1
  1143. package/dist/checksum-B2IINIlN.mjs +0 -162
  1144. package/dist/checksum-B2IINIlN.mjs.map +0 -1
  1145. package/dist/chrome-tags-DApCQSIk.mjs +0 -24
  1146. package/dist/chrome-tags-DApCQSIk.mjs.map +0 -1
  1147. package/dist/chunks-Dms7Uxbt.mjs +0 -25
  1148. package/dist/chunks-Dms7Uxbt.mjs.map +0 -1
  1149. package/dist/collection-deletion-BIm28mo3.mjs +0 -436
  1150. package/dist/collection-deletion-BIm28mo3.mjs.map +0 -1
  1151. package/dist/collection-deletion-processor-Br6rxs3u.mjs +0 -217
  1152. package/dist/collection-deletion-processor-Br6rxs3u.mjs.map +0 -1
  1153. package/dist/collection-slugs-cache-CjGk__zp.mjs +0 -85
  1154. package/dist/collection-slugs-cache-CjGk__zp.mjs.map +0 -1
  1155. package/dist/comment-CrBl22OF.mjs +0 -313
  1156. package/dist/comment-CrBl22OF.mjs.map +0 -1
  1157. package/dist/comment-reaction-JEQ2Fpd8.mjs +0 -85
  1158. package/dist/comment-reaction-JEQ2Fpd8.mjs.map +0 -1
  1159. package/dist/comments-2ah9du9y.mjs +0 -195
  1160. package/dist/comments-2ah9du9y.mjs.map +0 -1
  1161. package/dist/comments-fHZ8ON9O.mjs +0 -99
  1162. package/dist/comments-fHZ8ON9O.mjs.map +0 -1
  1163. package/dist/components-CXbq7CSM.mjs +0 -108
  1164. package/dist/components-CXbq7CSM.mjs.map +0 -1
  1165. package/dist/config-BjEm_3xL.d.mts +0 -6537
  1166. package/dist/config-BjEm_3xL.d.mts.map +0 -1
  1167. package/dist/config-IhybvkIQ.mjs +0 -242
  1168. package/dist/config-IhybvkIQ.mjs.map +0 -1
  1169. package/dist/config-Py43JK9r.d.mts +0 -39
  1170. package/dist/config-Py43JK9r.d.mts.map +0 -1
  1171. package/dist/content-DFaIEDj9.mjs +0 -2281
  1172. package/dist/content-DFaIEDj9.mjs.map +0 -1
  1173. package/dist/content-list-query-Dra4Dalc.d.mts +0 -26
  1174. package/dist/content-list-query-Dra4Dalc.d.mts.map +0 -1
  1175. package/dist/content-policy-DFNw91-d.mjs +0 -46
  1176. package/dist/content-policy-DFNw91-d.mjs.map +0 -1
  1177. package/dist/content-repair-Q8IUrpLL.mjs +0 -442
  1178. package/dist/content-repair-Q8IUrpLL.mjs.map +0 -1
  1179. package/dist/context-BV_7t-Ua.mjs +0 -1921
  1180. package/dist/context-BV_7t-Ua.mjs.map +0 -1
  1181. package/dist/cron-7DCJwPXq.mjs +0 -284
  1182. package/dist/cron-7DCJwPXq.mjs.map +0 -1
  1183. package/dist/dashboard-BP-iJqpd.mjs +0 -151
  1184. package/dist/dashboard-BP-iJqpd.mjs.map +0 -1
  1185. package/dist/default-DQ6vsviu.mjs +0 -81
  1186. package/dist/default-DQ6vsviu.mjs.map +0 -1
  1187. package/dist/deferred-tasks-BPxXUB4x.d.mts +0 -9
  1188. package/dist/deferred-tasks-BPxXUB4x.d.mts.map +0 -1
  1189. package/dist/dev-typegen-CZaPLl3V.mjs +0 -29
  1190. package/dist/dev-typegen-CZaPLl3V.mjs.map +0 -1
  1191. package/dist/device-flow-CRd6DXmW.mjs +0 -466
  1192. package/dist/device-flow-CRd6DXmW.mjs.map +0 -1
  1193. package/dist/digest-BarSh-pN.mjs +0 -194
  1194. package/dist/digest-BarSh-pN.mjs.map +0 -1
  1195. package/dist/direct-executor-D2lNadwo.mjs +0 -104
  1196. package/dist/direct-executor-D2lNadwo.mjs.map +0 -1
  1197. package/dist/dist-BNwANFJR.mjs +0 -810
  1198. package/dist/dist-BNwANFJR.mjs.map +0 -1
  1199. package/dist/email-console-bJn3ctqA.mjs +0 -50
  1200. package/dist/email-console-bJn3ctqA.mjs.map +0 -1
  1201. package/dist/email-locale-CN6WAMx0.mjs +0 -25
  1202. package/dist/email-locale-CN6WAMx0.mjs.map +0 -1
  1203. package/dist/emdash-runtime-CtfnZmPi.mjs +0 -4186
  1204. package/dist/emdash-runtime-CtfnZmPi.mjs.map +0 -1
  1205. package/dist/enrich-Dl3kZ-lP.mjs +0 -194
  1206. package/dist/enrich-Dl3kZ-lP.mjs.map +0 -1
  1207. package/dist/entry-lock-BJYdBfXb.mjs +0 -1097
  1208. package/dist/entry-lock-BJYdBfXb.mjs.map +0 -1
  1209. package/dist/entry-lock-Cf5OoIgN.d.mts +0 -4368
  1210. package/dist/entry-lock-Cf5OoIgN.d.mts.map +0 -1
  1211. package/dist/entry-lock-DHQOxN7R.mjs +0 -163
  1212. package/dist/entry-lock-DHQOxN7R.mjs.map +0 -1
  1213. package/dist/entry-locks-D0foLdjQ.mjs +0 -167
  1214. package/dist/entry-locks-D0foLdjQ.mjs.map +0 -1
  1215. package/dist/error-CfvOHP0M.mjs +0 -90
  1216. package/dist/error-CfvOHP0M.mjs.map +0 -1
  1217. package/dist/errors-BF0_LFhW.mjs +0 -460
  1218. package/dist/errors-BF0_LFhW.mjs.map +0 -1
  1219. package/dist/errors-DgE1zJGG.mjs +0 -120
  1220. package/dist/errors-DgE1zJGG.mjs.map +0 -1
  1221. package/dist/escape-CuaZhZvL.mjs +0 -9
  1222. package/dist/escape-CuaZhZvL.mjs.map +0 -1
  1223. package/dist/fence-CMDXJYc_.mjs +0 -162
  1224. package/dist/fence-CMDXJYc_.mjs.map +0 -1
  1225. package/dist/field-defs-cache-HIgBbqZZ.mjs +0 -77
  1226. package/dist/field-defs-cache-HIgBbqZZ.mjs.map +0 -1
  1227. package/dist/focal-point-Gr34o-4o.mjs +0 -23
  1228. package/dist/focal-point-Gr34o-4o.mjs.map +0 -1
  1229. package/dist/fts-manager-S-K0laoS.mjs +0 -443
  1230. package/dist/fts-manager-S-K0laoS.mjs.map +0 -1
  1231. package/dist/gc-DjKY0Ay1.mjs +0 -75
  1232. package/dist/gc-DjKY0Ay1.mjs.map +0 -1
  1233. package/dist/hash-SDAW6zC-.mjs +0 -37
  1234. package/dist/hash-SDAW6zC-.mjs.map +0 -1
  1235. package/dist/hook-result-B5bXDgS2.d.mts +0 -31
  1236. package/dist/hook-result-B5bXDgS2.d.mts.map +0 -1
  1237. package/dist/hreflang-CbVI4paR.mjs +0 -105
  1238. package/dist/hreflang-CbVI4paR.mjs.map +0 -1
  1239. package/dist/hreflang-D5uNnsGJ.d.mts +0 -50
  1240. package/dist/hreflang-D5uNnsGJ.d.mts.map +0 -1
  1241. package/dist/http-route-dispatch-BitqzwMy.mjs +0 -339
  1242. package/dist/http-route-dispatch-BitqzwMy.mjs.map +0 -1
  1243. package/dist/identity-Be5kzutJ.mjs +0 -35
  1244. package/dist/identity-Be5kzutJ.mjs.map +0 -1
  1245. package/dist/import-YzfKCaco.mjs +0 -2020
  1246. package/dist/import-YzfKCaco.mjs.map +0 -1
  1247. package/dist/index-D-hdtLe8.d.mts +0 -623
  1248. package/dist/index-D-hdtLe8.d.mts.map +0 -1
  1249. package/dist/install-finalization-DfM1fj5x.mjs +0 -58
  1250. package/dist/install-finalization-DfM1fj5x.mjs.map +0 -1
  1251. package/dist/keys-yxLm5l35.mjs +0 -61
  1252. package/dist/keys-yxLm5l35.mjs.map +0 -1
  1253. package/dist/kinds-CRu_T5T5.mjs +0 -961
  1254. package/dist/kinds-CRu_T5T5.mjs.map +0 -1
  1255. package/dist/lifecycle-BzeGPeQ-.mjs +0 -25
  1256. package/dist/lifecycle-BzeGPeQ-.mjs.map +0 -1
  1257. package/dist/load-XgJiE6_3.mjs +0 -28
  1258. package/dist/load-XgJiE6_3.mjs.map +0 -1
  1259. package/dist/loader-BzqeR1ZN.mjs +0 -1086
  1260. package/dist/loader-BzqeR1ZN.mjs.map +0 -1
  1261. package/dist/loops-BQSzv5Zn.mjs +0 -203
  1262. package/dist/loops-BQSzv5Zn.mjs.map +0 -1
  1263. package/dist/manifest-builder-BmSAOOEF.mjs +0 -189
  1264. package/dist/manifest-builder-BmSAOOEF.mjs.map +0 -1
  1265. package/dist/manifest-schema-CY3zng_M.mjs +0 -492
  1266. package/dist/manifest-schema-CY3zng_M.mjs.map +0 -1
  1267. package/dist/media-CPXTbb1R.mjs +0 -373
  1268. package/dist/media-CPXTbb1R.mjs.map +0 -1
  1269. package/dist/media-JXRWDhw3.mjs +0 -294
  1270. package/dist/media-JXRWDhw3.mjs.map +0 -1
  1271. package/dist/media-Pu1L6xir.mjs +0 -408
  1272. package/dist/media-Pu1L6xir.mjs.map +0 -1
  1273. package/dist/media-allowlist-BSoa9Vvm.mjs +0 -44
  1274. package/dist/media-allowlist-BSoa9Vvm.mjs.map +0 -1
  1275. package/dist/media-folders-BE0oo2eX.mjs +0 -210
  1276. package/dist/media-folders-BE0oo2eX.mjs.map +0 -1
  1277. package/dist/media-url-jArBpzIG.mjs +0 -43
  1278. package/dist/media-url-jArBpzIG.mjs.map +0 -1
  1279. package/dist/media-usage-De-zeR9E.mjs +0 -1629
  1280. package/dist/media-usage-De-zeR9E.mjs.map +0 -1
  1281. package/dist/media-usage-activation-HKp7zk7W.mjs +0 -78
  1282. package/dist/media-usage-activation-HKp7zk7W.mjs.map +0 -1
  1283. package/dist/media-usage-work-C2OZLCAd.mjs +0 -586
  1284. package/dist/media-usage-work-C2OZLCAd.mjs.map +0 -1
  1285. package/dist/media-usage-work-DwUNbgvS.mjs +0 -152
  1286. package/dist/media-usage-work-DwUNbgvS.mjs.map +0 -1
  1287. package/dist/menus-BM7BPLOb.mjs +0 -139
  1288. package/dist/menus-BM7BPLOb.mjs.map +0 -1
  1289. package/dist/menus-Cm68rsAq.mjs +0 -3608
  1290. package/dist/menus-Cm68rsAq.mjs.map +0 -1
  1291. package/dist/menus-ITeAbcIF.mjs +0 -753
  1292. package/dist/menus-ITeAbcIF.mjs.map +0 -1
  1293. package/dist/mime-ChLqYwDk.mjs +0 -36
  1294. package/dist/mime-ChLqYwDk.mjs.map +0 -1
  1295. package/dist/mode-CCuKXUci.mjs +0 -23
  1296. package/dist/mode-CCuKXUci.mjs.map +0 -1
  1297. package/dist/node-sqlite-compat-CONMsl-x.mjs +0 -46
  1298. package/dist/node-sqlite-compat-CONMsl-x.mjs.map +0 -1
  1299. package/dist/normalize-CO2P8-iE.mjs +0 -191
  1300. package/dist/normalize-CO2P8-iE.mjs.map +0 -1
  1301. package/dist/oauth-authorization-DlMIL5_h.mjs +0 -274
  1302. package/dist/oauth-authorization-DlMIL5_h.mjs.map +0 -1
  1303. package/dist/oauth-clients-Djq9r_KP.mjs +0 -266
  1304. package/dist/oauth-clients-Djq9r_KP.mjs.map +0 -1
  1305. package/dist/oauth-state-store-BbjnZXNC.mjs +0 -50
  1306. package/dist/oauth-state-store-BbjnZXNC.mjs.map +0 -1
  1307. package/dist/oauth-user-lookup-vue9a64A.mjs +0 -26
  1308. package/dist/oauth-user-lookup-vue9a64A.mjs.map +0 -1
  1309. package/dist/object-cache-CqWNY5uP.mjs +0 -582
  1310. package/dist/object-cache-CqWNY5uP.mjs.map +0 -1
  1311. package/dist/options-SQCHQCPH.d.mts +0 -81
  1312. package/dist/options-SQCHQCPH.d.mts.map +0 -1
  1313. package/dist/parse-CVgO-Qai.d.mts +0 -168
  1314. package/dist/parse-CVgO-Qai.d.mts.map +0 -1
  1315. package/dist/parse-DY6OD1j_.mjs +0 -81
  1316. package/dist/parse-DY6OD1j_.mjs.map +0 -1
  1317. package/dist/passkey-config-X_H8128a.mjs +0 -46
  1318. package/dist/passkey-config-X_H8128a.mjs.map +0 -1
  1319. package/dist/paths-JxokKIbr.mjs +0 -77
  1320. package/dist/paths-JxokKIbr.mjs.map +0 -1
  1321. package/dist/patterns-BhAvqO0S.mjs +0 -145
  1322. package/dist/patterns-BhAvqO0S.mjs.map +0 -1
  1323. package/dist/placeholder-MSEd8gty.d.mts +0 -306
  1324. package/dist/placeholder-MSEd8gty.d.mts.map +0 -1
  1325. package/dist/plan-xjcWrAah.mjs +0 -135
  1326. package/dist/plan-xjcWrAah.mjs.map +0 -1
  1327. package/dist/plugins-DUXUt8B9.mjs +0 -277
  1328. package/dist/plugins-DUXUt8B9.mjs.map +0 -1
  1329. package/dist/policy-CUvwAARc.mjs +0 -45
  1330. package/dist/policy-CUvwAARc.mjs.map +0 -1
  1331. package/dist/portable-text-5O_ZGUjB.mjs +0 -307
  1332. package/dist/portable-text-5O_ZGUjB.mjs.map +0 -1
  1333. package/dist/preview-CIUcPYr6.mjs +0 -107
  1334. package/dist/preview-CIUcPYr6.mjs.map +0 -1
  1335. package/dist/protocol-B97DZaFr.d.mts +0 -61
  1336. package/dist/protocol-B97DZaFr.d.mts.map +0 -1
  1337. package/dist/public-submission-BFBUrqst.mjs +0 -250
  1338. package/dist/public-submission-BFBUrqst.mjs.map +0 -1
  1339. package/dist/public-url-Bn7U0D7-.mjs +0 -101
  1340. package/dist/public-url-Bn7U0D7-.mjs.map +0 -1
  1341. package/dist/query-B48peoRT.mjs +0 -890
  1342. package/dist/query-B48peoRT.mjs.map +0 -1
  1343. package/dist/query-C4IH0uhR.mjs +0 -41
  1344. package/dist/query-C4IH0uhR.mjs.map +0 -1
  1345. package/dist/rate-limit-BZ6nybgc.mjs +0 -120
  1346. package/dist/rate-limit-BZ6nybgc.mjs.map +0 -1
  1347. package/dist/receipt-B4wJj5Jq.mjs +0 -43
  1348. package/dist/receipt-B4wJj5Jq.mjs.map +0 -1
  1349. package/dist/redirect-B29UjdUn.mjs +0 -411
  1350. package/dist/redirect-B29UjdUn.mjs.map +0 -1
  1351. package/dist/redirect-Cd1E7VUt.mjs +0 -17
  1352. package/dist/redirect-Cd1E7VUt.mjs.map +0 -1
  1353. package/dist/redirects-Ca2MPfEG.mjs +0 -446
  1354. package/dist/redirects-Ca2MPfEG.mjs.map +0 -1
  1355. package/dist/redirects-Cv9apQKj.mjs +0 -148
  1356. package/dist/redirects-Cv9apQKj.mjs.map +0 -1
  1357. package/dist/relation-M4NUCb0b.mjs +0 -334
  1358. package/dist/relation-M4NUCb0b.mjs.map +0 -1
  1359. package/dist/relations-CCif47Oq.mjs +0 -403
  1360. package/dist/relations-CCif47Oq.mjs.map +0 -1
  1361. package/dist/relations-CK9CYUyr.mjs +0 -310
  1362. package/dist/relations-CK9CYUyr.mjs.map +0 -1
  1363. package/dist/request-cache-DzLYKm_x.mjs +0 -104
  1364. package/dist/request-cache-DzLYKm_x.mjs.map +0 -1
  1365. package/dist/request-meta-sZXt3sRo.mjs +0 -141
  1366. package/dist/request-meta-sZXt3sRo.mjs.map +0 -1
  1367. package/dist/resolve-2WbQsCvT.mjs +0 -199
  1368. package/dist/resolve-2WbQsCvT.mjs.map +0 -1
  1369. package/dist/route-wire--1hLuACz.mjs +0 -197
  1370. package/dist/route-wire--1hLuACz.mjs.map +0 -1
  1371. package/dist/routes-vrR95WR6.mjs +0 -272
  1372. package/dist/routes-vrR95WR6.mjs.map +0 -1
  1373. package/dist/runner-1y4J9fJB.mjs +0 -5742
  1374. package/dist/runner-1y4J9fJB.mjs.map +0 -1
  1375. package/dist/runner-D5_LzKXI.d.mts +0 -68
  1376. package/dist/runner-D5_LzKXI.d.mts.map +0 -1
  1377. package/dist/schema-BABiRdsH.mjs +0 -13
  1378. package/dist/schema-BABiRdsH.mjs.map +0 -1
  1379. package/dist/schema-Du3MzCG0.mjs +0 -446
  1380. package/dist/schema-Du3MzCG0.mjs.map +0 -1
  1381. package/dist/scopes-Dbk-ElhT.mjs +0 -34
  1382. package/dist/scopes-Dbk-ElhT.mjs.map +0 -1
  1383. package/dist/search-Bt1PL1jf.mjs +0 -448
  1384. package/dist/search-Bt1PL1jf.mjs.map +0 -1
  1385. package/dist/sections-Ddptx_o9.mjs +0 -346
  1386. package/dist/sections-Ddptx_o9.mjs.map +0 -1
  1387. package/dist/seo-CZT2oLtT.mjs +0 -114
  1388. package/dist/seo-CZT2oLtT.mjs.map +0 -1
  1389. package/dist/seo-D5w3-Azy.mjs +0 -133
  1390. package/dist/seo-D5w3-Azy.mjs.map +0 -1
  1391. package/dist/service-DuykXPyW.mjs +0 -150
  1392. package/dist/service-DuykXPyW.mjs.map +0 -1
  1393. package/dist/session-user-BhaVp8w0.mjs +0 -51
  1394. package/dist/session-user-BhaVp8w0.mjs.map +0 -1
  1395. package/dist/settings-B4vDl1fK.mjs +0 -439
  1396. package/dist/settings-B4vDl1fK.mjs.map +0 -1
  1397. package/dist/settings-DYidIB26.mjs +0 -61
  1398. package/dist/settings-DYidIB26.mjs.map +0 -1
  1399. package/dist/settings-Dyj6v8C4.mjs +0 -51
  1400. package/dist/settings-Dyj6v8C4.mjs.map +0 -1
  1401. package/dist/setup-complete-bOogcHWG.mjs +0 -26
  1402. package/dist/setup-complete-bOogcHWG.mjs.map +0 -1
  1403. package/dist/setup-nonce-0EGuKM4s.mjs +0 -25
  1404. package/dist/setup-nonce-0EGuKM4s.mjs.map +0 -1
  1405. package/dist/site-settings-DOgRUoFX.mjs +0 -50
  1406. package/dist/site-settings-DOgRUoFX.mjs.map +0 -1
  1407. package/dist/site-url-BU_bbxwj.mjs +0 -16
  1408. package/dist/site-url-BU_bbxwj.mjs.map +0 -1
  1409. package/dist/snapshot-PawoX-WG.mjs +0 -414
  1410. package/dist/snapshot-PawoX-WG.mjs.map +0 -1
  1411. package/dist/ssrf-CJUnJymJ.mjs +0 -406
  1412. package/dist/ssrf-CJUnJymJ.mjs.map +0 -1
  1413. package/dist/stage-DgrBz_du.mjs +0 -662
  1414. package/dist/stage-DgrBz_du.mjs.map +0 -1
  1415. package/dist/state-DDiPySSG.mjs +0 -153
  1416. package/dist/state-DDiPySSG.mjs.map +0 -1
  1417. package/dist/status-DZKIG4a9.mjs +0 -30
  1418. package/dist/status-DZKIG4a9.mjs.map +0 -1
  1419. package/dist/storage-query-FXJH5pI8.d.mts +0 -1581
  1420. package/dist/storage-query-FXJH5pI8.d.mts.map +0 -1
  1421. package/dist/tar-_1AgTYFu.mjs +0 -449
  1422. package/dist/tar-_1AgTYFu.mjs.map +0 -1
  1423. package/dist/target-_7pn2Gbg.mjs +0 -27
  1424. package/dist/target-_7pn2Gbg.mjs.map +0 -1
  1425. package/dist/taxonomies-C1IwNe8Q.mjs +0 -697
  1426. package/dist/taxonomies-C1IwNe8Q.mjs.map +0 -1
  1427. package/dist/taxonomies-C_XMoRcX.mjs +0 -939
  1428. package/dist/taxonomies-C_XMoRcX.mjs.map +0 -1
  1429. package/dist/taxonomy-C3Fu1YeH.mjs +0 -525
  1430. package/dist/taxonomy-C3Fu1YeH.mjs.map +0 -1
  1431. package/dist/tokens-u78jETkX.mjs +0 -171
  1432. package/dist/tokens-u78jETkX.mjs.map +0 -1
  1433. package/dist/transaction-BcJO4Tmc.mjs +0 -29
  1434. package/dist/transaction-BcJO4Tmc.mjs.map +0 -1
  1435. package/dist/transfer-DIGvR9Af.mjs +0 -166
  1436. package/dist/transfer-DIGvR9Af.mjs.map +0 -1
  1437. package/dist/transfer-DgeCvHnj.mjs +0 -8675
  1438. package/dist/transfer-DgeCvHnj.mjs.map +0 -1
  1439. package/dist/transfer-download-Pml7RMio.mjs +0 -33
  1440. package/dist/transfer-download-Pml7RMio.mjs.map +0 -1
  1441. package/dist/transformations-9gfpwY65.mjs +0 -196
  1442. package/dist/transformations-9gfpwY65.mjs.map +0 -1
  1443. package/dist/transport-BIfH7_hx.d.mts +0 -42
  1444. package/dist/transport-BIfH7_hx.d.mts.map +0 -1
  1445. package/dist/transport-DKWIq53q.mjs +0 -136
  1446. package/dist/transport-DKWIq53q.mjs.map +0 -1
  1447. package/dist/trusted-proxy-tKiVtyTD.mjs +0 -51
  1448. package/dist/trusted-proxy-tKiVtyTD.mjs.map +0 -1
  1449. package/dist/turnstile-DpsoyOfg.mjs +0 -53
  1450. package/dist/turnstile-DpsoyOfg.mjs.map +0 -1
  1451. package/dist/types-B4sUC2p1.d.mts +0 -198
  1452. package/dist/types-B4sUC2p1.d.mts.map +0 -1
  1453. package/dist/types-B7Lmsh1E.d.mts +0 -887
  1454. package/dist/types-B7Lmsh1E.d.mts.map +0 -1
  1455. package/dist/types-BZakh7Ym.mjs +0 -22
  1456. package/dist/types-BZakh7Ym.mjs.map +0 -1
  1457. package/dist/types-B_CppEmv.d.mts +0 -264
  1458. package/dist/types-B_CppEmv.d.mts.map +0 -1
  1459. package/dist/types-BcrBrE6-.mjs +0 -159
  1460. package/dist/types-BcrBrE6-.mjs.map +0 -1
  1461. package/dist/types-BkUg2yHx.mjs +0 -92
  1462. package/dist/types-BkUg2yHx.mjs.map +0 -1
  1463. package/dist/types-CAZgq9fO.d.mts +0 -124
  1464. package/dist/types-CAZgq9fO.d.mts.map +0 -1
  1465. package/dist/types-Cd-O03VG.d.mts +0 -363
  1466. package/dist/types-Cd-O03VG.d.mts.map +0 -1
  1467. package/dist/types-Cr-Kg-3D.d.mts +0 -1641
  1468. package/dist/types-Cr-Kg-3D.d.mts.map +0 -1
  1469. package/dist/types-D2fvWd1i.d.mts +0 -359
  1470. package/dist/types-D2fvWd1i.d.mts.map +0 -1
  1471. package/dist/types-D7HUsguf.mjs +0 -77
  1472. package/dist/types-D7HUsguf.mjs.map +0 -1
  1473. package/dist/types-DA1Te3Oy.d.mts +0 -198
  1474. package/dist/types-DA1Te3Oy.d.mts.map +0 -1
  1475. package/dist/types-DhV6Q5bP.mjs +0 -18
  1476. package/dist/types-DhV6Q5bP.mjs.map +0 -1
  1477. package/dist/types-DnnVSl6Y.d.mts +0 -85
  1478. package/dist/types-DnnVSl6Y.d.mts.map +0 -1
  1479. package/dist/types-VT4-BugW.mjs +0 -16
  1480. package/dist/types-VT4-BugW.mjs.map +0 -1
  1481. package/dist/upload-attempts-B68ZGNu9.mjs +0 -32
  1482. package/dist/upload-attempts-B68ZGNu9.mjs.map +0 -1
  1483. package/dist/url-pattern-CCeZMGOh.mjs +0 -33
  1484. package/dist/url-pattern-CCeZMGOh.mjs.map +0 -1
  1485. package/dist/user-DDSL-sGw.mjs +0 -171
  1486. package/dist/user-DDSL-sGw.mjs.map +0 -1
  1487. package/dist/utils-DdhmO9w9.mjs +0 -439
  1488. package/dist/utils-DdhmO9w9.mjs.map +0 -1
  1489. package/dist/validate-CHosPEhs.mjs +0 -453
  1490. package/dist/validate-CHosPEhs.mjs.map +0 -1
  1491. package/dist/validate-CM79QXYE.d.mts +0 -432
  1492. package/dist/validate-CM79QXYE.d.mts.map +0 -1
  1493. package/dist/validation-BFecQczG.mjs +0 -218
  1494. package/dist/validation-BFecQczG.mjs.map +0 -1
  1495. package/dist/version-BRZXVifl.mjs +0 -9
  1496. package/dist/version-BRZXVifl.mjs.map +0 -1
  1497. package/dist/version-DXsxRrob.mjs +0 -7
  1498. package/dist/version-DXsxRrob.mjs.map +0 -1
  1499. package/dist/widgets-WdV72brA.mjs +0 -126
  1500. package/dist/widgets-WdV72brA.mjs.map +0 -1
  1501. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts +0 -34
  1502. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts.map +0 -1
  1503. package/dist/wxr-taxonomies-DP6ESgMN.mjs +0 -372
  1504. package/dist/wxr-taxonomies-DP6ESgMN.mjs.map +0 -1
  1505. package/dist/zod-generator-D6uE4WiS.mjs +0 -389
  1506. package/dist/zod-generator-D6uE4WiS.mjs.map +0 -1
  1507. package/src/astro/routes/api/relations/[id]/translations.ts +0 -33
  1508. package/src/cli/commands/bundle-utils.ts +0 -408
  1509. package/src/cli/commands/bundle.ts +0 -659
  1510. package/src/cli/commands/plugin-init.ts +0 -417
  1511. package/src/cli/commands/plugin-validate.ts +0 -31
  1512. package/src/cli/commands/plugin.ts +0 -33
  1513. package/src/cli/commands/publish.ts +0 -721
  1514. /package/dist/{api-tokens-CE1ECIg0.mjs → api-tokens-BLz2MtQs.mjs} +0 -0
  1515. /package/dist/{ssrf-DpBH7aOt.mjs → ssrf-tA45vIPX.mjs} +0 -0
@@ -1,274 +0,0 @@
1
- import { t as withTransaction } from "./transaction-BcJO4Tmc.mjs";
2
- import { i as generatePrefixedToken, o as hashApiToken, s as isValidScope, t as TOKEN_PREFIXES } from "./api-tokens-CE1ECIg0.mjs";
3
- import { c as validateRedirectUri, o as lookupOAuthClient, s as validateClientRedirectUri } from "./oauth-clients-Djq9r_KP.mjs";
4
- import { t as lookupUserRoleAndStatus } from "./oauth-user-lookup-vue9a64A.mjs";
5
- import { clampScopes, computeS256Challenge, secureCompare } from "@emdash-cms/auth";
6
- import { generateCodeVerifier } from "arctic";
7
-
8
- //#region src/api/handlers/oauth-authorization.ts
9
- /**
10
- * OAuth 2.1 Authorization Code + PKCE handlers.
11
- *
12
- * Implements the server side of the authorization code grant for MCP clients
13
- * (Claude Desktop, VS Code, etc.) per the MCP authorization spec (draft).
14
- *
15
- * Uses arctic for PKCE challenge generation and @emdash-cms/auth for token
16
- * utilities. Token infrastructure is shared with the device flow.
17
- */
18
- /** Authorization codes expire after 10 minutes (RFC 6749 §4.1.2 recommends short-lived) */
19
- const AUTH_CODE_TTL_SECONDS = 600;
20
- /** Access token TTL: 1 hour */
21
- const ACCESS_TOKEN_TTL_SECONDS = 3600;
22
- /** Refresh token TTL: 90 days */
23
- const REFRESH_TOKEN_TTL_SECONDS = 2160 * 60 * 60;
24
- function expiresAt(seconds) {
25
- return new Date(Date.now() + seconds * 1e3).toISOString();
26
- }
27
- /**
28
- * Validate and normalize scopes. Returns validated scope list.
29
- */
30
- function normalizeScopes(requested) {
31
- if (!requested) return [];
32
- return requested.split(" ").filter(Boolean).filter(isValidScope);
33
- }
34
- /**
35
- * Process an authorization request after the user approves consent.
36
- *
37
- * Generates an authorization code, stores it with the PKCE challenge,
38
- * and returns the redirect URL with the code appended.
39
- *
40
- * Scopes are clamped to the user's role to prevent scope escalation.
41
- */
42
- async function handleAuthorizationApproval(db, userId, userRole, params) {
43
- try {
44
- if (params.response_type !== "code") return {
45
- success: false,
46
- error: {
47
- code: "UNSUPPORTED_RESPONSE_TYPE",
48
- message: "Only response_type=code is supported"
49
- }
50
- };
51
- const uriError = validateRedirectUri(params.redirect_uri);
52
- if (uriError) return {
53
- success: false,
54
- error: {
55
- code: "INVALID_REDIRECT_URI",
56
- message: uriError
57
- }
58
- };
59
- const client = await lookupOAuthClient(db, params.client_id);
60
- if (!client) return {
61
- success: false,
62
- error: {
63
- code: "INVALID_CLIENT",
64
- message: "Unknown client_id"
65
- }
66
- };
67
- const clientUriError = validateClientRedirectUri(params.redirect_uri, client.redirectUris);
68
- if (clientUriError) return {
69
- success: false,
70
- error: {
71
- code: "INVALID_REDIRECT_URI",
72
- message: clientUriError
73
- }
74
- };
75
- if (params.code_challenge_method !== "S256") return {
76
- success: false,
77
- error: {
78
- code: "INVALID_REQUEST",
79
- message: "Only S256 code_challenge_method is supported"
80
- }
81
- };
82
- if (!params.code_challenge) return {
83
- success: false,
84
- error: {
85
- code: "INVALID_REQUEST",
86
- message: "code_challenge is required"
87
- }
88
- };
89
- const userScopes = clampScopes(normalizeScopes(params.scope), userRole);
90
- const clientScopes = client.scopes;
91
- const scopes = clientScopes?.length ? userScopes.filter((s) => clientScopes.includes(s)) : userScopes;
92
- if (scopes.length === 0) return {
93
- success: false,
94
- error: {
95
- code: "INVALID_SCOPE",
96
- message: "No valid scopes requested"
97
- }
98
- };
99
- const code = generateCodeVerifier();
100
- const codeHash = hashApiToken(code);
101
- await db.insertInto("_emdash_authorization_codes").values({
102
- code_hash: codeHash,
103
- client_id: params.client_id,
104
- redirect_uri: params.redirect_uri,
105
- user_id: userId,
106
- scopes: JSON.stringify(scopes),
107
- code_challenge: params.code_challenge,
108
- code_challenge_method: params.code_challenge_method,
109
- resource: params.resource ?? null,
110
- expires_at: expiresAt(AUTH_CODE_TTL_SECONDS)
111
- }).execute();
112
- const redirectUrl = new URL(params.redirect_uri);
113
- redirectUrl.searchParams.set("code", code);
114
- if (params.state) redirectUrl.searchParams.set("state", params.state);
115
- return {
116
- success: true,
117
- data: { redirect_url: redirectUrl.toString() }
118
- };
119
- } catch (error) {
120
- console.error("Authorization error:", error);
121
- return {
122
- success: false,
123
- error: {
124
- code: "AUTHORIZATION_ERROR",
125
- message: "Failed to process authorization"
126
- }
127
- };
128
- }
129
- }
130
- /**
131
- * Exchange an authorization code for access + refresh tokens.
132
- *
133
- * Validates the code, verifies PKCE, and issues tokens using the same
134
- * infrastructure as the device flow (ec_oat_*, ec_ort_*).
135
- */
136
- async function handleAuthorizationCodeExchange(db, params) {
137
- try {
138
- if (params.grant_type !== "authorization_code") return {
139
- success: false,
140
- error: {
141
- code: "unsupported_grant_type",
142
- message: "Invalid grant_type"
143
- }
144
- };
145
- const codeHash = hashApiToken(params.code);
146
- const row = await db.deleteFrom("_emdash_authorization_codes").where("code_hash", "=", codeHash).returningAll().executeTakeFirst();
147
- if (!row) return {
148
- success: false,
149
- error: {
150
- code: "invalid_grant",
151
- message: "Invalid authorization code"
152
- }
153
- };
154
- if (new Date(row.expires_at) < /* @__PURE__ */ new Date()) return {
155
- success: false,
156
- error: {
157
- code: "invalid_grant",
158
- message: "Authorization code expired"
159
- }
160
- };
161
- if (row.redirect_uri !== params.redirect_uri) return {
162
- success: false,
163
- error: {
164
- code: "invalid_grant",
165
- message: "redirect_uri mismatch"
166
- }
167
- };
168
- if (row.client_id !== params.client_id) return {
169
- success: false,
170
- error: {
171
- code: "invalid_grant",
172
- message: "client_id mismatch"
173
- }
174
- };
175
- if (!secureCompare(computeS256Challenge(params.code_verifier), row.code_challenge)) return {
176
- success: false,
177
- error: {
178
- code: "invalid_grant",
179
- message: "PKCE verification failed"
180
- }
181
- };
182
- if (row.resource && params.resource && row.resource !== params.resource) return {
183
- success: false,
184
- error: {
185
- code: "invalid_grant",
186
- message: "resource mismatch"
187
- }
188
- };
189
- const userInfo = await lookupUserRoleAndStatus(db, row.user_id);
190
- if (!userInfo) return {
191
- success: false,
192
- error: {
193
- code: "invalid_grant",
194
- message: "User not found"
195
- }
196
- };
197
- if (userInfo.disabled) return {
198
- success: false,
199
- error: {
200
- code: "invalid_grant",
201
- message: "User account is disabled"
202
- }
203
- };
204
- let scopes = clampScopes(JSON.parse(row.scopes), userInfo.role);
205
- const client = await lookupOAuthClient(db, row.client_id);
206
- if (client?.scopes?.length) scopes = scopes.filter((s) => client.scopes.includes(s));
207
- if (scopes.length === 0) return {
208
- success: false,
209
- error: {
210
- code: "invalid_grant",
211
- message: "User role no longer supports any of the requested scopes"
212
- }
213
- };
214
- const accessToken = generatePrefixedToken(TOKEN_PREFIXES.OAUTH_ACCESS);
215
- const accessExpires = expiresAt(ACCESS_TOKEN_TTL_SECONDS);
216
- const refreshToken = generatePrefixedToken(TOKEN_PREFIXES.OAUTH_REFRESH);
217
- const refreshExpires = expiresAt(REFRESH_TOKEN_TTL_SECONDS);
218
- await withTransaction(db, async (trx) => {
219
- await trx.insertInto("_emdash_oauth_tokens").values({
220
- token_hash: accessToken.hash,
221
- token_type: "access",
222
- user_id: row.user_id,
223
- scopes: JSON.stringify(scopes),
224
- client_type: "mcp",
225
- expires_at: accessExpires,
226
- refresh_token_hash: refreshToken.hash,
227
- client_id: row.client_id
228
- }).execute();
229
- await trx.insertInto("_emdash_oauth_tokens").values({
230
- token_hash: refreshToken.hash,
231
- token_type: "refresh",
232
- user_id: row.user_id,
233
- scopes: JSON.stringify(scopes),
234
- client_type: "mcp",
235
- expires_at: refreshExpires,
236
- refresh_token_hash: null,
237
- client_id: row.client_id
238
- }).execute();
239
- });
240
- return {
241
- success: true,
242
- data: {
243
- access_token: accessToken.raw,
244
- refresh_token: refreshToken.raw,
245
- token_type: "Bearer",
246
- expires_in: ACCESS_TOKEN_TTL_SECONDS,
247
- scope: scopes.join(" ")
248
- }
249
- };
250
- } catch (error) {
251
- console.error("Token exchange error:", error);
252
- return {
253
- success: false,
254
- error: {
255
- code: "TOKEN_EXCHANGE_ERROR",
256
- message: "Failed to exchange authorization code"
257
- }
258
- };
259
- }
260
- }
261
- /**
262
- * Build the authorization denied redirect URL.
263
- */
264
- function buildDeniedRedirect(redirectUri, state) {
265
- const url = new URL(redirectUri);
266
- url.searchParams.set("error", "access_denied");
267
- url.searchParams.set("error_description", "The user denied the authorization request");
268
- if (state) url.searchParams.set("state", state);
269
- return url.toString();
270
- }
271
-
272
- //#endregion
273
- export { handleAuthorizationApproval as n, handleAuthorizationCodeExchange as r, buildDeniedRedirect as t };
274
- //# sourceMappingURL=oauth-authorization-DlMIL5_h.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-authorization-DlMIL5_h.mjs","names":[],"sources":["../src/api/handlers/oauth-authorization.ts"],"sourcesContent":["/**\n * OAuth 2.1 Authorization Code + PKCE handlers.\n *\n * Implements the server side of the authorization code grant for MCP clients\n * (Claude Desktop, VS Code, etc.) per the MCP authorization spec (draft).\n *\n * Uses arctic for PKCE challenge generation and @emdash-cms/auth for token\n * utilities. Token infrastructure is shared with the device flow.\n */\n\nimport { clampScopes, computeS256Challenge, secureCompare } from \"@emdash-cms/auth\";\nimport type { RoleLevel } from \"@emdash-cms/auth\";\nimport { generateCodeVerifier } from \"arctic\";\nimport type { Kysely } from \"kysely\";\n\nimport {\n\tgeneratePrefixedToken,\n\thashApiToken,\n\tisValidScope,\n\tTOKEN_PREFIXES,\n} from \"../../auth/api-tokens.js\";\nimport { withTransaction } from \"../../database/transaction.js\";\nimport type { Database } from \"../../database/types.js\";\nimport { validateRedirectUri } from \"../oauth/redirect-uri.js\";\nimport type { ApiResult } from \"../types.js\";\nimport { lookupOAuthClient, validateClientRedirectUri } from \"./oauth-clients.js\";\nimport { lookupUserRoleAndStatus } from \"./oauth-user-lookup.js\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Authorization codes expire after 10 minutes (RFC 6749 §4.1.2 recommends short-lived) */\nconst AUTH_CODE_TTL_SECONDS = 10 * 60;\n\n/** Access token TTL: 1 hour */\nconst ACCESS_TOKEN_TTL_SECONDS = 60 * 60;\n\n/** Refresh token TTL: 90 days */\nconst REFRESH_TOKEN_TTL_SECONDS = 90 * 24 * 60 * 60;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface AuthorizationParams {\n\tresponse_type: string;\n\tclient_id: string;\n\tredirect_uri: string;\n\tscope?: string;\n\tstate?: string;\n\tcode_challenge: string;\n\tcode_challenge_method: string;\n\tresource?: string;\n}\n\nexport interface TokenExchangeParams {\n\tgrant_type: string;\n\tcode: string;\n\tredirect_uri: string;\n\tclient_id: string;\n\tcode_verifier: string;\n\tresource?: string;\n}\n\nexport interface TokenResponse {\n\taccess_token: string;\n\trefresh_token: string;\n\ttoken_type: \"Bearer\";\n\texpires_in: number;\n\tscope: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction expiresAt(seconds: number): string {\n\treturn new Date(Date.now() + seconds * 1000).toISOString();\n}\n\nexport { validateRedirectUri };\n\n/**\n * Validate and normalize scopes. Returns validated scope list.\n */\nfunction normalizeScopes(requested?: string): string[] {\n\tif (!requested) return [];\n\n\tconst scopes = requested.split(\" \").filter(Boolean).filter(isValidScope);\n\n\treturn scopes;\n}\n\n// ---------------------------------------------------------------------------\n// Handlers\n// ---------------------------------------------------------------------------\n\n/**\n * Process an authorization request after the user approves consent.\n *\n * Generates an authorization code, stores it with the PKCE challenge,\n * and returns the redirect URL with the code appended.\n *\n * Scopes are clamped to the user's role to prevent scope escalation.\n */\nexport async function handleAuthorizationApproval(\n\tdb: Kysely<Database>,\n\tuserId: string,\n\tuserRole: RoleLevel,\n\tparams: AuthorizationParams,\n): Promise<ApiResult<{ redirect_url: string }>> {\n\ttry {\n\t\t// Validate response_type\n\t\tif (params.response_type !== \"code\") {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tcode: \"UNSUPPORTED_RESPONSE_TYPE\",\n\t\t\t\t\tmessage: \"Only response_type=code is supported\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\t// Validate redirect_uri scheme/host (basic security check)\n\t\tconst uriError = validateRedirectUri(params.redirect_uri);\n\t\tif (uriError) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"INVALID_REDIRECT_URI\", message: uriError },\n\t\t\t};\n\t\t}\n\n\t\t// Look up the registered OAuth client\n\t\tconst client = await lookupOAuthClient(db, params.client_id);\n\t\tif (!client) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tcode: \"INVALID_CLIENT\",\n\t\t\t\t\tmessage: \"Unknown client_id\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\t// Validate redirect_uri against client's registered URIs\n\t\tconst clientUriError = validateClientRedirectUri(params.redirect_uri, client.redirectUris);\n\t\tif (clientUriError) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"INVALID_REDIRECT_URI\", message: clientUriError },\n\t\t\t};\n\t\t}\n\n\t\t// Validate code_challenge_method\n\t\tif (params.code_challenge_method !== \"S256\") {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tcode: \"INVALID_REQUEST\",\n\t\t\t\t\tmessage: \"Only S256 code_challenge_method is supported\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\t// Validate code_challenge is present\n\t\tif (!params.code_challenge) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"INVALID_REQUEST\", message: \"code_challenge is required\" },\n\t\t\t};\n\t\t}\n\n\t\t// Validate scopes, then clamp to user's role\n\t\tconst userScopes = clampScopes(normalizeScopes(params.scope), userRole);\n\n\t\t// SEC-41: Intersect with client's registered scopes (if restricted).\n\t\t// A client registered with scopes: [\"content:read\"] should never receive\n\t\t// admin or schema:write, regardless of the approving user's role.\n\t\tconst clientScopes = client.scopes;\n\t\tconst scopes = clientScopes?.length\n\t\t\t? userScopes.filter((s: string) => clientScopes.includes(s))\n\t\t\t: userScopes;\n\n\t\tif (scopes.length === 0) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"INVALID_SCOPE\", message: \"No valid scopes requested\" },\n\t\t\t};\n\t\t}\n\n\t\t// Generate authorization code (high entropy, base64url)\n\t\tconst code = generateCodeVerifier(); // 32 bytes random, base64url\n\t\tconst codeHash = hashApiToken(code);\n\n\t\t// Store the authorization code\n\t\tawait db\n\t\t\t.insertInto(\"_emdash_authorization_codes\")\n\t\t\t.values({\n\t\t\t\tcode_hash: codeHash,\n\t\t\t\tclient_id: params.client_id,\n\t\t\t\tredirect_uri: params.redirect_uri,\n\t\t\t\tuser_id: userId,\n\t\t\t\tscopes: JSON.stringify(scopes),\n\t\t\t\tcode_challenge: params.code_challenge,\n\t\t\t\tcode_challenge_method: params.code_challenge_method,\n\t\t\t\tresource: params.resource ?? null,\n\t\t\t\texpires_at: expiresAt(AUTH_CODE_TTL_SECONDS),\n\t\t\t})\n\t\t\t.execute();\n\n\t\t// Build the redirect URL\n\t\tconst redirectUrl = new URL(params.redirect_uri);\n\t\tredirectUrl.searchParams.set(\"code\", code);\n\t\tif (params.state) {\n\t\t\tredirectUrl.searchParams.set(\"state\", params.state);\n\t\t}\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: { redirect_url: redirectUrl.toString() },\n\t\t};\n\t} catch (error) {\n\t\tconsole.error(\"Authorization error:\", error);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"AUTHORIZATION_ERROR\",\n\t\t\t\tmessage: \"Failed to process authorization\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n/**\n * Exchange an authorization code for access + refresh tokens.\n *\n * Validates the code, verifies PKCE, and issues tokens using the same\n * infrastructure as the device flow (ec_oat_*, ec_ort_*).\n */\nexport async function handleAuthorizationCodeExchange(\n\tdb: Kysely<Database>,\n\tparams: TokenExchangeParams,\n): Promise<ApiResult<TokenResponse>> {\n\ttry {\n\t\t// Validate grant_type\n\t\tif (params.grant_type !== \"authorization_code\") {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"unsupported_grant_type\", message: \"Invalid grant_type\" },\n\t\t\t};\n\t\t}\n\n\t\t// SEC-39: Atomically consume the authorization code using DELETE...RETURNING.\n\t\t// This prevents TOCTOU double-exchange: two concurrent requests with the\n\t\t// same code will race on the DELETE, and only one will get a row back.\n\t\tconst codeHash = hashApiToken(params.code);\n\n\t\tconst row = await db\n\t\t\t.deleteFrom(\"_emdash_authorization_codes\")\n\t\t\t.where(\"code_hash\", \"=\", codeHash)\n\t\t\t.returningAll()\n\t\t\t.executeTakeFirst();\n\n\t\tif (!row) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"invalid_grant\", message: \"Invalid authorization code\" },\n\t\t\t};\n\t\t}\n\n\t\t// Check expiry\n\t\tif (new Date(row.expires_at) < new Date()) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"invalid_grant\", message: \"Authorization code expired\" },\n\t\t\t};\n\t\t}\n\n\t\t// Verify redirect_uri matches exactly\n\t\tif (row.redirect_uri !== params.redirect_uri) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"invalid_grant\", message: \"redirect_uri mismatch\" },\n\t\t\t};\n\t\t}\n\n\t\t// Verify client_id matches\n\t\tif (row.client_id !== params.client_id) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"invalid_grant\", message: \"client_id mismatch\" },\n\t\t\t};\n\t\t}\n\n\t\t// PKCE verification: SHA256(code_verifier) must match stored code_challenge\n\t\t// Use constant-time comparison to prevent timing side-channels\n\t\tconst derivedChallenge = computeS256Challenge(params.code_verifier);\n\t\tif (!secureCompare(derivedChallenge, row.code_challenge)) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"invalid_grant\", message: \"PKCE verification failed\" },\n\t\t\t};\n\t\t}\n\n\t\t// Verify resource matches (if stored)\n\t\tif (row.resource && params.resource && row.resource !== params.resource) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"invalid_grant\", message: \"resource mismatch\" },\n\t\t\t};\n\t\t}\n\n\t\t// Revalidate user role before issuing tokens (same pattern as handleTokenRefresh).\n\t\t// The user's role may have changed since the authorization code was issued.\n\t\tconst userInfo = await lookupUserRoleAndStatus(db, row.user_id);\n\t\tif (!userInfo) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"invalid_grant\", message: \"User not found\" },\n\t\t\t};\n\t\t}\n\n\t\tif (userInfo.disabled) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"invalid_grant\", message: \"User account is disabled\" },\n\t\t\t};\n\t\t}\n\n\t\t// Re-clamp scopes against the user's current role\n\t\tconst storedScopes = JSON.parse(row.scopes) as string[];\n\t\tlet scopes = clampScopes(storedScopes, userInfo.role);\n\n\t\t// Intersect with client's registered scopes (if restricted)\n\t\tconst client = await lookupOAuthClient(db, row.client_id);\n\t\tif (client?.scopes?.length) {\n\t\t\tscopes = scopes.filter((s: string) => client.scopes!.includes(s));\n\t\t}\n\n\t\tif (scopes.length === 0) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tcode: \"invalid_grant\",\n\t\t\t\t\tmessage: \"User role no longer supports any of the requested scopes\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\t// Issue tokens (same as device flow)\n\t\tconst accessToken = generatePrefixedToken(TOKEN_PREFIXES.OAUTH_ACCESS);\n\t\tconst accessExpires = expiresAt(ACCESS_TOKEN_TTL_SECONDS);\n\n\t\tconst refreshToken = generatePrefixedToken(TOKEN_PREFIXES.OAUTH_REFRESH);\n\t\tconst refreshExpires = expiresAt(REFRESH_TOKEN_TTL_SECONDS);\n\n\t\t// Atomically store both tokens in a transaction\n\t\tawait withTransaction(db, async (trx) => {\n\t\t\tawait trx\n\t\t\t\t.insertInto(\"_emdash_oauth_tokens\")\n\t\t\t\t.values({\n\t\t\t\t\ttoken_hash: accessToken.hash,\n\t\t\t\t\ttoken_type: \"access\",\n\t\t\t\t\tuser_id: row.user_id,\n\t\t\t\t\tscopes: JSON.stringify(scopes),\n\t\t\t\t\tclient_type: \"mcp\",\n\t\t\t\t\texpires_at: accessExpires,\n\t\t\t\t\trefresh_token_hash: refreshToken.hash,\n\t\t\t\t\tclient_id: row.client_id,\n\t\t\t\t})\n\t\t\t\t.execute();\n\n\t\t\tawait trx\n\t\t\t\t.insertInto(\"_emdash_oauth_tokens\")\n\t\t\t\t.values({\n\t\t\t\t\ttoken_hash: refreshToken.hash,\n\t\t\t\t\ttoken_type: \"refresh\",\n\t\t\t\t\tuser_id: row.user_id,\n\t\t\t\t\tscopes: JSON.stringify(scopes),\n\t\t\t\t\tclient_type: \"mcp\",\n\t\t\t\t\texpires_at: refreshExpires,\n\t\t\t\t\trefresh_token_hash: null,\n\t\t\t\t\tclient_id: row.client_id,\n\t\t\t\t})\n\t\t\t\t.execute();\n\t\t});\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: {\n\t\t\t\taccess_token: accessToken.raw,\n\t\t\t\trefresh_token: refreshToken.raw,\n\t\t\t\ttoken_type: \"Bearer\",\n\t\t\t\texpires_in: ACCESS_TOKEN_TTL_SECONDS,\n\t\t\t\tscope: scopes.join(\" \"),\n\t\t\t},\n\t\t};\n\t} catch (error) {\n\t\tconsole.error(\"Token exchange error:\", error);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"TOKEN_EXCHANGE_ERROR\",\n\t\t\t\tmessage: \"Failed to exchange authorization code\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n/**\n * Build the authorization denied redirect URL.\n */\nexport function buildDeniedRedirect(redirectUri: string, state?: string): string {\n\tconst url = new URL(redirectUri);\n\turl.searchParams.set(\"error\", \"access_denied\");\n\turl.searchParams.set(\"error_description\", \"The user denied the authorization request\");\n\tif (state) {\n\t\turl.searchParams.set(\"state\", state);\n\t}\n\treturn url.toString();\n}\n\n/**\n * Clean up expired authorization codes.\n */\nexport async function cleanupExpiredAuthorizationCodes(db: Kysely<Database>): Promise<number> {\n\tconst result = await db\n\t\t.deleteFrom(\"_emdash_authorization_codes\")\n\t\t.where(\"expires_at\", \"<\", new Date().toISOString())\n\t\t.executeTakeFirst();\n\n\treturn Number(result.numDeletedRows);\n}\n"],"mappings":"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"}
@@ -1,266 +0,0 @@
1
- //#region src/api/oauth/redirect-uri.ts
2
- /**
3
- * Validate a redirect URI per OAuth 2.1 security requirements.
4
- *
5
- * Allows localhost / loopback redirect URIs over HTTP for native clients,
6
- * and any HTTPS URL for web-based flows.
7
- */
8
- function validateRedirectUri(uri) {
9
- try {
10
- const url = new URL(uri);
11
- if (uri.startsWith("//")) return "Protocol-relative redirect URIs are not allowed";
12
- if (url.protocol === "http:") {
13
- const host = url.hostname;
14
- if (host === "127.0.0.1" || host === "localhost" || host === "[::1]") return null;
15
- return "HTTP redirect URIs are only allowed for localhost";
16
- }
17
- if (url.protocol === "https:") return null;
18
- return `Unsupported redirect URI scheme: ${url.protocol}`;
19
- } catch {
20
- return "Invalid redirect URI";
21
- }
22
- }
23
-
24
- //#endregion
25
- //#region src/api/handlers/oauth-clients.ts
26
- /** Parse a JSON string column into a typed value. */
27
- function parseJsonColumn(value) {
28
- return JSON.parse(value);
29
- }
30
- function validateRegisteredRedirectUris(redirectUris) {
31
- for (const redirectUri of redirectUris) {
32
- const error = validateRedirectUri(redirectUri);
33
- if (error) return `Invalid redirect URI: ${error}`;
34
- }
35
- return null;
36
- }
37
- /**
38
- * Create a new OAuth client.
39
- */
40
- async function handleOAuthClientCreate(db, input) {
41
- try {
42
- if (input.redirectUris.length === 0) return {
43
- success: false,
44
- error: {
45
- code: "VALIDATION_ERROR",
46
- message: "At least one redirect URI is required"
47
- }
48
- };
49
- const redirectUriError = validateRegisteredRedirectUris(input.redirectUris);
50
- if (redirectUriError) return {
51
- success: false,
52
- error: {
53
- code: "VALIDATION_ERROR",
54
- message: redirectUriError
55
- }
56
- };
57
- if (await db.selectFrom("_emdash_oauth_clients").select("id").where("id", "=", input.id).executeTakeFirst()) return {
58
- success: false,
59
- error: {
60
- code: "CONFLICT",
61
- message: "OAuth client with this ID already exists"
62
- }
63
- };
64
- const now = (/* @__PURE__ */ new Date()).toISOString();
65
- await db.insertInto("_emdash_oauth_clients").values({
66
- id: input.id,
67
- name: input.name,
68
- redirect_uris: JSON.stringify(input.redirectUris),
69
- scopes: input.scopes && input.scopes.length > 0 ? JSON.stringify(input.scopes) : null
70
- }).execute();
71
- return {
72
- success: true,
73
- data: {
74
- id: input.id,
75
- name: input.name,
76
- redirectUris: input.redirectUris,
77
- scopes: input.scopes && input.scopes.length > 0 ? input.scopes : null,
78
- createdAt: now,
79
- updatedAt: now
80
- }
81
- };
82
- } catch {
83
- return {
84
- success: false,
85
- error: {
86
- code: "CLIENT_CREATE_ERROR",
87
- message: "Failed to create OAuth client"
88
- }
89
- };
90
- }
91
- }
92
- /**
93
- * List all registered OAuth clients.
94
- */
95
- async function handleOAuthClientList(db) {
96
- try {
97
- return {
98
- success: true,
99
- data: { items: (await db.selectFrom("_emdash_oauth_clients").selectAll().orderBy("created_at", "desc").execute()).map((row) => ({
100
- id: row.id,
101
- name: row.name,
102
- redirectUris: parseJsonColumn(row.redirect_uris),
103
- scopes: row.scopes ? parseJsonColumn(row.scopes) : null,
104
- createdAt: row.created_at,
105
- updatedAt: row.updated_at
106
- })) }
107
- };
108
- } catch {
109
- return {
110
- success: false,
111
- error: {
112
- code: "CLIENT_LIST_ERROR",
113
- message: "Failed to list OAuth clients"
114
- }
115
- };
116
- }
117
- }
118
- /**
119
- * Get a single OAuth client by ID.
120
- */
121
- async function handleOAuthClientGet(db, clientId) {
122
- try {
123
- const row = await db.selectFrom("_emdash_oauth_clients").selectAll().where("id", "=", clientId).executeTakeFirst();
124
- if (!row) return {
125
- success: false,
126
- error: {
127
- code: "NOT_FOUND",
128
- message: "OAuth client not found"
129
- }
130
- };
131
- return {
132
- success: true,
133
- data: {
134
- id: row.id,
135
- name: row.name,
136
- redirectUris: parseJsonColumn(row.redirect_uris),
137
- scopes: row.scopes ? parseJsonColumn(row.scopes) : null,
138
- createdAt: row.created_at,
139
- updatedAt: row.updated_at
140
- }
141
- };
142
- } catch {
143
- return {
144
- success: false,
145
- error: {
146
- code: "CLIENT_GET_ERROR",
147
- message: "Failed to get OAuth client"
148
- }
149
- };
150
- }
151
- }
152
- /**
153
- * Update an OAuth client.
154
- */
155
- async function handleOAuthClientUpdate(db, clientId, input) {
156
- try {
157
- if (!await db.selectFrom("_emdash_oauth_clients").selectAll().where("id", "=", clientId).executeTakeFirst()) return {
158
- success: false,
159
- error: {
160
- code: "NOT_FOUND",
161
- message: "OAuth client not found"
162
- }
163
- };
164
- if (input.redirectUris !== void 0 && input.redirectUris.length === 0) return {
165
- success: false,
166
- error: {
167
- code: "VALIDATION_ERROR",
168
- message: "At least one redirect URI is required"
169
- }
170
- };
171
- if (input.redirectUris !== void 0) {
172
- const redirectUriError = validateRegisteredRedirectUris(input.redirectUris);
173
- if (redirectUriError) return {
174
- success: false,
175
- error: {
176
- code: "VALIDATION_ERROR",
177
- message: redirectUriError
178
- }
179
- };
180
- }
181
- const updates = { updated_at: (/* @__PURE__ */ new Date()).toISOString() };
182
- if (input.name !== void 0) updates.name = input.name;
183
- if (input.redirectUris !== void 0) updates.redirect_uris = JSON.stringify(input.redirectUris);
184
- if (input.scopes !== void 0) updates.scopes = input.scopes && input.scopes.length > 0 ? JSON.stringify(input.scopes) : null;
185
- await db.updateTable("_emdash_oauth_clients").set(updates).where("id", "=", clientId).execute();
186
- const updated = await db.selectFrom("_emdash_oauth_clients").selectAll().where("id", "=", clientId).executeTakeFirst();
187
- if (!updated) return {
188
- success: false,
189
- error: {
190
- code: "NOT_FOUND",
191
- message: "OAuth client not found after update"
192
- }
193
- };
194
- return {
195
- success: true,
196
- data: {
197
- id: updated.id,
198
- name: updated.name,
199
- redirectUris: parseJsonColumn(updated.redirect_uris),
200
- scopes: updated.scopes ? parseJsonColumn(updated.scopes) : null,
201
- createdAt: updated.created_at,
202
- updatedAt: updated.updated_at
203
- }
204
- };
205
- } catch {
206
- return {
207
- success: false,
208
- error: {
209
- code: "CLIENT_UPDATE_ERROR",
210
- message: "Failed to update OAuth client"
211
- }
212
- };
213
- }
214
- }
215
- /**
216
- * Delete an OAuth client.
217
- */
218
- async function handleOAuthClientDelete(db, clientId) {
219
- try {
220
- if ((await db.deleteFrom("_emdash_oauth_clients").where("id", "=", clientId).executeTakeFirst()).numDeletedRows === 0n) return {
221
- success: false,
222
- error: {
223
- code: "NOT_FOUND",
224
- message: "OAuth client not found"
225
- }
226
- };
227
- return {
228
- success: true,
229
- data: { deleted: true }
230
- };
231
- } catch {
232
- return {
233
- success: false,
234
- error: {
235
- code: "CLIENT_DELETE_ERROR",
236
- message: "Failed to delete OAuth client"
237
- }
238
- };
239
- }
240
- }
241
- /**
242
- * Look up a registered OAuth client by ID.
243
- * Returns the client's redirect URIs or null if the client is not registered.
244
- */
245
- async function lookupOAuthClient(db, clientId) {
246
- const row = await db.selectFrom("_emdash_oauth_clients").select(["redirect_uris", "scopes"]).where("id", "=", clientId).executeTakeFirst();
247
- if (!row) return null;
248
- return {
249
- redirectUris: parseJsonColumn(row.redirect_uris),
250
- scopes: row.scopes ? parseJsonColumn(row.scopes) : null
251
- };
252
- }
253
- /**
254
- * Validate that a redirect URI is in the client's registered set.
255
- *
256
- * Comparison is exact string match (per RFC 6749 §3.1.2.3).
257
- * Returns null if valid, or an error message if not.
258
- */
259
- function validateClientRedirectUri(redirectUri, allowedUris) {
260
- if (allowedUris.includes(redirectUri)) return null;
261
- return "redirect_uri is not registered for this client";
262
- }
263
-
264
- //#endregion
265
- export { handleOAuthClientUpdate as a, validateRedirectUri as c, handleOAuthClientList as i, handleOAuthClientDelete as n, lookupOAuthClient as o, handleOAuthClientGet as r, validateClientRedirectUri as s, handleOAuthClientCreate as t };
266
- //# sourceMappingURL=oauth-clients-Djq9r_KP.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-clients-Djq9r_KP.mjs","names":[],"sources":["../src/api/oauth/redirect-uri.ts","../src/api/handlers/oauth-clients.ts"],"sourcesContent":["/**\n * Validate a redirect URI per OAuth 2.1 security requirements.\n *\n * Allows localhost / loopback redirect URIs over HTTP for native clients,\n * and any HTTPS URL for web-based flows.\n */\nexport function validateRedirectUri(uri: string): string | null {\n\ttry {\n\t\tconst url = new URL(uri);\n\n\t\t// Reject protocol-relative URLs\n\t\tif (uri.startsWith(\"//\")) {\n\t\t\treturn \"Protocol-relative redirect URIs are not allowed\";\n\t\t}\n\n\t\t// Allow localhost/loopback over HTTP (for desktop MCP clients)\n\t\tif (url.protocol === \"http:\") {\n\t\t\tconst host = url.hostname;\n\t\t\tif (host === \"127.0.0.1\" || host === \"localhost\" || host === \"[::1]\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn \"HTTP redirect URIs are only allowed for localhost\";\n\t\t}\n\n\t\t// Allow HTTPS\n\t\tif (url.protocol === \"https:\") {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn `Unsupported redirect URI scheme: ${url.protocol}`;\n\t} catch {\n\t\treturn \"Invalid redirect URI\";\n\t}\n}\n","/**\n * OAuth client management handlers.\n *\n * CRUD operations for registered OAuth clients. Each client has a set\n * of pre-registered redirect URIs. The authorization endpoint rejects\n * any redirect_uri not in the client's registered set.\n */\n\nimport type { Kysely } from \"kysely\";\n\nimport type { Database } from \"../../database/types.js\";\nimport { validateRedirectUri } from \"../oauth/redirect-uri.js\";\nimport type { ApiResult } from \"../types.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Parse a JSON string column into a typed value. */\nfunction parseJsonColumn<T>(value: string): T {\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- JSON.parse returns unknown, callers provide the expected shape\n\treturn JSON.parse(value) as T;\n}\n\nfunction validateRegisteredRedirectUris(redirectUris: string[]): string | null {\n\tfor (const redirectUri of redirectUris) {\n\t\tconst error = validateRedirectUri(redirectUri);\n\t\tif (error) {\n\t\t\treturn `Invalid redirect URI: ${error}`;\n\t\t}\n\t}\n\treturn null;\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface OAuthClientInfo {\n\tid: string;\n\tname: string;\n\tredirectUris: string[];\n\tscopes: string[] | null;\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\n// ---------------------------------------------------------------------------\n// Handlers\n// ---------------------------------------------------------------------------\n\n/**\n * Create a new OAuth client.\n */\nexport async function handleOAuthClientCreate(\n\tdb: Kysely<Database>,\n\tinput: {\n\t\tid: string;\n\t\tname: string;\n\t\tredirectUris: string[];\n\t\tscopes?: string[] | null;\n\t},\n): Promise<ApiResult<OAuthClientInfo>> {\n\ttry {\n\t\tif (input.redirectUris.length === 0) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tcode: \"VALIDATION_ERROR\",\n\t\t\t\t\tmessage: \"At least one redirect URI is required\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst redirectUriError = validateRegisteredRedirectUris(input.redirectUris);\n\t\tif (redirectUriError) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tcode: \"VALIDATION_ERROR\",\n\t\t\t\t\tmessage: redirectUriError,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\t// Check for duplicate client ID\n\t\tconst existing = await db\n\t\t\t.selectFrom(\"_emdash_oauth_clients\")\n\t\t\t.select(\"id\")\n\t\t\t.where(\"id\", \"=\", input.id)\n\t\t\t.executeTakeFirst();\n\n\t\tif (existing) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"CONFLICT\", message: \"OAuth client with this ID already exists\" },\n\t\t\t};\n\t\t}\n\n\t\tconst now = new Date().toISOString();\n\n\t\tawait db\n\t\t\t.insertInto(\"_emdash_oauth_clients\")\n\t\t\t.values({\n\t\t\t\tid: input.id,\n\t\t\t\tname: input.name,\n\t\t\t\tredirect_uris: JSON.stringify(input.redirectUris),\n\t\t\t\tscopes: input.scopes && input.scopes.length > 0 ? JSON.stringify(input.scopes) : null,\n\t\t\t})\n\t\t\t.execute();\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: {\n\t\t\t\tid: input.id,\n\t\t\t\tname: input.name,\n\t\t\t\tredirectUris: input.redirectUris,\n\t\t\t\tscopes: input.scopes && input.scopes.length > 0 ? input.scopes : null,\n\t\t\t\tcreatedAt: now,\n\t\t\t\tupdatedAt: now,\n\t\t\t},\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"CLIENT_CREATE_ERROR\",\n\t\t\t\tmessage: \"Failed to create OAuth client\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n/**\n * List all registered OAuth clients.\n */\nexport async function handleOAuthClientList(\n\tdb: Kysely<Database>,\n): Promise<ApiResult<{ items: OAuthClientInfo[] }>> {\n\ttry {\n\t\tconst rows = await db\n\t\t\t.selectFrom(\"_emdash_oauth_clients\")\n\t\t\t.selectAll()\n\t\t\t.orderBy(\"created_at\", \"desc\")\n\t\t\t.execute();\n\n\t\tconst items: OAuthClientInfo[] = rows.map((row) => ({\n\t\t\tid: row.id,\n\t\t\tname: row.name,\n\t\t\tredirectUris: parseJsonColumn<string[]>(row.redirect_uris),\n\t\t\tscopes: row.scopes ? parseJsonColumn<string[]>(row.scopes) : null,\n\t\t\tcreatedAt: row.created_at,\n\t\t\tupdatedAt: row.updated_at,\n\t\t}));\n\n\t\treturn { success: true, data: { items } };\n\t} catch {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"CLIENT_LIST_ERROR\",\n\t\t\t\tmessage: \"Failed to list OAuth clients\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n/**\n * Get a single OAuth client by ID.\n */\nexport async function handleOAuthClientGet(\n\tdb: Kysely<Database>,\n\tclientId: string,\n): Promise<ApiResult<OAuthClientInfo>> {\n\ttry {\n\t\tconst row = await db\n\t\t\t.selectFrom(\"_emdash_oauth_clients\")\n\t\t\t.selectAll()\n\t\t\t.where(\"id\", \"=\", clientId)\n\t\t\t.executeTakeFirst();\n\n\t\tif (!row) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"NOT_FOUND\", message: \"OAuth client not found\" },\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: {\n\t\t\t\tid: row.id,\n\t\t\t\tname: row.name,\n\t\t\t\tredirectUris: parseJsonColumn<string[]>(row.redirect_uris),\n\t\t\t\tscopes: row.scopes ? parseJsonColumn<string[]>(row.scopes) : null,\n\t\t\t\tcreatedAt: row.created_at,\n\t\t\t\tupdatedAt: row.updated_at,\n\t\t\t},\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"CLIENT_GET_ERROR\",\n\t\t\t\tmessage: \"Failed to get OAuth client\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n/**\n * Update an OAuth client.\n */\nexport async function handleOAuthClientUpdate(\n\tdb: Kysely<Database>,\n\tclientId: string,\n\tinput: {\n\t\tname?: string;\n\t\tredirectUris?: string[];\n\t\tscopes?: string[] | null;\n\t},\n): Promise<ApiResult<OAuthClientInfo>> {\n\ttry {\n\t\tconst existing = await db\n\t\t\t.selectFrom(\"_emdash_oauth_clients\")\n\t\t\t.selectAll()\n\t\t\t.where(\"id\", \"=\", clientId)\n\t\t\t.executeTakeFirst();\n\n\t\tif (!existing) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"NOT_FOUND\", message: \"OAuth client not found\" },\n\t\t\t};\n\t\t}\n\n\t\tif (input.redirectUris !== undefined && input.redirectUris.length === 0) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tcode: \"VALIDATION_ERROR\",\n\t\t\t\t\tmessage: \"At least one redirect URI is required\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tif (input.redirectUris !== undefined) {\n\t\t\tconst redirectUriError = validateRegisteredRedirectUris(input.redirectUris);\n\t\t\tif (redirectUriError) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: \"VALIDATION_ERROR\",\n\t\t\t\t\t\tmessage: redirectUriError,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst updates: Record<string, string | null> = {\n\t\t\tupdated_at: new Date().toISOString(),\n\t\t};\n\n\t\tif (input.name !== undefined) {\n\t\t\tupdates.name = input.name;\n\t\t}\n\t\tif (input.redirectUris !== undefined) {\n\t\t\tupdates.redirect_uris = JSON.stringify(input.redirectUris);\n\t\t}\n\t\tif (input.scopes !== undefined) {\n\t\t\tupdates.scopes =\n\t\t\t\tinput.scopes && input.scopes.length > 0 ? JSON.stringify(input.scopes) : null;\n\t\t}\n\n\t\tawait db.updateTable(\"_emdash_oauth_clients\").set(updates).where(\"id\", \"=\", clientId).execute();\n\n\t\t// Fetch the updated row\n\t\tconst updated = await db\n\t\t\t.selectFrom(\"_emdash_oauth_clients\")\n\t\t\t.selectAll()\n\t\t\t.where(\"id\", \"=\", clientId)\n\t\t\t.executeTakeFirst();\n\n\t\tif (!updated) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"NOT_FOUND\", message: \"OAuth client not found after update\" },\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: {\n\t\t\t\tid: updated.id,\n\t\t\t\tname: updated.name,\n\t\t\t\tredirectUris: parseJsonColumn<string[]>(updated.redirect_uris),\n\t\t\t\tscopes: updated.scopes ? parseJsonColumn<string[]>(updated.scopes) : null,\n\t\t\t\tcreatedAt: updated.created_at,\n\t\t\t\tupdatedAt: updated.updated_at,\n\t\t\t},\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"CLIENT_UPDATE_ERROR\",\n\t\t\t\tmessage: \"Failed to update OAuth client\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n/**\n * Delete an OAuth client.\n */\nexport async function handleOAuthClientDelete(\n\tdb: Kysely<Database>,\n\tclientId: string,\n): Promise<ApiResult<{ deleted: true }>> {\n\ttry {\n\t\tconst result = await db\n\t\t\t.deleteFrom(\"_emdash_oauth_clients\")\n\t\t\t.where(\"id\", \"=\", clientId)\n\t\t\t.executeTakeFirst();\n\n\t\tif (result.numDeletedRows === 0n) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"NOT_FOUND\", message: \"OAuth client not found\" },\n\t\t\t};\n\t\t}\n\n\t\treturn { success: true, data: { deleted: true } };\n\t} catch {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"CLIENT_DELETE_ERROR\",\n\t\t\t\tmessage: \"Failed to delete OAuth client\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Lookup helpers (used by authorization handler)\n// ---------------------------------------------------------------------------\n\n/**\n * Look up a registered OAuth client by ID.\n * Returns the client's redirect URIs or null if the client is not registered.\n */\nexport async function lookupOAuthClient(\n\tdb: Kysely<Database>,\n\tclientId: string,\n): Promise<{ redirectUris: string[]; scopes: string[] | null } | null> {\n\tconst row = await db\n\t\t.selectFrom(\"_emdash_oauth_clients\")\n\t\t.select([\"redirect_uris\", \"scopes\"])\n\t\t.where(\"id\", \"=\", clientId)\n\t\t.executeTakeFirst();\n\n\tif (!row) return null;\n\n\treturn {\n\t\tredirectUris: parseJsonColumn<string[]>(row.redirect_uris),\n\t\tscopes: row.scopes ? parseJsonColumn<string[]>(row.scopes) : null,\n\t};\n}\n\n/**\n * Validate that a redirect URI is in the client's registered set.\n *\n * Comparison is exact string match (per RFC 6749 §3.1.2.3).\n * Returns null if valid, or an error message if not.\n */\nexport function validateClientRedirectUri(\n\tredirectUri: string,\n\tallowedUris: string[],\n): string | null {\n\tif (allowedUris.includes(redirectUri)) {\n\t\treturn null; // OK\n\t}\n\treturn \"redirect_uri is not registered for this client\";\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,oBAAoB,KAA4B;AAC/D,KAAI;EACH,MAAM,MAAM,IAAI,IAAI,IAAI;AAGxB,MAAI,IAAI,WAAW,KAAK,CACvB,QAAO;AAIR,MAAI,IAAI,aAAa,SAAS;GAC7B,MAAM,OAAO,IAAI;AACjB,OAAI,SAAS,eAAe,SAAS,eAAe,SAAS,QAC5D,QAAO;AAER,UAAO;;AAIR,MAAI,IAAI,aAAa,SACpB,QAAO;AAGR,SAAO,oCAAoC,IAAI;SACxC;AACP,SAAO;;;;;;;ACZT,SAAS,gBAAmB,OAAkB;AAE7C,QAAO,KAAK,MAAM,MAAM;;AAGzB,SAAS,+BAA+B,cAAuC;AAC9E,MAAK,MAAM,eAAe,cAAc;EACvC,MAAM,QAAQ,oBAAoB,YAAY;AAC9C,MAAI,MACH,QAAO,yBAAyB;;AAGlC,QAAO;;;;;AAuBR,eAAsB,wBACrB,IACA,OAMsC;AACtC,KAAI;AACH,MAAI,MAAM,aAAa,WAAW,EACjC,QAAO;GACN,SAAS;GACT,OAAO;IACN,MAAM;IACN,SAAS;IACT;GACD;EAGF,MAAM,mBAAmB,+BAA+B,MAAM,aAAa;AAC3E,MAAI,iBACH,QAAO;GACN,SAAS;GACT,OAAO;IACN,MAAM;IACN,SAAS;IACT;GACD;AAUF,MANiB,MAAM,GACrB,WAAW,wBAAwB,CACnC,OAAO,KAAK,CACZ,MAAM,MAAM,KAAK,MAAM,GAAG,CAC1B,kBAAkB,CAGnB,QAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAY,SAAS;IAA4C;GAChF;EAGF,MAAM,uBAAM,IAAI,MAAM,EAAC,aAAa;AAEpC,QAAM,GACJ,WAAW,wBAAwB,CACnC,OAAO;GACP,IAAI,MAAM;GACV,MAAM,MAAM;GACZ,eAAe,KAAK,UAAU,MAAM,aAAa;GACjD,QAAQ,MAAM,UAAU,MAAM,OAAO,SAAS,IAAI,KAAK,UAAU,MAAM,OAAO,GAAG;GACjF,CAAC,CACD,SAAS;AAEX,SAAO;GACN,SAAS;GACT,MAAM;IACL,IAAI,MAAM;IACV,MAAM,MAAM;IACZ,cAAc,MAAM;IACpB,QAAQ,MAAM,UAAU,MAAM,OAAO,SAAS,IAAI,MAAM,SAAS;IACjE,WAAW;IACX,WAAW;IACX;GACD;SACM;AACP,SAAO;GACN,SAAS;GACT,OAAO;IACN,MAAM;IACN,SAAS;IACT;GACD;;;;;;AAOH,eAAsB,sBACrB,IACmD;AACnD,KAAI;AAgBH,SAAO;GAAE,SAAS;GAAM,MAAM,EAAE,QAfnB,MAAM,GACjB,WAAW,wBAAwB,CACnC,WAAW,CACX,QAAQ,cAAc,OAAO,CAC7B,SAAS,EAE2B,KAAK,SAAS;IACnD,IAAI,IAAI;IACR,MAAM,IAAI;IACV,cAAc,gBAA0B,IAAI,cAAc;IAC1D,QAAQ,IAAI,SAAS,gBAA0B,IAAI,OAAO,GAAG;IAC7D,WAAW,IAAI;IACf,WAAW,IAAI;IACf,EAAE,EAEoC;GAAE;SAClC;AACP,SAAO;GACN,SAAS;GACT,OAAO;IACN,MAAM;IACN,SAAS;IACT;GACD;;;;;;AAOH,eAAsB,qBACrB,IACA,UACsC;AACtC,KAAI;EACH,MAAM,MAAM,MAAM,GAChB,WAAW,wBAAwB,CACnC,WAAW,CACX,MAAM,MAAM,KAAK,SAAS,CAC1B,kBAAkB;AAEpB,MAAI,CAAC,IACJ,QAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAa,SAAS;IAA0B;GAC/D;AAGF,SAAO;GACN,SAAS;GACT,MAAM;IACL,IAAI,IAAI;IACR,MAAM,IAAI;IACV,cAAc,gBAA0B,IAAI,cAAc;IAC1D,QAAQ,IAAI,SAAS,gBAA0B,IAAI,OAAO,GAAG;IAC7D,WAAW,IAAI;IACf,WAAW,IAAI;IACf;GACD;SACM;AACP,SAAO;GACN,SAAS;GACT,OAAO;IACN,MAAM;IACN,SAAS;IACT;GACD;;;;;;AAOH,eAAsB,wBACrB,IACA,UACA,OAKsC;AACtC,KAAI;AAOH,MAAI,CANa,MAAM,GACrB,WAAW,wBAAwB,CACnC,WAAW,CACX,MAAM,MAAM,KAAK,SAAS,CAC1B,kBAAkB,CAGnB,QAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAa,SAAS;IAA0B;GAC/D;AAGF,MAAI,MAAM,iBAAiB,UAAa,MAAM,aAAa,WAAW,EACrE,QAAO;GACN,SAAS;GACT,OAAO;IACN,MAAM;IACN,SAAS;IACT;GACD;AAGF,MAAI,MAAM,iBAAiB,QAAW;GACrC,MAAM,mBAAmB,+BAA+B,MAAM,aAAa;AAC3E,OAAI,iBACH,QAAO;IACN,SAAS;IACT,OAAO;KACN,MAAM;KACN,SAAS;KACT;IACD;;EAIH,MAAM,UAAyC,EAC9C,6BAAY,IAAI,MAAM,EAAC,aAAa,EACpC;AAED,MAAI,MAAM,SAAS,OAClB,SAAQ,OAAO,MAAM;AAEtB,MAAI,MAAM,iBAAiB,OAC1B,SAAQ,gBAAgB,KAAK,UAAU,MAAM,aAAa;AAE3D,MAAI,MAAM,WAAW,OACpB,SAAQ,SACP,MAAM,UAAU,MAAM,OAAO,SAAS,IAAI,KAAK,UAAU,MAAM,OAAO,GAAG;AAG3E,QAAM,GAAG,YAAY,wBAAwB,CAAC,IAAI,QAAQ,CAAC,MAAM,MAAM,KAAK,SAAS,CAAC,SAAS;EAG/F,MAAM,UAAU,MAAM,GACpB,WAAW,wBAAwB,CACnC,WAAW,CACX,MAAM,MAAM,KAAK,SAAS,CAC1B,kBAAkB;AAEpB,MAAI,CAAC,QACJ,QAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAa,SAAS;IAAuC;GAC5E;AAGF,SAAO;GACN,SAAS;GACT,MAAM;IACL,IAAI,QAAQ;IACZ,MAAM,QAAQ;IACd,cAAc,gBAA0B,QAAQ,cAAc;IAC9D,QAAQ,QAAQ,SAAS,gBAA0B,QAAQ,OAAO,GAAG;IACrE,WAAW,QAAQ;IACnB,WAAW,QAAQ;IACnB;GACD;SACM;AACP,SAAO;GACN,SAAS;GACT,OAAO;IACN,MAAM;IACN,SAAS;IACT;GACD;;;;;;AAOH,eAAsB,wBACrB,IACA,UACwC;AACxC,KAAI;AAMH,OALe,MAAM,GACnB,WAAW,wBAAwB,CACnC,MAAM,MAAM,KAAK,SAAS,CAC1B,kBAAkB,EAET,mBAAmB,GAC7B,QAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAa,SAAS;IAA0B;GAC/D;AAGF,SAAO;GAAE,SAAS;GAAM,MAAM,EAAE,SAAS,MAAM;GAAE;SAC1C;AACP,SAAO;GACN,SAAS;GACT,OAAO;IACN,MAAM;IACN,SAAS;IACT;GACD;;;;;;;AAYH,eAAsB,kBACrB,IACA,UACsE;CACtE,MAAM,MAAM,MAAM,GAChB,WAAW,wBAAwB,CACnC,OAAO,CAAC,iBAAiB,SAAS,CAAC,CACnC,MAAM,MAAM,KAAK,SAAS,CAC1B,kBAAkB;AAEpB,KAAI,CAAC,IAAK,QAAO;AAEjB,QAAO;EACN,cAAc,gBAA0B,IAAI,cAAc;EAC1D,QAAQ,IAAI,SAAS,gBAA0B,IAAI,OAAO,GAAG;EAC7D;;;;;;;;AASF,SAAgB,0BACf,aACA,aACgB;AAChB,KAAI,YAAY,SAAS,YAAY,CACpC,QAAO;AAER,QAAO"}
@@ -1,50 +0,0 @@
1
- //#region src/auth/oauth-state-store.ts
2
- const OAUTH_STATE_TTL_MS = 600 * 1e3;
3
- function createOAuthStateStore(db) {
4
- return {
5
- async set(state, data) {
6
- const expiresAt = new Date(Date.now() + OAUTH_STATE_TTL_MS).toISOString();
7
- await db.insertInto("auth_challenges").values({
8
- challenge: state,
9
- type: "oauth",
10
- user_id: null,
11
- data: JSON.stringify(data),
12
- expires_at: expiresAt
13
- }).onConflict((oc) => oc.column("challenge").doUpdateSet({
14
- type: "oauth",
15
- data: JSON.stringify(data),
16
- expires_at: expiresAt
17
- })).execute();
18
- },
19
- async get(state) {
20
- const row = await db.selectFrom("auth_challenges").selectAll().where("challenge", "=", state).where("type", "=", "oauth").executeTakeFirst();
21
- if (!row) return null;
22
- if (new Date(row.expires_at).getTime() < Date.now()) {
23
- await this.delete(state);
24
- return null;
25
- }
26
- if (!row.data) return null;
27
- try {
28
- const parsed = JSON.parse(row.data);
29
- if (typeof parsed !== "object" || parsed === null || !("provider" in parsed) || typeof parsed.provider !== "string" || !("redirectUri" in parsed) || typeof parsed.redirectUri !== "string") return null;
30
- const oauthState = {
31
- provider: parsed.provider,
32
- redirectUri: parsed.redirectUri
33
- };
34
- if ("codeVerifier" in parsed && typeof parsed.codeVerifier === "string") oauthState.codeVerifier = parsed.codeVerifier;
35
- if ("nonce" in parsed && typeof parsed.nonce === "string") oauthState.nonce = parsed.nonce;
36
- if ("inviteToken" in parsed && typeof parsed.inviteToken === "string") oauthState.inviteToken = parsed.inviteToken;
37
- return oauthState;
38
- } catch {
39
- return null;
40
- }
41
- },
42
- async delete(state) {
43
- await db.deleteFrom("auth_challenges").where("challenge", "=", state).where("type", "=", "oauth").execute();
44
- }
45
- };
46
- }
47
-
48
- //#endregion
49
- export { createOAuthStateStore as t };
50
- //# sourceMappingURL=oauth-state-store-BbjnZXNC.mjs.map