@aphexcms/cms-core 9.4.0 → 9.5.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 (408) hide show
  1. package/dist/admin/block-previews.svelte.d.ts +46 -0
  2. package/dist/admin/block-previews.svelte.d.ts.map +1 -0
  3. package/dist/admin/block-previews.svelte.js +26 -0
  4. package/dist/admin/field-components.svelte.d.ts +16 -0
  5. package/dist/admin/field-components.svelte.d.ts.map +1 -0
  6. package/dist/admin/field-components.svelte.js +18 -0
  7. package/dist/admin/nav.svelte.d.ts +34 -0
  8. package/dist/admin/nav.svelte.d.ts.map +1 -0
  9. package/dist/admin/nav.svelte.js +78 -0
  10. package/dist/admin/slots.svelte.d.ts +50 -0
  11. package/dist/admin/slots.svelte.d.ts.map +1 -0
  12. package/dist/admin/slots.svelte.js +67 -0
  13. package/dist/admin/types.d.ts +7 -0
  14. package/dist/admin/types.d.ts.map +1 -0
  15. package/dist/admin/types.js +1 -0
  16. package/dist/api/schemas/api-keys.d.ts +4 -37
  17. package/dist/api/schemas/api-keys.d.ts.map +1 -1
  18. package/dist/api/schemas/api-keys.js +5 -2
  19. package/dist/api/schemas/assets.d.ts +4 -0
  20. package/dist/api/schemas/assets.d.ts.map +1 -1
  21. package/dist/api/schemas/assets.js +3 -0
  22. package/dist/api/schemas/plugin-settings.d.ts +6 -0
  23. package/dist/api/schemas/plugin-settings.d.ts.map +1 -0
  24. package/dist/api/schemas/plugin-settings.js +8 -0
  25. package/dist/api/schemas/roles.d.ts +7 -56
  26. package/dist/api/schemas/roles.d.ts.map +1 -1
  27. package/dist/api/schemas/roles.js +11 -6
  28. package/dist/api/schemas/user.d.ts +2 -1
  29. package/dist/api/schemas/user.d.ts.map +1 -1
  30. package/dist/api/schemas/user.js +7 -2
  31. package/dist/app-augment.d.ts +11 -0
  32. package/dist/app-augment.d.ts.map +1 -1
  33. package/dist/app.d.ts +2 -0
  34. package/dist/auth/provider.d.ts +3 -0
  35. package/dist/auth/provider.d.ts.map +1 -1
  36. package/dist/cli/index.js +4 -4
  37. package/dist/cli/index.js.map +1 -1
  38. package/dist/client/index.d.ts +6 -0
  39. package/dist/client/index.d.ts.map +1 -1
  40. package/dist/client/index.js +9 -0
  41. package/dist/components/AdminApp.svelte +259 -113
  42. package/dist/components/AdminApp.svelte.d.ts +18 -2
  43. package/dist/components/AdminApp.svelte.d.ts.map +1 -1
  44. package/dist/components/admin/AdminSlot.svelte +18 -0
  45. package/dist/components/admin/AdminSlot.svelte.d.ts +12 -0
  46. package/dist/components/admin/AdminSlot.svelte.d.ts.map +1 -0
  47. package/dist/components/admin/DocumentEditor.svelte +646 -385
  48. package/dist/components/admin/DocumentEditor.svelte.d.ts +13 -0
  49. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
  50. package/dist/components/admin/MediaBrowser.svelte +13 -3
  51. package/dist/components/admin/MediaBrowser.svelte.d.ts.map +1 -1
  52. package/dist/components/admin/PluginSettingsPanel.svelte +231 -0
  53. package/dist/components/admin/PluginSettingsPanel.svelte.d.ts +8 -0
  54. package/dist/components/admin/PluginSettingsPanel.svelte.d.ts.map +1 -0
  55. package/dist/components/admin/SchemaField.svelte +76 -95
  56. package/dist/components/admin/SchemaField.svelte.d.ts +7 -0
  57. package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -1
  58. package/dist/components/admin/fields/ArrayField.svelte +24 -2
  59. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
  60. package/dist/components/admin/fields/FieldInput.svelte +109 -0
  61. package/dist/components/admin/fields/FieldInput.svelte.d.ts +17 -0
  62. package/dist/components/admin/fields/FieldInput.svelte.d.ts.map +1 -0
  63. package/dist/components/admin/fields/richtext/PortableTextImageView.svelte +5 -12
  64. package/dist/components/admin/fields/richtext/PortableTextImageView.svelte.d.ts +2 -9
  65. package/dist/components/admin/fields/richtext/PortableTextImageView.svelte.d.ts.map +1 -1
  66. package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte +18 -17
  67. package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte.d.ts +2 -9
  68. package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte.d.ts.map +1 -1
  69. package/dist/components/admin/fields/richtext/RichtextField.svelte +55 -2
  70. package/dist/components/admin/fields/richtext/RichtextField.svelte.d.ts.map +1 -1
  71. package/dist/components/admin/fields/richtext/portable-text-object-node.d.ts +7 -0
  72. package/dist/components/admin/fields/richtext/portable-text-object-node.d.ts.map +1 -1
  73. package/dist/components/admin/fields/richtext/portable-text-object-node.js +4 -2
  74. package/dist/components/admin/fields/richtext/svelte-node-view.d.ts +16 -1
  75. package/dist/components/admin/fields/richtext/svelte-node-view.d.ts.map +1 -1
  76. package/dist/components/admin/fields/richtext/svelte-node-view.js +20 -1
  77. package/dist/components/layout/OrganizationSwitcher.svelte +31 -10
  78. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts.map +1 -1
  79. package/dist/components/layout/Sidebar.svelte +49 -11
  80. package/dist/components/layout/Sidebar.svelte.d.ts +5 -1
  81. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -1
  82. package/dist/components/layout/sidebar/AppSidebar.svelte +66 -3
  83. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts +5 -0
  84. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts.map +1 -1
  85. package/dist/components/layout/sidebar/NavMain.svelte +3 -2
  86. package/dist/components/layout/sidebar/NavMain.svelte.d.ts +4 -3
  87. package/dist/components/layout/sidebar/NavMain.svelte.d.ts.map +1 -1
  88. package/dist/components/layout/sidebar/NavUser.svelte +5 -1
  89. package/dist/config.d.ts.map +1 -1
  90. package/dist/config.js +11 -0
  91. package/dist/db/interfaces/asset.d.ts +1 -0
  92. package/dist/db/interfaces/asset.d.ts.map +1 -1
  93. package/dist/db/interfaces/index.d.ts +3 -1
  94. package/dist/db/interfaces/index.d.ts.map +1 -1
  95. package/dist/db/interfaces/plugin-settings.d.ts +23 -0
  96. package/dist/db/interfaces/plugin-settings.d.ts.map +1 -0
  97. package/dist/db/interfaces/plugin-settings.js +13 -0
  98. package/dist/db/interfaces/role.d.ts +14 -5
  99. package/dist/db/interfaces/role.d.ts.map +1 -1
  100. package/dist/engine.d.ts +28 -0
  101. package/dist/engine.d.ts.map +1 -1
  102. package/dist/engine.js +44 -0
  103. package/dist/hooks.d.ts +6 -0
  104. package/dist/hooks.d.ts.map +1 -1
  105. package/dist/hooks.js +59 -2
  106. package/dist/index.d.ts +2 -0
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +5 -0
  109. package/dist/lib/admin/block-previews.svelte.d.ts +46 -0
  110. package/dist/lib/admin/block-previews.svelte.d.ts.map +1 -0
  111. package/dist/lib/admin/block-previews.svelte.js +27 -0
  112. package/dist/lib/admin/block-previews.svelte.js.map +1 -0
  113. package/dist/lib/admin/field-components.svelte.d.ts +16 -0
  114. package/dist/lib/admin/field-components.svelte.d.ts.map +1 -0
  115. package/dist/lib/admin/field-components.svelte.js +19 -0
  116. package/dist/lib/admin/field-components.svelte.js.map +1 -0
  117. package/dist/lib/admin/nav.svelte.d.ts +34 -0
  118. package/dist/lib/admin/nav.svelte.d.ts.map +1 -0
  119. package/dist/lib/admin/nav.svelte.js +79 -0
  120. package/dist/lib/admin/nav.svelte.js.map +1 -0
  121. package/dist/lib/admin/slots.svelte.d.ts +50 -0
  122. package/dist/lib/admin/slots.svelte.d.ts.map +1 -0
  123. package/dist/lib/admin/slots.svelte.js +68 -0
  124. package/dist/lib/admin/slots.svelte.js.map +1 -0
  125. package/dist/lib/admin/types.d.ts +7 -0
  126. package/dist/lib/admin/types.d.ts.map +1 -0
  127. package/dist/lib/admin/types.js +2 -0
  128. package/dist/lib/admin/types.js.map +1 -0
  129. package/dist/lib/api/schemas/api-keys.d.ts +4 -37
  130. package/dist/lib/api/schemas/api-keys.d.ts.map +1 -1
  131. package/dist/lib/api/schemas/api-keys.js +5 -2
  132. package/dist/lib/api/schemas/api-keys.js.map +1 -1
  133. package/dist/lib/api/schemas/assets.d.ts +4 -0
  134. package/dist/lib/api/schemas/assets.d.ts.map +1 -1
  135. package/dist/lib/api/schemas/assets.js +3 -0
  136. package/dist/lib/api/schemas/assets.js.map +1 -1
  137. package/dist/lib/api/schemas/plugin-settings.d.ts +6 -0
  138. package/dist/lib/api/schemas/plugin-settings.d.ts.map +1 -0
  139. package/dist/lib/api/schemas/plugin-settings.js +9 -0
  140. package/dist/lib/api/schemas/plugin-settings.js.map +1 -0
  141. package/dist/lib/api/schemas/roles.d.ts +7 -56
  142. package/dist/lib/api/schemas/roles.d.ts.map +1 -1
  143. package/dist/lib/api/schemas/roles.js +11 -6
  144. package/dist/lib/api/schemas/roles.js.map +1 -1
  145. package/dist/lib/api/schemas/user.d.ts +2 -1
  146. package/dist/lib/api/schemas/user.d.ts.map +1 -1
  147. package/dist/lib/api/schemas/user.js +7 -2
  148. package/dist/lib/api/schemas/user.js.map +1 -1
  149. package/dist/lib/app-augment.d.ts +11 -0
  150. package/dist/lib/app-augment.d.ts.map +1 -1
  151. package/dist/lib/auth/provider.d.ts +3 -0
  152. package/dist/lib/auth/provider.d.ts.map +1 -1
  153. package/dist/lib/client/index.d.ts +6 -0
  154. package/dist/lib/client/index.d.ts.map +1 -1
  155. package/dist/lib/client/index.js +9 -0
  156. package/dist/lib/client/index.js.map +1 -1
  157. package/dist/lib/components/admin/fields/richtext/portable-text-object-node.d.ts +7 -0
  158. package/dist/lib/components/admin/fields/richtext/portable-text-object-node.d.ts.map +1 -1
  159. package/dist/lib/components/admin/fields/richtext/portable-text-object-node.js +4 -2
  160. package/dist/lib/components/admin/fields/richtext/portable-text-object-node.js.map +1 -1
  161. package/dist/lib/components/admin/fields/richtext/svelte-node-view.d.ts +16 -1
  162. package/dist/lib/components/admin/fields/richtext/svelte-node-view.d.ts.map +1 -1
  163. package/dist/lib/components/admin/fields/richtext/svelte-node-view.js +20 -1
  164. package/dist/lib/components/admin/fields/richtext/svelte-node-view.js.map +1 -1
  165. package/dist/lib/config.d.ts.map +1 -1
  166. package/dist/lib/config.js +11 -0
  167. package/dist/lib/config.js.map +1 -1
  168. package/dist/lib/db/interfaces/asset.d.ts +1 -0
  169. package/dist/lib/db/interfaces/asset.d.ts.map +1 -1
  170. package/dist/lib/db/interfaces/index.d.ts +3 -1
  171. package/dist/lib/db/interfaces/index.d.ts.map +1 -1
  172. package/dist/lib/db/interfaces/plugin-settings.d.ts +23 -0
  173. package/dist/lib/db/interfaces/plugin-settings.d.ts.map +1 -0
  174. package/dist/lib/db/interfaces/plugin-settings.js +14 -0
  175. package/dist/lib/db/interfaces/plugin-settings.js.map +1 -0
  176. package/dist/lib/db/interfaces/role.d.ts +14 -5
  177. package/dist/lib/db/interfaces/role.d.ts.map +1 -1
  178. package/dist/lib/engine.d.ts +28 -0
  179. package/dist/lib/engine.d.ts.map +1 -1
  180. package/dist/lib/engine.js +44 -0
  181. package/dist/lib/engine.js.map +1 -1
  182. package/dist/lib/hooks.d.ts +6 -0
  183. package/dist/lib/hooks.d.ts.map +1 -1
  184. package/dist/lib/hooks.js +59 -2
  185. package/dist/lib/hooks.js.map +1 -1
  186. package/dist/lib/index.d.ts +2 -0
  187. package/dist/lib/index.d.ts.map +1 -1
  188. package/dist/lib/index.js +5 -0
  189. package/dist/lib/index.js.map +1 -1
  190. package/dist/lib/local-api/collection-api.d.ts.map +1 -1
  191. package/dist/lib/local-api/collection-api.js +4 -2
  192. package/dist/lib/local-api/collection-api.js.map +1 -1
  193. package/dist/lib/local-api/types.d.ts +8 -0
  194. package/dist/lib/local-api/types.d.ts.map +1 -1
  195. package/dist/lib/mcp/tools.d.ts.map +1 -1
  196. package/dist/lib/mcp/tools.js +69 -1
  197. package/dist/lib/mcp/tools.js.map +1 -1
  198. package/dist/lib/permissions-context.svelte.d.ts +7 -4
  199. package/dist/lib/permissions-context.svelte.d.ts.map +1 -1
  200. package/dist/lib/permissions-context.svelte.js.map +1 -1
  201. package/dist/lib/plugins/index.d.ts +3 -0
  202. package/dist/lib/plugins/index.d.ts.map +1 -0
  203. package/dist/lib/plugins/index.js +3 -0
  204. package/dist/lib/plugins/index.js.map +1 -0
  205. package/dist/lib/plugins/resolver.d.ts +49 -0
  206. package/dist/lib/plugins/resolver.d.ts.map +1 -0
  207. package/dist/lib/plugins/resolver.js +66 -0
  208. package/dist/lib/plugins/resolver.js.map +1 -0
  209. package/dist/lib/plugins/types.d.ts +233 -0
  210. package/dist/lib/plugins/types.d.ts.map +1 -0
  211. package/dist/lib/plugins/types.js +9 -0
  212. package/dist/lib/plugins/types.js.map +1 -0
  213. package/dist/lib/schema-utils/desugar.d.ts +27 -0
  214. package/dist/lib/schema-utils/desugar.d.ts.map +1 -0
  215. package/dist/lib/schema-utils/desugar.js +102 -0
  216. package/dist/lib/schema-utils/desugar.js.map +1 -0
  217. package/dist/lib/schema-utils/index.d.ts +2 -0
  218. package/dist/lib/schema-utils/index.d.ts.map +1 -1
  219. package/dist/lib/schema-utils/index.js +2 -0
  220. package/dist/lib/schema-utils/index.js.map +1 -1
  221. package/dist/lib/schema-utils/settings.d.ts +17 -0
  222. package/dist/lib/schema-utils/settings.d.ts.map +1 -0
  223. package/dist/lib/schema-utils/settings.js +23 -0
  224. package/dist/lib/schema-utils/settings.js.map +1 -0
  225. package/dist/lib/schema-utils/validator.d.ts.map +1 -1
  226. package/dist/lib/schema-utils/validator.js +11 -0
  227. package/dist/lib/schema-utils/validator.js.map +1 -1
  228. package/dist/lib/security/secret-crypto.d.ts +18 -0
  229. package/dist/lib/security/secret-crypto.d.ts.map +1 -0
  230. package/dist/lib/security/secret-crypto.js +71 -0
  231. package/dist/lib/security/secret-crypto.js.map +1 -0
  232. package/dist/lib/server/api/index.d.ts.map +1 -1
  233. package/dist/lib/server/api/index.js +3 -0
  234. package/dist/lib/server/api/index.js.map +1 -1
  235. package/dist/lib/server/api/routes/assets.d.ts.map +1 -1
  236. package/dist/lib/server/api/routes/assets.js +8 -2
  237. package/dist/lib/server/api/routes/assets.js.map +1 -1
  238. package/dist/lib/server/api/routes/organizations.d.ts.map +1 -1
  239. package/dist/lib/server/api/routes/organizations.js +4 -1
  240. package/dist/lib/server/api/routes/organizations.js.map +1 -1
  241. package/dist/lib/server/api/routes/plugin-settings.d.ts +4 -0
  242. package/dist/lib/server/api/routes/plugin-settings.d.ts.map +1 -0
  243. package/dist/lib/server/api/routes/plugin-settings.js +109 -0
  244. package/dist/lib/server/api/routes/plugin-settings.js.map +1 -0
  245. package/dist/lib/server/api/routes/roles.d.ts.map +1 -1
  246. package/dist/lib/server/api/routes/roles.js +37 -0
  247. package/dist/lib/server/api/routes/roles.js.map +1 -1
  248. package/dist/lib/server/api/routes/user.d.ts.map +1 -1
  249. package/dist/lib/server/api/routes/user.js +14 -3
  250. package/dist/lib/server/api/routes/user.js.map +1 -1
  251. package/dist/lib/services/asset-service.d.ts +1 -0
  252. package/dist/lib/services/asset-service.d.ts.map +1 -1
  253. package/dist/lib/services/asset-service.js.map +1 -1
  254. package/dist/lib/services/index.d.ts +2 -0
  255. package/dist/lib/services/index.d.ts.map +1 -1
  256. package/dist/lib/services/index.js +1 -0
  257. package/dist/lib/services/index.js.map +1 -1
  258. package/dist/lib/services/plugin-settings-service.d.ts +76 -0
  259. package/dist/lib/services/plugin-settings-service.d.ts.map +1 -0
  260. package/dist/lib/services/plugin-settings-service.js +236 -0
  261. package/dist/lib/services/plugin-settings-service.js.map +1 -0
  262. package/dist/lib/services/roles-service.d.ts +2 -2
  263. package/dist/lib/services/roles-service.d.ts.map +1 -1
  264. package/dist/lib/services/roles-service.js.map +1 -1
  265. package/dist/lib/theme/css.d.ts +30 -0
  266. package/dist/lib/theme/css.d.ts.map +1 -0
  267. package/dist/lib/theme/css.js +54 -0
  268. package/dist/lib/theme/css.js.map +1 -0
  269. package/dist/lib/theme/derive.d.ts +27 -0
  270. package/dist/lib/theme/derive.d.ts.map +1 -0
  271. package/dist/lib/theme/derive.js +108 -0
  272. package/dist/lib/theme/derive.js.map +1 -0
  273. package/dist/lib/theme/index.d.ts +5 -0
  274. package/dist/lib/theme/index.d.ts.map +1 -0
  275. package/dist/lib/theme/index.js +5 -0
  276. package/dist/lib/theme/index.js.map +1 -0
  277. package/dist/lib/theme/schemes.d.ts +60 -0
  278. package/dist/lib/theme/schemes.d.ts.map +1 -0
  279. package/dist/lib/theme/schemes.js +150 -0
  280. package/dist/lib/theme/schemes.js.map +1 -0
  281. package/dist/lib/theme/tokens.d.ts +57 -0
  282. package/dist/lib/theme/tokens.d.ts.map +1 -0
  283. package/dist/lib/theme/tokens.js +11 -0
  284. package/dist/lib/theme/tokens.js.map +1 -0
  285. package/dist/{cli/generate-types.d.ts → lib/type-gen.d.ts} +3 -6
  286. package/dist/lib/type-gen.d.ts.map +1 -0
  287. package/dist/lib/type-gen.js +658 -0
  288. package/dist/lib/type-gen.js.map +1 -0
  289. package/dist/lib/types/auth.d.ts +10 -10
  290. package/dist/lib/types/auth.d.ts.map +1 -1
  291. package/dist/lib/types/capabilities.d.ts +50 -9
  292. package/dist/lib/types/capabilities.d.ts.map +1 -1
  293. package/dist/lib/types/capabilities.js +147 -5
  294. package/dist/lib/types/capabilities.js.map +1 -1
  295. package/dist/lib/types/config.d.ts +30 -1
  296. package/dist/lib/types/config.d.ts.map +1 -1
  297. package/dist/lib/types/schemas.d.ts +90 -2
  298. package/dist/lib/types/schemas.d.ts.map +1 -1
  299. package/dist/lib/types/schemas.js.map +1 -1
  300. package/dist/lib/types/sidebar.d.ts +3 -1
  301. package/dist/lib/types/sidebar.d.ts.map +1 -1
  302. package/dist/lib/utils/index.d.ts +1 -0
  303. package/dist/lib/utils/index.d.ts.map +1 -1
  304. package/dist/lib/utils/index.js +1 -0
  305. package/dist/lib/utils/index.js.map +1 -1
  306. package/dist/lib/utils/preview.d.ts +16 -5
  307. package/dist/lib/utils/preview.d.ts.map +1 -1
  308. package/dist/lib/utils/preview.js +7 -2
  309. package/dist/lib/utils/preview.js.map +1 -1
  310. package/dist/lib/vite/index.d.ts +7 -0
  311. package/dist/lib/vite/index.d.ts.map +1 -1
  312. package/dist/lib/vite/index.js +37 -6
  313. package/dist/lib/vite/index.js.map +1 -1
  314. package/dist/local-api/collection-api.d.ts.map +1 -1
  315. package/dist/local-api/collection-api.js +4 -2
  316. package/dist/local-api/types.d.ts +8 -0
  317. package/dist/local-api/types.d.ts.map +1 -1
  318. package/dist/mcp/tools.d.ts.map +1 -1
  319. package/dist/mcp/tools.js +69 -1
  320. package/dist/permissions-context.svelte.d.ts +7 -4
  321. package/dist/permissions-context.svelte.d.ts.map +1 -1
  322. package/dist/plugins/index.d.ts +3 -0
  323. package/dist/plugins/index.d.ts.map +1 -0
  324. package/dist/plugins/index.js +2 -0
  325. package/dist/plugins/resolver.d.ts +49 -0
  326. package/dist/plugins/resolver.d.ts.map +1 -0
  327. package/dist/plugins/resolver.js +65 -0
  328. package/dist/plugins/types.d.ts +233 -0
  329. package/dist/plugins/types.d.ts.map +1 -0
  330. package/dist/plugins/types.js +8 -0
  331. package/dist/schema-utils/desugar.d.ts +27 -0
  332. package/dist/schema-utils/desugar.d.ts.map +1 -0
  333. package/dist/schema-utils/desugar.js +101 -0
  334. package/dist/schema-utils/index.d.ts +2 -0
  335. package/dist/schema-utils/index.d.ts.map +1 -1
  336. package/dist/schema-utils/index.js +2 -0
  337. package/dist/schema-utils/settings.d.ts +17 -0
  338. package/dist/schema-utils/settings.d.ts.map +1 -0
  339. package/dist/schema-utils/settings.js +22 -0
  340. package/dist/schema-utils/validator.d.ts.map +1 -1
  341. package/dist/schema-utils/validator.js +11 -0
  342. package/dist/security/secret-crypto.d.ts +18 -0
  343. package/dist/security/secret-crypto.d.ts.map +1 -0
  344. package/dist/security/secret-crypto.js +70 -0
  345. package/dist/server/api/index.d.ts.map +1 -1
  346. package/dist/server/api/index.js +3 -0
  347. package/dist/server/api/routes/assets.d.ts.map +1 -1
  348. package/dist/server/api/routes/assets.js +8 -2
  349. package/dist/server/api/routes/organizations.d.ts.map +1 -1
  350. package/dist/server/api/routes/organizations.js +4 -1
  351. package/dist/server/api/routes/plugin-settings.d.ts +4 -0
  352. package/dist/server/api/routes/plugin-settings.d.ts.map +1 -0
  353. package/dist/server/api/routes/plugin-settings.js +108 -0
  354. package/dist/server/api/routes/roles.d.ts.map +1 -1
  355. package/dist/server/api/routes/roles.js +37 -0
  356. package/dist/server/api/routes/user.d.ts.map +1 -1
  357. package/dist/server/api/routes/user.js +14 -3
  358. package/dist/services/asset-service.d.ts +1 -0
  359. package/dist/services/asset-service.d.ts.map +1 -1
  360. package/dist/services/index.d.ts +2 -0
  361. package/dist/services/index.d.ts.map +1 -1
  362. package/dist/services/index.js +1 -0
  363. package/dist/services/plugin-settings-service.d.ts +76 -0
  364. package/dist/services/plugin-settings-service.d.ts.map +1 -0
  365. package/dist/services/plugin-settings-service.js +235 -0
  366. package/dist/services/roles-service.d.ts +2 -2
  367. package/dist/services/roles-service.d.ts.map +1 -1
  368. package/dist/theme/css.d.ts +30 -0
  369. package/dist/theme/css.d.ts.map +1 -0
  370. package/dist/theme/css.js +53 -0
  371. package/dist/theme/derive.d.ts +27 -0
  372. package/dist/theme/derive.d.ts.map +1 -0
  373. package/dist/theme/derive.js +107 -0
  374. package/dist/theme/index.d.ts +5 -0
  375. package/dist/theme/index.d.ts.map +1 -0
  376. package/dist/theme/index.js +4 -0
  377. package/dist/theme/schemes.d.ts +60 -0
  378. package/dist/theme/schemes.d.ts.map +1 -0
  379. package/dist/theme/schemes.js +149 -0
  380. package/dist/theme/tokens.d.ts +57 -0
  381. package/dist/theme/tokens.d.ts.map +1 -0
  382. package/dist/theme/tokens.js +10 -0
  383. package/dist/type-gen.d.ts +19 -0
  384. package/dist/type-gen.d.ts.map +1 -0
  385. package/dist/{cli/generate-types.js → type-gen.js} +101 -68
  386. package/dist/types/auth.d.ts +10 -10
  387. package/dist/types/auth.d.ts.map +1 -1
  388. package/dist/types/capabilities.d.ts +50 -9
  389. package/dist/types/capabilities.d.ts.map +1 -1
  390. package/dist/types/capabilities.js +147 -5
  391. package/dist/types/config.d.ts +30 -1
  392. package/dist/types/config.d.ts.map +1 -1
  393. package/dist/types/schemas.d.ts +90 -2
  394. package/dist/types/schemas.d.ts.map +1 -1
  395. package/dist/types/sidebar.d.ts +3 -1
  396. package/dist/types/sidebar.d.ts.map +1 -1
  397. package/dist/utils/index.d.ts +1 -0
  398. package/dist/utils/index.d.ts.map +1 -1
  399. package/dist/utils/index.js +1 -0
  400. package/dist/utils/preview.d.ts +16 -5
  401. package/dist/utils/preview.d.ts.map +1 -1
  402. package/dist/utils/preview.js +7 -2
  403. package/dist/vite/index.d.ts +7 -0
  404. package/dist/vite/index.d.ts.map +1 -1
  405. package/dist/vite/index.js +37 -6
  406. package/package.json +6 -4
  407. package/dist/cli/generate-types.d.ts.map +0 -1
  408. package/dist/cli/generate-types.js.map +0 -1
