@aphexcms/cms-core 2.0.10 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/dist/api/api-keys.d.ts +4 -0
  2. package/dist/api/api-keys.d.ts.map +1 -1
  3. package/dist/api/assets.d.ts.map +1 -1
  4. package/dist/api/index.d.ts +1 -0
  5. package/dist/api/index.d.ts.map +1 -1
  6. package/dist/api/index.js +1 -0
  7. package/dist/api/roles.d.ts +22 -0
  8. package/dist/api/roles.d.ts.map +1 -0
  9. package/dist/api/roles.js +26 -0
  10. package/dist/api/schemas/api-keys.d.ts +50 -4
  11. package/dist/api/schemas/api-keys.d.ts.map +1 -1
  12. package/dist/api/schemas/api-keys.js +22 -3
  13. package/dist/api/schemas/organizations.d.ts +4 -22
  14. package/dist/api/schemas/organizations.d.ts.map +1 -1
  15. package/dist/api/schemas/organizations.js +13 -2
  16. package/dist/api/schemas/roles.d.ts +77 -0
  17. package/dist/api/schemas/roles.d.ts.map +1 -0
  18. package/dist/api/schemas/roles.js +42 -0
  19. package/dist/app-augment.d.ts +32 -0
  20. package/dist/app-augment.d.ts.map +1 -0
  21. package/dist/app-augment.js +18 -0
  22. package/dist/auth/auth-hooks.d.ts +2 -1
  23. package/dist/auth/auth-hooks.d.ts.map +1 -1
  24. package/dist/auth/auth-hooks.js +22 -2
  25. package/dist/client/index.d.ts +4 -2
  26. package/dist/client/index.d.ts.map +1 -1
  27. package/dist/client/index.js +6 -2
  28. package/dist/components/AdminApp.svelte +300 -140
  29. package/dist/components/AdminApp.svelte.d.ts +8 -0
  30. package/dist/components/AdminApp.svelte.d.ts.map +1 -1
  31. package/dist/components/admin/DocumentEditor.svelte +633 -350
  32. package/dist/components/admin/DocumentEditor.svelte.d.ts +2 -0
  33. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
  34. package/dist/components/admin/DocumentVersionPanel.svelte +46 -20
  35. package/dist/components/admin/DocumentVersionPanel.svelte.d.ts.map +1 -1
  36. package/dist/components/admin/MediaBrowser.svelte +70 -30
  37. package/dist/components/admin/MediaBrowser.svelte.d.ts.map +1 -1
  38. package/dist/components/admin/ObjectModal.svelte +70 -95
  39. package/dist/components/admin/ObjectModal.svelte.d.ts +1 -2
  40. package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -1
  41. package/dist/components/admin/PermissionsDebug.svelte +119 -0
  42. package/dist/components/admin/PermissionsDebug.svelte.d.ts +4 -0
  43. package/dist/components/admin/PermissionsDebug.svelte.d.ts.map +1 -0
  44. package/dist/components/admin/SchemaField.svelte +3 -1
  45. package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -1
  46. package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte +8 -10
  47. package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte.d.ts.map +1 -1
  48. package/dist/components/admin/fields/ArrayField.svelte +104 -108
  49. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
  50. package/dist/components/admin/fields/FileField.svelte +22 -17
  51. package/dist/components/admin/fields/FileField.svelte.d.ts.map +1 -1
  52. package/dist/components/admin/fields/ImageField.svelte +21 -15
  53. package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -1
  54. package/dist/components/admin/fields/ReferenceField.svelte +142 -112
  55. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -1
  56. package/dist/components/admin/fields/TextareaField.svelte +4 -3
  57. package/dist/components/admin/fields/TextareaField.svelte.d.ts +2 -2
  58. package/dist/components/admin/fields/TextareaField.svelte.d.ts.map +1 -1
  59. package/dist/components/layout/Sidebar.svelte +21 -11
  60. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -1
  61. package/dist/components/layout/sidebar/NavMain.svelte +1 -0
  62. package/dist/db/interfaces/document.d.ts.map +1 -1
  63. package/dist/db/interfaces/index.d.ts +3 -1
  64. package/dist/db/interfaces/index.d.ts.map +1 -1
  65. package/dist/db/interfaces/organization.d.ts +1 -1
  66. package/dist/db/interfaces/organization.d.ts.map +1 -1
  67. package/dist/db/interfaces/role.d.ts +25 -0
  68. package/dist/db/interfaces/role.d.ts.map +1 -0
  69. package/dist/db/interfaces/role.js +1 -0
  70. package/dist/engine.d.ts.map +1 -1
  71. package/dist/engine.js +5 -0
  72. package/dist/field-access.d.ts +30 -0
  73. package/dist/field-access.d.ts.map +1 -0
  74. package/dist/field-access.js +79 -0
  75. package/dist/hooks.d.ts +2 -0
  76. package/dist/hooks.d.ts.map +1 -1
  77. package/dist/hooks.js +19 -13
  78. package/dist/lib/api/api-keys.d.ts +4 -0
  79. package/dist/lib/api/api-keys.d.ts.map +1 -1
  80. package/dist/lib/api/api-keys.js.map +1 -1
  81. package/dist/lib/api/assets.d.ts.map +1 -1
  82. package/dist/lib/api/assets.js.map +1 -1
  83. package/dist/lib/api/index.d.ts +1 -0
  84. package/dist/lib/api/index.d.ts.map +1 -1
  85. package/dist/lib/api/index.js +1 -0
  86. package/dist/lib/api/index.js.map +1 -1
  87. package/dist/lib/api/roles.d.ts +22 -0
  88. package/dist/lib/api/roles.d.ts.map +1 -0
  89. package/dist/lib/api/roles.js +27 -0
  90. package/dist/lib/api/roles.js.map +1 -0
  91. package/dist/lib/api/schemas/api-keys.d.ts +50 -4
  92. package/dist/lib/api/schemas/api-keys.d.ts.map +1 -1
  93. package/dist/lib/api/schemas/api-keys.js +22 -3
  94. package/dist/lib/api/schemas/api-keys.js.map +1 -1
  95. package/dist/lib/api/schemas/organizations.d.ts +4 -22
  96. package/dist/lib/api/schemas/organizations.d.ts.map +1 -1
  97. package/dist/lib/api/schemas/organizations.js +13 -2
  98. package/dist/lib/api/schemas/organizations.js.map +1 -1
  99. package/dist/lib/api/schemas/roles.d.ts +77 -0
  100. package/dist/lib/api/schemas/roles.d.ts.map +1 -0
  101. package/dist/lib/api/schemas/roles.js +43 -0
  102. package/dist/lib/api/schemas/roles.js.map +1 -0
  103. package/dist/lib/app-augment.d.ts +32 -0
  104. package/dist/lib/app-augment.d.ts.map +1 -0
  105. package/dist/lib/app-augment.js +19 -0
  106. package/dist/lib/app-augment.js.map +1 -0
  107. package/dist/lib/auth/auth-hooks.d.ts +2 -1
  108. package/dist/lib/auth/auth-hooks.d.ts.map +1 -1
  109. package/dist/lib/auth/auth-hooks.js +22 -2
  110. package/dist/lib/auth/auth-hooks.js.map +1 -1
  111. package/dist/lib/client/index.d.ts +4 -2
  112. package/dist/lib/client/index.d.ts.map +1 -1
  113. package/dist/lib/client/index.js +6 -2
  114. package/dist/lib/client/index.js.map +1 -1
  115. package/dist/lib/db/interfaces/document.d.ts.map +1 -1
  116. package/dist/lib/db/interfaces/index.d.ts +3 -1
  117. package/dist/lib/db/interfaces/index.d.ts.map +1 -1
  118. package/dist/lib/db/interfaces/organization.d.ts +1 -1
  119. package/dist/lib/db/interfaces/organization.d.ts.map +1 -1
  120. package/dist/lib/db/interfaces/role.d.ts +25 -0
  121. package/dist/lib/db/interfaces/role.d.ts.map +1 -0
  122. package/dist/lib/db/interfaces/role.js +2 -0
  123. package/dist/lib/db/interfaces/role.js.map +1 -0
  124. package/dist/lib/engine.d.ts.map +1 -1
  125. package/dist/lib/engine.js +5 -0
  126. package/dist/lib/engine.js.map +1 -1
  127. package/dist/lib/field-access.d.ts +30 -0
  128. package/dist/lib/field-access.d.ts.map +1 -0
  129. package/dist/lib/field-access.js +80 -0
  130. package/dist/lib/field-access.js.map +1 -0
  131. package/dist/lib/hooks.d.ts +2 -0
  132. package/dist/lib/hooks.d.ts.map +1 -1
  133. package/dist/lib/hooks.js +19 -13
  134. package/dist/lib/hooks.js.map +1 -1
  135. package/dist/lib/local-api/collection-api.d.ts +2 -0
  136. package/dist/lib/local-api/collection-api.d.ts.map +1 -1
  137. package/dist/lib/local-api/collection-api.js +98 -30
  138. package/dist/lib/local-api/collection-api.js.map +1 -1
  139. package/dist/lib/local-api/index.d.ts.map +1 -1
  140. package/dist/lib/local-api/index.js.map +1 -1
  141. package/dist/lib/local-api/permissions.d.ts +26 -26
  142. package/dist/lib/local-api/permissions.d.ts.map +1 -1
  143. package/dist/lib/local-api/permissions.js +122 -80
  144. package/dist/lib/local-api/permissions.js.map +1 -1
  145. package/dist/lib/permissions-context.svelte.d.ts +44 -0
  146. package/dist/lib/permissions-context.svelte.d.ts.map +1 -0
  147. package/dist/lib/permissions-context.svelte.js +80 -0
  148. package/dist/lib/permissions-context.svelte.js.map +1 -0
  149. package/dist/lib/routes/assets.d.ts.map +1 -1
  150. package/dist/lib/routes/assets.js.map +1 -1
  151. package/dist/lib/routes/document-versions.d.ts.map +1 -1
  152. package/dist/lib/routes/document-versions.js.map +1 -1
  153. package/dist/lib/routes/organizations-by-id.d.ts.map +1 -1
  154. package/dist/lib/routes/organizations-by-id.js +6 -3
  155. package/dist/lib/routes/organizations-by-id.js.map +1 -1
  156. package/dist/lib/routes/organizations-invitations.d.ts.map +1 -1
  157. package/dist/lib/routes/organizations-invitations.js +17 -7
  158. package/dist/lib/routes/organizations-invitations.js.map +1 -1
  159. package/dist/lib/routes/organizations-members.d.ts.map +1 -1
  160. package/dist/lib/routes/organizations-members.js +15 -7
  161. package/dist/lib/routes/organizations-members.js.map +1 -1
  162. package/dist/lib/routes/organizations.d.ts.map +1 -1
  163. package/dist/lib/routes/organizations.js +3 -0
  164. package/dist/lib/routes/organizations.js.map +1 -1
  165. package/dist/lib/routes/roles-by-name.d.ts +4 -0
  166. package/dist/lib/routes/roles-by-name.d.ts.map +1 -0
  167. package/dist/lib/routes/roles-by-name.js +112 -0
  168. package/dist/lib/routes/roles-by-name.js.map +1 -0
  169. package/dist/lib/routes/roles.d.ts +4 -0
  170. package/dist/lib/routes/roles.d.ts.map +1 -0
  171. package/dist/lib/routes/roles.js +91 -0
  172. package/dist/lib/routes/roles.js.map +1 -0
  173. package/dist/lib/routes-exports.d.ts +2 -0
  174. package/dist/lib/routes-exports.d.ts.map +1 -1
  175. package/dist/lib/routes-exports.js +3 -0
  176. package/dist/lib/routes-exports.js.map +1 -1
  177. package/dist/lib/save-state-context.svelte.d.ts +8 -0
  178. package/dist/lib/save-state-context.svelte.d.ts.map +1 -0
  179. package/dist/lib/save-state-context.svelte.js +9 -0
  180. package/dist/lib/save-state-context.svelte.js.map +1 -0
  181. package/dist/lib/schema-utils/validator.d.ts.map +1 -1
  182. package/dist/lib/schema-utils/validator.js +14 -0
  183. package/dist/lib/schema-utils/validator.js.map +1 -1
  184. package/dist/lib/server/index.d.ts +1 -0
  185. package/dist/lib/server/index.d.ts.map +1 -1
  186. package/dist/lib/server/index.js +1 -0
  187. package/dist/lib/server/index.js.map +1 -1
  188. package/dist/lib/services/index.d.ts +1 -0
  189. package/dist/lib/services/index.d.ts.map +1 -1
  190. package/dist/lib/services/index.js +1 -0
  191. package/dist/lib/services/index.js.map +1 -1
  192. package/dist/lib/services/roles-service.d.ts +35 -0
  193. package/dist/lib/services/roles-service.d.ts.map +1 -0
  194. package/dist/lib/services/roles-service.js +91 -0
  195. package/dist/lib/services/roles-service.js.map +1 -0
  196. package/dist/lib/services/version-service.d.ts.map +1 -1
  197. package/dist/lib/services/version-service.js.map +1 -1
  198. package/dist/lib/types/auth.d.ts +43 -9
  199. package/dist/lib/types/auth.d.ts.map +1 -1
  200. package/dist/lib/types/auth.js +31 -26
  201. package/dist/lib/types/auth.js.map +1 -1
  202. package/dist/lib/types/capabilities.d.ts +104 -0
  203. package/dist/lib/types/capabilities.d.ts.map +1 -0
  204. package/dist/lib/types/capabilities.js +217 -0
  205. package/dist/lib/types/capabilities.js.map +1 -0
  206. package/dist/lib/types/index.d.ts +1 -0
  207. package/dist/lib/types/index.d.ts.map +1 -1
  208. package/dist/lib/types/index.js +1 -0
  209. package/dist/lib/types/index.js.map +1 -1
  210. package/dist/lib/types/organization.d.ts +13 -4
  211. package/dist/lib/types/organization.d.ts.map +1 -1
  212. package/dist/lib/types/schemas.d.ts +71 -0
  213. package/dist/lib/types/schemas.d.ts.map +1 -1
  214. package/dist/lib/types/sidebar.d.ts +1 -1
  215. package/dist/lib/types/sidebar.d.ts.map +1 -1
  216. package/dist/lib/utils/mime-detect.d.ts.map +1 -1
  217. package/dist/lib/utils/mime-detect.js +28 -6
  218. package/dist/lib/utils/mime-detect.js.map +1 -1
  219. package/dist/local-api/collection-api.d.ts +2 -0
  220. package/dist/local-api/collection-api.d.ts.map +1 -1
  221. package/dist/local-api/collection-api.js +98 -30
  222. package/dist/local-api/index.d.ts.map +1 -1
  223. package/dist/local-api/permissions.d.ts +26 -26
  224. package/dist/local-api/permissions.d.ts.map +1 -1
  225. package/dist/local-api/permissions.js +122 -80
  226. package/dist/permissions-context.svelte.d.ts +44 -0
  227. package/dist/permissions-context.svelte.d.ts.map +1 -0
  228. package/dist/permissions-context.svelte.js +79 -0
  229. package/dist/plugins/README.md +20 -20
  230. package/dist/routes/assets.d.ts.map +1 -1
  231. package/dist/routes/document-versions.d.ts.map +1 -1
  232. package/dist/routes/organizations-by-id.d.ts.map +1 -1
  233. package/dist/routes/organizations-by-id.js +6 -3
  234. package/dist/routes/organizations-invitations.d.ts.map +1 -1
  235. package/dist/routes/organizations-invitations.js +17 -7
  236. package/dist/routes/organizations-members.d.ts.map +1 -1
  237. package/dist/routes/organizations-members.js +15 -7
  238. package/dist/routes/organizations.d.ts.map +1 -1
  239. package/dist/routes/organizations.js +3 -0
  240. package/dist/routes/roles-by-name.d.ts +4 -0
  241. package/dist/routes/roles-by-name.d.ts.map +1 -0
  242. package/dist/routes/roles-by-name.js +111 -0
  243. package/dist/routes/roles.d.ts +4 -0
  244. package/dist/routes/roles.d.ts.map +1 -0
  245. package/dist/routes/roles.js +90 -0
  246. package/dist/routes-exports.d.ts +2 -0
  247. package/dist/routes-exports.d.ts.map +1 -1
  248. package/dist/routes-exports.js +3 -0
  249. package/dist/save-state-context.svelte.d.ts +8 -0
  250. package/dist/save-state-context.svelte.d.ts.map +1 -0
  251. package/dist/save-state-context.svelte.js +8 -0
  252. package/dist/schema-utils/validator.d.ts.map +1 -1
  253. package/dist/schema-utils/validator.js +14 -0
  254. package/dist/server/index.d.ts +1 -0
  255. package/dist/server/index.d.ts.map +1 -1
  256. package/dist/server/index.js +1 -0
  257. package/dist/services/index.d.ts +1 -0
  258. package/dist/services/index.d.ts.map +1 -1
  259. package/dist/services/index.js +1 -0
  260. package/dist/services/roles-service.d.ts +35 -0
  261. package/dist/services/roles-service.d.ts.map +1 -0
  262. package/dist/services/roles-service.js +90 -0
  263. package/dist/services/version-service.d.ts.map +1 -1
  264. package/dist/types/auth.d.ts +43 -9
  265. package/dist/types/auth.d.ts.map +1 -1
  266. package/dist/types/auth.js +31 -26
  267. package/dist/types/capabilities.d.ts +104 -0
  268. package/dist/types/capabilities.d.ts.map +1 -0
  269. package/dist/types/capabilities.js +216 -0
  270. package/dist/types/index.d.ts +1 -0
  271. package/dist/types/index.d.ts.map +1 -1
  272. package/dist/types/index.js +1 -0
  273. package/dist/types/organization.d.ts +13 -4
  274. package/dist/types/organization.d.ts.map +1 -1
  275. package/dist/types/schemas.d.ts +71 -0
  276. package/dist/types/schemas.d.ts.map +1 -1
  277. package/dist/types/sidebar.d.ts +1 -1
  278. package/dist/types/sidebar.d.ts.map +1 -1
  279. package/dist/utils/mime-detect.d.ts.map +1 -1
  280. package/dist/utils/mime-detect.js +28 -6
  281. package/package.json +6 -2
