@aphexcms/cms-core 2.0.9 → 2.0.11

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 (381) hide show
  1. package/LICENSE +21 -0
  2. package/dist/api/api-keys.d.ts +8 -7
  3. package/dist/api/api-keys.d.ts.map +1 -1
  4. package/dist/api/assets.d.ts +7 -22
  5. package/dist/api/assets.d.ts.map +1 -1
  6. package/dist/api/assets.js +1 -10
  7. package/dist/api/documents.d.ts +17 -16
  8. package/dist/api/documents.d.ts.map +1 -1
  9. package/dist/api/documents.js +2 -2
  10. package/dist/api/index.d.ts +1 -0
  11. package/dist/api/index.d.ts.map +1 -1
  12. package/dist/api/index.js +1 -0
  13. package/dist/api/organizations.d.ts +15 -35
  14. package/dist/api/organizations.d.ts.map +1 -1
  15. package/dist/api/roles.d.ts +22 -0
  16. package/dist/api/roles.d.ts.map +1 -0
  17. package/dist/api/roles.js +26 -0
  18. package/dist/api/schemas/api-keys.d.ts +62 -0
  19. package/dist/api/schemas/api-keys.d.ts.map +1 -0
  20. package/dist/api/schemas/api-keys.js +28 -0
  21. package/dist/api/schemas/assets.d.ts +174 -0
  22. package/dist/api/schemas/assets.d.ts.map +1 -0
  23. package/dist/api/schemas/assets.js +99 -0
  24. package/dist/api/schemas/documents.d.ts +325 -0
  25. package/dist/api/schemas/documents.d.ts.map +1 -0
  26. package/dist/api/schemas/documents.js +161 -0
  27. package/dist/api/schemas/organizations.d.ts +41 -0
  28. package/dist/api/schemas/organizations.d.ts.map +1 -0
  29. package/dist/api/schemas/organizations.js +56 -0
  30. package/dist/api/schemas/roles.d.ts +77 -0
  31. package/dist/api/schemas/roles.d.ts.map +1 -0
  32. package/dist/api/schemas/roles.js +42 -0
  33. package/dist/api/schemas/user.d.ts +10 -0
  34. package/dist/api/schemas/user.d.ts.map +1 -0
  35. package/dist/api/schemas/user.js +11 -0
  36. package/dist/api/user.d.ts +4 -6
  37. package/dist/api/user.d.ts.map +1 -1
  38. package/dist/app-augment.d.ts +32 -0
  39. package/dist/app-augment.d.ts.map +1 -0
  40. package/dist/app-augment.js +18 -0
  41. package/dist/auth/auth-hooks.d.ts +2 -1
  42. package/dist/auth/auth-hooks.d.ts.map +1 -1
  43. package/dist/auth/auth-hooks.js +22 -2
  44. package/dist/auth/provider.d.ts +5 -0
  45. package/dist/auth/provider.d.ts.map +1 -1
  46. package/dist/cli/index.js +0 -0
  47. package/dist/client/index.d.ts +4 -0
  48. package/dist/client/index.d.ts.map +1 -1
  49. package/dist/client/index.js +7 -0
  50. package/dist/components/AdminApp.svelte +306 -142
  51. package/dist/components/AdminApp.svelte.d.ts +8 -0
  52. package/dist/components/AdminApp.svelte.d.ts.map +1 -1
  53. package/dist/components/admin/DocumentEditor.svelte +653 -365
  54. package/dist/components/admin/DocumentEditor.svelte.d.ts +2 -0
  55. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
  56. package/dist/components/admin/DocumentVersionPanel.svelte +57 -44
  57. package/dist/components/admin/DocumentVersionPanel.svelte.d.ts.map +1 -1
  58. package/dist/components/admin/MediaBrowser.svelte +70 -30
  59. package/dist/components/admin/MediaBrowser.svelte.d.ts.map +1 -1
  60. package/dist/components/admin/ObjectModal.svelte +70 -95
  61. package/dist/components/admin/ObjectModal.svelte.d.ts +1 -2
  62. package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -1
  63. package/dist/components/admin/PermissionsDebug.svelte +119 -0
  64. package/dist/components/admin/PermissionsDebug.svelte.d.ts +4 -0
  65. package/dist/components/admin/PermissionsDebug.svelte.d.ts.map +1 -0
  66. package/dist/components/admin/SchemaField.svelte +3 -1
  67. package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -1
  68. package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte +35 -0
  69. package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte.d.ts +19 -0
  70. package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte.d.ts.map +1 -0
  71. package/dist/components/admin/confirm-dialog/confirm-dialog.svelte.d.ts +16 -0
  72. package/dist/components/admin/confirm-dialog/confirm-dialog.svelte.d.ts.map +1 -0
  73. package/dist/components/admin/confirm-dialog/confirm-dialog.svelte.js +29 -0
  74. package/dist/components/admin/fields/ArrayField.svelte +104 -108
  75. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
  76. package/dist/components/admin/fields/FileField.svelte +22 -17
  77. package/dist/components/admin/fields/FileField.svelte.d.ts.map +1 -1
  78. package/dist/components/admin/fields/ImageField.svelte +21 -15
  79. package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -1
  80. package/dist/components/admin/fields/ReferenceField.svelte +142 -112
  81. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -1
  82. package/dist/components/admin/fields/TextareaField.svelte +4 -3
  83. package/dist/components/admin/fields/TextareaField.svelte.d.ts +2 -2
  84. package/dist/components/admin/fields/TextareaField.svelte.d.ts.map +1 -1
  85. package/dist/components/layout/Sidebar.svelte +21 -11
  86. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -1
  87. package/dist/components/layout/sidebar/NavMain.svelte +1 -0
  88. package/dist/db/interfaces/document.d.ts.map +1 -1
  89. package/dist/db/interfaces/index.d.ts +3 -1
  90. package/dist/db/interfaces/index.d.ts.map +1 -1
  91. package/dist/db/interfaces/organization.d.ts +1 -1
  92. package/dist/db/interfaces/organization.d.ts.map +1 -1
  93. package/dist/db/interfaces/role.d.ts +25 -0
  94. package/dist/db/interfaces/role.d.ts.map +1 -0
  95. package/dist/db/interfaces/role.js +1 -0
  96. package/dist/engine.d.ts.map +1 -1
  97. package/dist/engine.js +5 -0
  98. package/dist/field-access.d.ts +30 -0
  99. package/dist/field-access.d.ts.map +1 -0
  100. package/dist/field-access.js +79 -0
  101. package/dist/hooks.d.ts +2 -0
  102. package/dist/hooks.d.ts.map +1 -1
  103. package/dist/hooks.js +23 -13
  104. package/dist/lib/api/api-keys.d.ts +8 -7
  105. package/dist/lib/api/api-keys.d.ts.map +1 -1
  106. package/dist/lib/api/api-keys.js.map +1 -1
  107. package/dist/lib/api/assets.d.ts +7 -22
  108. package/dist/lib/api/assets.d.ts.map +1 -1
  109. package/dist/lib/api/assets.js +1 -10
  110. package/dist/lib/api/assets.js.map +1 -1
  111. package/dist/lib/api/documents.d.ts +17 -16
  112. package/dist/lib/api/documents.d.ts.map +1 -1
  113. package/dist/lib/api/documents.js +2 -2
  114. package/dist/lib/api/documents.js.map +1 -1
  115. package/dist/lib/api/index.d.ts +1 -0
  116. package/dist/lib/api/index.d.ts.map +1 -1
  117. package/dist/lib/api/index.js +1 -0
  118. package/dist/lib/api/index.js.map +1 -1
  119. package/dist/lib/api/organizations.d.ts +15 -35
  120. package/dist/lib/api/organizations.d.ts.map +1 -1
  121. package/dist/lib/api/organizations.js.map +1 -1
  122. package/dist/lib/api/roles.d.ts +22 -0
  123. package/dist/lib/api/roles.d.ts.map +1 -0
  124. package/dist/lib/api/roles.js +27 -0
  125. package/dist/lib/api/roles.js.map +1 -0
  126. package/dist/lib/api/schemas/api-keys.d.ts +62 -0
  127. package/dist/lib/api/schemas/api-keys.d.ts.map +1 -0
  128. package/dist/lib/api/schemas/api-keys.js +29 -0
  129. package/dist/lib/api/schemas/api-keys.js.map +1 -0
  130. package/dist/lib/api/schemas/assets.d.ts +174 -0
  131. package/dist/lib/api/schemas/assets.d.ts.map +1 -0
  132. package/dist/lib/api/schemas/assets.js +100 -0
  133. package/dist/lib/api/schemas/assets.js.map +1 -0
  134. package/dist/lib/api/schemas/documents.d.ts +325 -0
  135. package/dist/lib/api/schemas/documents.d.ts.map +1 -0
  136. package/dist/lib/api/schemas/documents.js +162 -0
  137. package/dist/lib/api/schemas/documents.js.map +1 -0
  138. package/dist/lib/api/schemas/organizations.d.ts +41 -0
  139. package/dist/lib/api/schemas/organizations.d.ts.map +1 -0
  140. package/dist/lib/api/schemas/organizations.js +57 -0
  141. package/dist/lib/api/schemas/organizations.js.map +1 -0
  142. package/dist/lib/api/schemas/roles.d.ts +77 -0
  143. package/dist/lib/api/schemas/roles.d.ts.map +1 -0
  144. package/dist/lib/api/schemas/roles.js +43 -0
  145. package/dist/lib/api/schemas/roles.js.map +1 -0
  146. package/dist/lib/api/schemas/user.d.ts +10 -0
  147. package/dist/lib/api/schemas/user.d.ts.map +1 -0
  148. package/dist/lib/api/schemas/user.js +12 -0
  149. package/dist/lib/api/schemas/user.js.map +1 -0
  150. package/dist/lib/api/user.d.ts +4 -6
  151. package/dist/lib/api/user.d.ts.map +1 -1
  152. package/dist/lib/api/user.js.map +1 -1
  153. package/dist/lib/app-augment.d.ts +32 -0
  154. package/dist/lib/app-augment.d.ts.map +1 -0
  155. package/dist/lib/app-augment.js +19 -0
  156. package/dist/lib/app-augment.js.map +1 -0
  157. package/dist/lib/auth/auth-hooks.d.ts +2 -1
  158. package/dist/lib/auth/auth-hooks.d.ts.map +1 -1
  159. package/dist/lib/auth/auth-hooks.js +22 -2
  160. package/dist/lib/auth/auth-hooks.js.map +1 -1
  161. package/dist/lib/auth/provider.d.ts +5 -0
  162. package/dist/lib/auth/provider.d.ts.map +1 -1
  163. package/dist/lib/client/index.d.ts +4 -0
  164. package/dist/lib/client/index.d.ts.map +1 -1
  165. package/dist/lib/client/index.js +7 -0
  166. package/dist/lib/client/index.js.map +1 -1
  167. package/dist/lib/components/admin/confirm-dialog/confirm-dialog.svelte.d.ts +16 -0
  168. package/dist/lib/components/admin/confirm-dialog/confirm-dialog.svelte.d.ts.map +1 -0
  169. package/dist/lib/components/admin/confirm-dialog/confirm-dialog.svelte.js +30 -0
  170. package/dist/lib/components/admin/confirm-dialog/confirm-dialog.svelte.js.map +1 -0
  171. package/dist/lib/db/interfaces/document.d.ts.map +1 -1
  172. package/dist/lib/db/interfaces/index.d.ts +3 -1
  173. package/dist/lib/db/interfaces/index.d.ts.map +1 -1
  174. package/dist/lib/db/interfaces/organization.d.ts +1 -1
  175. package/dist/lib/db/interfaces/organization.d.ts.map +1 -1
  176. package/dist/lib/db/interfaces/role.d.ts +25 -0
  177. package/dist/lib/db/interfaces/role.d.ts.map +1 -0
  178. package/dist/lib/db/interfaces/role.js +2 -0
  179. package/dist/lib/db/interfaces/role.js.map +1 -0
  180. package/dist/lib/engine.d.ts.map +1 -1
  181. package/dist/lib/engine.js +5 -0
  182. package/dist/lib/engine.js.map +1 -1
  183. package/dist/lib/field-access.d.ts +30 -0
  184. package/dist/lib/field-access.d.ts.map +1 -0
  185. package/dist/lib/field-access.js +80 -0
  186. package/dist/lib/field-access.js.map +1 -0
  187. package/dist/lib/hooks.d.ts +2 -0
  188. package/dist/lib/hooks.d.ts.map +1 -1
  189. package/dist/lib/hooks.js +23 -13
  190. package/dist/lib/hooks.js.map +1 -1
  191. package/dist/lib/local-api/collection-api.d.ts +2 -0
  192. package/dist/lib/local-api/collection-api.d.ts.map +1 -1
  193. package/dist/lib/local-api/collection-api.js +98 -30
  194. package/dist/lib/local-api/collection-api.js.map +1 -1
  195. package/dist/lib/local-api/index.d.ts.map +1 -1
  196. package/dist/lib/local-api/index.js.map +1 -1
  197. package/dist/lib/local-api/permissions.d.ts +26 -26
  198. package/dist/lib/local-api/permissions.d.ts.map +1 -1
  199. package/dist/lib/local-api/permissions.js +122 -80
  200. package/dist/lib/local-api/permissions.js.map +1 -1
  201. package/dist/lib/permissions-context.svelte.d.ts +44 -0
  202. package/dist/lib/permissions-context.svelte.d.ts.map +1 -0
  203. package/dist/lib/permissions-context.svelte.js +80 -0
  204. package/dist/lib/permissions-context.svelte.js.map +1 -0
  205. package/dist/lib/routes/assets-bulk.d.ts.map +1 -1
  206. package/dist/lib/routes/assets-bulk.js +10 -3
  207. package/dist/lib/routes/assets-bulk.js.map +1 -1
  208. package/dist/lib/routes/assets-by-id.d.ts.map +1 -1
  209. package/dist/lib/routes/assets-by-id.js +11 -1
  210. package/dist/lib/routes/assets-by-id.js.map +1 -1
  211. package/dist/lib/routes/assets-references-counts.d.ts.map +1 -1
  212. package/dist/lib/routes/assets-references-counts.js +12 -2
  213. package/dist/lib/routes/assets-references-counts.js.map +1 -1
  214. package/dist/lib/routes/assets.d.ts.map +1 -1
  215. package/dist/lib/routes/assets.js +14 -13
  216. package/dist/lib/routes/assets.js.map +1 -1
  217. package/dist/lib/routes/document-versions.d.ts.map +1 -1
  218. package/dist/lib/routes/document-versions.js +16 -2
  219. package/dist/lib/routes/document-versions.js.map +1 -1
  220. package/dist/lib/routes/documents-by-id.d.ts.map +1 -1
  221. package/dist/lib/routes/documents-by-id.js +15 -3
  222. package/dist/lib/routes/documents-by-id.js.map +1 -1
  223. package/dist/lib/routes/documents-query.d.ts.map +1 -1
  224. package/dist/lib/routes/documents-query.js +13 -10
  225. package/dist/lib/routes/documents-query.js.map +1 -1
  226. package/dist/lib/routes/documents.d.ts.map +1 -1
  227. package/dist/lib/routes/documents.js +29 -26
  228. package/dist/lib/routes/documents.js.map +1 -1
  229. package/dist/lib/routes/organizations-by-id.d.ts.map +1 -1
  230. package/dist/lib/routes/organizations-by-id.js +17 -4
  231. package/dist/lib/routes/organizations-by-id.js.map +1 -1
  232. package/dist/lib/routes/organizations-invitations.d.ts.map +1 -1
  233. package/dist/lib/routes/organizations-invitations.js +48 -18
  234. package/dist/lib/routes/organizations-invitations.js.map +1 -1
  235. package/dist/lib/routes/organizations-members.d.ts.map +1 -1
  236. package/dist/lib/routes/organizations-members.js +24 -18
  237. package/dist/lib/routes/organizations-members.js.map +1 -1
  238. package/dist/lib/routes/organizations-switch.d.ts.map +1 -1
  239. package/dist/lib/routes/organizations-switch.js +7 -3
  240. package/dist/lib/routes/organizations-switch.js.map +1 -1
  241. package/dist/lib/routes/organizations.d.ts.map +1 -1
  242. package/dist/lib/routes/organizations.js +11 -5
  243. package/dist/lib/routes/organizations.js.map +1 -1
  244. package/dist/lib/routes/roles-by-name.d.ts +4 -0
  245. package/dist/lib/routes/roles-by-name.d.ts.map +1 -0
  246. package/dist/lib/routes/roles-by-name.js +112 -0
  247. package/dist/lib/routes/roles-by-name.js.map +1 -0
  248. package/dist/lib/routes/roles.d.ts +4 -0
  249. package/dist/lib/routes/roles.d.ts.map +1 -0
  250. package/dist/lib/routes/roles.js +91 -0
  251. package/dist/lib/routes/roles.js.map +1 -0
  252. package/dist/lib/routes/user-preferences.d.ts.map +1 -1
  253. package/dist/lib/routes/user-preferences.js +7 -13
  254. package/dist/lib/routes/user-preferences.js.map +1 -1
  255. package/dist/lib/routes-exports.d.ts +2 -0
  256. package/dist/lib/routes-exports.d.ts.map +1 -1
  257. package/dist/lib/routes-exports.js +3 -0
  258. package/dist/lib/routes-exports.js.map +1 -1
  259. package/dist/lib/save-state-context.svelte.d.ts +8 -0
  260. package/dist/lib/save-state-context.svelte.d.ts.map +1 -0
  261. package/dist/lib/save-state-context.svelte.js +9 -0
  262. package/dist/lib/save-state-context.svelte.js.map +1 -0
  263. package/dist/lib/schema-utils/validator.d.ts.map +1 -1
  264. package/dist/lib/schema-utils/validator.js +14 -0
  265. package/dist/lib/schema-utils/validator.js.map +1 -1
  266. package/dist/lib/server/index.d.ts +1 -0
  267. package/dist/lib/server/index.d.ts.map +1 -1
  268. package/dist/lib/server/index.js +1 -0
  269. package/dist/lib/server/index.js.map +1 -1
  270. package/dist/lib/services/index.d.ts +1 -0
  271. package/dist/lib/services/index.d.ts.map +1 -1
  272. package/dist/lib/services/index.js +1 -0
  273. package/dist/lib/services/index.js.map +1 -1
  274. package/dist/lib/services/roles-service.d.ts +35 -0
  275. package/dist/lib/services/roles-service.d.ts.map +1 -0
  276. package/dist/lib/services/roles-service.js +91 -0
  277. package/dist/lib/services/roles-service.js.map +1 -0
  278. package/dist/lib/services/version-service.d.ts.map +1 -1
  279. package/dist/lib/services/version-service.js.map +1 -1
  280. package/dist/lib/types/auth.d.ts +43 -9
  281. package/dist/lib/types/auth.d.ts.map +1 -1
  282. package/dist/lib/types/auth.js +31 -26
  283. package/dist/lib/types/auth.js.map +1 -1
  284. package/dist/lib/types/capabilities.d.ts +104 -0
  285. package/dist/lib/types/capabilities.d.ts.map +1 -0
  286. package/dist/lib/types/capabilities.js +217 -0
  287. package/dist/lib/types/capabilities.js.map +1 -0
  288. package/dist/lib/types/index.d.ts +1 -0
  289. package/dist/lib/types/index.d.ts.map +1 -1
  290. package/dist/lib/types/index.js +1 -0
  291. package/dist/lib/types/index.js.map +1 -1
  292. package/dist/lib/types/organization.d.ts +13 -4
  293. package/dist/lib/types/organization.d.ts.map +1 -1
  294. package/dist/lib/types/schemas.d.ts +71 -0
  295. package/dist/lib/types/schemas.d.ts.map +1 -1
  296. package/dist/lib/types/sidebar.d.ts +1 -1
  297. package/dist/lib/types/sidebar.d.ts.map +1 -1
  298. package/dist/lib/utils/mime-detect.d.ts.map +1 -1
  299. package/dist/lib/utils/mime-detect.js +28 -6
  300. package/dist/lib/utils/mime-detect.js.map +1 -1
  301. package/dist/local-api/collection-api.d.ts +2 -0
  302. package/dist/local-api/collection-api.d.ts.map +1 -1
  303. package/dist/local-api/collection-api.js +98 -30
  304. package/dist/local-api/index.d.ts.map +1 -1
  305. package/dist/local-api/permissions.d.ts +26 -26
  306. package/dist/local-api/permissions.d.ts.map +1 -1
  307. package/dist/local-api/permissions.js +122 -80
  308. package/dist/permissions-context.svelte.d.ts +44 -0
  309. package/dist/permissions-context.svelte.d.ts.map +1 -0
  310. package/dist/permissions-context.svelte.js +79 -0
  311. package/dist/plugins/README.md +20 -20
  312. package/dist/routes/assets-bulk.d.ts.map +1 -1
  313. package/dist/routes/assets-bulk.js +10 -3
  314. package/dist/routes/assets-by-id.d.ts.map +1 -1
  315. package/dist/routes/assets-by-id.js +11 -1
  316. package/dist/routes/assets-references-counts.d.ts.map +1 -1
  317. package/dist/routes/assets-references-counts.js +12 -2
  318. package/dist/routes/assets.d.ts.map +1 -1
  319. package/dist/routes/assets.js +14 -13
  320. package/dist/routes/document-versions.d.ts.map +1 -1
  321. package/dist/routes/document-versions.js +16 -2
  322. package/dist/routes/documents-by-id.d.ts.map +1 -1
  323. package/dist/routes/documents-by-id.js +15 -3
  324. package/dist/routes/documents-query.d.ts.map +1 -1
  325. package/dist/routes/documents-query.js +13 -10
  326. package/dist/routes/documents.d.ts.map +1 -1
  327. package/dist/routes/documents.js +29 -26
  328. package/dist/routes/organizations-by-id.d.ts.map +1 -1
  329. package/dist/routes/organizations-by-id.js +17 -4
  330. package/dist/routes/organizations-invitations.d.ts.map +1 -1
  331. package/dist/routes/organizations-invitations.js +48 -18
  332. package/dist/routes/organizations-members.d.ts.map +1 -1
  333. package/dist/routes/organizations-members.js +24 -18
  334. package/dist/routes/organizations-switch.d.ts.map +1 -1
  335. package/dist/routes/organizations-switch.js +7 -3
  336. package/dist/routes/organizations.d.ts.map +1 -1
  337. package/dist/routes/organizations.js +11 -5
  338. package/dist/routes/roles-by-name.d.ts +4 -0
  339. package/dist/routes/roles-by-name.d.ts.map +1 -0
  340. package/dist/routes/roles-by-name.js +111 -0
  341. package/dist/routes/roles.d.ts +4 -0
  342. package/dist/routes/roles.d.ts.map +1 -0
  343. package/dist/routes/roles.js +90 -0
  344. package/dist/routes/user-preferences.d.ts.map +1 -1
  345. package/dist/routes/user-preferences.js +7 -13
  346. package/dist/routes-exports.d.ts +2 -0
  347. package/dist/routes-exports.d.ts.map +1 -1
  348. package/dist/routes-exports.js +3 -0
  349. package/dist/save-state-context.svelte.d.ts +8 -0
  350. package/dist/save-state-context.svelte.d.ts.map +1 -0
  351. package/dist/save-state-context.svelte.js +8 -0
  352. package/dist/schema-utils/validator.d.ts.map +1 -1
  353. package/dist/schema-utils/validator.js +14 -0
  354. package/dist/server/index.d.ts +1 -0
  355. package/dist/server/index.d.ts.map +1 -1
  356. package/dist/server/index.js +1 -0
  357. package/dist/services/index.d.ts +1 -0
  358. package/dist/services/index.d.ts.map +1 -1
  359. package/dist/services/index.js +1 -0
  360. package/dist/services/roles-service.d.ts +35 -0
  361. package/dist/services/roles-service.d.ts.map +1 -0
  362. package/dist/services/roles-service.js +90 -0
  363. package/dist/services/version-service.d.ts.map +1 -1
  364. package/dist/types/auth.d.ts +43 -9
  365. package/dist/types/auth.d.ts.map +1 -1
  366. package/dist/types/auth.js +31 -26
  367. package/dist/types/capabilities.d.ts +104 -0
  368. package/dist/types/capabilities.d.ts.map +1 -0
  369. package/dist/types/capabilities.js +216 -0
  370. package/dist/types/index.d.ts +1 -0
  371. package/dist/types/index.d.ts.map +1 -1
  372. package/dist/types/index.js +1 -0
  373. package/dist/types/organization.d.ts +13 -4
  374. package/dist/types/organization.d.ts.map +1 -1
  375. package/dist/types/schemas.d.ts +71 -0
  376. package/dist/types/schemas.d.ts.map +1 -1
  377. package/dist/types/sidebar.d.ts +1 -1
  378. package/dist/types/sidebar.d.ts.map +1 -1
  379. package/dist/utils/mime-detect.d.ts.map +1 -1
  380. package/dist/utils/mime-detect.js +28 -6
  381. package/package.json +142 -138