@@ -10,14 +10,24 @@
10
10
  import type { SidebarData } from '../../types/sidebar';
11
11
  import AppSidebar from './sidebar/AppSidebar.svelte';
12
12
  import { usePermissions } from '../../permissions-context.svelte';
13
+ import { setAdminSlots } from '../../admin/slots.svelte';
14
+ import type { AdminArea } from '../../admin/types';
15
+ import type { CMSPlugin, AdminToolPart } from '../../plugins/types';
16
+
17
+ // Admin extension-slot registry, published to the whole admin subtree. The
18
+ // navbar renders `navbar-start` / `navbar-end` outlets; the document editor (and
19
+ // later, plugins) register controls into them so everything lives in one bar.
20
+ const slots = setAdminSlots();
13
21
 
14
22
  type Props = {
15
23
  data: SidebarData;
16
24
  onSignOut?: () => void | Promise<void>;
17
25
  children: any;
18
26
  enableGraphiQL?: boolean;
19
- activeTab?: { value: 'structure' | 'vision' | 'media' };
27
+ activeTab?: { value: AdminArea };
20
28
  onTabChange?: (value: string) => void;
29
+ /** Plugin registry — used to render sidebar-placed admin tools as persistent nav. */
30
+ plugins?: CMSPlugin[];
21
31
  };
