@kywi-software/core 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. package/dist/admin/app.d.ts +69 -0
  2. package/dist/admin/app.d.ts.map +1 -0
  3. package/dist/admin/app.js +98 -0
  4. package/dist/admin/app.js.map +1 -0
  5. package/dist/admin/chrome.d.ts +37 -0
  6. package/dist/admin/chrome.d.ts.map +1 -0
  7. package/dist/admin/chrome.js +162 -0
  8. package/dist/admin/chrome.js.map +1 -0
  9. package/dist/admin/context.d.ts +58 -0
  10. package/dist/admin/context.d.ts.map +1 -0
  11. package/dist/admin/context.js +31 -0
  12. package/dist/admin/context.js.map +1 -0
  13. package/dist/admin/index.d.ts +9 -1
  14. package/dist/admin/index.d.ts.map +1 -1
  15. package/dist/admin/index.js +12 -0
  16. package/dist/admin/index.js.map +1 -1
  17. package/dist/admin/kywi-logo.d.ts +21 -0
  18. package/dist/admin/kywi-logo.d.ts.map +1 -0
  19. package/dist/admin/kywi-logo.js +123 -0
  20. package/dist/admin/kywi-logo.js.map +1 -0
  21. package/dist/admin/nav.d.ts +21 -1
  22. package/dist/admin/nav.d.ts.map +1 -1
  23. package/dist/admin/nav.js +45 -88
  24. package/dist/admin/nav.js.map +1 -1
  25. package/dist/admin/primitives.d.ts +52 -0
  26. package/dist/admin/primitives.d.ts.map +1 -0
  27. package/dist/admin/primitives.js +78 -0
  28. package/dist/admin/primitives.js.map +1 -0
  29. package/dist/admin/registry.d.ts +130 -0
  30. package/dist/admin/registry.d.ts.map +1 -0
  31. package/dist/admin/registry.js +456 -0
  32. package/dist/admin/registry.js.map +1 -0
  33. package/dist/admin/server.d.ts +154 -0
  34. package/dist/admin/server.d.ts.map +1 -0
  35. package/dist/admin/server.js +121 -0
  36. package/dist/admin/server.js.map +1 -0
  37. package/dist/admin/shell.d.ts +27 -1
  38. package/dist/admin/shell.d.ts.map +1 -1
  39. package/dist/admin/shell.js +71 -6
  40. package/dist/admin/shell.js.map +1 -1
  41. package/dist/admin/styles/admin.css +113 -23
  42. package/dist/admin/surface-matcher.d.ts +51 -0
  43. package/dist/admin/surface-matcher.d.ts.map +1 -0
  44. package/dist/admin/surface-matcher.js +181 -0
  45. package/dist/admin/surface-matcher.js.map +1 -0
  46. package/dist/admin/surfaces/approvals/approvals-data.d.ts +17 -0
  47. package/dist/admin/surfaces/approvals/approvals-data.d.ts.map +1 -0
  48. package/dist/admin/surfaces/approvals/approvals-data.js +55 -0
  49. package/dist/admin/surfaces/approvals/approvals-data.js.map +1 -0
  50. package/dist/admin/surfaces/approvals/approvals-index.d.ts +3 -0
  51. package/dist/admin/surfaces/approvals/approvals-index.d.ts.map +1 -0
  52. package/dist/admin/surfaces/approvals/approvals-index.js +75 -0
  53. package/dist/admin/surfaces/approvals/approvals-index.js.map +1 -0
  54. package/dist/admin/surfaces/audiences/audiences-data.d.ts +107 -0
  55. package/dist/admin/surfaces/audiences/audiences-data.d.ts.map +1 -0
  56. package/dist/admin/surfaces/audiences/audiences-data.js +216 -0
  57. package/dist/admin/surfaces/audiences/audiences-data.js.map +1 -0
  58. package/dist/admin/surfaces/audiences/audiences-detail.d.ts +3 -0
  59. package/dist/admin/surfaces/audiences/audiences-detail.d.ts.map +1 -0
  60. package/dist/admin/surfaces/audiences/audiences-detail.js +78 -0
  61. package/dist/admin/surfaces/audiences/audiences-detail.js.map +1 -0
  62. package/dist/admin/surfaces/audiences/audiences-edit.d.ts +3 -0
  63. package/dist/admin/surfaces/audiences/audiences-edit.d.ts.map +1 -0
  64. package/dist/admin/surfaces/audiences/audiences-edit.js +55 -0
  65. package/dist/admin/surfaces/audiences/audiences-edit.js.map +1 -0
  66. package/dist/admin/surfaces/audiences/audiences-fields.d.ts +3 -0
  67. package/dist/admin/surfaces/audiences/audiences-fields.d.ts.map +1 -0
  68. package/dist/admin/surfaces/audiences/audiences-fields.js +56 -0
  69. package/dist/admin/surfaces/audiences/audiences-fields.js.map +1 -0
  70. package/dist/admin/surfaces/audiences/audiences-list.d.ts +3 -0
  71. package/dist/admin/surfaces/audiences/audiences-list.d.ts.map +1 -0
  72. package/dist/admin/surfaces/audiences/audiences-list.js +50 -0
  73. package/dist/admin/surfaces/audiences/audiences-list.js.map +1 -0
  74. package/dist/admin/surfaces/audiences/audiences-new.d.ts +3 -0
  75. package/dist/admin/surfaces/audiences/audiences-new.d.ts.map +1 -0
  76. package/dist/admin/surfaces/audiences/audiences-new.js +54 -0
  77. package/dist/admin/surfaces/audiences/audiences-new.js.map +1 -0
  78. package/dist/admin/surfaces/audiences/audiences-preview-tokens.d.ts +3 -0
  79. package/dist/admin/surfaces/audiences/audiences-preview-tokens.d.ts.map +1 -0
  80. package/dist/admin/surfaces/audiences/audiences-preview-tokens.js +123 -0
  81. package/dist/admin/surfaces/audiences/audiences-preview-tokens.js.map +1 -0
  82. package/dist/admin/surfaces/audiences/audiences-selfid-widget.d.ts +3 -0
  83. package/dist/admin/surfaces/audiences/audiences-selfid-widget.d.ts.map +1 -0
  84. package/dist/admin/surfaces/audiences/audiences-selfid-widget.js +50 -0
  85. package/dist/admin/surfaces/audiences/audiences-selfid-widget.js.map +1 -0
  86. package/dist/admin/surfaces/audiences/audiences-test.d.ts +3 -0
  87. package/dist/admin/surfaces/audiences/audiences-test.d.ts.map +1 -0
  88. package/dist/admin/surfaces/audiences/audiences-test.js +39 -0
  89. package/dist/admin/surfaces/audiences/audiences-test.js.map +1 -0
  90. package/dist/admin/surfaces/audiences/states.d.ts +10 -0
  91. package/dist/admin/surfaces/audiences/states.d.ts.map +1 -0
  92. package/dist/admin/surfaces/audiences/states.js +11 -0
  93. package/dist/admin/surfaces/audiences/states.js.map +1 -0
  94. package/dist/admin/surfaces/changesets/changesets-data.d.ts +35 -0
  95. package/dist/admin/surfaces/changesets/changesets-data.d.ts.map +1 -0
  96. package/dist/admin/surfaces/changesets/changesets-data.js +151 -0
  97. package/dist/admin/surfaces/changesets/changesets-data.js.map +1 -0
  98. package/dist/admin/surfaces/changesets/changesets-detail.d.ts +3 -0
  99. package/dist/admin/surfaces/changesets/changesets-detail.d.ts.map +1 -0
  100. package/dist/admin/surfaces/changesets/changesets-detail.js +84 -0
  101. package/dist/admin/surfaces/changesets/changesets-detail.js.map +1 -0
  102. package/dist/admin/surfaces/changesets/changesets-index.d.ts +3 -0
  103. package/dist/admin/surfaces/changesets/changesets-index.d.ts.map +1 -0
  104. package/dist/admin/surfaces/changesets/changesets-index.js +62 -0
  105. package/dist/admin/surfaces/changesets/changesets-index.js.map +1 -0
  106. package/dist/admin/surfaces/comments/comment-moderation.d.ts +18 -0
  107. package/dist/admin/surfaces/comments/comment-moderation.d.ts.map +1 -0
  108. package/dist/admin/surfaces/comments/comment-moderation.js +36 -0
  109. package/dist/admin/surfaces/comments/comment-moderation.js.map +1 -0
  110. package/dist/admin/surfaces/comments/comments-data.d.ts +23 -0
  111. package/dist/admin/surfaces/comments/comments-data.d.ts.map +1 -0
  112. package/dist/admin/surfaces/comments/comments-data.js +81 -0
  113. package/dist/admin/surfaces/comments/comments-data.js.map +1 -0
  114. package/dist/admin/surfaces/comments/comments-index.d.ts +3 -0
  115. package/dist/admin/surfaces/comments/comments-index.d.ts.map +1 -0
  116. package/dist/admin/surfaces/comments/comments-index.js +73 -0
  117. package/dist/admin/surfaces/comments/comments-index.js.map +1 -0
  118. package/dist/admin/surfaces/content/content-edit.d.ts +3 -0
  119. package/dist/admin/surfaces/content/content-edit.d.ts.map +1 -0
  120. package/dist/admin/surfaces/content/content-edit.js +321 -0
  121. package/dist/admin/surfaces/content/content-edit.js.map +1 -0
  122. package/dist/admin/surfaces/content/content-index.d.ts +3 -0
  123. package/dist/admin/surfaces/content/content-index.d.ts.map +1 -0
  124. package/dist/admin/surfaces/content/content-index.js +21 -0
  125. package/dist/admin/surfaces/content/content-index.js.map +1 -0
  126. package/dist/admin/surfaces/content/content-list.d.ts +3 -0
  127. package/dist/admin/surfaces/content/content-list.d.ts.map +1 -0
  128. package/dist/admin/surfaces/content/content-list.js +70 -0
  129. package/dist/admin/surfaces/content/content-list.js.map +1 -0
  130. package/dist/admin/surfaces/content/content-new.d.ts +3 -0
  131. package/dist/admin/surfaces/content/content-new.d.ts.map +1 -0
  132. package/dist/admin/surfaces/content/content-new.js +109 -0
  133. package/dist/admin/surfaces/content/content-new.js.map +1 -0
  134. package/dist/admin/surfaces/content/content-translation-bar.d.ts +12 -0
  135. package/dist/admin/surfaces/content/content-translation-bar.d.ts.map +1 -0
  136. package/dist/admin/surfaces/content/content-translation-bar.js +65 -0
  137. package/dist/admin/surfaces/content/content-translation-bar.js.map +1 -0
  138. package/dist/admin/surfaces/content/runtime-content-types.d.ts +41 -0
  139. package/dist/admin/surfaces/content/runtime-content-types.d.ts.map +1 -0
  140. package/dist/admin/surfaces/content/runtime-content-types.js +51 -0
  141. package/dist/admin/surfaces/content/runtime-content-types.js.map +1 -0
  142. package/dist/admin/surfaces/contentTree/content-tree.d.ts +3 -0
  143. package/dist/admin/surfaces/contentTree/content-tree.d.ts.map +1 -0
  144. package/dist/admin/surfaces/contentTree/content-tree.js +179 -0
  145. package/dist/admin/surfaces/contentTree/content-tree.js.map +1 -0
  146. package/dist/admin/surfaces/contentTree/move-to-picker.d.ts +12 -0
  147. package/dist/admin/surfaces/contentTree/move-to-picker.d.ts.map +1 -0
  148. package/dist/admin/surfaces/contentTree/move-to-picker.js +77 -0
  149. package/dist/admin/surfaces/contentTree/move-to-picker.js.map +1 -0
  150. package/dist/admin/surfaces/contentTypes/content-types-designer.d.ts +3 -0
  151. package/dist/admin/surfaces/contentTypes/content-types-designer.d.ts.map +1 -0
  152. package/dist/admin/surfaces/contentTypes/content-types-designer.js +260 -0
  153. package/dist/admin/surfaces/contentTypes/content-types-designer.js.map +1 -0
  154. package/dist/admin/surfaces/contentTypes/content-types-list.d.ts +3 -0
  155. package/dist/admin/surfaces/contentTypes/content-types-list.d.ts.map +1 -0
  156. package/dist/admin/surfaces/contentTypes/content-types-list.js +69 -0
  157. package/dist/admin/surfaces/contentTypes/content-types-list.js.map +1 -0
  158. package/dist/admin/surfaces/dashboard/dashboard-index.d.ts +3 -0
  159. package/dist/admin/surfaces/dashboard/dashboard-index.d.ts.map +1 -0
  160. package/dist/admin/surfaces/dashboard/dashboard-index.js +100 -0
  161. package/dist/admin/surfaces/dashboard/dashboard-index.js.map +1 -0
  162. package/dist/admin/surfaces/experiments/experiments-data.d.ts +12 -0
  163. package/dist/admin/surfaces/experiments/experiments-data.d.ts.map +1 -0
  164. package/dist/admin/surfaces/experiments/experiments-data.js +89 -0
  165. package/dist/admin/surfaces/experiments/experiments-data.js.map +1 -0
  166. package/dist/admin/surfaces/experiments/experiments-detail.d.ts +3 -0
  167. package/dist/admin/surfaces/experiments/experiments-detail.d.ts.map +1 -0
  168. package/dist/admin/surfaces/experiments/experiments-detail.js +87 -0
  169. package/dist/admin/surfaces/experiments/experiments-detail.js.map +1 -0
  170. package/dist/admin/surfaces/experiments/experiments-list.d.ts +3 -0
  171. package/dist/admin/surfaces/experiments/experiments-list.d.ts.map +1 -0
  172. package/dist/admin/surfaces/experiments/experiments-list.js +37 -0
  173. package/dist/admin/surfaces/experiments/experiments-list.js.map +1 -0
  174. package/dist/admin/surfaces/experiments/experiments-new.d.ts +3 -0
  175. package/dist/admin/surfaces/experiments/experiments-new.d.ts.map +1 -0
  176. package/dist/admin/surfaces/experiments/experiments-new.js +33 -0
  177. package/dist/admin/surfaces/experiments/experiments-new.js.map +1 -0
  178. package/dist/admin/surfaces/experiments/states.d.ts +10 -0
  179. package/dist/admin/surfaces/experiments/states.d.ts.map +1 -0
  180. package/dist/admin/surfaces/experiments/states.js +11 -0
  181. package/dist/admin/surfaces/experiments/states.js.map +1 -0
  182. package/dist/admin/surfaces/extensions/extensions-data.d.ts +59 -0
  183. package/dist/admin/surfaces/extensions/extensions-data.d.ts.map +1 -0
  184. package/dist/admin/surfaces/extensions/extensions-data.js +71 -0
  185. package/dist/admin/surfaces/extensions/extensions-data.js.map +1 -0
  186. package/dist/admin/surfaces/extensions/extensions-import-export.d.ts +3 -0
  187. package/dist/admin/surfaces/extensions/extensions-import-export.d.ts.map +1 -0
  188. package/dist/admin/surfaces/extensions/extensions-import-export.js +77 -0
  189. package/dist/admin/surfaces/extensions/extensions-import-export.js.map +1 -0
  190. package/dist/admin/surfaces/extensions/extensions-list.d.ts +3 -0
  191. package/dist/admin/surfaces/extensions/extensions-list.d.ts.map +1 -0
  192. package/dist/admin/surfaces/extensions/extensions-list.js +106 -0
  193. package/dist/admin/surfaces/extensions/extensions-list.js.map +1 -0
  194. package/dist/admin/surfaces/extensions/form-modal.d.ts +17 -0
  195. package/dist/admin/surfaces/extensions/form-modal.d.ts.map +1 -0
  196. package/dist/admin/surfaces/extensions/form-modal.js +27 -0
  197. package/dist/admin/surfaces/extensions/form-modal.js.map +1 -0
  198. package/dist/admin/surfaces/feeds/feed-editor.d.ts +8 -0
  199. package/dist/admin/surfaces/feeds/feed-editor.d.ts.map +1 -0
  200. package/dist/admin/surfaces/feeds/feed-editor.js +120 -0
  201. package/dist/admin/surfaces/feeds/feed-editor.js.map +1 -0
  202. package/dist/admin/surfaces/feeds/feeds-data.d.ts +35 -0
  203. package/dist/admin/surfaces/feeds/feeds-data.d.ts.map +1 -0
  204. package/dist/admin/surfaces/feeds/feeds-data.js +81 -0
  205. package/dist/admin/surfaces/feeds/feeds-data.js.map +1 -0
  206. package/dist/admin/surfaces/feeds/feeds-detail.d.ts +3 -0
  207. package/dist/admin/surfaces/feeds/feeds-detail.d.ts.map +1 -0
  208. package/dist/admin/surfaces/feeds/feeds-detail.js +36 -0
  209. package/dist/admin/surfaces/feeds/feeds-detail.js.map +1 -0
  210. package/dist/admin/surfaces/feeds/feeds-list.d.ts +3 -0
  211. package/dist/admin/surfaces/feeds/feeds-list.d.ts.map +1 -0
  212. package/dist/admin/surfaces/feeds/feeds-list.js +49 -0
  213. package/dist/admin/surfaces/feeds/feeds-list.js.map +1 -0
  214. package/dist/admin/surfaces/feeds/feeds-new.d.ts +3 -0
  215. package/dist/admin/surfaces/feeds/feeds-new.d.ts.map +1 -0
  216. package/dist/admin/surfaces/feeds/feeds-new.js +7 -0
  217. package/dist/admin/surfaces/feeds/feeds-new.js.map +1 -0
  218. package/dist/admin/surfaces/forms/form-editor.d.ts +5 -0
  219. package/dist/admin/surfaces/forms/form-editor.d.ts.map +1 -0
  220. package/dist/admin/surfaces/forms/form-editor.js +59 -0
  221. package/dist/admin/surfaces/forms/form-editor.js.map +1 -0
  222. package/dist/admin/surfaces/forms/forms-data.d.ts +52 -0
  223. package/dist/admin/surfaces/forms/forms-data.d.ts.map +1 -0
  224. package/dist/admin/surfaces/forms/forms-data.js +106 -0
  225. package/dist/admin/surfaces/forms/forms-data.js.map +1 -0
  226. package/dist/admin/surfaces/forms/forms-edit.d.ts +3 -0
  227. package/dist/admin/surfaces/forms/forms-edit.d.ts.map +1 -0
  228. package/dist/admin/surfaces/forms/forms-edit.js +40 -0
  229. package/dist/admin/surfaces/forms/forms-edit.js.map +1 -0
  230. package/dist/admin/surfaces/forms/forms-list.d.ts +3 -0
  231. package/dist/admin/surfaces/forms/forms-list.d.ts.map +1 -0
  232. package/dist/admin/surfaces/forms/forms-list.js +53 -0
  233. package/dist/admin/surfaces/forms/forms-list.js.map +1 -0
  234. package/dist/admin/surfaces/forms/forms-new.d.ts +3 -0
  235. package/dist/admin/surfaces/forms/forms-new.d.ts.map +1 -0
  236. package/dist/admin/surfaces/forms/forms-new.js +7 -0
  237. package/dist/admin/surfaces/forms/forms-new.js.map +1 -0
  238. package/dist/admin/surfaces/forms/forms-submissions.d.ts +3 -0
  239. package/dist/admin/surfaces/forms/forms-submissions.d.ts.map +1 -0
  240. package/dist/admin/surfaces/forms/forms-submissions.js +125 -0
  241. package/dist/admin/surfaces/forms/forms-submissions.js.map +1 -0
  242. package/dist/admin/surfaces/layouts/layout-editor-client.d.ts +8 -0
  243. package/dist/admin/surfaces/layouts/layout-editor-client.d.ts.map +1 -0
  244. package/dist/admin/surfaces/layouts/layout-editor-client.js +77 -0
  245. package/dist/admin/surfaces/layouts/layout-editor-client.js.map +1 -0
  246. package/dist/admin/surfaces/layouts/layouts-data.d.ts +53 -0
  247. package/dist/admin/surfaces/layouts/layouts-data.d.ts.map +1 -0
  248. package/dist/admin/surfaces/layouts/layouts-data.js +61 -0
  249. package/dist/admin/surfaces/layouts/layouts-data.js.map +1 -0
  250. package/dist/admin/surfaces/layouts/layouts-detail.d.ts +3 -0
  251. package/dist/admin/surfaces/layouts/layouts-detail.d.ts.map +1 -0
  252. package/dist/admin/surfaces/layouts/layouts-detail.js +38 -0
  253. package/dist/admin/surfaces/layouts/layouts-detail.js.map +1 -0
  254. package/dist/admin/surfaces/layouts/layouts-list.d.ts +3 -0
  255. package/dist/admin/surfaces/layouts/layouts-list.d.ts.map +1 -0
  256. package/dist/admin/surfaces/layouts/layouts-list.js +62 -0
  257. package/dist/admin/surfaces/layouts/layouts-list.js.map +1 -0
  258. package/dist/admin/surfaces/layouts/layouts-new.d.ts +3 -0
  259. package/dist/admin/surfaces/layouts/layouts-new.d.ts.map +1 -0
  260. package/dist/admin/surfaces/layouts/layouts-new.js +7 -0
  261. package/dist/admin/surfaces/layouts/layouts-new.js.map +1 -0
  262. package/dist/admin/surfaces/login.d.ts +20 -0
  263. package/dist/admin/surfaces/login.d.ts.map +1 -0
  264. package/dist/admin/surfaces/login.js +93 -0
  265. package/dist/admin/surfaces/login.js.map +1 -0
  266. package/dist/admin/surfaces/media/library.d.ts +3 -0
  267. package/dist/admin/surfaces/media/library.d.ts.map +1 -0
  268. package/dist/admin/surfaces/media/library.js +7 -0
  269. package/dist/admin/surfaces/media/library.js.map +1 -0
  270. package/dist/admin/surfaces/media/media-client.d.ts +4 -0
  271. package/dist/admin/surfaces/media/media-client.d.ts.map +1 -0
  272. package/dist/admin/surfaces/media/media-client.js +203 -0
  273. package/dist/admin/surfaces/media/media-client.js.map +1 -0
  274. package/dist/admin/surfaces/media/upload.d.ts +3 -0
  275. package/dist/admin/surfaces/media/upload.d.ts.map +1 -0
  276. package/dist/admin/surfaces/media/upload.js +7 -0
  277. package/dist/admin/surfaces/media/upload.js.map +1 -0
  278. package/dist/admin/surfaces/plugins/plugins-data.d.ts +37 -0
  279. package/dist/admin/surfaces/plugins/plugins-data.d.ts.map +1 -0
  280. package/dist/admin/surfaces/plugins/plugins-data.js +31 -0
  281. package/dist/admin/surfaces/plugins/plugins-data.js.map +1 -0
  282. package/dist/admin/surfaces/plugins/plugins-index.d.ts +3 -0
  283. package/dist/admin/surfaces/plugins/plugins-index.d.ts.map +1 -0
  284. package/dist/admin/surfaces/plugins/plugins-index.js +72 -0
  285. package/dist/admin/surfaces/plugins/plugins-index.js.map +1 -0
  286. package/dist/admin/surfaces/search/search-index.d.ts +3 -0
  287. package/dist/admin/surfaces/search/search-index.d.ts.map +1 -0
  288. package/dist/admin/surfaces/search/search-index.js +76 -0
  289. package/dist/admin/surfaces/search/search-index.js.map +1 -0
  290. package/dist/admin/surfaces/settings/admin-features.d.ts +3 -0
  291. package/dist/admin/surfaces/settings/admin-features.d.ts.map +1 -0
  292. package/dist/admin/surfaces/settings/admin-features.js +138 -0
  293. package/dist/admin/surfaces/settings/admin-features.js.map +1 -0
  294. package/dist/admin/surfaces/settings/settings-ax.d.ts +3 -0
  295. package/dist/admin/surfaces/settings/settings-ax.d.ts.map +1 -0
  296. package/dist/admin/surfaces/settings/settings-ax.js +63 -0
  297. package/dist/admin/surfaces/settings/settings-ax.js.map +1 -0
  298. package/dist/admin/surfaces/settings/settings-cache.d.ts +3 -0
  299. package/dist/admin/surfaces/settings/settings-cache.d.ts.map +1 -0
  300. package/dist/admin/surfaces/settings/settings-cache.js +64 -0
  301. package/dist/admin/surfaces/settings/settings-cache.js.map +1 -0
  302. package/dist/admin/surfaces/settings/settings-email.d.ts +3 -0
  303. package/dist/admin/surfaces/settings/settings-email.d.ts.map +1 -0
  304. package/dist/admin/surfaces/settings/settings-email.js +89 -0
  305. package/dist/admin/surfaces/settings/settings-email.js.map +1 -0
  306. package/dist/admin/surfaces/settings/settings-general.d.ts +3 -0
  307. package/dist/admin/surfaces/settings/settings-general.d.ts.map +1 -0
  308. package/dist/admin/surfaces/settings/settings-general.js +91 -0
  309. package/dist/admin/surfaces/settings/settings-general.js.map +1 -0
  310. package/dist/admin/surfaces/settings/settings-site.d.ts +3 -0
  311. package/dist/admin/surfaces/settings/settings-site.d.ts.map +1 -0
  312. package/dist/admin/surfaces/settings/settings-site.js +14 -0
  313. package/dist/admin/surfaces/settings/settings-site.js.map +1 -0
  314. package/dist/admin/surfaces/settings/settings-sites.d.ts +3 -0
  315. package/dist/admin/surfaces/settings/settings-sites.d.ts.map +1 -0
  316. package/dist/admin/surfaces/settings/settings-sites.js +134 -0
  317. package/dist/admin/surfaces/settings/settings-sites.js.map +1 -0
  318. package/dist/admin/surfaces/settings/states.d.ts +33 -0
  319. package/dist/admin/surfaces/settings/states.d.ts.map +1 -0
  320. package/dist/admin/surfaces/settings/states.js +33 -0
  321. package/dist/admin/surfaces/settings/states.js.map +1 -0
  322. package/dist/admin/surfaces/taxonomy/categories.d.ts +3 -0
  323. package/dist/admin/surfaces/taxonomy/categories.d.ts.map +1 -0
  324. package/dist/admin/surfaces/taxonomy/categories.js +162 -0
  325. package/dist/admin/surfaces/taxonomy/categories.js.map +1 -0
  326. package/dist/admin/surfaces/taxonomy/tags.d.ts +3 -0
  327. package/dist/admin/surfaces/taxonomy/tags.d.ts.map +1 -0
  328. package/dist/admin/surfaces/taxonomy/tags.js +112 -0
  329. package/dist/admin/surfaces/taxonomy/tags.js.map +1 -0
  330. package/dist/admin/surfaces/taxonomy/taxonomy-ui.d.ts +39 -0
  331. package/dist/admin/surfaces/taxonomy/taxonomy-ui.d.ts.map +1 -0
  332. package/dist/admin/surfaces/taxonomy/taxonomy-ui.js +66 -0
  333. package/dist/admin/surfaces/taxonomy/taxonomy-ui.js.map +1 -0
  334. package/dist/admin/surfaces/translations/states.d.ts +10 -0
  335. package/dist/admin/surfaces/translations/states.d.ts.map +1 -0
  336. package/dist/admin/surfaces/translations/states.js +11 -0
  337. package/dist/admin/surfaces/translations/states.js.map +1 -0
  338. package/dist/admin/surfaces/translations/translations-index.d.ts +3 -0
  339. package/dist/admin/surfaces/translations/translations-index.d.ts.map +1 -0
  340. package/dist/admin/surfaces/translations/translations-index.js +99 -0
  341. package/dist/admin/surfaces/translations/translations-index.js.map +1 -0
  342. package/dist/admin/surfaces/trash/trash-index.d.ts +3 -0
  343. package/dist/admin/surfaces/trash/trash-index.d.ts.map +1 -0
  344. package/dist/admin/surfaces/trash/trash-index.js +96 -0
  345. package/dist/admin/surfaces/trash/trash-index.js.map +1 -0
  346. package/dist/admin/surfaces/users/users-data.d.ts +51 -0
  347. package/dist/admin/surfaces/users/users-data.d.ts.map +1 -0
  348. package/dist/admin/surfaces/users/users-data.js +60 -0
  349. package/dist/admin/surfaces/users/users-data.js.map +1 -0
  350. package/dist/admin/surfaces/users/users-detail.d.ts +3 -0
  351. package/dist/admin/surfaces/users/users-detail.d.ts.map +1 -0
  352. package/dist/admin/surfaces/users/users-detail.js +148 -0
  353. package/dist/admin/surfaces/users/users-detail.js.map +1 -0
  354. package/dist/admin/surfaces/users/users-groups.d.ts +3 -0
  355. package/dist/admin/surfaces/users/users-groups.d.ts.map +1 -0
  356. package/dist/admin/surfaces/users/users-groups.js +136 -0
  357. package/dist/admin/surfaces/users/users-groups.js.map +1 -0
  358. package/dist/admin/surfaces/users/users-list.d.ts +3 -0
  359. package/dist/admin/surfaces/users/users-list.d.ts.map +1 -0
  360. package/dist/admin/surfaces/users/users-list.js +119 -0
  361. package/dist/admin/surfaces/users/users-list.js.map +1 -0
  362. package/dist/admin/surfaces/users/users-new.d.ts +3 -0
  363. package/dist/admin/surfaces/users/users-new.d.ts.map +1 -0
  364. package/dist/admin/surfaces/users/users-new.js +78 -0
  365. package/dist/admin/surfaces/users/users-new.js.map +1 -0
  366. package/dist/admin/surfaces/users/users-permissions.d.ts +3 -0
  367. package/dist/admin/surfaces/users/users-permissions.d.ts.map +1 -0
  368. package/dist/admin/surfaces/users/users-permissions.js +135 -0
  369. package/dist/admin/surfaces/users/users-permissions.js.map +1 -0
  370. package/dist/admin/surfaces/webServices/api-keys.d.ts +3 -0
  371. package/dist/admin/surfaces/webServices/api-keys.d.ts.map +1 -0
  372. package/dist/admin/surfaces/webServices/api-keys.js +65 -0
  373. package/dist/admin/surfaces/webServices/api-keys.js.map +1 -0
  374. package/dist/admin/surfaces/webServices/oauth.d.ts +3 -0
  375. package/dist/admin/surfaces/webServices/oauth.d.ts.map +1 -0
  376. package/dist/admin/surfaces/webServices/oauth.js +75 -0
  377. package/dist/admin/surfaces/webServices/oauth.js.map +1 -0
  378. package/dist/admin/surfaces/webServices/secret-reveal-modal.d.ts +8 -0
  379. package/dist/admin/surfaces/webServices/secret-reveal-modal.d.ts.map +1 -0
  380. package/dist/admin/surfaces/webServices/secret-reveal-modal.js +30 -0
  381. package/dist/admin/surfaces/webServices/secret-reveal-modal.js.map +1 -0
  382. package/dist/admin/surfaces/webServices/web-services-data.d.ts +38 -0
  383. package/dist/admin/surfaces/webServices/web-services-data.d.ts.map +1 -0
  384. package/dist/admin/surfaces/webServices/web-services-data.js +52 -0
  385. package/dist/admin/surfaces/webServices/web-services-data.js.map +1 -0
  386. package/dist/api/admin-features-routes.d.ts +10 -0
  387. package/dist/api/admin-features-routes.d.ts.map +1 -0
  388. package/dist/api/admin-features-routes.js +61 -0
  389. package/dist/api/admin-features-routes.js.map +1 -0
  390. package/dist/api/graphql/resolvers.d.ts +6 -6
  391. package/dist/api/index.d.ts.map +1 -1
  392. package/dist/api/index.js +2 -0
  393. package/dist/api/index.js.map +1 -1
  394. package/dist/config/define.d.ts +22 -1
  395. package/dist/config/define.d.ts.map +1 -1
  396. package/dist/config/define.js +44 -0
  397. package/dist/config/define.js.map +1 -1
  398. package/dist/config/parse.d.ts.map +1 -1
  399. package/dist/config/parse.js +8 -2
  400. package/dist/config/parse.js.map +1 -1
  401. package/dist/config/types.d.ts +60 -1
  402. package/dist/config/types.d.ts.map +1 -1
  403. package/dist/config/types.js +20 -1
  404. package/dist/config/types.js.map +1 -1
  405. package/dist/config/validate.d.ts.map +1 -1
  406. package/dist/config/validate.js +60 -0
  407. package/dist/config/validate.js.map +1 -1
  408. package/dist/db/admin-features-queries.d.ts +29 -0
  409. package/dist/db/admin-features-queries.d.ts.map +1 -0
  410. package/dist/db/admin-features-queries.js +46 -0
  411. package/dist/db/admin-features-queries.js.map +1 -0
  412. package/dist/db/analytics-queries.d.ts +2 -2
  413. package/dist/db/audit-queries.d.ts +3 -3
  414. package/dist/db/category-queries.d.ts +6 -6
  415. package/dist/db/changeset-audit-queries.d.ts +2 -2
  416. package/dist/db/changeset-queries.d.ts +8 -8
  417. package/dist/db/extension-queries.d.ts +17 -17
  418. package/dist/db/feed-queries.d.ts +6 -6
  419. package/dist/db/media-queries.d.ts +12 -12
  420. package/dist/db/site-admin-queries.d.ts +1 -1
  421. package/dist/db/site-queries.d.ts +3 -3
  422. package/dist/db/tag-queries.d.ts +4 -4
  423. package/dist/db/webhook-queries.d.ts +8 -8
  424. package/dist/db/workflow-queries.d.ts +5 -5
  425. package/dist/experiments/schema.d.ts +1 -1
  426. package/dist/host-client/index.d.ts +1 -0
  427. package/dist/host-client/index.d.ts.map +1 -1
  428. package/dist/host-client/index.js +4 -0
  429. package/dist/host-client/index.js.map +1 -1
  430. package/dist/host-client/json.d.ts +36 -0
  431. package/dist/host-client/json.d.ts.map +1 -0
  432. package/dist/host-client/json.js +106 -0
  433. package/dist/host-client/json.js.map +1 -0
  434. package/dist/layout/modules-extended.d.ts.map +1 -1
  435. package/dist/layout/modules-extended.js +9 -8
  436. package/dist/layout/modules-extended.js.map +1 -1
  437. package/dist/layout/modules.js +5 -5
  438. package/dist/layout/modules.js.map +1 -1
  439. package/dist/schema/base.d.ts +1 -1
  440. package/dist/scope/breadcrumbs.d.ts.map +1 -1
  441. package/dist/scope/breadcrumbs.js +4 -1
  442. package/dist/scope/breadcrumbs.js.map +1 -1
  443. package/dist/scope/head-foot.d.ts +12 -4
  444. package/dist/scope/head-foot.d.ts.map +1 -1
  445. package/dist/scope/head-foot.js +14 -6
  446. package/dist/scope/head-foot.js.map +1 -1
  447. package/dist/scope/jsonld.d.ts.map +1 -1
  448. package/dist/scope/jsonld.js +1 -11
  449. package/dist/scope/jsonld.js.map +1 -1
  450. package/dist/scope/kywi-form.d.ts.map +1 -1
  451. package/dist/scope/kywi-form.js +3 -3
  452. package/dist/scope/kywi-form.js.map +1 -1
  453. package/dist/scope/kywi-wizard-form.d.ts.map +1 -1
  454. package/dist/scope/kywi-wizard-form.js +3 -3
  455. package/dist/scope/kywi-wizard-form.js.map +1 -1
  456. package/dist/scope/rendering.d.ts.map +1 -1
  457. package/dist/scope/rendering.js +7 -6
  458. package/dist/scope/rendering.js.map +1 -1
  459. package/dist/util/jsonld.d.ts +13 -0
  460. package/dist/util/jsonld.d.ts.map +1 -0
  461. package/dist/util/jsonld.js +15 -0
  462. package/dist/util/jsonld.js.map +1 -0
  463. package/dist/util/sanitize.d.ts +6 -0
  464. package/dist/util/sanitize.d.ts.map +1 -0
  465. package/dist/util/sanitize.js +156 -0
  466. package/dist/util/sanitize.js.map +1 -0
  467. package/package.json +12 -3