@@ -0,0 +1,161 @@
1
+ import { z } from 'zod';
2
+ const jsonRecord = z.record(z.string(), z.unknown());
3
+ // ---------- Shared shapes ----------
4
+ export const documentMetaSchema = z
5
+ .object({
6
+ status: z.enum(['draft', 'published', 'unpublished']),
7
+ publishedAt: z.string().nullable().optional(),
8
+ updatedAt: z.string().optional(),
9
+ createdAt: z.string().optional(),
10
+ publishedHash: z.string().nullable().optional(),
11
+ draftHash: z.string().nullable().optional()
12
+ })
13
+ .passthrough();
14
+ export const documentSchema = z
15
+ .object({
16
+ id: z.string(),
17
+ type: z.string(),
18
+ draftData: jsonRecord.nullable().optional(),
19
+ publishedData: jsonRecord.nullable().optional(),
20
+ _meta: documentMetaSchema.optional()
21
+ })
22
+ .passthrough();
23
+ export const paginationMetaSchema = z.object({
24
+ total: z.number(),
25
+ page: z.number(),
26
+ pageSize: z.number(),
27
+ totalPages: z.number(),
28
+ hasNextPage: z.boolean(),
29
+ hasPrevPage: z.boolean()
30
+ });
31
+ // ---------- GET /documents (list) ----------
32
+ const csvString = z
33
+ .string()
34
+ .optional()
35
+ .transform((v) => (v ? v.split(',').filter(Boolean) : undefined));
36
+ export const listDocumentsQuery = z.object({
37
+ type: z.string().optional(),
38
+ docType: z.string().optional(), // legacy alias
39
+ status: z.string().optional(),
40
+ page: z.coerce.number().int().min(1).optional(),
41
+ pageSize: z.coerce.number().int().min(1).max(200).optional(),
42
+ limit: z.coerce.number().int().min(1).max(200).optional(), // legacy alias for pageSize
43
+ depth: z.coerce.number().int().min(0).max(5).optional(),
44
+ sort: z.union([z.string(), z.array(z.string())]).optional(),
45
+ perspective: z.enum(['draft', 'published']).optional(),
46
+ includeChildOrganizations: z
47
+ .union([z.boolean(), z.enum(['true', 'false'])])
48
+ .optional()
49
+ .transform((v) => v === true || v === 'true'),
50
+ filterOrganizationIds: csvString
51
+ });
52
+ export const listDocumentsResponse = z.object({
53
+ success: z.literal(true),
54
+ data: z.array(documentSchema),
55
+ pagination: paginationMetaSchema
56
+ });
57
+ // ---------- POST /documents (create) ----------
58
+ export const createDocumentRequest = z
59
+ .object({
60
+ type: z.string().min(1),
61
+ draftData: jsonRecord.optional(),
62
+ data: jsonRecord.optional(),
63
+ publish: z.boolean().optional()
64
+ })
65
+ .refine((v) => v.draftData !== undefined || v.data !== undefined, {
66
+ message: 'Either draftData or data is required'
67
+ });
68
+ export const createDocumentResponse = z.object({
69
+ success: z.literal(true),
70
+ data: documentSchema,
71
+ validation: z.unknown().optional()
72
+ });
73
+ // ---------- GET /documents/[id] ----------
74
+ export const getDocumentResponse = z.object({
75
+ success: z.literal(true),
76
+ data: documentSchema
77
+ });
78
+ // ---------- PUT /documents/[id] (update) ----------
79
+ export const updateDocumentRequest = z
80
+ .object({
81
+ draftData: jsonRecord.optional(),
82
+ data: jsonRecord.optional(),
83
+ publish: z.boolean().optional()
84
+ })
85
+ .refine((v) => v.draftData !== undefined || v.data !== undefined, {
86
+ message: 'Either draftData or data is required'
87
+ });
88
+ export const updateDocumentResponse = z.object({
89
+ success: z.literal(true),
90
+ data: documentSchema,
91
+ validation: z.unknown().optional()
92
+ });
93
+ // ---------- DELETE /documents/[id] ----------
94
+ export const deleteDocumentResponse = z.object({
95
+ success: z.literal(true),
96
+ message: z.string().optional()
97
+ });
98
+ // ---------- POST /documents/[id]/publish ----------
99
+ export const publishDocumentResponse = z.object({
100
+ success: z.literal(true),
101
+ data: documentSchema,
102
+ message: z.string().optional()
103
+ });
104
+ // ---------- DELETE /documents/[id]/publish (unpublish) ----------
105
+ export const unpublishDocumentResponse = z.object({
106
+ success: z.literal(true),
107
+ data: documentSchema,
108
+ message: z.string().optional()
109
+ });
110
+ // ---------- POST /documents/query ----------
111
+ // `where` and `select` are intentionally loose — the filter DSL is complex
112
+ // and already validated by LocalAPI.find(). Zod's job here is to catch shape
113
+ // errors on the scalar fields (type, pagination, perspective, etc).
114
+ export const queryDocumentsRequest = z.object({
115
+ type: z.string().min(1),
116
+ where: z.unknown().optional(),
117
+ select: z.unknown().optional(),
118
+ sort: z.union([z.string(), z.array(z.string())]).optional(),
119
+ page: z.coerce.number().int().min(1).optional(),
120
+ pageSize: z.coerce.number().int().min(1).max(500).optional(),
121
+ limit: z.coerce.number().int().min(1).max(500).optional(),
122
+ offset: z.coerce.number().int().min(0).optional(),
123
+ depth: z.coerce.number().int().min(0).max(5).optional(),
124
+ perspective: z.enum(['draft', 'published']).optional(),
125
+ includeChildOrganizations: z.boolean().optional(),
126
+ filterOrganizationIds: z.array(z.string()).optional()
127
+ });
128
+ // ---------- GET /documents/[id]/versions (list) ----------
129
+ export const listVersionsQuery = z.object({
130
+ limit: z.coerce.number().int().min(1).max(200).optional(),
131
+ offset: z.coerce.number().int().min(0).optional()
132
+ });
133
+ export const documentVersionSchema = z
134
+ .object({
135
+ id: z.string(),
136
+ documentId: z.string(),
137
+ organizationId: z.string(),
138
+ versionNumber: z.number(),
139
+ eventType: z.enum(['draft', 'publish', 'restore']),
140
+ data: jsonRecord.nullable(),
141
+ createdBy: z.string().nullable(),
142
+ createdByName: z.string().nullable().optional(),
143
+ createdAt: z.union([z.string(), z.date()]).nullable()
144
+ })
145
+ .passthrough();
146
+ export const listVersionsResponse = z.object({
147
+ success: z.literal(true),
148
+ data: z.array(documentVersionSchema),
149
+ total: z.number()
150
+ });
151
+ // ---------- GET /documents/[id]/versions/[version] ----------
152
+ export const getVersionResponse = z.object({
153
+ success: z.literal(true),
154
+ data: documentVersionSchema
155
+ });
156
+ // ---------- POST /documents/[id]/versions/[version]/restore ----------
157
+ export const restoreVersionResponse = z.object({
158
+ success: z.literal(true),
159
+ data: documentSchema,
160
+ message: z.string().optional()
161
+ });
@@ -0,0 +1,41 @@
1
+ import { z } from 'zod';
2
+ export declare const organizationRoleSchema: z.ZodString;
3
+ export declare const invitableRoleSchema: z.ZodString;
4
+ export declare const createOrganizationRequest: z.ZodObject<{
5
+ name: z.ZodString;
6
+ slug: z.ZodString;
7
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
8
+ parentOrganizationId: z.ZodOptional<z.ZodString>;
9
+ }, z.core.$strip>;
10
+ export declare const updateOrganizationRequest: z.ZodObject<{
11
+ name: z.ZodOptional<z.ZodString>;
12
+ slug: z.ZodOptional<z.ZodString>;
13
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
14
+ }, z.core.$strip>;
15
+ export declare const switchOrganizationRequest: z.ZodObject<{
16
+ organizationId: z.ZodString;
17
+ }, z.core.$strip>;
18
+ export declare const inviteMemberRequest: z.ZodObject<{
19
+ email: z.ZodString;
20
+ role: z.ZodString;
21
+ }, z.core.$strip>;
22
+ export declare const cancelInvitationRequest: z.ZodObject<{
23
+ invitationId: z.ZodString;
24
+ }, z.core.$strip>;
25
+ export declare const removeMemberRequest: z.ZodObject<{
26
+ userId: z.ZodString;
27
+ }, z.core.$strip>;
28
+ export declare const updateMemberRoleRequest: z.ZodObject<{
29
+ userId: z.ZodString;
30
+ role: z.ZodString;
31
+ }, z.core.$strip>;
32
+ export type OrganizationRoleSchema = z.infer<typeof organizationRoleSchema>;
33
+ export type InvitableRoleSchema = z.infer<typeof invitableRoleSchema>;
34
+ export type CreateOrganizationRequest = z.infer<typeof createOrganizationRequest>;
35
+ export type UpdateOrganizationRequest = z.infer<typeof updateOrganizationRequest>;
36
+ export type SwitchOrganizationRequest = z.infer<typeof switchOrganizationRequest>;
37
+ export type InviteMemberRequest = z.infer<typeof inviteMemberRequest>;
38
+ export type CancelInvitationRequest = z.infer<typeof cancelInvitationRequest>;
39
+ export type RemoveMemberRequest = z.infer<typeof removeMemberRequest>;
40
+ export type UpdateMemberRoleRequest = z.infer<typeof updateMemberRoleRequest>;
41
+ //# sourceMappingURL=organizations.d.ts.map
@@ -0,0 +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;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"}
@@ -0,0 +1,56 @@
1
+ import { z } from 'zod';
2
+ // ---------- Shared ----------
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;
13
+ // Role used for new invitations — owners cannot be invited, only promoted.
14
+ export const invitableRoleSchema = roleNameSchema.refine((v) => v !== 'owner', {
15
+ message: 'owner cannot be assigned via invitation'
16
+ });
17
+ const metadataSchema = z.record(z.string(), z.unknown());
18
+ // ---------- POST /organizations ----------
19
+ export const createOrganizationRequest = z.object({
20
+ name: z.string().min(1),
21
+ slug: z.string().min(1),
22
+ metadata: metadataSchema.nullable().optional(),
23
+ parentOrganizationId: z.string().optional()
24
+ });
25
+ // ---------- PATCH /organizations/[id] ----------
26
+ export const updateOrganizationRequest = z
27
+ .object({
28
+ name: z.string().min(1).optional(),
29
+ slug: z.string().min(1).optional(),
30
+ metadata: metadataSchema.nullable().optional()
31
+ })
32
+ .refine((v) => v.name !== undefined || v.slug !== undefined || v.metadata !== undefined, {
33
+ message: 'At least one field (name, slug, metadata) is required'
34
+ });
35
+ // ---------- POST /organizations/switch ----------
36
+ export const switchOrganizationRequest = z.object({
37
+ organizationId: z.string().min(1)
38
+ });
39
+ // ---------- POST /organizations/invitations ----------
40
+ export const inviteMemberRequest = z.object({
41
+ email: z.string().email(),
42
+ role: invitableRoleSchema
43
+ });
44
+ // ---------- DELETE /organizations/invitations ----------
45
+ export const cancelInvitationRequest = z.object({
46
+ invitationId: z.string().min(1)
47
+ });
48
+ // ---------- DELETE /organizations/members ----------
49
+ export const removeMemberRequest = z.object({
50
+ userId: z.string().min(1)
51
+ });
52
+ // ---------- PATCH /organizations/members ----------
53
+ export const updateMemberRoleRequest = z.object({
54
+ userId: z.string().min(1),
55
+ role: organizationRoleSchema
56
+ });
@@ -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,10 @@
1
+ import { z } from 'zod';
2
+ export declare const updateUserRequest: z.ZodObject<{
3
+ name: z.ZodString;
4
+ }, z.core.$strip>;
5
+ export declare const updateUserPreferencesRequest: z.ZodObject<{
6
+ includeChildOrganizations: z.ZodOptional<z.ZodBoolean>;
7
+ }, z.core.$strict>;
8
+ export type UpdateUserRequest = z.infer<typeof updateUserRequest>;
9
+ export type UpdateUserPreferencesRequest = z.infer<typeof updateUserPreferencesRequest>;
10
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../src/lib/api/schemas/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,iBAAiB;;iBAE5B,CAAC;AAIH,eAAO,MAAM,4BAA4B;;kBAI/B,CAAC;AAIX,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAClE,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+ // ---------- PATCH /user ----------
3
+ export const updateUserRequest = z.object({
4
+ name: z.string().min(1)
5
+ });
6
+ // ---------- PATCH /user/cms-preference ----------
7
+ export const updateUserPreferencesRequest = z
8
+ .object({
9
+ includeChildOrganizations: z.boolean().optional()
10
+ })
11
+ .strict();
@@ -1,18 +1,16 @@
1
1
  import type { CMSUser } from '../types/user.js';