22
32
 
23
33
  let {
@@ -26,10 +36,11 @@
26
36
  children,
27
37
  enableGraphiQL = false,
28
38
  activeTab,
29
- onTabChange
39
+ onTabChange,
40
+ plugins = []
30
41
  }: Props = $props();
31
42
 
32
- function switchTab(value: 'structure' | 'vision' | 'media') {
43
+ function switchTab(value: AdminArea) {
33
44
  if (onTabChange) {
34
45
  onTabChange(value);
35
46
  } else if (activeTab) {
@@ -37,6 +48,24 @@
37
48
  }
38
49
  }
39
50
 
51
+ // Sidebar-placed admin tools (`placement: 'sidebar'`). Rendered here at the
52
+ // persistent layout level — not via AdminApp's slot — so the Tools nav stays
53
+ // visible on every admin page (settings included), where AdminApp isn't mounted.
54
+ // Capability-filtered with the same rule the part resolver uses.
55
+ const perms = usePermissions();
56
+ const sidebarTools = $derived(
57
+ (plugins ?? [])
58
+ .flatMap((p) => p.parts ?? [])
59
+ .filter(
60
+ (part): part is AdminToolPart =>
61
+ part.implements === 'aphex/admin/tool' && part.placement === 'sidebar'
62
+ )
63
+ .filter(
64
+ (t) => !t.requiredCapabilities?.length || t.requiredCapabilities.every((c) => perms.can(c))
65
+ )
66
+ .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))
67
+ );
68
+
40
69
  // Only show tabs on the main /admin page