@@ -1,10 +1,14 @@
1
1
  import type { ApiResponse } from './types.js';
2
2
  import type { ApiKeyPermission, CreateApiKeyRequest } from './schemas/api-keys.js';
3
+ import type { Capability } from '../types/capabilities.js';
3
4
  export interface ApiKey {
4
5
  id: string;
5
6
  name: string | null;
6
7
  key?: string;
8
+ /** Legacy coarse scopes; preserved for UI compatibility. */
7
9
  permissions: ApiKeyPermission[];
10
+ /** Fine-grained capability allowlist (if this key was issued with one). */
11
+ capabilities?: Capability[];
8
12
  createdAt: Date | null;
9
13
  lastRequest: Date | null;
10
14
  expiresAt: Date | null;
@@ -1 +1 @@
1
- {"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../src/lib/api/api-keys.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,MAAM,WAAW,MAAM;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB;AAID,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACjC;AAED,qBAAa,UAAU;IACtB;;OAEG;WACU,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAI1F;;OAEG;WACU,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAG3E;AAED,eAAO,MAAM,OAAO;;;CAGnB,CAAC"}
1
+ {"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../src/lib/api/api-keys.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,MAAM;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB;AAID,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACjC;AAED,qBAAa,UAAU;IACtB;;OAEG;WACU,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAI1F;;OAEG;WACU,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAG3E;AAED,eAAO,MAAM,OAAO;;;CAGnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/lib/api/assets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EACX,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,MAAM,kBAAkB,CAAC;AAI1B,MAAM,MAAM,YAAY,GAAG,eAAe,CAAC;AAC3C,MAAM,MAAM,eAAe,GAAG,kBAAkB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,qBAAa,SAAS;IACrB;;OAEG;WACU,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IAI3E;;OAEG;WACU,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAI7D;;;OAGG;WACU,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAIpE;;OAEG;WACU,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAItF;;OAEG;WACU,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAI3E;;OAEG;WACU,UAAU,CACtB,GAAG,EAAE,MAAM,EAAE,GACX,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAI5D;;OAEG;WACU,aAAa,CACzB,EAAE,EAAE,MAAM,GACR,OAAO,CAAC,WAAW,CAAC;QAAE,UAAU,EAAE,cAAc,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAMxE;;OAEG;WACU,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAG5F;AAGD,eAAO,MAAM,MAAM;;;;;;;;;CASlB,CAAC"}
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/lib/api/assets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAI5F,MAAM,MAAM,YAAY,GAAG,eAAe,CAAC;AAC3C,MAAM,MAAM,eAAe,GAAG,kBAAkB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,qBAAa,SAAS;IACrB;;OAEG;WACU,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IAI3E;;OAEG;WACU,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAI7D;;;OAGG;WACU,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAIpE;;OAEG;WACU,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAItF;;OAEG;WACU,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAI3E;;OAEG;WACU,UAAU,CACtB,GAAG,EAAE,MAAM,EAAE,GACX,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAI5D;;OAEG;WACU,aAAa,CACzB,EAAE,EAAE,MAAM,GACR,OAAO,CAAC,WAAW,CAAC;QAAE,UAAU,EAAE,cAAc,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAMxE;;OAEG;WACU,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAG5F;AAGD,eAAO,MAAM,MAAM;;;;;;;;;CASlB,CAAC"}
@@ -2,6 +2,7 @@ export { type ApiClient, ApiError, apiClient } from './client.js';
2
2
  export { type ApiResponse } from './types.js';
3
3
  export { documents } from './documents.js';
4
4
  export { organizations } from './organizations.js';
5
+ export { roles } from './roles.js';
5
6
  export { assets } from './assets.js';
6
7
  export { user } from './user.js';
7
8
  export { apiKeys } from './api-keys.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,mBAAmB,gBAAgB,CAAC;AACpC,mBAAmB,iBAAiB,CAAC;AACrC,mBAAmB,QAAQ,CAAC;AAC5B,mBAAmB,YAAY,CAAC;AAChC,mBAAmB,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,mBAAmB,gBAAgB,CAAC;AACpC,mBAAmB,iBAAiB,CAAC;AACrC,mBAAmB,QAAQ,CAAC;AAC5B,mBAAmB,YAAY,CAAC;AAChC,mBAAmB,eAAe,CAAC"}
package/dist/api/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
  export { ApiError, apiClient } from './client.js';
3
3
  export { documents } from './documents.js';
4
4
  export { organizations } from './organizations.js';
5
+ export { roles } from './roles.js';
5
6
  export { assets } from './assets.js';
6
7
  export { user } from './user.js';
7
8
  export { apiKeys } from './api-keys.js';
@@ -0,0 +1,22 @@
1
+ import type { ApiResponse } from './types.js';
2
+ import type { Role } from '../types/capabilities.js';
3
+ import type { CreateRoleRequest, UpdateRoleRequest } from './schemas/roles.js';
4
+ export declare class RolesApi {
5
+ /** List all roles (built-in + custom) for the active organization. */
6
+ static list(): Promise<ApiResponse<Role[]>>;
7
+ /** Create a custom role. Built-in names are rejected server-side. */
8
+ static create(data: CreateRoleRequest): Promise<ApiResponse<Role>>;
9
+ /** Edit description or capabilities. Works on built-ins too. */
10
+ static update(name: string, data: UpdateRoleRequest): Promise<ApiResponse<Role>>;
11
+ /** Delete a custom role. Built-ins and in-use roles are blocked server-side. */
12
+ static remove(name: string): Promise<ApiResponse<{
13
+ success: boolean;
14
+ }>>;
15
+ }
16
+ export declare const roles: {
17
+ list: typeof RolesApi.list;
18
+ create: typeof RolesApi.create;
19
+ update: typeof RolesApi.update;
20
+ remove: typeof RolesApi.remove;
21
+ };
22
+ //# sourceMappingURL=roles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/lib/api/roles.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE5E,qBAAa,QAAQ;IACpB,sEAAsE;WACzD,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAIjD,qEAAqE;WACxD,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAIxE,gEAAgE;WACnD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAItF,gFAAgF;WACnE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAG7E;AAED,eAAO,MAAM,KAAK;;;;;CAKjB,CAAC"}
@@ -0,0 +1,26 @@
1
+ // Roles API client — per-organization role CRUD.
2
+ import { apiClient } from './client.js';
3
+ export class RolesApi {
4
+ /** List all roles (built-in + custom) for the active organization. */
5
+ static async list() {
6
+ return apiClient.get('/roles');
7
+ }
8
+ /** Create a custom role. Built-in names are rejected server-side. */
9
+ static async create(data) {
10
+ return apiClient.post('/roles', data);
11
+ }
12
+ /** Edit description or capabilities. Works on built-ins too. */
13
+ static async update(name, data) {
14
+ return apiClient.patch(`/roles/${encodeURIComponent(name)}`, data);
15
+ }
16
+ /** Delete a custom role. Built-ins and in-use roles are blocked server-side. */
17
+ static async remove(name) {
18
+ return apiClient.delete(`/roles/${encodeURIComponent(name)}`);
19
+ }
20
+ }
21
+ export const roles = {
22
+ list: RolesApi.list.bind(RolesApi),
23
+ create: RolesApi.create.bind(RolesApi),
24
+ update: RolesApi.update.bind(RolesApi),
25
+ remove: RolesApi.remove.bind(RolesApi)
26
+ };
@@ -1,16 +1,62 @@
1
1
  import { z } from 'zod';
2
+ import { type Capability } from '../../types/capabilities.js';
2
3
  export declare const apiKeyPermissionSchema: z.ZodEnum<{
3
4
  read: "read";
4
5
  write: "write";
5
6
  }>;
6
- export declare const createApiKeyRequest: z.ZodObject<{
7
+ export declare const apiKeyCapabilitySchema: z.ZodEnum<{
8
+ "document.read": "document.read";
9
+ "document.create": "document.create";
10
+ "document.update": "document.update";
11
+ "document.delete": "document.delete";
12
+ "document.publish": "document.publish";
13
+ "document.unpublish": "document.unpublish";
14
+ "asset.read": "asset.read";
15
+ "asset.upload": "asset.upload";
16
+ "asset.delete": "asset.delete";
17
+ "member.invite": "member.invite";
18
+ "member.remove": "member.remove";
19
+ "member.changeRole": "member.changeRole";
20
+ "apiKey.manage": "apiKey.manage";
21
+ "role.manage": "role.manage";
22
+ "org.settings": "org.settings";
23
+ }>;
24
+ export declare const createApiKeyRequest: z.ZodPipe<z.ZodObject<{
7
25
  name: z.ZodString;
8
- permissions: z.ZodArray<z.ZodEnum<{
26
+ permissions: z.ZodOptional<z.ZodArray<z.ZodEnum<{
9
27
  read: "read";
10
28
  write: "write";
11
- }>>;
29
+ }>>>;
30
+ capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
31
+ "document.read": "document.read";
32
+ "document.create": "document.create";
33
+ "document.update": "document.update";
34
+ "document.delete": "document.delete";
35
+ "document.publish": "document.publish";
36
+ "document.unpublish": "document.unpublish";
37
+ "asset.read": "asset.read";
38
+ "asset.upload": "asset.upload";
39
+ "asset.delete": "asset.delete";
40
+ "member.invite": "member.invite";
41
+ "member.remove": "member.remove";
42
+ "member.changeRole": "member.changeRole";
43
+ "apiKey.manage": "apiKey.manage";
44
+ "role.manage": "role.manage";
45
+ "org.settings": "org.settings";
46
+ }>>>;
12
47
  expiresInDays: z.ZodOptional<z.ZodNumber>;
13
- }, z.core.$strip>;
48
+ }, z.core.$strip>, z.ZodTransform<{
49
+ permissions: ("read" | "write")[] | undefined;
50
+ capabilities: Capability[] | undefined;
51
+ name: string;
52
+ expiresInDays?: number | undefined;
53
+ }, {
54
+ name: string;
55
+ permissions?: ("read" | "write")[] | undefined;
56
+ capabilities?: ("document.read" | "document.create" | "document.update" | "document.delete" | "document.publish" | "document.unpublish" | "asset.read" | "asset.upload" | "asset.delete" | "member.invite" | "member.remove" | "member.changeRole" | "apiKey.manage" | "role.manage" | "org.settings")[] | undefined;
57
+ expiresInDays?: number | undefined;
58
+ }>>;
14
59
  export type ApiKeyPermission = z.infer<typeof apiKeyPermissionSchema>;