2
- import type { UserSessionPreferences } from '../types/organization.js';
3
2
  import type { ApiResponse } from './types.js';
4
- export interface UpdateProfileData {
5
- name?: string;
6
- }
3
+ import type { UpdateUserRequest, UpdateUserPreferencesRequest } from './schemas/user.js';
4
+ export type UpdateProfileData = UpdateUserRequest;
7
5
  export declare class UserApi {
8
6
  /**
9
7
  * Update user profile
10
8
  */
11
- static updateProfile(data: UpdateProfileData): Promise<ApiResponse<CMSUser>>;
9
+ static updateProfile(data: UpdateUserRequest): Promise<ApiResponse<CMSUser>>;
12
10
  /**
13
11
  * Update CMS preferences (e.g. includeChildOrganizations)
14
12
  */
15
- static updatePreferences(prefs: Partial<UserSessionPreferences>): Promise<ApiResponse<{
13
+ static updatePreferences(prefs: UpdateUserPreferencesRequest): Promise<ApiResponse<{
16
14
  success: boolean;
17
15
  }>>;
18
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/lib/api/user.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,OAAO;IACnB;;OAEG;WACU,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAIlF;;OAEG;WACU,iBAAiB,CAC7B,KAAK,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACpC,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAG7C;AAED,eAAO,MAAM,IAAI;;;CAGhB,CAAC"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/lib/api/user.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAItF,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAElD,qBAAa,OAAO;IACnB;;OAEG;WACU,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAIlF;;OAEG;WACU,iBAAiB,CAC7B,KAAK,EAAE,4BAA4B,GACjC,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAG7C;AAED,eAAO,MAAM,IAAI;;;CAGhB,CAAC"}
@@ -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
  }