@@ -0,0 +1,135 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * `users.permissions` surface — the capability matrix + per-content ACL
5
+ * browser, ported verbatim from `apps/reference/app/admin/users/permissions/
6
+ * page.tsx` (0.2.0 T9). Markup / copy unchanged; wiring substitutions (plan
7
+ * §1.3): `adminFetch` → `useAdminContext().fetch`. `AdminShellWrapper` is gone
8
+ * — chrome is rendered once by `KywiAdminApp` (T14).
9
+ */
10
+ import { useCallback, useEffect, useState } from 'react';
11
+ import { useAdminContext } from '../../context.js';
12
+ import { PermissionMatrix } from '../../permission-matrix.js';
13
+ import { ContentPermissionBrowser, } from '../../content-permission-browser.js';
14
+ import { loadUsers, loadGroups, fullName } from './users-data.js';
15
+ /** Depth-first flatten of the nested site tree into a flat option list. */
16
+ function flattenTree(nodes, out = []) {
17
+ for (const node of nodes) {
18
+ out.push({ id: node.id, title: node.title, path: node.path });
19
+ if (node.children?.length)
20
+ flattenTree(node.children, out);
21
+ }
22
+ return out;
23
+ }
24
+ export default function UsersPermissionsSurface(_props) {
25
+ const { fetch: adminFetch } = useAdminContext();
26
+ const [nodes, setNodes] = useState([]);
27
+ const [users, setUsers] = useState([]);
28
+ const [groups, setGroups] = useState([]);
29
+ const [selectedNodeId, setSelectedNodeId] = useState(null);
30
+ const [entries, setEntries] = useState([]);
31
+ const [aclLoading, setAclLoading] = useState(false);
32
+ const [aclError, setAclError] = useState(null);
33
+ const [busy, setBusy] = useState(false);
34
+ // Load the pickers' data once: site tree (content nodes), users, and groups.
35
+ useEffect(() => {
36
+ let cancelled = false;
37
+ async function load() {
38
+ try {
39
+ const [treeRes, rawUsers, rawGroups] = await Promise.all([
40
+ adminFetch('/api/v1/tree'),
41
+ loadUsers(adminFetch),
42
+ loadGroups(adminFetch),
43
+ ]);
44
+ const treeBody = treeRes.ok ? await treeRes.json() : { data: [] };
45
+ if (cancelled)
46
+ return;
47
+ setNodes(flattenTree(treeBody.data ?? []));
48
+ setUsers(rawUsers.map((u) => ({ id: u.id, label: fullName(u) })));
49
+ setGroups(rawGroups.map((g) => ({ id: g.id, label: g.name })));
50
+ }
51
+ catch {
52
+ /* pickers stay empty; the ACL panel still reports its own errors */
53
+ }
54
+ }
55
+ load();
56
+ return () => { cancelled = true; };
57
+ }, [adminFetch]);
58
+ const loadEntries = useCallback(async (nodeId) => {
59
+ setAclLoading(true);
60
+ setAclError(null);
61
+ try {
62
+ const res = await adminFetch(`/api/v1/content/${nodeId}/permissions`);
63
+ if (!res.ok) {
64
+ const body = await res.json().catch(() => null);
65
+ throw new Error(body?.error?.message ?? `Failed to load permissions (${res.status})`);
66
+ }
67
+ const body = await res.json();
68
+ setEntries(body.data ?? []);
69
+ }
70
+ catch (e) {
71
+ setAclError(e instanceof Error ? e.message : 'Failed to load permissions');
72
+ setEntries([]);
73
+ }
74
+ finally {
75
+ setAclLoading(false);
76
+ }
77
+ }, [adminFetch]);
78
+ const handleSelectNode = useCallback((id) => {
79
+ setSelectedNodeId(id || null);
80
+ setEntries([]);
81
+ setAclError(null);
82
+ if (id)
83
+ loadEntries(id);
84
+ }, [loadEntries]);
85
+ const handleGrant = useCallback(async (input) => {
86
+ if (!selectedNodeId)
87
+ return;
88
+ setBusy(true);
89
+ setAclError(null);
90
+ try {
91
+ const payload = input.subjectType === 'user'
92
+ ? { userId: input.subjectId, action: input.action }
93
+ : { groupId: input.subjectId, action: input.action };
94
+ const res = await adminFetch(`/api/v1/content/${selectedNodeId}/permissions`, {
95
+ method: 'POST',
96
+ body: JSON.stringify(payload),
97
+ });
98
+ if (!res.ok) {
99
+ const body = await res.json().catch(() => null);
100
+ throw new Error(body?.error?.message ?? `Failed to add permission (${res.status})`);
101
+ }
102
+ await loadEntries(selectedNodeId);
103
+ }
104
+ catch (e) {
105
+ setAclError(e instanceof Error ? e.message : 'Failed to add permission');
106
+ }
107
+ finally {
108
+ setBusy(false);
109
+ }
110
+ }, [selectedNodeId, loadEntries, adminFetch]);
111
+ const handleRevoke = useCallback(async (permissionId) => {
112
+ if (!selectedNodeId)
113
+ return;
114
+ setBusy(true);
115
+ setAclError(null);
116
+ try {
117
+ const res = await adminFetch(`/api/v1/content/${selectedNodeId}/permissions/${permissionId}`, {
118
+ method: 'DELETE',
119
+ });
120
+ if (!res.ok) {
121
+ const body = await res.json().catch(() => null);
122
+ throw new Error(body?.error?.message ?? `Failed to remove permission (${res.status})`);
123
+ }
124
+ await loadEntries(selectedNodeId);
125
+ }
126
+ catch (e) {
127
+ setAclError(e instanceof Error ? e.message : 'Failed to remove permission');
128
+ }
129
+ finally {
130
+ setBusy(false);
131
+ }
132
+ }, [selectedNodeId, loadEntries, adminFetch]);
133
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "kywi-admin-page-header", children: _jsx("h1", { children: "Permissions" }) }), _jsx(PermissionMatrix, {}), _jsx(ContentPermissionBrowser, { nodes: nodes, users: users, groups: groups, selectedNodeId: selectedNodeId, entries: entries, loading: aclLoading, error: aclError, busy: busy, onSelectNode: handleSelectNode, onGrant: handleGrant, onRevoke: handleRevoke })] }));
134
+ }
135
+ //# sourceMappingURL=users-permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users-permissions.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/users/users-permissions.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SurfaceProps } from '../../registry.js';
2
+ export default function WebServicesApiKeysSurface(_props: SurfaceProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=api-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/api-keys.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAarD,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,MAAM,EAAE,YAAY,2CAyFrE"}
@@ -0,0 +1,65 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ /**
4
+ * `webServices.apiKeys` surface — personal API key management, ported verbatim
5
+ * from `apps/reference/app/admin/web-services/api-keys/page.tsx` (0.2.0 T9).
6
+ * Markup / copy unchanged; wiring substitutions (plan §1.3): `adminFetch` →
7
+ * `useAdminContext().fetch`. `AdminShellWrapper` is gone — chrome is rendered
8
+ * once by `KywiAdminApp` (T14). Reuses core's existing `ApiKeyManager` and the
9
+ * shared `SecretRevealModal` — only the page orchestration is migrated here.
10
+ */
11
+ import { useCallback, useEffect, useState } from 'react';
12
+ import { useAdminContext } from '../../context.js';
13
+ import { LoadingState, ErrorState } from '../../primitives.js';
14
+ import { SecretRevealModal } from './secret-reveal-modal.js';
15
+ import { ApiKeyManager } from '../../api-key-manager.js';
16
+ import { loadApiKeys, createApiKey, revokeApiKey, } from './web-services-data.js';
17
+ export default function WebServicesApiKeysSurface(_props) {
18
+ const { fetch: adminFetch } = useAdminContext();
19
+ const [apiKeys, setApiKeys] = useState([]);
20
+ const [loading, setLoading] = useState(true);
21
+ const [error, setError] = useState(null);
22
+ const [revealed, setRevealed] = useState(null);
23
+ const load = useCallback(async () => {
24
+ setLoading(true);
25
+ setError(null);
26
+ try {
27
+ const list = await loadApiKeys(adminFetch);
28
+ list.sort((a, b) => (b.createdAt ?? '').localeCompare(a.createdAt ?? ''));
29
+ setApiKeys(list);
30
+ }
31
+ catch (e) {
32
+ setError(e instanceof Error ? e.message : 'Failed to load API keys');
33
+ }
34
+ finally {
35
+ setLoading(false);
36
+ }
37
+ }, [adminFetch]);
38
+ useEffect(() => {
39
+ load();
40
+ }, [load]);
41
+ const handleCreate = useCallback(async (data) => {
42
+ setError(null);
43
+ try {
44
+ const { rawKey, row } = await createApiKey(adminFetch, data);
45
+ // Reveal the full key exactly once — only its prefix is stored/listed.
46
+ setRevealed({ name: row.name, key: rawKey });
47
+ await load();
48
+ }
49
+ catch (e) {
50
+ setError(e instanceof Error ? e.message : 'Failed to create API key');
51
+ }
52
+ }, [load, adminFetch]);
53
+ const handleRevoke = useCallback(async (id) => {
54
+ setError(null);
55
+ try {
56
+ await revokeApiKey(adminFetch, id);
57
+ await load();
58
+ }
59
+ catch (e) {
60
+ setError(e instanceof Error ? e.message : 'Failed to revoke API key');
61
+ }
62
+ }, [load, adminFetch]);
63
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "kywi-admin-page-header", children: _jsxs("div", { children: [_jsx("h1", { children: "API Keys" }), _jsx("p", { className: "kywi-admin-section-hint", children: "Personal API keys authenticate server-to-server requests to the Kywi API. Each key carries the scopes you assign and inherits your role. The full key is shown once at creation \u2014 afterwards only its prefix is listed." })] }) }), error && _jsx(ErrorState, { message: error, onRetry: load }), loading ? (_jsx(LoadingState, { label: "Loading API keys\u2026" })) : (_jsx(ApiKeyManager, { apiKeys: apiKeys, onCreateKey: data => void handleCreate(data), onRevokeKey: id => void handleRevoke(id) })), revealed && (_jsx(SecretRevealModal, { title: "API key", intro: `Copy the API key “${revealed.name}” now. For security it is stored only as a hash and will never be shown again.`, label: "API key", value: revealed.key, onClose: () => setRevealed(null) }))] }));
64
+ }
65
+ //# sourceMappingURL=api-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/api-keys.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SurfaceProps } from '../../registry.js';
2
+ export default function WebServicesOAuthSurface(_props: SurfaceProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/oauth.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAerD,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,MAAM,EAAE,YAAY,2CAsGnE"}
@@ -0,0 +1,75 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ /**
4
+ * `webServices.oauth` surface — OAuth client management, ported verbatim from
5
+ * `apps/reference/app/admin/web-services/oauth/page.tsx` (0.2.0 T9). Markup /
6
+ * copy unchanged; wiring substitutions (plan §1.3): `adminFetch` →
7
+ * `useAdminContext().fetch`. `AdminShellWrapper` is gone — chrome is rendered
8
+ * once by `KywiAdminApp` (T14). Reuses core's existing `OAuthManager` and the
9
+ * shared `SecretRevealModal` — only the page orchestration is migrated here.
10
+ */
11
+ import { useCallback, useEffect, useState } from 'react';
12
+ import { useAdminContext } from '../../context.js';
13
+ import { LoadingState, ErrorState } from '../../primitives.js';
14
+ import { SecretRevealModal } from './secret-reveal-modal.js';
15
+ import { OAuthManager } from '../../oauth-manager.js';
16
+ import { loadOAuthClients, createOAuthClient, updateOAuthClient, deleteOAuthClient, } from './web-services-data.js';
17
+ export default function WebServicesOAuthSurface(_props) {
18
+ const { fetch: adminFetch } = useAdminContext();
19
+ const [clients, setClients] = useState([]);
20
+ const [loading, setLoading] = useState(true);
21
+ const [error, setError] = useState(null);
22
+ const [revealed, setRevealed] = useState(null);
23
+ const load = useCallback(async () => {
24
+ setLoading(true);
25
+ setError(null);
26
+ try {
27
+ const list = await loadOAuthClients(adminFetch);
28
+ list.sort((a, b) => (b.createdAt ?? '').localeCompare(a.createdAt ?? ''));
29
+ setClients(list);
30
+ }
31
+ catch (e) {
32
+ setError(e instanceof Error ? e.message : 'Failed to load OAuth clients');
33
+ }
34
+ finally {
35
+ setLoading(false);
36
+ }
37
+ }, [adminFetch]);
38
+ useEffect(() => {
39
+ load();
40
+ }, [load]);
41
+ const handleCreate = useCallback(async (data) => {
42
+ setError(null);
43
+ try {
44
+ const { clientSecret, client } = await createOAuthClient(adminFetch, data);
45
+ // Reveal the plaintext secret exactly once — it is never returned again.
46
+ setRevealed({ name: client.name, secret: clientSecret });
47
+ await load();
48
+ }
49
+ catch (e) {
50
+ setError(e instanceof Error ? e.message : 'Failed to create OAuth client');
51
+ }
52
+ }, [load, adminFetch]);
53
+ const handleUpdate = useCallback(async (id, data) => {
54
+ setError(null);
55
+ try {
56
+ await updateOAuthClient(adminFetch, id, data);
57
+ await load();
58
+ }
59
+ catch (e) {
60
+ setError(e instanceof Error ? e.message : 'Failed to update OAuth client');
61
+ }
62
+ }, [load, adminFetch]);
63
+ const handleDelete = useCallback(async (id) => {
64
+ setError(null);
65
+ try {
66
+ await deleteOAuthClient(adminFetch, id);
67
+ await load();
68
+ }
69
+ catch (e) {
70
+ setError(e instanceof Error ? e.message : 'Failed to delete OAuth client');
71
+ }
72
+ }, [load, adminFetch]);
73
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "kywi-admin-page-header", children: _jsxs("div", { children: [_jsx("h1", { children: "OAuth Clients" }), _jsx("p", { className: "kywi-admin-section-hint", children: "Register confidential OAuth clients that can call the Kywi API on a user\u2019s behalf. The client secret is shown once at creation and stored only as a hash." })] }) }), error && _jsx(ErrorState, { message: error, onRetry: load }), loading ? (_jsx(LoadingState, { label: "Loading OAuth clients\u2026" })) : (_jsx(OAuthManager, { clients: clients, onCreateClient: data => void handleCreate(data), onUpdateClient: (id, data) => void handleUpdate(id, data), onDeleteClient: id => void handleDelete(id) })), revealed && (_jsx(SecretRevealModal, { title: "Client secret", intro: `Copy the client secret for “${revealed.name}” now. For security it is stored only as a hash and will never be shown again.`, label: "Client secret", value: revealed.secret, onClose: () => setRevealed(null) }))] }));
74
+ }
75
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/oauth.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function SecretRevealModal({ title, intro, label, value, onClose, }: {
2
+ title: string;
3
+ intro: string;
4
+ label: string;
5
+ value: string;
6
+ onClose: () => void;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=secret-reveal-modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-reveal-modal.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/secret-reveal-modal.tsx"],"names":[],"mappings":"AAkBA,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,OAAO,GACR,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,2CAkEA"}
@@ -0,0 +1,30 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Reveal-once secret modal, ported verbatim from
5
+ * `apps/reference/components/secret-reveal-modal.tsx` (0.2.0 admin-app
6
+ * migration, plan §1.3 / §2, T9). No wiring substitutions — this component is
7
+ * purely presentational (no fetch/router/session dependency) and is shared by
8
+ * both `webServices.oauth` and `webServices.apiKeys`.
9
+ *
10
+ * OAuth client secrets and API keys are returned in plaintext exactly once, at
11
+ * creation time — the server only ever stores a hash. This modal surfaces that
12
+ * value with a copy button and an explicit "you won't see this again" warning,
13
+ * then discards it when the admin dismisses the dialog. The value lives only in
14
+ * this component's props for the lifetime of the modal; it is never persisted.
15
+ */
16
+ import { useState } from 'react';
17
+ export function SecretRevealModal({ title, intro, label, value, onClose, }) {
18
+ const [copied, setCopied] = useState(false);
19
+ async function handleCopy() {
20
+ try {
21
+ await navigator.clipboard.writeText(value);
22
+ setCopied(true);
23
+ }
24
+ catch {
25
+ setCopied(false);
26
+ }
27
+ }
28
+ return (_jsx("div", { className: "kywi-overlay-shell", role: "dialog", "aria-modal": "true", "aria-label": title, onClick: onClose, children: _jsxs("div", { className: "kywi-admin-secret-modal", onClick: e => e.stopPropagation(), children: [_jsxs("div", { className: "kywi-admin-picker-header", children: [_jsx("h2", { className: "kywi-admin-picker-title", children: title }), _jsx("button", { type: "button", className: "kywi-admin-picker-close", onClick: onClose, "aria-label": "Close", children: "\u00D7" })] }), _jsxs("div", { className: "kywi-admin-secret-modal-body", children: [_jsxs("div", { className: "kywi-admin-secret-warning", role: "alert", children: [_jsx("span", { "aria-hidden": "true", children: "\u26A0" }), _jsx("span", { children: intro })] }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { className: "kywi-field-label", htmlFor: "kywi-secret-value", children: label }), _jsxs("div", { className: "kywi-admin-secret-field", children: [_jsx("code", { id: "kywi-secret-value", className: "kywi-admin-secret-value", children: value }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary", onClick: handleCopy, children: copied ? 'Copied!' : 'Copy' })] })] }), _jsx("div", { className: "kywi-admin-secret-actions", children: _jsx("button", { type: "button", className: "kywi-btn kywi-btn-primary", onClick: onClose, children: "Done" }) })] })] }) }));
29
+ }
30
+ //# sourceMappingURL=secret-reveal-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-reveal-modal.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/secret-reveal-modal.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;GAYG;AAEH,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,MAAM,UAAU,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,OAAO,GAOR;IACC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE3C,KAAK,UAAU,UAAU;QACvB,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YAC1C,SAAS,CAAC,IAAI,CAAC,CAAA;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,CAAC,KAAK,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CACL,cACE,SAAS,EAAC,oBAAoB,EAC9B,IAAI,EAAC,QAAQ,gBACF,MAAM,gBACL,KAAK,EACjB,OAAO,EAAE,OAAO,YAEhB,eAAK,SAAS,EAAC,yBAAyB,EAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,aACxE,eAAK,SAAS,EAAC,0BAA0B,aACvC,aAAI,SAAS,EAAC,yBAAyB,YAAE,KAAK,GAAM,EACpD,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,yBAAyB,EACnC,OAAO,EAAE,OAAO,gBACL,OAAO,uBAGX,IACL,EAEN,eAAK,SAAS,EAAC,8BAA8B,aAC3C,eAAK,SAAS,EAAC,2BAA2B,EAAC,IAAI,EAAC,OAAO,aACrD,8BAAkB,MAAM,uBAAS,EACjC,yBAAO,KAAK,GAAQ,IAChB,EAEN,eAAK,SAAS,EAAC,YAAY,aACzB,gBAAO,SAAS,EAAC,kBAAkB,EAAC,OAAO,EAAC,mBAAmB,YAC5D,KAAK,GACA,EACR,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,EAAE,EAAC,mBAAmB,EAAC,SAAS,EAAC,yBAAyB,YAC7D,KAAK,GACD,EACP,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6BAA6B,EACvC,OAAO,EAAE,UAAU,YAElB,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GACrB,IACL,IACF,EAEN,cAAK,SAAS,EAAC,2BAA2B,YACxC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,2BAA2B,EAAC,OAAO,EAAE,OAAO,qBAEnE,GACL,IACF,IACF,GACF,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Data helpers for the admin Web Services surface (OAuth clients + API keys),
3
+ * ported verbatim from `apps/reference/app/admin/web-services/
4
+ * web-services-data.ts` (0.2.0 admin-app migration, plan §1.3 / §2, T9).
5
+ *
6
+ * OAuth client management is backed by /auth/oauth-clients (kywi_oauth_clients);
7
+ * API keys by /auth/api-keys (kywi_api_keys). Both create endpoints return a
8
+ * plaintext secret ONCE at creation — the server only stores a hash — so the
9
+ * surfaces capture it from the create response and reveal it a single time.
10
+ *
11
+ * The only substitution from the reference original: `adminFetch` (app-local
12
+ * `lib/admin-auth`) is now injected as a `FetchLike` parameter, sourced by each
13
+ * surface from `useAdminContext().fetch` (same pattern as
14
+ * `surfaces/users/users-data.ts`). All requests flow through the DB-backed
15
+ * /api/v1 handler.
16
+ */
17
+ import type { FetchLike } from '../../content-editor-api.js';
18
+ import type { OAuthClientSummary, OAuthClientCreateData, OAuthClientUpdateData } from '../../oauth-manager.js';
19
+ import type { ApiKeySummary, ApiKeyCreateData } from '../../api-key-manager.js';
20
+ export type { OAuthClientSummary, OAuthClientCreateData, OAuthClientUpdateData, ApiKeySummary, ApiKeyCreateData, };
21
+ /** Shape of the POST /auth/oauth-clients response — secret shown once. */
22
+ export interface OAuthClientCreated {
23
+ clientSecret: string;
24
+ client: OAuthClientSummary;
25
+ }
26
+ /** Shape of the POST /auth/api-keys response — raw key shown once. */
27
+ export interface ApiKeyCreated {
28
+ rawKey: string;
29
+ row: ApiKeySummary;
30
+ }
31
+ export declare function loadOAuthClients(fetchFn: FetchLike): Promise<OAuthClientSummary[]>;
32
+ export declare function createOAuthClient(fetchFn: FetchLike, data: OAuthClientCreateData): Promise<OAuthClientCreated>;
33
+ export declare function updateOAuthClient(fetchFn: FetchLike, id: string, data: OAuthClientUpdateData): Promise<OAuthClientSummary>;
34
+ export declare function deleteOAuthClient(fetchFn: FetchLike, id: string): Promise<void>;
35
+ export declare function loadApiKeys(fetchFn: FetchLike): Promise<ApiKeySummary[]>;
36
+ export declare function createApiKey(fetchFn: FetchLike, data: ApiKeyCreateData): Promise<ApiKeyCreated>;
37
+ export declare function revokeApiKey(fetchFn: FetchLike, id: string): Promise<void>;
38
+ //# sourceMappingURL=web-services-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-services-data.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/web-services-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE/E,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,gBAAgB,GACjB,CAAA;AAED,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,kBAAkB,CAAA;CAC3B;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,aAAa,CAAA;CACnB;AA+BD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAExF;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAIpH;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAIhI;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErF;AAID,wBAAsB,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAE9E;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAIrG;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF"}
@@ -0,0 +1,52 @@
1
+ async function readData(res) {
2
+ if (!res.ok) {
3
+ let message = `Request failed (${res.status})`;
4
+ try {
5
+ const body = await res.json();
6
+ message = body?.error?.message ?? message;
7
+ }
8
+ catch {
9
+ /* keep default */
10
+ }
11
+ throw new Error(message);
12
+ }
13
+ const body = await res.json();
14
+ return body.data;
15
+ }
16
+ async function expectOk(res) {
17
+ if (res.ok)
18
+ return;
19
+ let message = `Request failed (${res.status})`;
20
+ try {
21
+ const body = await res.json();
22
+ message = body?.error?.message ?? message;
23
+ }
24
+ catch {
25
+ /* keep default */
26
+ }
27
+ throw new Error(message);
28
+ }
29
+ // ─── OAuth clients ────────────────────────────────────────────────────────────
30
+ export async function loadOAuthClients(fetchFn) {
31
+ return readData(await fetchFn('/api/v1/auth/oauth-clients'));
32
+ }
33
+ export async function createOAuthClient(fetchFn, data) {
34
+ return readData(await fetchFn('/api/v1/auth/oauth-clients', { method: 'POST', body: JSON.stringify(data) }));
35
+ }
36
+ export async function updateOAuthClient(fetchFn, id, data) {
37
+ return readData(await fetchFn(`/api/v1/auth/oauth-clients/${id}`, { method: 'PUT', body: JSON.stringify(data) }));
38
+ }
39
+ export async function deleteOAuthClient(fetchFn, id) {
40
+ await expectOk(await fetchFn(`/api/v1/auth/oauth-clients/${id}`, { method: 'DELETE' }));
41
+ }
42
+ // ─── API keys ─────────────────────────────────────────────────────────────────
43
+ export async function loadApiKeys(fetchFn) {
44
+ return readData(await fetchFn('/api/v1/auth/api-keys'));
45
+ }
46
+ export async function createApiKey(fetchFn, data) {
47
+ return readData(await fetchFn('/api/v1/auth/api-keys', { method: 'POST', body: JSON.stringify(data) }));
48
+ }
49
+ export async function revokeApiKey(fetchFn, id) {
50
+ await expectOk(await fetchFn(`/api/v1/auth/api-keys/${id}`, { method: 'DELETE' }));
51
+ }
52
+ //# sourceMappingURL=web-services-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-services-data.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/web-services-data.ts"],"names":[],"mappings":"AA4CA,KAAK,UAAU,QAAQ,CAAI,GAAa;IACtC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,IAAI,OAAO,GAAG,mBAAmB,GAAG,CAAC,MAAM,GAAG,CAAA;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;YAC7B,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,OAAO,CAAA;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB;QACpB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;IAC7B,OAAO,IAAI,CAAC,IAAS,CAAA;AACvB,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAa;IACnC,IAAI,GAAG,CAAC,EAAE;QAAE,OAAM;IAClB,IAAI,OAAO,GAAG,mBAAmB,GAAG,CAAC,MAAM,GAAG,CAAA;IAC9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAC7B,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,OAAO,CAAA;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,kBAAkB;IACpB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;AAC1B,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAkB;IACvD,OAAO,QAAQ,CAAuB,MAAM,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAA;AACpF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAkB,EAAE,IAA2B;IACrF,OAAO,QAAQ,CACb,MAAM,OAAO,CAAC,4BAA4B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAC5F,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAkB,EAAE,EAAU,EAAE,IAA2B;IACjG,OAAO,QAAQ,CACb,MAAM,OAAO,CAAC,8BAA8B,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CACjG,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAkB,EAAE,EAAU;IACpE,MAAM,QAAQ,CAAC,MAAM,OAAO,CAAC,8BAA8B,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AACzF,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAkB;IAClD,OAAO,QAAQ,CAAkB,MAAM,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAkB,EAAE,IAAsB;IAC3E,OAAO,QAAQ,CACb,MAAM,OAAO,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CACvF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAkB,EAAE,EAAU;IAC/D,MAAM,QAAQ,CAAC,MAAM,OAAO,CAAC,yBAAyB,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AACpF,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Router } from './router.js';
2
+ import type { KywiDb } from '../db/client.js';
3
+ import type { KywiConfig } from '../config/types.js';
4
+ export interface AdminFeaturesRouteContext {
5
+ config: KywiConfig;
6
+ db: KywiDb;
7
+ authSecret: string;
8
+ }
9
+ export declare function registerAdminFeaturesRoutes(router: Router, ctx: AdminFeaturesRouteContext): void;
10
+ //# sourceMappingURL=admin-features-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-features-routes.d.ts","sourceRoot":"","sources":["../../src/api/admin-features-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AA2BpD,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,yBAAyB,GAAG,IAAI,CAiChG"}
@@ -0,0 +1,61 @@
1
+ import { z } from 'zod';
2
+ import { jsonOk, jsonError, unauthorized, forbidden, validationError } from './response.js';
3
+ import { resolveAuth } from './auth.js';
4
+ import { hasMinRole } from '../auth/roles.js';
5
+ import { toSiteUuid } from './site-context.js';
6
+ import { getAdminFeatureFlags, setAdminFeatureFlags } from '../db/admin-features-queries.js';
7
+ /**
8
+ * T16 runtime admin feature-flag routes (plan §4). Thin wrappers over the
9
+ * per-site `admin.features` settings-key queries.
10
+ *
11
+ * Authz is deliberately asymmetric:
12
+ * - `GET /admin-features?siteId=` is readable by ANY authenticated admin, because
13
+ * every signed-in role needs the flag map to render its nav (the map decides
14
+ * which surfaces are hidden). No role floor beyond a valid session.
15
+ * - `PUT /admin-features?siteId=` is superAdmin-ONLY — stricter than the
16
+ * siteAdmin+ general `/sites/:siteId/settings` routes — since flipping these
17
+ * flags reshapes the admin for everyone on the site.
18
+ *
19
+ * The runtime toggle is a UI gate, not a security boundary: the underlying
20
+ * `/api/v1` endpoints stay governed by roles regardless of these flags
21
+ * (plan §4, risk 4). `siteId` (config slug or DB UUID, or omitted) is resolved
22
+ * to a DB UUID via `toSiteUuid`, falling back to the first configured site.
23
+ */
24
+ const flagsSchema = z.record(z.boolean());
25
+ export function registerAdminFeaturesRoutes(router, ctx) {
26
+ const { config, db, authSecret } = ctx;
27
+ // GET /admin-features?siteId= — any authenticated admin (needed to render nav).
28
+ router.get('/admin-features', async (req) => {
29
+ const auth = await resolveAuth(req.headers.get('authorization'), authSecret, db);
30
+ if (!auth.user)
31
+ return unauthorized();
32
+ const url = new URL(req.url);
33
+ const siteId = await toSiteUuid(db, url.searchParams.get('siteId'), config);
34
+ const flags = await getAdminFeatureFlags(db, siteId);
35
+ return jsonOk({ siteId, flags });
36
+ });
37
+ // PUT /admin-features?siteId= — superAdmin only. Body = flag map { id: boolean }.
38
+ router.put('/admin-features', async (req) => {
39
+ const auth = await resolveAuth(req.headers.get('authorization'), authSecret, db);
40
+ if (!auth.user)
41
+ return unauthorized();
42
+ if (!hasMinRole(auth.user.role, 'superAdmin'))
43
+ return forbidden();
44
+ let body;
45
+ try {
46
+ body = await req.json();
47
+ }
48
+ catch {
49
+ return jsonError('BAD_REQUEST', 'Invalid JSON', 400);
50
+ }
51
+ const parsed = flagsSchema.safeParse(body);
52
+ if (!parsed.success) {
53
+ return validationError(parsed.error.errors.map(e => ({ path: e.path.join('.'), message: e.message })));
54
+ }
55
+ const url = new URL(req.url);
56
+ const siteId = await toSiteUuid(db, url.searchParams.get('siteId'), config);
57
+ const flags = await setAdminFeatureFlags(db, siteId, parsed.data);
58
+ return jsonOk({ siteId, flags });
59
+ });
60
+ }
61
+ //# sourceMappingURL=admin-features-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-features-routes.js","sourceRoot":"","sources":["../../src/api/admin-features-routes.ts"],"names":[],"mappings":"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"}
@@ -30,10 +30,10 @@ export declare function createResolvers(db: KywiDb, config: KywiConfig): {
30
30
  slug: string;
31
31
  sortOrder: number;
32
32
  updatedAt: Date;
33
- createdAt: Date;
34
33
  name: string;
35
- isActive: boolean;
36
34
  description: string | null;
35
+ createdAt: Date;
36
+ isActive: boolean;
37
37
  isInterestGroup: boolean;
38
38
  notes: string | null;
39
39
  }[]>;
@@ -46,18 +46,18 @@ export declare function createResolvers(db: KywiDb, config: KywiConfig): {
46
46
  id: string;
47
47
  siteId: string;
48
48
  updatedAt: Date;
49
+ caption: string | null;
50
+ width: number | null;
51
+ height: number | null;
52
+ tags: unknown;
49
53
  createdAt: Date;
50
54
  deletedAt: Date | null;
51
55
  filename: string;
52
56
  mimeType: string;
53
57
  fileSize: number;
54
- width: number | null;
55
- height: number | null;
56
58
  duration: number | null;
57
59
  originalFilename: string;
58
60
  altText: string | null;
59
- caption: string | null;
60
- tags: unknown;
61
61
  uploadedBy: string | null;
62
62
  storageKey: string;
63
63
  } | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AA4BvD,OAAO,KAAK,EAAE,UAAU,EAAmD,MAAM,oBAAoB,CAAA;AACrG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,WAAW,CAAA;AACzB,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAA;AAChF,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,aAAa,CAAC,EAAE,iBAAiB,CAAA;IACjC,mFAAmF;IACnF,eAAe,CAAC,EAAE,eAAe,CAAA;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAChE;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAwa3F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AA4BvD,OAAO,KAAK,EAAE,UAAU,EAAmD,MAAM,oBAAoB,CAAA;AACrG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,WAAW,CAAA;AACzB,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAA;AAChF,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,aAAa,CAAC,EAAE,iBAAiB,CAAA;IACjC,mFAAmF;IACnF,eAAe,CAAC,EAAE,eAAe,CAAA;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAChE;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAya3F"}