60
+ export type ApiKeyCapability = z.infer<typeof apiKeyCapabilitySchema>;
15
61
  export type CreateApiKeyRequest = z.infer<typeof createApiKeyRequest>;
16
62
  //# sourceMappingURL=api-keys.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../../src/lib/api/schemas/api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,sBAAsB;;;EAA4B,CAAC;AAIhE,eAAO,MAAM,mBAAmB;;;;;;;iBAI9B,CAAC;AAIH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
1
+ {"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../../src/lib/api/schemas/api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAA2C,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAIpG,eAAO,MAAM,sBAAsB;;;EAA4B,CAAC;AAEhE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;EAElC,CAAC;AASF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoB5B,CAAC;AAIL,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -1,9 +1,28 @@
1
1
  import { z } from 'zod';
2
+ import { ALL_CAPABILITIES, normalizeCapabilities } from '../../types/capabilities.js';
2
3
  // ---------- Shared ----------
3
4
  export const apiKeyPermissionSchema = z.enum(['read', 'write']);
5
+ export const apiKeyCapabilitySchema = z.enum(ALL_CAPABILITIES);
4
6
  // ---------- POST /settings/api-keys ----------
5
- export const createApiKeyRequest = z.object({
7
+ // Two provisioning modes:
8
+ // 1. Coarse `permissions`: 'read' alone, or 'write' (always implies read).
9
+ // 2. Fine-grained `capabilities`: explicit allowlist; writes auto-include
10
+ // the matching read cap during normalization.
11
+ // Exactly one of the two should be supplied (neither is invalid).
12
+ export const createApiKeyRequest = z
13
+ .object({
6
14
  name: z.string().min(1),
7
- permissions: z.array(apiKeyPermissionSchema).min(1),
15
+ permissions: z.array(apiKeyPermissionSchema).optional(),
16
+ capabilities: z.array(apiKeyCapabilitySchema).optional(),
8
17
  expiresInDays: z.number().int().positive().optional()
9
- });
18
+ })
19
+ .refine((v) => (v.permissions && v.permissions.length > 0) || (v.capabilities && v.capabilities.length > 0), { message: 'Provide at least one of `permissions` or `capabilities`.' })
20
+ .transform((v) => ({
21
+ ...v,
22
+ permissions: v.permissions
23
+ ? v.permissions.includes('write')
24
+ ? ['read', 'write']
25
+ : ['read']
26
+ : undefined,
27
+ capabilities: v.capabilities ? normalizeCapabilities(v.capabilities) : undefined
28
+ }));
@@ -1,15 +1,6 @@
1
1
  import { z } from 'zod';
2
- export declare const organizationRoleSchema: z.ZodEnum<{
3
- admin: "admin";
4
- editor: "editor";
5
- viewer: "viewer";
6
- owner: "owner";
7
- }>;
8
- export declare const invitableRoleSchema: z.ZodEnum<{
9
- admin: "admin";
10
- editor: "editor";
11
- viewer: "viewer";
12
- }>;
2
+ export declare const organizationRoleSchema: z.ZodString;
3
+ export declare const invitableRoleSchema: z.ZodString;
13
4
  export declare const createOrganizationRequest: z.ZodObject<{
14
5
  name: z.ZodString;
15
6
  slug: z.ZodString;
@@ -26,11 +17,7 @@ export declare const switchOrganizationRequest: z.ZodObject<{
26
17
  }, z.core.$strip>;
27
18
  export declare const inviteMemberRequest: z.ZodObject<{
28
19
  email: z.ZodString;
29
- role: z.ZodEnum<{
30
- admin: "admin";
31
- editor: "editor";
32
- viewer: "viewer";
33
- }>;
20
+ role: z.ZodString;
34
21
  }, z.core.$strip>;
35
22
  export declare const cancelInvitationRequest: z.ZodObject<{
36
23
  invitationId: z.ZodString;
@@ -40,12 +27,7 @@ export declare const removeMemberRequest: z.ZodObject<{
40
27
  }, z.core.$strip>;
41
28
  export declare const updateMemberRoleRequest: z.ZodObject<{
42
29
  userId: z.ZodString;
43
- role: z.ZodEnum<{
44
- admin: "admin";
45
- editor: "editor";
46
- viewer: "viewer";
47
- owner: "owner";
48
- }>;
30
+ role: z.ZodString;
49
31
  }, z.core.$strip>;
50
32
  export type OrganizationRoleSchema = z.infer<typeof organizationRoleSchema>;
51
33
  export type InvitableRoleSchema = z.infer<typeof invitableRoleSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../../src/lib/api/schemas/organizations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,sBAAsB;;;;;EAAiD,CAAC;AAGrF,eAAO,MAAM,mBAAmB;;;;EAAwC,CAAC;AAMzE,eAAO,MAAM,yBAAyB;;;;;iBAKpC,CAAC;AAIH,eAAO,MAAM,yBAAyB;;;;iBAQnC,CAAC;AAIJ,eAAO,MAAM,yBAAyB;;iBAEpC,CAAC;AAIH,eAAO,MAAM,mBAAmB;;;;;;;iBAG9B,CAAC;AAIH,eAAO,MAAM,uBAAuB;;iBAElC,CAAC;AAIH,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AAIH,eAAO,MAAM,uBAAuB;;;;;;;;iBAGlC,CAAC;AAIH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC5E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAClF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAClF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAClF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC9E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../../src/lib/api/schemas/organizations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,sBAAsB,aAAiB,CAAC;AAGrD,eAAO,MAAM,mBAAmB,aAE9B,CAAC;AAMH,eAAO,MAAM,yBAAyB;;;;;iBAKpC,CAAC;AAIH,eAAO,MAAM,yBAAyB;;;;iBAQnC,CAAC;AAIJ,eAAO,MAAM,yBAAyB;;iBAEpC,CAAC;AAIH,eAAO,MAAM,mBAAmB;;;iBAG9B,CAAC;AAIH,eAAO,MAAM,uBAAuB;;iBAElC,CAAC;AAIH,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AAIH,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAC;AAIH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC5E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAClF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAClF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAClF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC9E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -1,8 +1,19 @@
1
1
  import { z } from 'zod';
2
2
  // ---------- Shared ----------
3
- export const organizationRoleSchema = z.enum(['owner', 'admin', 'editor', 'viewer']);
3
+ // Role name any string matching the cms_roles.name format. The actual
4
+ // existence check happens server-side against the roles table, so a
5
+ // nonexistent name yields a 404/400 rather than a Zod error.
6
+ const roleNameSchema = z
7
+ .string()
8
+ .trim()
9
+ .min(1)
10
+ .max(100)
11
+ .regex(/^[a-zA-Z0-9 _-]+$/);
12
+ export const organizationRoleSchema = roleNameSchema;
4
13
  // Role used for new invitations — owners cannot be invited, only promoted.
5
- export const invitableRoleSchema = z.enum(['admin', 'editor', 'viewer']);
14
+ export const invitableRoleSchema = roleNameSchema.refine((v) => v !== 'owner', {
15
+ message: 'owner cannot be assigned via invitation'
16
+ });
6
17
  const metadataSchema = z.record(z.string(), z.unknown());
7
18
  // ---------- POST /organizations ----------
8
19
  export const createOrganizationRequest = z.object({
@@ -0,0 +1,77 @@
1
+ import { z } from 'zod';
2
+ import { type Capability } from '../../types/capabilities.js';
3
+ export declare const capabilitySchema: z.ZodEnum<{
4
+ "document.read": "document.read";
5
+ "document.create": "document.create";
6
+ "document.update": "document.update";
7
+ "document.delete": "document.delete";
8
+ "document.publish": "document.publish";
9
+ "document.unpublish": "document.unpublish";
10
+ "asset.read": "asset.read";
11
+ "asset.upload": "asset.upload";
12
+ "asset.delete": "asset.delete";
13
+ "member.invite": "member.invite";
14
+ "member.remove": "member.remove";
15
+ "member.changeRole": "member.changeRole";
16
+ "apiKey.manage": "apiKey.manage";
17
+ "role.manage": "role.manage";
18
+ "org.settings": "org.settings";
19
+ }>;
20
+ export declare const createRoleRequest: z.ZodPipe<z.ZodObject<{
21
+ name: z.ZodString;
22
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
23
+ capabilities: z.ZodDefault<z.ZodArray<z.ZodEnum<{
24
+ "document.read": "document.read";
25
+ "document.create": "document.create";
26
+ "document.update": "document.update";
27
+ "document.delete": "document.delete";
28
+ "document.publish": "document.publish";
29
+ "document.unpublish": "document.unpublish";
30
+ "asset.read": "asset.read";
31
+ "asset.upload": "asset.upload";
32
+ "asset.delete": "asset.delete";
33
+ "member.invite": "member.invite";
34
+ "member.remove": "member.remove";
35
+ "member.changeRole": "member.changeRole";
36
+ "apiKey.manage": "apiKey.manage";
37
+ "role.manage": "role.manage";
38
+ "org.settings": "org.settings";
39
+ }>>>;
40
+ }, z.core.$strip>, z.ZodTransform<{
41
+ capabilities: Capability[];
42
+ name: string;
43
+ description?: string | null | undefined;
44
+ }, {
45
+ name: string;
46
+ capabilities: ("document.read" | "document.create" | "document.update" | "document.delete" | "document.publish" | "document.unpublish" | "asset.read" | "asset.upload" | "asset.delete" | "member.invite" | "member.remove" | "member.changeRole" | "apiKey.manage" | "role.manage" | "org.settings")[];
47
+ description?: string | null | undefined;
48
+ }>>;
49
+ export declare const updateRoleRequest: z.ZodPipe<z.ZodObject<{
50
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
51
+ capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
52
+ "document.read": "document.read";
53
+ "document.create": "document.create";
54
+ "document.update": "document.update";
55
+ "document.delete": "document.delete";
56
+ "document.publish": "document.publish";
57
+ "document.unpublish": "document.unpublish";
58
+ "asset.read": "asset.read";
59
+ "asset.upload": "asset.upload";
60
+ "asset.delete": "asset.delete";
61
+ "member.invite": "member.invite";
62
+ "member.remove": "member.remove";
63
+ "member.changeRole": "member.changeRole";
64
+ "apiKey.manage": "apiKey.manage";
65
+ "role.manage": "role.manage";
66
+ "org.settings": "org.settings";
67
+ }>>>;
68
+ }, z.core.$strip>, z.ZodTransform<{
69
+ capabilities: Capability[] | undefined;
70
+ description?: string | null | undefined;
71
+ }, {
72
+ description?: string | null | undefined;
73
+ capabilities?: ("document.read" | "document.create" | "document.update" | "document.delete" | "document.publish" | "document.unpublish" | "asset.read" | "asset.upload" | "asset.delete" | "member.invite" | "member.remove" | "member.changeRole" | "apiKey.manage" | "role.manage" | "org.settings")[] | undefined;
74
+ }>>;
75
+ export type CreateRoleRequest = z.infer<typeof createRoleRequest>;
76
+ export type UpdateRoleRequest = z.infer<typeof updateRoleRequest>;
77
+ //# sourceMappingURL=roles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../../src/lib/api/schemas/roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAA2C,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAMpG,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;EAE5B,CAAC;AAmBF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAMqD,CAAC;AAIpF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;GAW1B,CAAC;AAIL,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAClE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { z } from 'zod';
2
+ import { ALL_CAPABILITIES, normalizeCapabilities } from '../../types/capabilities.js';
3
+ // Runtime enum of every known capability. Unknown strings are rejected so a
4
+ // typo in a client request can't silently grant or strip permissions.
5
+ // The cast preserves the literal Capability union in the inferred type — Zod
6
+ // can't see the compile-time widening of the readonly array on its own.
7
+ export const capabilitySchema = z.enum(ALL_CAPABILITIES);
8
+ // Role name: human-readable identifier stored on member rows and referenced
9
+ // in the API as /api/roles/[name]. Spaces are allowed (URL-encoded client
10
+ // side); control characters and slashes are not, to keep routing unambiguous.
11
+ const roleNameSchema = z
12
+ .string()
13
+ .trim()
14
+ .min(1)
15
+ .max(100)
16
+ .regex(/^[a-zA-Z0-9 _-]+$/, {
17
+ message: 'Role name may only contain letters, numbers, spaces, underscores, and hyphens'
18
+ });
19
+ // ---------- POST /roles ----------
20
+ // Capabilities are normalized on intake so any write cap pulls in the matching
21
+ // read — a role with `document.create` but no `document.read` can't
22
+ // realistically edit anything, and leaving that gap trips people up.
23
+ export const createRoleRequest = z
24
+ .object({
25
+ name: roleNameSchema,
26
+ description: z.string().max(500).nullable().optional(),
27
+ capabilities: z.array(capabilitySchema).default([])
28
+ })
29
+ .transform((v) => ({ ...v, capabilities: normalizeCapabilities(v.capabilities) }));
30
+ // ---------- PATCH /roles/[name] ----------
31
+ export const updateRoleRequest = z
32
+ .object({
33
+ description: z.string().max(500).nullable().optional(),
34
+ capabilities: z.array(capabilitySchema).optional()
35
+ })
36
+ .refine((v) => v.description !== undefined || v.capabilities !== undefined, {
37
+ message: 'At least one field (description, capabilities) is required'
38
+ })
39
+ .transform((v) => ({
40
+ ...v,
41
+ capabilities: v.capabilities ? normalizeCapabilities(v.capabilities) : undefined
42
+ }));
@@ -0,0 +1,32 @@
1
+ /**
2
+ * SvelteKit ambient type augmentations emitted by Aphex CMS.
3
+ *
4
+ * Side-effect import only — activates the global `App.PageData` shape so
5
+ * `$page.data.rbac` is typed inside any project that uses cms-core, without
6
+ * requiring each app to hand-maintain the `App.PageData` interface.
7
+ *
8
+ * Import once from `src/app.d.ts`:
9
+ *
10
+ * ```ts
11
+ * import '@aphexcms/cms-core/app-augment';
12
+ * ```
13
+ *
14
+ * The module has no runtime — it's purely a type-augmentation carrier. Kept
15
+ * as a `.ts` file (not `.d.ts`) so Vite/SvelteKit can resolve the import path
16
+ * via the package's `./*` export map.
17
+ */
18
+ import type { RbacPayload } from './types/capabilities.js';
19
+ declare global {
20
+ namespace App {
21
+ interface PageData {
22
+ /**
23
+ * RBAC snapshot emitted by the admin layout's server load
24
+ * (`/admin/+layout.server.ts`). Absent on public routes (login,
25
+ * invitations) that don't pass through the admin layout.
26
+ */
27
+ rbac?: RbacPayload;
28
+ }
29
+ }
30
+ }
31
+ export {};
32
+ //# sourceMappingURL=app-augment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-augment.d.ts","sourceRoot":"","sources":["../src/lib/app-augment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,GAAG,CAAC;QACb,UAAU,QAAQ;YACjB;;;;eAIG;YACH,IAAI,CAAC,EAAE,WAAW,CAAC;SACnB;KACD;CACD;AAED,OAAO,EAAE,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * SvelteKit ambient type augmentations emitted by Aphex CMS.
3
+ *
4
+ * Side-effect import only — activates the global `App.PageData` shape so
5
+ * `$page.data.rbac` is typed inside any project that uses cms-core, without
6
+ * requiring each app to hand-maintain the `App.PageData` interface.
7
+ *
8
+ * Import once from `src/app.d.ts`:
9
+ *
10
+ * ```ts
11
+ * import '@aphexcms/cms-core/app-augment';
12
+ * ```
13
+ *
14
+ * The module has no runtime — it's purely a type-augmentation carrier. Kept
15
+ * as a `.ts` file (not `.d.ts`) so Vite/SvelteKit can resolve the import path
16
+ * via the package's `./*` export map.
17
+ */
18
+ export {};
@@ -1,6 +1,7 @@
1
1
  import type { RequestEvent } from '@sveltejs/kit';
2
2
  import type { DatabaseAdapter } from '../db/index.js';
3
3
  import type { CMSConfig } from '../types/index.js';
4
+ import type { RolesService } from '../services/roles-service.js';
4
5
  import type { AuthProvider } from './provider.js';
5
- export declare function handleAuthHook(event: RequestEvent, config: CMSConfig, authProvider: AuthProvider, db: DatabaseAdapter): Promise<Response | null>;
6
+ export declare function handleAuthHook(event: RequestEvent, config: CMSConfig, authProvider: AuthProvider, db: DatabaseAdapter, rolesService: RolesService): Promise<Response | null>;
6
7
  //# sourceMappingURL=auth-hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-hooks.d.ts","sourceRoot":"","sources":["../../src/lib/auth/auth-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAQ,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,wBAAsB,cAAc,CACnC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,eAAe,GACjB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA8I1B"}
1
+ {"version":3,"file":"auth-hooks.d.ts","sourceRoot":"","sources":["../../src/lib/auth/auth-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAQ,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAkB/C,wBAAsB,cAAc,CACnC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,eAAe,EACnB,YAAY,EAAE,YAAY,GACxB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAsJ1B"}
@@ -1,11 +1,25 @@
1
1
  import { redirect } from '@sveltejs/kit';
2
2
  import { AuthError } from './auth-errors.js';
3
- export async function handleAuthHook(event, config, authProvider, db) {
3
+ /**
4
+ * Populate `auth.capabilities` for session auth via RolesService.
5
+ * Runs once per request so downstream permission checks stay synchronous.
6
+ * No-op for API keys and partial sessions — `resolveCapabilities` handles
7
+ * those shapes directly.
8
+ */
9
+ async function hydrateCapabilities(auth, rolesService) {
10
+ if (auth.type !== 'session')
11
+ return;
12
+ if (auth.capabilities)
13
+ return; // Already populated (e.g. by provider).
14
+ auth.capabilities = await rolesService.getCapabilities(auth.organizationId, auth.organizationRole);
15
+ }
16
+ export async function handleAuthHook(event, config, authProvider, db, rolesService) {
4
17
  const path = event.url.pathname;
5
18
  // 1. Admin UI routes - require session authentication
6
19
  if (path.startsWith('/admin')) {
7
20
  try {
8
21
  const session = await authProvider.requireSession(event.request, db);
22
+ await hydrateCapabilities(session, rolesService);
9
23
  event.locals.auth = session;
10
24
  }
11
25
  catch (error) {
@@ -33,6 +47,7 @@ export async function handleAuthHook(event, config, authProvider, db) {
33
47
  }
34
48
  // Make auth available (can be null, route will check for signed token)
35
49
  if (auth) {
50
+ await hydrateCapabilities(auth, rolesService);
36
51
  event.locals.auth = auth;
37
52
  }
38
53
  }
@@ -56,7 +71,9 @@ export async function handleAuthHook(event, config, authProvider, db) {
56
71
  }
57
72
  // Check if GraphQL is enabled (built-in, on by default)
58
73
  const graphqlEndpoint = config.graphql !== false
59
- ? (typeof config.graphql === 'object' ? config.graphql.path ?? '/api/graphql' : '/api/graphql')
74
+ ? typeof config.graphql === 'object'
75
+ ? (config.graphql.path ?? '/api/graphql')
76
+ : '/api/graphql'
60
77
  : undefined;
61
78
  // Require authentication for protected API routes
62
79
  const protectedApiRoutes = [
@@ -65,6 +82,7 @@ export async function handleAuthHook(event, config, authProvider, db) {
65
82
  '/api/schemas',
66
83
  '/api/organizations',
67
84
  '/api/invitations',
85
+ '/api/roles',
68
86
  '/api/settings',
69
87
  '/api/instance-settings'
70
88
  ];
@@ -110,6 +128,7 @@ export async function handleAuthHook(event, config, authProvider, db) {
110
128
  }
111
129
  // Make auth available in API routes
112
130
  if (auth) {
131
+ await hydrateCapabilities(auth, rolesService);
113
132
  event.locals.auth = auth;
114
133
  }
115
134
  }
@@ -119,6 +138,7 @@ export async function handleAuthHook(event, config, authProvider, db) {
119
138
  try {
120
139
  const auth = await authProvider.getSession(event.request, db);
121
140
  if (auth) {
141
+ await hydrateCapabilities(auth, rolesService);
122
142
  event.locals.auth = auth;
123
143
  }
124
144
  }
@@ -3,12 +3,14 @@ export type { SidebarUser, SidebarNavItem, SidebarBranding, SidebarData } from '
3
3
  export * from '../field-validation/rule.js';
4
4
  export * from '../field-validation/utils.js';
5
5
  export { createContentHash, hasUnpublishedChanges } from '../utils/content-hash.js';
6
- export { setSchemaContext, getSchemaContext } from '../schema-context.svelte';
6
+ export { setSchemaContext, getSchemaContext } from '../schema-context.svelte.js';
7
+ export { setPermissionsContext, usePermissions, type PermissionsContext } from '../permissions-context.svelte.js';
7
8
  export * from '../schema-utils/index.js';
8
9
  export { default as DocumentEditor } from '../components/admin/DocumentEditor.svelte';
9
10
  export { default as SchemaField } from '../components/admin/SchemaField.svelte';
10
11
  export { default as AdminApp } from '../components/AdminApp.svelte';
11
12
  export { default as Sidebar } from '../components/layout/Sidebar.svelte';
13
+ export { default as PermissionsDebug } from '../components/admin/PermissionsDebug.svelte';
12
14
  export { default as StringField } from '../components/admin/fields/StringField.svelte';
13
15
  export { default as TextareaField } from '../components/admin/fields/TextareaField.svelte';
14
16
  export { default as NumberField } from '../components/admin/fields/NumberField.svelte';
@@ -22,6 +24,6 @@ export * from '../utils/index.js';
22
24
  export * from '../api/index.js';
23
25
  export type { ApiResponse } from '../api/index.js';
24
26
  export { toast } from 'svelte-sonner';
25
- export { confirmDialog, type ConfirmDialogOptions } from '../components/admin/confirm-dialog/confirm-dialog.svelte';
27
+ export { confirmDialog, type ConfirmDialogOptions } from '../components/admin/confirm-dialog/confirm-dialog.svelte.js';
26
28
  export { default as ConfirmDialogHost } from '../components/admin/confirm-dialog/ConfirmDialogHost.svelte';
27
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/client/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlG,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAGzE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAG7F,cAAc,gBAAgB,CAAC;AAE/B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6DAA6D,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/client/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlG,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EACN,qBAAqB,EACrB,cAAc,EACd,KAAK,kBAAkB,EACvB,MAAM,+BAA+B,CAAC;AAGvC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAGzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAG1F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAG7F,cAAc,gBAAgB,CAAC;AAE/B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6DAA6D,CAAC"}
@@ -8,7 +8,9 @@ export * from '../field-validation/utils.js';
8
8
  // Content hashing utilities (for client-side change detection)
9
9
  export { createContentHash, hasUnpublishedChanges } from '../utils/content-hash.js';
10
10
  // Schema context (for providing schemas to components)
11
- export { setSchemaContext, getSchemaContext } from '../schema-context.svelte';
11
+ export { setSchemaContext, getSchemaContext } from '../schema-context.svelte.js';
12
+ // Permissions context (for capability-based UI gating)
13
+ export { setPermissionsContext, usePermissions } from '../permissions-context.svelte.js';
12
14
  // Schema utilities (for working with schemas)
13
15
  export * from '../schema-utils/index.js';
14
16
  // Components (UI components for the admin interface)
@@ -16,6 +18,8 @@ export { default as DocumentEditor } from '../components/admin/DocumentEditor.sv
16
18
  export { default as SchemaField } from '../components/admin/SchemaField.svelte';
17
19
  export { default as AdminApp } from '../components/AdminApp.svelte';
18
20
  export { default as Sidebar } from '../components/layout/Sidebar.svelte';
21
+ // Debug helpers
22
+ export { default as PermissionsDebug } from '../components/admin/PermissionsDebug.svelte';
19
23
  // Field components
20
24
  export { default as StringField } from '../components/admin/fields/StringField.svelte';
21
25
  export { default as TextareaField } from '../components/admin/fields/TextareaField.svelte';
@@ -32,5 +36,5 @@ export * from '../api/index.js';
32
36
  // Toast notifications (re-exported from svelte-sonner for convenience)
33
37
  export { toast } from 'svelte-sonner';
34
38
  // Confirm dialog (imperative API backed by a mounted host)
35
- export { confirmDialog } from '../components/admin/confirm-dialog/confirm-dialog.svelte';
39
+ export { confirmDialog } from '../components/admin/confirm-dialog/confirm-dialog.svelte.js';
36
40
  export { default as ConfirmDialogHost } from '../components/admin/confirm-dialog/ConfirmDialogHost.svelte';