41
70
  const showTabs = $derived(page.url.pathname === '/admin');
42
71
 
@@ -44,23 +73,25 @@
44
73
  // document list — a user without `document.read` won't be on /admin at
45
74
  // all). Media needs asset.read; Vision is dev-only so we leave it to
46
75
  // `enableGraphiQL` alone.
47
- const perms = usePermissions();
48
76
  const canSeeMedia = $derived(perms.can('asset.read'));
49
77
  </script>
50
78
 
51
79
  <ModeWatcher />
52
80
  <Toaster closeButton />
53
81
  <SidebarProvider class="h-screen">
54
- <AppSidebar {data} {onSignOut} />
82
+ <AppSidebar {data} {onSignOut} {sidebarTools} onSelectTool={(id) => switchTab(`plugin:${id}`)} />
55
83
  <SidebarInset class="flex h-full min-w-0 flex-col">
56
84
  <header
57
85
  class="border-rule flex h-16 shrink-0 items-center gap-2 border-b transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12"
58
86
  >
59
- <div class="flex w-full items-center px-4" class:justify-between={showTabs}>
60
- <!-- Left: Trigger and Separator -->
61
- <div class="flex items-center gap-2">
87
+ <div class="flex w-full items-center gap-2 px-4">
88
+ <!-- Left: Trigger, Separator, and navbar-start slot (e.g. editor breadcrumb) -->
89
+ <div class="flex min-w-0 items-center gap-2">
62
90
  <SidebarTrigger class="-ml-1" />