@@ -10,6 +10,11 @@ export interface AuthProvider {
10
10
  name?: string;
11
11
  email: string;
12
12
  } | null>;
13
+ getUserByEmail(email: string): Promise<{
14
+ id: string;
15
+ name?: string;
16
+ email: string;
17
+ } | null>;
13
18
  changeUserName(userId: string, name: string): Promise<void>;
14
19
  requestPasswordReset(email: string, redirectTo?: string): Promise<void>;
15
20
  resetPassword(token: string, newPassword: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/lib/auth/provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,WAAW,YAAY;IAE5B,UAAU,CACT,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,eAAe,GACjB,OAAO,CAAC,WAAW,GAAG,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACpD,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAG5E,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClF,aAAa,CACZ,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,eAAe,EACnB,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,GAC3B,OAAO,CAAC,UAAU,CAAC,CAAC;IAGvB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC1F,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5D,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/lib/auth/provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,WAAW,YAAY;IAE5B,UAAU,CACT,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,eAAe,GACjB,OAAO,CAAC,WAAW,GAAG,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACpD,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAG5E,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClF,aAAa,CACZ,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,eAAe,EACnB,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,GAC3B,OAAO,CAAC,UAAU,CAAC,CAAC;IAGvB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC1F,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC5F,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5D,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE"}
package/dist/cli/index.js CHANGED
File without changes
@@ -4,11 +4,13 @@ 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
6
  export { setSchemaContext, getSchemaContext } from '../schema-context.svelte';
7
+ export { setPermissionsContext, usePermissions, type PermissionsContext } from '../permissions-context.svelte';
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,4 +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';
27
+ export { confirmDialog, type ConfirmDialogOptions } from '../components/admin/confirm-dialog/confirm-dialog.svelte';
28
+ export { default as ConfirmDialogHost } from '../components/admin/confirm-dialog/ConfirmDialogHost.svelte';
25
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"}
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"}