63
- <Separator orientation="vertical" class="mr-2 h-4" />
91
+ <Separator orientation="vertical" class="h-4" />
92
+ {#each slots.get('navbar-start') as entry (entry.id)}
93
+ {@render entry.snippet()}
94
+ {/each}
64
95
  </div>
65
96
 
66
97
  <!-- Center: Structure/Vision/Media Tabs (only on /admin page) -->
@@ -96,11 +127,18 @@
96
127
  Media
97
128
  </button>
98
129
  {/if}
130
+ <!-- Plugin admin-tool tabs register here (see AdminApp). -->
131
+ {#each slots.get('admin-tabs') as entry (entry.id)}
132
+ {@render entry.snippet()}
133
+ {/each}
99
134
  </div>
100
135
  {/if}
101
136
 
102
- <!-- Right: Theme Toggle -->
103
- <div class:ml-auto={!showTabs}>
137
+ <!-- Right: navbar-end slot (e.g. editor actions) + Theme Toggle -->
138
+ <div class="flex items-center gap-2 {showTabs ? '' : 'ml-auto'}">
139
+ {#each slots.get('navbar-end') as entry (entry.id)}
140
+ {@render entry.snippet()}
141
+ {/each}
104
142
  <Button onclick={toggleMode} variant="outline" size="icon" class="cursor-pointer">
105
143
  <Sun
106
144
  class="h-[1.2rem] w-[1.2rem] scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90"
@@ -1,13 +1,17 @@
1
1
  import type { SidebarData } from '../../types/sidebar.js';
2
+ import type { AdminArea } from '../../admin/types.js';
3
+ import type { CMSPlugin } from '../../plugins/types.js';
2
4
  type Props = {
3
5
  data: SidebarData;
4
6
  onSignOut?: () => void | Promise<void>;
5
7
  children: any;
6
8
  enableGraphiQL?: boolean;
7
9
  activeTab?: {
8
- value: 'structure' | 'vision' | 'media';
10
+ value: AdminArea;
9
11
  };
10
12
  onTabChange?: (value: string) => void;
13
+ /** Plugin registry — used to render sidebar-placed admin tools as persistent nav. */
14
+ plugins?: CMSPlugin[];
11
15
  };
12
16
  declare const Sidebar: import("svelte").Component<Props, {}, "">;
13
17
  type Sidebar = ReturnType<typeof Sidebar>;
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/layout/Sidebar.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKtD,KAAK,KAAK,GAAG;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,EAAE,GAAG,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAA;KAAE,CAAC;IACxD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,CAAC;AAmGH,QAAA,MAAM,OAAO,2CAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Sidebar.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/layout/Sidebar.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,qBAAqB,CAAC;AAGnE,KAAK,KAAK,GAAG;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,EAAE,GAAG,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,SAAS,CAAA;KAAE,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,qFAAqF;IACrF,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB,CAAC;AAuIH,QAAA,MAAM,OAAO,2CAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
@@ -3,7 +3,12 @@
3
3
  Sidebar,
4
4
  SidebarContent,
5
5
  SidebarFooter,
6
+ SidebarGroup,
7
+ SidebarGroupLabel,
6
8
  SidebarHeader,
9
+ SidebarMenu,
10
+ SidebarMenuItem,
11
+ SidebarMenuButton,
7
12
  SidebarRail
8
13
  } from '@aphexcms/ui/shadcn/sidebar';
9
14
  import OrganizationSwitcher from '../OrganizationSwitcher.svelte';
@@ -11,20 +16,51 @@
11
16
  import NavUser from './NavUser.svelte';
12
17
  import type { SidebarData } from '../../../types/sidebar';
13
18
  import type { ComponentProps } from 'svelte';
19
+ import { page } from '$app/state';
20
+ import type { AdminToolPart } from '../../../plugins/types';
21
+
22
+ // A sidebar-placed plugin tool lives on /admin with `?view=plugin:<id>`. The
23
+ // active view only counts on /admin — on settings (and other admin pages) no
24
+ // tool is "current", so clicking one navigates back to /admin?view=plugin:<id>.
25
+ const activeView = $derived(
26
+ page.url.pathname === '/admin' ? (page.url.searchParams.get('view') ?? '') : ''
27
+ );
28
+ // Its own nav item lights up; the parent /admin ("Studio") item shouldn't also
29
+ // — the more-specific tool wins, like nested nav. Suppress it in that case.
30
+ const pluginToolActive = $derived(activeView.startsWith('plugin:'));
31
+ const isToolActive = (id: string) => activeView === `plugin:${id}`;
32
+
33
+ function isNavActive(path: string, item: { url: string; exact?: boolean }): boolean {
34
+ if (pluginToolActive && item.url === '/admin') return false;
35
+ if (item.exact) return path === item.url;
36
+ const matches = path === item.url || path.startsWith(item.url + '/');
37
+ if (!matches) return false;
38
+ // Longest-match wins when items nest (mirrors NavMain's default tiebreak).
39
+ return !navMainItems.some(
40
+ (other) =>
41
+ other !== item &&
42
+ other.url.length > item.url.length &&
43
+ (path === other.url || path.startsWith(other.url + '/'))
44
+ );
45
+ }
14
46
 
15
47
  type Props = ComponentProps<typeof Sidebar> & {
16
48
  data: SidebarData;
17
49
  onSignOut?: () => void | Promise<void>;
50
+ /** Sidebar-placed plugin admin tools, already capability-filtered. */
51
+ sidebarTools?: AdminToolPart[];
52
+ /** Open a tool's `plugin:<id>` area (navigates to /admin if elsewhere). */
53
+ onSelectTool?: (id: string) => void;
18
54
  };
19
55
 
20
- let { data, onSignOut, ...restProps }: Props = $props();
56
+ let { data, onSignOut, sidebarTools = [], onSelectTool, ...restProps }: Props = $props();
21
57
 
22
58
  // Convert navItems to the format expected by NavMain
23
59
  const navMainItems = $derived(
24
60
  data?.navItems?.map((item) => ({
25
61
  title: item.label,
26
62
  url: item.href,
27
- icon: undefined, // We'll keep icons simple for now
63
+ icon: item.icon,
28
64
  isActive: false
29
65
  })) || [
30
66
  {
@@ -51,7 +87,34 @@
51
87
  </SidebarHeader>
52
88
 
53
89
  <SidebarContent>
54
- <NavMain items={navMainItems} />
90
+ <NavMain items={navMainItems} isActive={isNavActive} />
91
+
92
+ <!-- Plugin admin tools placed in the sidebar (placement: 'sidebar'). Rendered
93
+ from the plugin list at this persistent layout level, so the Tools nav
94
+ stays visible across every admin page (settings included). -->
95
+ {#if sidebarTools.length > 0}
96
+ <SidebarGroup>
97
+ <SidebarGroupLabel>Tools</SidebarGroupLabel>
98
+ <SidebarMenu>
99
+ {#each sidebarTools as tool (tool.id)}
100
+ <SidebarMenuItem>
101
+ <SidebarMenuButton
102
+ onclick={() => onSelectTool?.(tool.id)}
103
+ isActive={isToolActive(tool.id)}
104
+ tooltipContent={tool.title}
105
+ class="cursor-pointer"
106
+ >
107
+ {#if tool.icon}
108
+ {@const Icon = tool.icon}
109
+ <Icon class="h-4 w-4" />
110
+ {/if}
111
+ <span>{tool.title}</span>
112
+ </SidebarMenuButton>
113
+ </SidebarMenuItem>
114
+ {/each}
115
+ </SidebarMenu>
116
+ </SidebarGroup>
117
+ {/if}
55
118
  </SidebarContent>
56
119
 
57
120
  <SidebarFooter>
@@ -1,9 +1,14 @@
1
1
  import { Sidebar } from '@aphexcms/ui/shadcn/sidebar';
2
2
  import type { SidebarData } from '../../../types/sidebar.js';
3
3
  import type { ComponentProps } from 'svelte';
4
+ import type { AdminToolPart } from '../../../plugins/types.js';
4
5
  type Props = ComponentProps<typeof Sidebar> & {
5
6
  data: SidebarData;
6
7
  onSignOut?: () => void | Promise<void>;
8
+ /** Sidebar-placed plugin admin tools, already capability-filtered. */
9
+ sidebarTools?: AdminToolPart[];
10
+ /** Open a tool's `plugin:<id>` area (navigates to /admin if elsewhere). */
11
+ onSelectTool?: (id: string) => void;
7
12
  };
8
13
  declare const AppSidebar: import("svelte").Component<Props, {}, "">;
9
14
  type AppSidebar = ReturnType<typeof AppSidebar>;
@@ -1 +1 @@
1
- {"version":3,"file":"AppSidebar.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/layout/sidebar/AppSidebar.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,OAAO,EAKP,MAAM,6BAA6B,CAAC;AAItC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAG5C,KAAK,KAAK,GAAG,cAAc,CAAC,OAAO,OAAO,CAAC,GAAG;IAC7C,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,CAAC;AAsDH,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"AppSidebar.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/layout/sidebar/AppSidebar.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,OAAO,EAUP,MAAM,6BAA6B,CAAC;AAItC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG3D,KAAK,KAAK,GAAG,cAAc,CAAC,OAAO,OAAO,CAAC,GAAG;IAC7C,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,sEAAsE;IACtE,YAAY,CAAC,EAAE,aAAa,EAAE,CAAC;IAC/B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;AAqGH,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -12,12 +12,13 @@
12
12
  SidebarMenuSubItem,
13
13
  SidebarMenuSubButton
14
14
  } from '@aphexcms/ui/shadcn/sidebar';
15
- import { ChevronRight, type Icon as IconType } from '@lucide/svelte';
15
+ import { ChevronRight, type IconProps } from '@lucide/svelte';
16
+ import type { Component } from 'svelte';
16
17
 
17
18
  type NavItem = {
18
19
  title: string;
19
20
  url: string;
20
- icon?: typeof IconType;
21
+ icon?: Component<IconProps>;
21
22
  isActive?: boolean;
22
23
  exact?: boolean;
23
24
  items?: {
@@ -1,8 +1,9 @@
1
- import { type Icon as IconType } from '@lucide/svelte';
1
+ import { type IconProps } from '@lucide/svelte';
2
+ import type { Component } from 'svelte';
2
3
  type NavItem = {
3
4
  title: string;
4
5
  url: string;
5
- icon?: typeof IconType;
6
+ icon?: Component<IconProps>;
6
7
  isActive?: boolean;
7
8
  exact?: boolean;
8
9
  items?: {
@@ -15,7 +16,7 @@ type Props = {
15
16
  label?: string;
16
17
  isActive?: (path: string, item: NavItem) => boolean;
17
18
  };
18
- declare const NavMain: import("svelte").Component<Props, {}, "">;
19
+ declare const NavMain: Component<Props, {}, "">;
19
20
  type NavMain = ReturnType<typeof NavMain>;
20
21
  export default NavMain;
21
22
  //# sourceMappingURL=NavMain.svelte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavMain.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/layout/sidebar/NavMain.svelte.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAgB,KAAK,IAAI,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGpE,KAAK,OAAO,GAAG;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,QAAQ,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;KACZ,EAAE,CAAC;CACJ,CAAC;AAEF,KAAK,KAAK,GAAG;IACZ,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;CACpD,CAAC;AAmFH,QAAA,MAAM,OAAO,2CAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"NavMain.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/layout/sidebar/NavMain.svelte.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGvC,KAAK,OAAO,GAAG;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;KACZ,EAAE,CAAC;CACJ,CAAC;AAEF,KAAK,KAAK,GAAG;IACZ,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;CACpD,CAAC;AAoFH,QAAA,MAAM,OAAO,0BAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
@@ -43,7 +43,11 @@
43
43
  class="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground"
44
44
  >
45
45
  {#if user.image}
46
- <img src={user.image} alt={user.name || user.email} class="h-8 w-8 rounded-lg" />
46
+ <img
47
+ src={user.image}
48
+ alt={user.name || user.email}
49
+ class="h-8 w-8 rounded-lg object-cover"
50
+ />
47
51
  {:else}
48
52
  <div
49
53
  class="bg-sidebar-primary text-sidebar-primary-foreground flex h-8 w-8 items-center justify-center rounded-lg text-sm font-semibold"
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/lib/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAa5D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/lib/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAwB5D"}
package/dist/config.js CHANGED
@@ -1,7 +1,18 @@
1
+ import { createPartResolver } from './plugins/resolver.js';
1
2
  export function createCMSConfig(config) {
3
+ // Resolve plugin parts once (also runs duplicate-part-id validation) and fold
4
+ // schema contributions into `schemaTypes` so the engine, GraphQL, and typegen
5
+ // treat plugin schemas identically to app schemas. Non-schema parts are indexed
6
+ // by a resolver rebuilt at hook-init and exposed on locals.aphexCMS.partResolver.
7
+ const resolver = createPartResolver(config.plugins ?? []);
8
+ const pluginSchemas = resolver.schemaTypes();
9
+ // Merge plugin schemas, then let schema-transform parts decorate the full list
10
+ // (e.g. inject an SEO field group into chosen collections).
11
+ const mergedSchemas = resolver.applySchemaTransforms([...config.schemaTypes, ...pluginSchemas]);
2
12
  return {
3
13
  // Start with the user's config and apply defaults for missing properties
4
14
  ...config,
15
+ schemaTypes: mergedSchemas,
5
16
  storage: config.storage ?? null, // Default to null if not provided
6
17
  customization: {
7
18
  branding: {
@@ -4,6 +4,7 @@ export interface AssetFilters {
4
4
  assetType?: 'image' | 'file';
5
5
  mimeType?: string;
6
6
  search?: string;
7
+ includeSystem?: boolean;
7
8
  limit?: number;
8
9
  offset?: number;
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/asset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/asset.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import type { OrganizationAdapter } from './organization.js';
6
6
  import type { InstanceAdapter } from './instance.js';
7
7
  import type { RolesAdapter } from './role.js';
8
8
  import type { ReferenceAdapter } from './reference.js';
9
+ import type { PluginSettingsAdapter } from './plugin-settings.js';
9
10
  export type { DocumentAdapter, DocumentFilters, CreateDocumentData, UpdateDocumentData } from './document.js';
10
11
  export type { AssetAdapter, CreateAssetData, UpdateAssetData } from './asset.js';
11
12
  export type { UserProfileAdapter, NewUserProfileData } from './user.js';
@@ -14,11 +15,12 @@ export type { OrganizationAdapter } from './organization.js';
14
15
  export type { InstanceAdapter, InstanceSettings } from './instance.js';
15
16
  export type { RolesAdapter } from './role.js';
16
17
  export type { ReferenceAdapter, BackReferenceRow, BackReferenceLookup } from './reference.js';
18
+ export type { PluginSettingsAdapter, PluginSettingsRow } from './plugin-settings.js';
17
19
  /**
18
20
  * Combined database adapter interface
19
21
  * Extends all entity-specific adapters for full database functionality
20
22
  */
21
- export interface DatabaseAdapter extends DocumentAdapter, AssetAdapter, UserProfileAdapter, SchemaAdapter, OrganizationAdapter, InstanceAdapter, RolesAdapter, ReferenceAdapter {
23
+ export interface DatabaseAdapter extends DocumentAdapter, AssetAdapter, UserProfileAdapter, SchemaAdapter, OrganizationAdapter, InstanceAdapter, RolesAdapter, ReferenceAdapter, PluginSettingsAdapter {
22
24
  connect?(): Promise<void>;
23
25
  disconnect?(): Promise<void>;
24
26
  isHealthy(): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /** A stored settings row: the raw persisted values for one (org, plugin) pair. */
2
+ export interface PluginSettingsRow {
3
+ organizationId: string;
4
+ pluginId: string;
5
+ /** Opaque JSON blob of the plugin's settings values (secrets stored encrypted). */
6
+ values: Record<string, unknown>;
7
+ updatedAt: Date;
8
+ }
9
+ export interface PluginSettingsAdapter {
10
+ /**
11
+ * Read the stored values for a plugin in an org. Returns `null` when the plugin
12
+ * has never been configured for that org (no row yet) — callers treat that as
13
+ * "use declared defaults".
14
+ */
15
+ getPluginSettings(organizationId: string, pluginId: string): Promise<Record<string, unknown> | null>;
16
+ /**
17
+ * Upsert the full values object for a plugin in an org (one row per pair). The
18
+ * passed object replaces the stored one — callers merge partial edits before
19
+ * calling. Secret values must already be encrypted by core.
20
+ */
21
+ setPluginSettings(organizationId: string, pluginId: string, values: Record<string, unknown>): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=plugin-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-settings.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/plugin-settings.ts"],"names":[],"mappings":"AAaA,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACrC;;;;OAIG;IACH,iBAAiB,CAChB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAE3C;;;;OAIG;IACH,iBAAiB,CAChB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAAC;CACjB"}
@@ -0,0 +1,13 @@
1
+ // Plugin-settings adapter interface — the generic per-(org, plugin) config store.
2
+ //
3
+ // This is the storage primitive behind the plugin settings & secrets feature
4
+ // (references/plugin-settings-and-secrets-scope.md). It is deliberately generic:
5
+ // ONE table serves every plugin, keyed by (organizationId, pluginId), one row per
6
+ // pair (a config singleton). Values are an opaque JSON object — the store neither
7
+ // knows nor cares which values are content vs config vs encrypted secrets. Core
8
+ // handles encryption/decryption of secret fields above this layer; the adapter only
9
+ // persists the resulting strings.
10
+ //
11
+ // NOT part of the content model: no drafts, versions, references, or RLS-as-content.
12
+ // Org isolation is by the `organizationId` key (and RLS on the pglite path).
13
+ export {};
@@ -1,4 +1,4 @@
1
- import type { Role, NewRole, Capability } from '../../types/capabilities.js';
1
+ import type { Role, NewRole } from '../../types/capabilities.js';
2
2
  export interface RolesAdapter {
3
3
  /** List all roles for an organization (built-in + custom). */
4
4
  listRoles(organizationId: string): Promise<Role[]>;
@@ -12,14 +12,23 @@ export interface RolesAdapter {
12
12
  */
13
13
  updateRole(organizationId: string, name: string, data: {
14
14
  description?: string | null;
15
- capabilities?: Capability[];
15
+ capabilities?: string[];
16
16
  }): Promise<Role | null>;
17
17
  /** Delete a role by name. Returns `true` when a row was removed. */
18
18
  deleteRole(organizationId: string, name: string): Promise<boolean>;
19
19
  /**
20
- * Ensure the four built-in roles exist for an organization.
21
- * Idempotent: inserts missing rows and leaves existing ones untouched.
20
+ * Ensure the four built-in roles exist for an organization, and that `owner`
21
+ * still holds every capability.
22
+ *
23
+ * Idempotent: inserts missing rows, leaves existing admin/editor/viewer rows
24
+ * untouched (they are editable), and reconciles `owner` to the full set so a
25
+ * capability added by a core upgrade reaches orgs seeded before it existed.
26
+ *
27
+ * `ownerCapabilities` is what "every capability" means for this install. Callers
28
+ * that know the plugin registry pass the merged catalog, so plugin-declared
29
+ * capabilities reach owners; omitting it falls back to core's built-ins, which
30
+ * would leave an owner unable to hold a capability its own plugins declared.
22
31
  */
23
- seedBuiltinRoles(organizationId: string): Promise<void>;
32
+ seedBuiltinRoles(organizationId: string, ownerCapabilities?: string[]): Promise<void>;
24
33
  }
25
34
  //# sourceMappingURL=role.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"role.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/role.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE1E,MAAM,WAAW,YAAY;IAC5B,8DAA8D;IAC9D,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnD,gEAAgE;IAChE,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAE3E,2EAA2E;IAC3E,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC;;;OAGG;IACH,UAAU,CACT,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,YAAY,CAAC,EAAE,UAAU,EAAE,CAAA;KAAE,GAChE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAExB,oEAAoE;IACpE,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnE;;;OAGG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD"}
1
+ {"version":3,"file":"role.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/role.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,WAAW,YAAY;IAC5B,8DAA8D;IAC9D,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnD,gEAAgE;IAChE,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAE3E,2EAA2E;IAC3E,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC;;;OAGG;IACH,UAAU,CACT,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAC5D,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAExB,oEAAoE;IACpE,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnE;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtF"}
package/dist/engine.d.ts CHANGED
@@ -7,6 +7,34 @@ export declare class CMSEngine {
7
7
  constructor(config: CMSConfig, dbAdapter: DatabaseAdapter);
8
8
  updateConfig(newConfig: CMSConfig): void;
9
9
  initialize(): Promise<void>;
10
+ /**
11
+ * Every capability this install recognises: core's built-ins plus whatever the
12
+ * registered plugins declare.
13
+ *
14
+ * `ALL_CAPABILITIES` is core-only and static, so on its own it would leave an
15
+ * owner unable to hold a capability its own plugins declared — owner would end up
16
+ * with strictly fewer permissions than admin, who can be granted plugin
17
+ * capabilities through the roles UI.
18
+ */
19
+ ownerCapabilities(): string[];
20
+ /**
21
+ * Re-seed built-in roles for every existing organization.
22
+ *
23
+ * Org creation seeds roles once, which means an org created before a
24
+ * capability existed never learns about it — that is why an owner could be
25
+ * missing `plugin.settings.manage` after upgrading core. Re-seeding on boot
26
+ * closes that gap: it inserts any missing built-in row and reconciles `owner`
27
+ * back to the full capability set, which now includes plugin-declared
28
+ * capabilities. Editable roles (admin/editor/viewer) are left as the operator
29
+ * configured them.
30
+ *
31
+ * Because this runs on every boot, installing or removing a plugin is enough to
32
+ * bring owners in line with the capabilities that plugin declares.
33
+ *
34
+ * Idempotent and cheap — orgs are few and this is four rows each — so it runs
35
+ * unconditionally rather than behind a schema-version check.
36
+ */
37
+ private reconcileBuiltinRoles;
10
38
  getSchemaType(name: string): Promise<SchemaType | null>;
11
39
  listSchemas(): Promise<SchemaType[]>;
12
40
  getSchemaTypeByName(name: string): SchemaType | null;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/lib/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,qBAAa,SAAS;IACrB,OAAO,CAAC,EAAE,CAAkB;IACrB,MAAM,EAAE,SAAS,CAAC;gBAEb,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe;IAMzD,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAUlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIvD,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAI1C,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAI9C,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAI1F,eAAe,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAG9F;AAKD,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,GAAG,SAAS,CASlF;AAED,wBAAgB,MAAM,IAAI,SAAS,CAKlC"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/lib/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAM7D,qBAAa,SAAS;IACrB,OAAO,CAAC,EAAE,CAAkB;IACrB,MAAM,EAAE,SAAS,CAAC;gBAEb,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe;IAMzD,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAUlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BjC;;;;;;;;OAQG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAM7B;;;;;;;;;;;;;;;;OAgBG;YACW,qBAAqB;IAe7B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIvD,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAI1C,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAI9C,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAI1F,eAAe,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAG9F;AAKD,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,GAAG,SAAS,CASlF;AAED,wBAAgB,MAAM,IAAI,SAAS,CAKlC"}
package/dist/engine.js CHANGED
@@ -1,4 +1,6 @@
1
+ import { createPartResolver } from './plugins/resolver.js';
1
2
  import { validateSchemaReferences } from './schema-utils/validator.js';
3
+ import { ALL_CAPABILITIES } from './types/capabilities.js';
2
4
  import { cmsLogger } from './utils/logger.js';
3
5
  export class CMSEngine {
4
6
  db;
@@ -35,8 +37,50 @@ export class CMSEngine {
35
37
  for (const schemaType of this.config.schemaTypes) {
36
38
  await this.db.registerSchemaType(schemaType);
37
39
  }
40
+ await this.reconcileBuiltinRoles();
38
41
  cmsLogger.info('[CMS]', 'Initialized successfully');
39
42
  }
43
+ /**
44
+ * Every capability this install recognises: core's built-ins plus whatever the
45
+ * registered plugins declare.
46
+ *
47
+ * `ALL_CAPABILITIES` is core-only and static, so on its own it would leave an
48
+ * owner unable to hold a capability its own plugins declared — owner would end up
49
+ * with strictly fewer permissions than admin, who can be granted plugin
50
+ * capabilities through the roles UI.
51
+ */
52
+ ownerCapabilities() {
53
+ const resolver = createPartResolver(this.config.plugins ?? []);
54
+ const declared = resolver.capabilityCatalog().map((def) => def.id);
55
+ return Array.from(new Set([...ALL_CAPABILITIES, ...declared]));
56
+ }
57
+ /**
58
+ * Re-seed built-in roles for every existing organization.
59
+ *
60
+ * Org creation seeds roles once, which means an org created before a
61
+ * capability existed never learns about it — that is why an owner could be
62
+ * missing `plugin.settings.manage` after upgrading core. Re-seeding on boot
63
+ * closes that gap: it inserts any missing built-in row and reconciles `owner`
64
+ * back to the full capability set, which now includes plugin-declared
65
+ * capabilities. Editable roles (admin/editor/viewer) are left as the operator
66
+ * configured them.
67
+ *
68
+ * Because this runs on every boot, installing or removing a plugin is enough to
69
+ * bring owners in line with the capabilities that plugin declares.
70
+ *
71
+ * Idempotent and cheap — orgs are few and this is four rows each — so it runs
72
+ * unconditionally rather than behind a schema-version check.
73
+ */
74
+ async reconcileBuiltinRoles() {
75
+ const organizations = await this.db.findAllOrganizations();
76
+ const ownerCaps = this.ownerCapabilities();
77
+ for (const org of organizations) {
78
+ await this.db.seedBuiltinRoles(org.id, ownerCaps);
79
+ }
80
+ if (organizations.length > 0) {
81
+ cmsLogger.info('[CMS]', `Reconciled built-in roles for ${organizations.length} org(s) (owner: ${ownerCaps.length} capabilities)`);
82
+ }
83
+ }
40
84
  // Schema Type utility methods
41
85
  async getSchemaType(name) {
42
86
  return this.db.getSchemaType(name);
package/dist/hooks.d.ts CHANGED
@@ -9,8 +9,10 @@ import type { AuthProvider } from './auth/provider.js';
9
9
  import type { GraphQLSettings } from './graphql/index.js';
10
10
  import type { Logger } from './utils/logger.js';
11
11
  import { RolesService } from './services/roles-service.js';
12
+ import { PluginSettingsService } from './services/plugin-settings-service.js';
12
13
  import { CMSEngine } from './engine.js';
13
14
  import { type LocalAPI } from './local-api/index.js';
15
+ import { type PartResolver } from './plugins/resolver.js';
14
16
  import { type AphexEnv } from './server/api/index.js';
15
17
  export interface CMSInstances {
16
18
  config: CMSConfig;
@@ -21,10 +23,14 @@ export interface CMSInstances {
21
23
  cmsEngine: CMSEngine;
22
24
  localAPI: LocalAPI;
23
25
  rolesService: RolesService;
26
+ /** Per-(org, plugin) settings store — the config plane for plugins. */
27
+ pluginSettingsService: PluginSettingsService;
24
28
  logger: Logger;
25
29
  auth?: AuthProvider;
26
30
  graphqlSettings?: GraphQLSettings | null;
27
31
  apiApp: Hono<AphexEnv>;
32
+ /** Indexed plugin parts (routes, document actions, admin tools, field components). */
33
+ partResolver: PartResolver;
28
34
  }
29
35
  /**
30
36
  * Called by the Vite HMR plugin (`@aphexcms/cms-core/vite`) when schema
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/lib/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAK7C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAa,SAAS,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAIN,KAAK,QAAQ,EACb,MAAM,oBAAoB,CAAC;AAG5B,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;CACvB;AAQD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAGrE;AAgBD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CA0JvD"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/lib/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAO7C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAa,SAAS,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAIN,KAAK,QAAQ,EACb,MAAM,oBAAoB,CAAC;AAG5B,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,uEAAuE;IACvE,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,sFAAsF;IACtF,YAAY,EAAE,YAAY,CAAC;CAC3B;AAmCD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAGrE;AAgBD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAmMvD"}