@aphexcms/cms-core 4.0.0 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. package/dist/api/schemas/user.d.ts +10 -0
  2. package/dist/api/schemas/user.d.ts.map +1 -1
  3. package/dist/api/schemas/user.js +10 -0
  4. package/dist/cli/generate-types.d.ts.map +1 -1
  5. package/dist/cli/generate-types.js +14 -9
  6. package/dist/cli/generate-types.js.map +1 -1
  7. package/dist/components/AdminApp.svelte +25 -7
  8. package/dist/components/AdminApp.svelte.d.ts.map +1 -1
  9. package/dist/components/admin/DocumentEditor.svelte +63 -11
  10. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
  11. package/dist/components/admin/DocumentVersionPanel.svelte +6 -0
  12. package/dist/components/admin/DocumentVersionPanel.svelte.d.ts +3 -1
  13. package/dist/components/admin/DocumentVersionPanel.svelte.d.ts.map +1 -1
  14. package/dist/components/admin/ObjectModal.svelte +55 -12
  15. package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -1
  16. package/dist/components/admin/fields/ArrayField.svelte +15 -15
  17. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
  18. package/dist/config.d.ts.map +1 -1
  19. package/dist/config.js +1 -2
  20. package/dist/hooks.d.ts +3 -4
  21. package/dist/hooks.d.ts.map +1 -1
  22. package/dist/hooks.js +20 -99
  23. package/dist/lib/api/schemas/user.d.ts +10 -0
  24. package/dist/lib/api/schemas/user.d.ts.map +1 -1
  25. package/dist/lib/api/schemas/user.js +10 -0
  26. package/dist/lib/api/schemas/user.js.map +1 -1
  27. package/dist/lib/config.d.ts.map +1 -1
  28. package/dist/lib/config.js +1 -2
  29. package/dist/lib/config.js.map +1 -1
  30. package/dist/lib/hooks.d.ts +3 -4
  31. package/dist/lib/hooks.d.ts.map +1 -1
  32. package/dist/lib/hooks.js +20 -99
  33. package/dist/lib/hooks.js.map +1 -1
  34. package/dist/lib/server/api/index.d.ts +55 -0
  35. package/dist/lib/server/api/index.d.ts.map +1 -0
  36. package/dist/lib/server/api/index.js +107 -0
  37. package/dist/lib/server/api/index.js.map +1 -0
  38. package/dist/lib/server/api/routes/assets-bulk.d.ts +4 -0
  39. package/dist/lib/server/api/routes/assets-bulk.d.ts.map +1 -0
  40. package/dist/{routes → lib/server/api/routes}/assets-bulk.js +23 -23
  41. package/dist/lib/server/api/routes/assets-bulk.js.map +1 -0
  42. package/dist/lib/server/api/routes/assets-by-id.d.ts +4 -0
  43. package/dist/lib/server/api/routes/assets-by-id.d.ts.map +1 -0
  44. package/dist/lib/server/api/routes/assets-by-id.js +108 -0
  45. package/dist/lib/server/api/routes/assets-by-id.js.map +1 -0
  46. package/dist/lib/server/api/routes/assets-references.d.ts +15 -0
  47. package/dist/lib/server/api/routes/assets-references.d.ts.map +1 -0
  48. package/dist/lib/server/api/routes/assets-references.js +78 -0
  49. package/dist/lib/server/api/routes/assets-references.js.map +1 -0
  50. package/dist/lib/server/api/routes/assets.d.ts +4 -0
  51. package/dist/lib/server/api/routes/assets.d.ts.map +1 -0
  52. package/dist/{routes → lib/server/api/routes}/assets.js +76 -87
  53. package/dist/lib/server/api/routes/assets.js.map +1 -0
  54. package/dist/lib/server/api/routes/document-versions.d.ts +4 -0
  55. package/dist/lib/server/api/routes/document-versions.d.ts.map +1 -0
  56. package/dist/lib/server/api/routes/document-versions.js +113 -0
  57. package/dist/lib/server/api/routes/document-versions.js.map +1 -0
  58. package/dist/lib/server/api/routes/documents-by-id.d.ts +4 -0
  59. package/dist/lib/server/api/routes/documents-by-id.d.ts.map +1 -0
  60. package/dist/lib/server/api/routes/documents-by-id.js +148 -0
  61. package/dist/lib/server/api/routes/documents-by-id.js.map +1 -0
  62. package/dist/lib/server/api/routes/documents-publish.d.ts +4 -0
  63. package/dist/lib/server/api/routes/documents-publish.d.ts.map +1 -0
  64. package/dist/{routes → lib/server/api/routes}/documents-publish.js +42 -58
  65. package/dist/lib/server/api/routes/documents-publish.js.map +1 -0
  66. package/dist/lib/server/api/routes/documents-query.d.ts +8 -0
  67. package/dist/lib/server/api/routes/documents-query.d.ts.map +1 -0
  68. package/dist/lib/server/api/routes/documents-query.js +75 -0
  69. package/dist/lib/server/api/routes/documents-query.js.map +1 -0
  70. package/dist/lib/server/api/routes/documents.d.ts +4 -0
  71. package/dist/lib/server/api/routes/documents.d.ts.map +1 -0
  72. package/dist/{routes → lib/server/api/routes}/documents.js +55 -76
  73. package/dist/lib/server/api/routes/documents.js.map +1 -0
  74. package/dist/lib/server/api/routes/organizations-by-id.d.ts +4 -0
  75. package/dist/lib/server/api/routes/organizations-by-id.d.ts.map +1 -0
  76. package/dist/{routes → lib/server/api/routes}/organizations-by-id.js +62 -91
  77. package/dist/lib/server/api/routes/organizations-by-id.js.map +1 -0
  78. package/dist/lib/server/api/routes/organizations-invitations.d.ts +10 -0
  79. package/dist/lib/server/api/routes/organizations-invitations.d.ts.map +1 -0
  80. package/dist/{routes → lib/server/api/routes}/organizations-invitations.js +67 -78
  81. package/dist/lib/server/api/routes/organizations-invitations.js.map +1 -0
  82. package/dist/lib/server/api/routes/organizations-members.d.ts +4 -0
  83. package/dist/lib/server/api/routes/organizations-members.d.ts.map +1 -0
  84. package/dist/{routes → lib/server/api/routes}/organizations-members.js +74 -106
  85. package/dist/lib/server/api/routes/organizations-members.js.map +1 -0
  86. package/dist/lib/server/api/routes/organizations-switch.d.ts +4 -0
  87. package/dist/lib/server/api/routes/organizations-switch.d.ts.map +1 -0
  88. package/dist/lib/server/api/routes/organizations-switch.js +54 -0
  89. package/dist/lib/server/api/routes/organizations-switch.js.map +1 -0
  90. package/dist/lib/server/api/routes/organizations.d.ts +4 -0
  91. package/dist/lib/server/api/routes/organizations.d.ts.map +1 -0
  92. package/dist/lib/server/api/routes/organizations.js +99 -0
  93. package/dist/lib/server/api/routes/organizations.js.map +1 -0
  94. package/dist/lib/server/api/routes/roles.d.ts +12 -0
  95. package/dist/lib/server/api/routes/roles.d.ts.map +1 -0
  96. package/dist/lib/server/api/routes/roles.js +219 -0
  97. package/dist/lib/server/api/routes/roles.js.map +1 -0
  98. package/dist/lib/server/api/routes/schemas.d.ts +4 -0
  99. package/dist/lib/server/api/routes/schemas.d.ts.map +1 -0
  100. package/dist/lib/server/api/routes/schemas.js +27 -0
  101. package/dist/lib/server/api/routes/schemas.js.map +1 -0
  102. package/dist/lib/server/api/routes/user-preferences.d.ts +4 -0
  103. package/dist/lib/server/api/routes/user-preferences.d.ts.map +1 -0
  104. package/dist/lib/server/api/routes/user-preferences.js +63 -0
  105. package/dist/lib/server/api/routes/user-preferences.js.map +1 -0
  106. package/dist/lib/server/api/routes/user.d.ts +12 -0
  107. package/dist/lib/server/api/routes/user.d.ts.map +1 -0
  108. package/dist/lib/server/api/routes/user.js +114 -0
  109. package/dist/lib/server/api/routes/user.js.map +1 -0
  110. package/dist/lib/server/index.d.ts +2 -1
  111. package/dist/lib/server/index.d.ts.map +1 -1
  112. package/dist/lib/server/index.js +7 -3
  113. package/dist/lib/server/index.js.map +1 -1
  114. package/dist/lib/types/config.d.ts +28 -29
  115. package/dist/lib/types/config.d.ts.map +1 -1
  116. package/dist/server/api/index.d.ts +55 -0
  117. package/dist/server/api/index.d.ts.map +1 -0
  118. package/dist/server/api/index.js +106 -0
  119. package/dist/server/api/routes/assets-bulk.d.ts +4 -0
  120. package/dist/server/api/routes/assets-bulk.d.ts.map +1 -0
  121. package/dist/{lib → server/api}/routes/assets-bulk.js +22 -24
  122. package/dist/server/api/routes/assets-by-id.d.ts +4 -0
  123. package/dist/server/api/routes/assets-by-id.d.ts.map +1 -0
  124. package/dist/server/api/routes/assets-by-id.js +107 -0
  125. package/dist/server/api/routes/assets-references.d.ts +15 -0
  126. package/dist/server/api/routes/assets-references.d.ts.map +1 -0
  127. package/dist/server/api/routes/assets-references.js +77 -0
  128. package/dist/server/api/routes/assets.d.ts +4 -0
  129. package/dist/server/api/routes/assets.d.ts.map +1 -0
  130. package/dist/{lib → server/api}/routes/assets.js +75 -88
  131. package/dist/server/api/routes/document-versions.d.ts +4 -0
  132. package/dist/server/api/routes/document-versions.d.ts.map +1 -0
  133. package/dist/server/api/routes/document-versions.js +112 -0
  134. package/dist/server/api/routes/documents-by-id.d.ts +4 -0
  135. package/dist/server/api/routes/documents-by-id.d.ts.map +1 -0
  136. package/dist/server/api/routes/documents-by-id.js +147 -0
  137. package/dist/server/api/routes/documents-publish.d.ts +4 -0
  138. package/dist/server/api/routes/documents-publish.d.ts.map +1 -0
  139. package/dist/{lib → server/api}/routes/documents-publish.js +41 -59
  140. package/dist/server/api/routes/documents-query.d.ts +8 -0
  141. package/dist/server/api/routes/documents-query.d.ts.map +1 -0
  142. package/dist/server/api/routes/documents-query.js +74 -0
  143. package/dist/server/api/routes/documents.d.ts +4 -0
  144. package/dist/server/api/routes/documents.d.ts.map +1 -0
  145. package/dist/{lib → server/api}/routes/documents.js +54 -77
  146. package/dist/server/api/routes/organizations-by-id.d.ts +4 -0
  147. package/dist/server/api/routes/organizations-by-id.d.ts.map +1 -0
  148. package/dist/{lib → server/api}/routes/organizations-by-id.js +61 -92
  149. package/dist/server/api/routes/organizations-invitations.d.ts +10 -0
  150. package/dist/server/api/routes/organizations-invitations.d.ts.map +1 -0
  151. package/dist/{lib → server/api}/routes/organizations-invitations.js +66 -79
  152. package/dist/server/api/routes/organizations-members.d.ts +4 -0
  153. package/dist/server/api/routes/organizations-members.d.ts.map +1 -0
  154. package/dist/{lib → server/api}/routes/organizations-members.js +73 -107
  155. package/dist/server/api/routes/organizations-switch.d.ts +4 -0
  156. package/dist/server/api/routes/organizations-switch.d.ts.map +1 -0
  157. package/dist/server/api/routes/organizations-switch.js +53 -0
  158. package/dist/server/api/routes/organizations.d.ts +4 -0
  159. package/dist/server/api/routes/organizations.d.ts.map +1 -0
  160. package/dist/server/api/routes/organizations.js +98 -0
  161. package/dist/server/api/routes/roles.d.ts +12 -0
  162. package/dist/server/api/routes/roles.d.ts.map +1 -0
  163. package/dist/server/api/routes/roles.js +218 -0
  164. package/dist/server/api/routes/schemas.d.ts +4 -0
  165. package/dist/server/api/routes/schemas.d.ts.map +1 -0
  166. package/dist/server/api/routes/schemas.js +26 -0
  167. package/dist/server/api/routes/user-preferences.d.ts +4 -0
  168. package/dist/server/api/routes/user-preferences.d.ts.map +1 -0
  169. package/dist/server/api/routes/user-preferences.js +62 -0
  170. package/dist/server/api/routes/user.d.ts +12 -0
  171. package/dist/server/api/routes/user.d.ts.map +1 -0
  172. package/dist/server/api/routes/user.js +113 -0
  173. package/dist/server/index.d.ts +2 -1
  174. package/dist/server/index.d.ts.map +1 -1
  175. package/dist/server/index.js +7 -3
  176. package/dist/types/config.d.ts +28 -29
  177. package/dist/types/config.d.ts.map +1 -1
  178. package/package.json +4 -2
  179. package/dist/lib/routes/assets-bulk.d.ts +0 -3
  180. package/dist/lib/routes/assets-bulk.d.ts.map +0 -1
  181. package/dist/lib/routes/assets-bulk.js.map +0 -1
  182. package/dist/lib/routes/assets-by-id.d.ts +0 -5
  183. package/dist/lib/routes/assets-by-id.d.ts.map +0 -1
  184. package/dist/lib/routes/assets-by-id.js +0 -116
  185. package/dist/lib/routes/assets-by-id.js.map +0 -1
  186. package/dist/lib/routes/assets-references-counts.d.ts +0 -7
  187. package/dist/lib/routes/assets-references-counts.d.ts.map +0 -1
  188. package/dist/lib/routes/assets-references-counts.js +0 -42
  189. package/dist/lib/routes/assets-references-counts.js.map +0 -1
  190. package/dist/lib/routes/assets-references.d.ts +0 -7
  191. package/dist/lib/routes/assets-references.d.ts.map +0 -1
  192. package/dist/lib/routes/assets-references.js +0 -35
  193. package/dist/lib/routes/assets-references.js.map +0 -1
  194. package/dist/lib/routes/assets.d.ts +0 -4
  195. package/dist/lib/routes/assets.d.ts.map +0 -1
  196. package/dist/lib/routes/assets.js.map +0 -1
  197. package/dist/lib/routes/document-versions.d.ts +0 -5
  198. package/dist/lib/routes/document-versions.d.ts.map +0 -1
  199. package/dist/lib/routes/document-versions.js +0 -114
  200. package/dist/lib/routes/document-versions.js.map +0 -1
  201. package/dist/lib/routes/documents-by-id.d.ts +0 -5
  202. package/dist/lib/routes/documents-by-id.d.ts.map +0 -1
  203. package/dist/lib/routes/documents-by-id.js +0 -188
  204. package/dist/lib/routes/documents-by-id.js.map +0 -1
  205. package/dist/lib/routes/documents-publish.d.ts +0 -4
  206. package/dist/lib/routes/documents-publish.d.ts.map +0 -1
  207. package/dist/lib/routes/documents-publish.js.map +0 -1
  208. package/dist/lib/routes/documents-query.d.ts +0 -26
  209. package/dist/lib/routes/documents-query.d.ts.map +0 -1
  210. package/dist/lib/routes/documents-query.js +0 -104
  211. package/dist/lib/routes/documents-query.js.map +0 -1
  212. package/dist/lib/routes/documents.d.ts +0 -4
  213. package/dist/lib/routes/documents.d.ts.map +0 -1
  214. package/dist/lib/routes/documents.js.map +0 -1
  215. package/dist/lib/routes/index.d.ts +0 -9
  216. package/dist/lib/routes/index.d.ts.map +0 -1
  217. package/dist/lib/routes/index.js +0 -15
  218. package/dist/lib/routes/index.js.map +0 -1
  219. package/dist/lib/routes/organizations-by-id.d.ts +0 -5
  220. package/dist/lib/routes/organizations-by-id.d.ts.map +0 -1
  221. package/dist/lib/routes/organizations-by-id.js.map +0 -1
  222. package/dist/lib/routes/organizations-invitations.d.ts +0 -4
  223. package/dist/lib/routes/organizations-invitations.d.ts.map +0 -1
  224. package/dist/lib/routes/organizations-invitations.js.map +0 -1
  225. package/dist/lib/routes/organizations-members.d.ts +0 -5
  226. package/dist/lib/routes/organizations-members.d.ts.map +0 -1
  227. package/dist/lib/routes/organizations-members.js.map +0 -1
  228. package/dist/lib/routes/organizations-switch.d.ts +0 -3
  229. package/dist/lib/routes/organizations-switch.d.ts.map +0 -1
  230. package/dist/lib/routes/organizations-switch.js +0 -59
  231. package/dist/lib/routes/organizations-switch.js.map +0 -1
  232. package/dist/lib/routes/organizations.d.ts +0 -4
  233. package/dist/lib/routes/organizations.d.ts.map +0 -1
  234. package/dist/lib/routes/organizations.js +0 -117
  235. package/dist/lib/routes/organizations.js.map +0 -1
  236. package/dist/lib/routes/roles-by-name.d.ts +0 -4
  237. package/dist/lib/routes/roles-by-name.d.ts.map +0 -1
  238. package/dist/lib/routes/roles-by-name.js +0 -112
  239. package/dist/lib/routes/roles-by-name.js.map +0 -1
  240. package/dist/lib/routes/roles.d.ts +0 -4
  241. package/dist/lib/routes/roles.d.ts.map +0 -1
  242. package/dist/lib/routes/roles.js +0 -91
  243. package/dist/lib/routes/roles.js.map +0 -1
  244. package/dist/lib/routes/schemas-by-type.d.ts +0 -3
  245. package/dist/lib/routes/schemas-by-type.d.ts.map +0 -1
  246. package/dist/lib/routes/schemas-by-type.js +0 -27
  247. package/dist/lib/routes/schemas-by-type.js.map +0 -1
  248. package/dist/lib/routes/schemas.d.ts +0 -3
  249. package/dist/lib/routes/schemas.d.ts.map +0 -1
  250. package/dist/lib/routes/schemas.js +0 -12
  251. package/dist/lib/routes/schemas.js.map +0 -1
  252. package/dist/lib/routes/user-preferences.d.ts +0 -4
  253. package/dist/lib/routes/user-preferences.d.ts.map +0 -1
  254. package/dist/lib/routes/user-preferences.js +0 -73
  255. package/dist/lib/routes/user-preferences.js.map +0 -1
  256. package/dist/lib/routes-exports.d.ts +0 -20
  257. package/dist/lib/routes-exports.d.ts.map +0 -1
  258. package/dist/lib/routes-exports.js +0 -27
  259. package/dist/lib/routes-exports.js.map +0 -1
  260. package/dist/routes/assets-bulk.d.ts +0 -3
  261. package/dist/routes/assets-bulk.d.ts.map +0 -1
  262. package/dist/routes/assets-by-id.d.ts +0 -5
  263. package/dist/routes/assets-by-id.d.ts.map +0 -1
  264. package/dist/routes/assets-by-id.js +0 -115
  265. package/dist/routes/assets-references-counts.d.ts +0 -7
  266. package/dist/routes/assets-references-counts.d.ts.map +0 -1
  267. package/dist/routes/assets-references-counts.js +0 -41
  268. package/dist/routes/assets-references.d.ts +0 -7
  269. package/dist/routes/assets-references.d.ts.map +0 -1
  270. package/dist/routes/assets-references.js +0 -34
  271. package/dist/routes/assets.d.ts +0 -4
  272. package/dist/routes/assets.d.ts.map +0 -1
  273. package/dist/routes/document-versions.d.ts +0 -5
  274. package/dist/routes/document-versions.d.ts.map +0 -1
  275. package/dist/routes/document-versions.js +0 -113
  276. package/dist/routes/documents-by-id.d.ts +0 -5
  277. package/dist/routes/documents-by-id.d.ts.map +0 -1
  278. package/dist/routes/documents-by-id.js +0 -187
  279. package/dist/routes/documents-publish.d.ts +0 -4
  280. package/dist/routes/documents-publish.d.ts.map +0 -1
  281. package/dist/routes/documents-query.d.ts +0 -26
  282. package/dist/routes/documents-query.d.ts.map +0 -1
  283. package/dist/routes/documents-query.js +0 -103
  284. package/dist/routes/documents.d.ts +0 -4
  285. package/dist/routes/documents.d.ts.map +0 -1
  286. package/dist/routes/index.d.ts +0 -9
  287. package/dist/routes/index.d.ts.map +0 -1
  288. package/dist/routes/index.js +0 -14
  289. package/dist/routes/organizations-by-id.d.ts +0 -5
  290. package/dist/routes/organizations-by-id.d.ts.map +0 -1
  291. package/dist/routes/organizations-invitations.d.ts +0 -4
  292. package/dist/routes/organizations-invitations.d.ts.map +0 -1
  293. package/dist/routes/organizations-members.d.ts +0 -5
  294. package/dist/routes/organizations-members.d.ts.map +0 -1
  295. package/dist/routes/organizations-switch.d.ts +0 -3
  296. package/dist/routes/organizations-switch.d.ts.map +0 -1
  297. package/dist/routes/organizations-switch.js +0 -58
  298. package/dist/routes/organizations.d.ts +0 -4
  299. package/dist/routes/organizations.d.ts.map +0 -1
  300. package/dist/routes/organizations.js +0 -116
  301. package/dist/routes/roles-by-name.d.ts +0 -4
  302. package/dist/routes/roles-by-name.d.ts.map +0 -1
  303. package/dist/routes/roles-by-name.js +0 -111
  304. package/dist/routes/roles.d.ts +0 -4
  305. package/dist/routes/roles.d.ts.map +0 -1
  306. package/dist/routes/roles.js +0 -90
  307. package/dist/routes/schemas-by-type.d.ts +0 -3
  308. package/dist/routes/schemas-by-type.d.ts.map +0 -1
  309. package/dist/routes/schemas-by-type.js +0 -26
  310. package/dist/routes/schemas.d.ts +0 -3
  311. package/dist/routes/schemas.d.ts.map +0 -1
  312. package/dist/routes/schemas.js +0 -11
  313. package/dist/routes/user-preferences.d.ts +0 -4
  314. package/dist/routes/user-preferences.d.ts.map +0 -1
  315. package/dist/routes/user-preferences.js +0 -72
  316. package/dist/routes-exports.d.ts +0 -20
  317. package/dist/routes-exports.d.ts.map +0 -1
  318. package/dist/routes-exports.js +0 -26
@@ -1,115 +0,0 @@
1
- import { json } from '@sveltejs/kit';
2
- import { cmsLogger } from '../utils/logger.js';
3
- import { updateAssetRequest } from '../api/schemas/assets.js';
4
- export const GET = async ({ params, locals }) => {
5
- try {
6
- const { assetService } = locals.aphexCMS;
7
- const auth = locals.auth;
8
- const { id } = params;
9
- if (!auth || auth.type === 'partial_session') {
10
- return json({ success: false, error: 'Unauthorized' }, { status: 401 });
11
- }
12
- if (!id) {
13
- return json({ success: false, error: 'Asset ID is required' }, { status: 400 });
14
- }
15
- const asset = await assetService.findAssetById(auth.organizationId, id);
16
- if (!asset) {
17
- return json({ success: false, error: 'Asset not found' }, { status: 404 });
18
- }
19
- // Return asset data consistent with list endpoint
20
- return json({
21
- success: true,
22
- data: asset
23
- });
24
- }
25
- catch (error) {
26
- cmsLogger.error('[Asset API] Error fetching asset:', error);
27
- return json({ success: false, error: 'Failed to fetch asset' }, { status: 500 });
28
- }
29
- };
30
- export const DELETE = async ({ params, locals }) => {
31
- try {
32
- const { id } = params;
33
- const { assetService, databaseAdapter } = locals.aphexCMS;
34
- const auth = locals.auth;
35
- if (!auth || auth.type === 'partial_session') {
36
- return json({ success: false, error: 'Unauthorized' }, { status: 401 });
37
- }
38
- if (!id) {
39
- return json({ success: false, error: 'Asset ID is required' }, { status: 400 });
40
- }
41
- // Check for document references before deleting
42
- if (databaseAdapter.findDocumentsReferencingAsset) {
43
- const refs = await databaseAdapter.findDocumentsReferencingAsset(auth.organizationId, id);
44
- if (refs.length > 0) {
45
- return json({
46
- success: false,
47
- error: `Cannot delete asset — it is referenced by ${refs.length} document${refs.length > 1 ? 's' : ''}`
48
- }, { status: 409 });
49
- }
50
- }
51
- const result = await assetService.deleteAsset(auth.organizationId, id);
52
- if (!result) {
53
- return json({ success: false, error: 'Asset not found or could not be deleted' }, { status: 404 });
54
- }
55
- return json({ success: true });
56
- }
57
- catch (error) {
58
- cmsLogger.error('Error deleting asset:', error);
59
- return json({ success: false, error: 'Failed to delete asset' }, { status: 500 });
60
- }
61
- };
62
- export const PATCH = async ({ params, locals, request }) => {
63
- try {
64
- const { assetService } = locals.aphexCMS;
65
- const auth = locals.auth;
66
- const { id } = params;
67
- if (!auth || auth.type === 'partial_session') {
68
- return json({ success: false, error: 'Unauthorized' }, { status: 401 });
69
- }
70
- if (!id) {
71
- return json({ success: false, error: 'Asset ID is required' }, { status: 400 });
72
- }
73
- const rawBody = await request.json();
74
- const parsed = updateAssetRequest.safeParse(rawBody);
75
- if (!parsed.success) {
76
- return json({
77
- success: false,
78
- error: 'Invalid request body',
79
- issues: parsed.error.issues
80
- }, { status: 400 });
81
- }
82
- const { title, description, alt, creditLine } = parsed.data;
83
- let updatedAsset;
84
- if (auth.type == 'session') {
85
- updatedAsset = await assetService.updateAssetMetadata(auth.organizationId, id, {
86
- title,
87
- description,
88
- alt,
89
- creditLine,
90
- updatedBy: auth.user.id
91
- });
92
- }
93
- else {
94
- updatedAsset = await assetService.updateAssetMetadata(auth.organizationId, id, {
95
- title,
96
- description,
97
- alt,
98
- creditLine,
99
- updatedBy: auth.keyId
100
- });
101
- }
102
- if (!updatedAsset) {
103
- return json({ success: false, error: 'Asset not found' }, { status: 404 });
104
- }
105
- // Return updated asset data consistent with list endpoint
106
- return json({
107
- success: true,
108
- data: updatedAsset
109
- });
110
- }
111
- catch (error) {
112
- cmsLogger.error('Error updating asset:', error);
113
- return json({ success: false, error: 'Failed to update asset' }, { status: 500 });
114
- }
115
- };
@@ -1,7 +0,0 @@
1
- import type { RequestHandler } from '@sveltejs/kit';
2
- /**
3
- * POST /api/assets/references/counts
4
- * Get reference counts for multiple asset IDs in batch
5
- */
6
- export declare const POST: RequestHandler;
7
- //# sourceMappingURL=assets-references-counts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assets-references-counts.d.ts","sourceRoot":"","sources":["../../src/lib/routes/assets-references-counts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,cAwClB,CAAC"}
@@ -1,41 +0,0 @@
1
- import { json } from '@sveltejs/kit';
2
- import { cmsLogger } from '../utils/logger.js';
3
- import { assetReferenceCountsRequest } from '../api/schemas/assets.js';
4
- /**
5
- * POST /api/assets/references/counts
6
- * Get reference counts for multiple asset IDs in batch
7
- */
8
- export const POST = async ({ request, locals }) => {
9
- try {
10
- const { databaseAdapter } = locals.aphexCMS;
11
- const auth = locals.auth;
12
- if (!auth || auth.type === 'partial_session') {
13
- return json({ success: false, error: 'Unauthorized' }, { status: 401 });
14
- }
15
- const rawBody = await request.json();
16
- const parsed = assetReferenceCountsRequest.safeParse(rawBody);
17
- if (!parsed.success) {
18
- return json({
19
- success: false,
20
- error: 'Invalid request body',
21
- issues: parsed.error.issues
22
- }, { status: 400 });
23
- }
24
- const { ids } = parsed.data;
25
- if (ids.length === 0) {
26
- return json({ success: true, data: {} });
27
- }
28
- if (!databaseAdapter.countDocumentReferencesForAssets) {
29
- const counts = {};
30
- for (const id of ids)
31
- counts[id] = 0;
32
- return json({ success: true, data: counts });
33
- }
34
- const counts = await databaseAdapter.countDocumentReferencesForAssets(auth.organizationId, ids);
35
- return json({ success: true, data: counts });
36
- }
37
- catch (error) {
38
- cmsLogger.error('Failed to count asset references:', error);
39
- return json({ success: false, error: 'Failed to count asset references' }, { status: 500 });
40
- }
41
- };
@@ -1,7 +0,0 @@
1
- import type { RequestHandler } from '@sveltejs/kit';
2
- /**
3
- * GET /api/assets/:id/references
4
- * Find documents that reference a specific asset
5
- */
6
- export declare const GET: RequestHandler;
7
- //# sourceMappingURL=assets-references.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assets-references.d.ts","sourceRoot":"","sources":["../../src/lib/routes/assets-references.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD;;;GAGG;AACH,eAAO,MAAM,GAAG,EAAE,cA+BjB,CAAC"}
@@ -1,34 +0,0 @@
1
- import { json } from '@sveltejs/kit';
2
- import { cmsLogger } from '../utils/logger.js';
3
- /**
4
- * GET /api/assets/:id/references
5
- * Find documents that reference a specific asset
6
- */
7
- export const GET = async ({ params, locals }) => {
8
- try {
9
- const { databaseAdapter } = locals.aphexCMS;
10
- const auth = locals.auth;
11
- if (!auth || auth.type === 'partial_session') {
12
- return json({ success: false, error: 'Unauthorized' }, { status: 401 });
13
- }
14
- const { id } = params;
15
- if (!id) {
16
- return json({ success: false, error: 'Asset ID is required' }, { status: 400 });
17
- }
18
- if (!databaseAdapter.findDocumentsReferencingAsset) {
19
- return json({ success: true, data: { references: [], total: 0 } });
20
- }
21
- const references = await databaseAdapter.findDocumentsReferencingAsset(auth.organizationId, id);
22
- return json({
23
- success: true,
24
- data: {
25
- references,
26
- total: references.length
27
- }
28
- });
29
- }
30
- catch (error) {
31
- cmsLogger.error('Failed to find asset references:', error);
32
- return json({ success: false, error: 'Failed to find asset references' }, { status: 500 });
33
- }
34
- };
@@ -1,4 +0,0 @@
1
- import type { RequestHandler } from '@sveltejs/kit';
2
- export declare const POST: RequestHandler;
3
- export declare const GET: RequestHandler;
4
- //# sourceMappingURL=assets.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/lib/routes/assets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKpD,eAAO,MAAM,IAAI,EAAE,cAuFlB,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,cAmEjB,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { RequestHandler } from '@sveltejs/kit';
2
- export declare const GET: RequestHandler;
3
- export declare const getVersion: RequestHandler;
4
- export declare const restoreVersion: RequestHandler;
5
- //# sourceMappingURL=document-versions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-versions.d.ts","sourceRoot":"","sources":["../../src/lib/routes/document-versions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAMpD,eAAO,MAAM,GAAG,EAAE,cAqEjB,CAAC;AAGF,eAAO,MAAM,UAAU,EAAE,cAkCxB,CAAC;AAGF,eAAO,MAAM,cAAc,EAAE,cA0C5B,CAAC"}
@@ -1,113 +0,0 @@
1
- // Aphex CMS Document Version API Handlers
2
- import { json } from '@sveltejs/kit';
3
- import { authToContext } from '../local-api/auth-helpers.js';
4
- import { cmsLogger } from '../utils/logger.js';
5
- import { listVersionsQuery } from '../api/schemas/documents.js';
6
- // GET /api/documents/[id]/versions - List version history
7
- export const GET = async ({ params, url, locals }) => {
8
- try {
9
- const { localAPI, databaseAdapter } = locals.aphexCMS;
10
- const context = authToContext(locals.auth);
11
- const { id } = params;
12
- if (!id) {
13
- return json({ success: false, error: 'Document ID is required' }, { status: 400 });
14
- }
15
- const parsedQuery = listVersionsQuery.safeParse(Object.fromEntries(url.searchParams.entries()));
16
- if (!parsedQuery.success) {
17
- return json({
18
- success: false,
19
- error: 'Invalid query parameters',
20
- issues: parsedQuery.error.issues
21
- }, { status: 400 });
22
- }
23
- const limit = parsedQuery.data.limit ?? 25;
24
- const offset = parsedQuery.data.offset ?? 0;
25
- const result = await localAPI.versionService.listVersions(databaseAdapter, context.organizationId, id, { limit, offset });
26
- // Resolve user names for createdBy IDs
27
- const userIds = [...new Set(result.versions.map((v) => v.createdBy).filter(Boolean))];
28
- const userMap = new Map();
29
- if (userIds.length > 0 && locals.aphexCMS.auth) {
30
- await Promise.all(userIds.map(async (userId) => {
31
- // API key actions are stored as "apikey:<id>" — resolve to a friendly label
32
- if (userId.startsWith('apikey:')) {
33
- userMap.set(userId, 'API Key');
34
- return;
35
- }
36
- try {
37
- const user = await locals.aphexCMS.auth.getUserById(userId);
38
- if (user) {
39
- userMap.set(userId, user.name || user.email);
40
- }
41
- }
42
- catch {
43
- // User not found — skip
44
- }
45
- }));
46
- }
47
- const versionsWithUsers = result.versions.map((v) => ({
48
- ...v,
49
- createdByName: v.createdBy ? userMap.get(v.createdBy) || null : null
50
- }));
51
- return json({
52
- success: true,
53
- data: versionsWithUsers,
54
- total: result.total
55
- });
56
- }
57
- catch (error) {
58
- cmsLogger.error('Failed to list document versions:', error);
59
- return json({ success: false, error: 'Failed to list versions' }, { status: 500 });
60
- }
61
- };
62
- // GET /api/documents/[id]/versions/[version] - Get specific version
63
- export const getVersion = async ({ params, locals }) => {
64
- try {
65
- const { localAPI, databaseAdapter } = locals.aphexCMS;
66
- const context = authToContext(locals.auth);
67
- const { id, version } = params;
68
- if (!id || !version) {
69
- return json({ success: false, error: 'Document ID and version number are required' }, { status: 400 });
70
- }
71
- const versionNumber = parseInt(version);
72
- if (isNaN(versionNumber)) {
73
- return json({ success: false, error: 'Version must be a number' }, { status: 400 });
74
- }
75
- const result = await localAPI.versionService.getVersion(databaseAdapter, context.organizationId, id, versionNumber);
76
- if (!result) {
77
- return json({ success: false, error: 'Version not found' }, { status: 404 });
78
- }
79
- return json({ success: true, data: result });
80
- }
81
- catch (error) {
82
- cmsLogger.error('Failed to get document version:', error);
83
- return json({ success: false, error: 'Failed to get version' }, { status: 500 });
84
- }
85
- };
86
- // POST /api/documents/[id]/versions/[version]/restore - Restore version to draft
87
- export const restoreVersion = async ({ params, locals }) => {
88
- try {
89
- const { localAPI, databaseAdapter } = locals.aphexCMS;
90
- const context = authToContext(locals.auth);
91
- const { id, version } = params;
92
- if (!id || !version) {
93
- return json({ success: false, error: 'Document ID and version number are required' }, { status: 400 });
94
- }
95
- const versionNumber = parseInt(version);
96
- if (isNaN(versionNumber)) {
97
- return json({ success: false, error: 'Version must be a number' }, { status: 400 });
98
- }
99
- const document = await localAPI.versionService.restoreVersion(databaseAdapter, context.organizationId, id, versionNumber, context.user?.id);
100
- if (!document) {
101
- return json({ success: false, error: 'Version not found or restore failed' }, { status: 404 });
102
- }
103
- return json({
104
- success: true,
105
- data: document,
106
- message: `Restored to version ${versionNumber}`
107
- });
108
- }
109
- catch (error) {
110
- cmsLogger.error('Failed to restore document version:', error);
111
- return json({ success: false, error: 'Failed to restore version' }, { status: 500 });
112
- }
113
- };
@@ -1,5 +0,0 @@
1
- import type { RequestHandler } from '@sveltejs/kit';
2
- export declare const GET: RequestHandler;
3
- export declare const PUT: RequestHandler;
4
- export declare const DELETE: RequestHandler;
5
- //# sourceMappingURL=documents-by-id.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"documents-by-id.d.ts","sourceRoot":"","sources":["../../src/lib/routes/documents-by-id.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAQpD,eAAO,MAAM,GAAG,EAAE,cAuEjB,CAAC;AAIF,eAAO,MAAM,GAAG,EAAE,cAiGjB,CAAC;AAGF,eAAO,MAAM,MAAM,EAAE,cA+DpB,CAAC"}
@@ -1,187 +0,0 @@
1
- // Aphex CMS Document by ID API Handlers
2
- import { json } from '@sveltejs/kit';
3
- import { authToContext } from '../local-api/auth-helpers.js';
4
- import { PermissionError } from '../local-api/permissions.js';
5
- import { cmsLogger } from '../utils/logger.js';
6
- import { updateDocumentRequest } from '../api/schemas/documents.js';
7
- // GET /api/documents/[id] - Get document by ID
8
- // TODO ENABLE CHILDREN ORG ACCESS BY DEFAULT - BECAUSE IF A PARENT ORG IS TRYING TO ACCESS A CHILD ORG. It should already have access to said id.
9
- export const GET = async ({ params, url, locals }) => {
10
- try {
11
- const { localAPI } = locals.aphexCMS;
12
- const context = authToContext(locals.auth);
13
- const { id } = params;
14
- if (!id) {
15
- return json({ success: false, error: 'Document ID is required' }, { status: 400 });
16
- }
17
- // Parse query params
18
- const depthParam = url.searchParams.get('depth');
19
- const depth = depthParam ? Math.max(0, Math.min(parseInt(depthParam), 5)) : 0;
20
- const perspective = url.searchParams.get('perspective') || 'draft';
21
- // First, fetch document to get its type (uses hierarchy-aware lookup, no RLS transaction)
22
- const result = await localAPI.findDocumentById(context, id);
23
- if (!result) {
24
- return json({ success: false, error: 'Document not found' }, { status: 404 });
25
- }
26
- // Get collection API (TypeScript-safe)
27
- const collection = localAPI.collections[result.type];
28
- if (!collection) {
29
- return json({
30
- success: false,
31
- error: 'Invalid document type',
32
- message: `Collection '${result.type}' not found`
33
- }, { status: 400 });
34
- }
35
- // Now use LocalAPI for permission-checked retrieval
36
- const document = await collection.findByID(context, id, {
37
- depth,
38
- perspective
39
- });
40
- if (!document) {
41
- return json({ success: false, error: 'Document not found' }, { status: 404 });
42
- }
43
- return json({
44
- success: true,
45
- data: document
46
- });
47
- }
48
- catch (error) {
49
- cmsLogger.error('Failed to fetch document:', error);
50
- if (error instanceof PermissionError) {
51
- return json({
52
- success: false,
53
- error: 'Forbidden',
54
- message: error.message
55
- }, { status: 403 });
56
- }
57
- return json({
58
- success: false,
59
- error: 'Failed to fetch document',
60
- message: error instanceof Error ? error.message : 'Unknown error'
61
- }, { status: 500 });
62
- }
63
- };
64
- // PUT /api/documents/[id] - Update document
65
- // TODO ENABLE CHILDREN ORG ACCESS BY DEFAULT - BECAUSE IF A PARENT ORG IS TRYING TO ACCESS A CHILD ORG. It should already have access to said id.
66
- export const PUT = async ({ params, request, locals }) => {
67
- try {
68
- const { localAPI } = locals.aphexCMS;
69
- const context = authToContext(locals.auth);
70
- const { id } = params;
71
- if (!id) {
72
- return json({ success: false, error: 'Document ID is required' }, { status: 400 });
73
- }
74
- const rawBody = await request.json();
75
- const parsed = updateDocumentRequest.safeParse(rawBody);
76
- if (!parsed.success) {
77
- return json({
78
- success: false,
79
- error: 'Invalid request body',
80
- issues: parsed.error.issues
81
- }, { status: 400 });
82
- }
83
- const documentData = parsed.data.draftData ?? parsed.data.data;
84
- if (!documentData) {
85
- return json({ success: false, error: 'Document data is required' }, { status: 400 });
86
- }
87
- const shouldPublish = parsed.data.publish ?? false;
88
- // Fetch document to get its type (hierarchy-aware, no RLS transaction)
89
- const found = await localAPI.findDocumentById(context, id);
90
- if (!found) {
91
- return json({ success: false, error: 'Document not found' }, { status: 404 });
92
- }
93
- // Get collection API (TypeScript-safe)
94
- const collection = localAPI.collections[found.type];
95
- if (!collection) {
96
- return json({
97
- success: false,
98
- error: 'Invalid document type',
99
- message: `Collection '${found.type}' not found`
100
- }, { status: 400 });
101
- }
102
- // Update via LocalAPI (permission checks and validation happen inside)
103
- const result = await collection.update(context, id, documentData, {
104
- publish: shouldPublish
105
- });
106
- if (!result) {
107
- return json({ success: false, error: 'Document not found' }, { status: 404 });
108
- }
109
- return json({
110
- success: true,
111
- data: result.document,
112
- validation: result.validation
113
- });
114
- }
115
- catch (error) {
116
- cmsLogger.error('Failed to update document:', error);
117
- if (error instanceof PermissionError) {
118
- return json({
119
- success: false,
120
- error: 'Forbidden',
121
- message: error.message
122
- }, { status: 403 });
123
- }
124
- // Validation errors from publish attempts
125
- if (error instanceof Error && error.message.includes('validation errors')) {
126
- return json({
127
- success: false,
128
- error: 'Validation failed',
129
- message: error.message
130
- }, { status: 400 });
131
- }
132
- return json({
133
- success: false,
134
- error: 'Failed to update document',
135
- message: error instanceof Error ? error.message : 'Unknown error'
136
- }, { status: 500 });
137
- }
138
- };
139
- // DELETE /api/documents/[id] - Delete document
140
- export const DELETE = async ({ params, locals }) => {
141
- try {
142
- const { localAPI } = locals.aphexCMS;
143
- const context = authToContext(locals.auth);
144
- const { id } = params;
145
- if (!id) {
146
- return json({ success: false, error: 'Document ID is required' }, { status: 400 });
147
- }
148
- // Fetch document to get its type (hierarchy-aware, no RLS transaction)
149
- const result = await localAPI.findDocumentById(context, id);
150
- if (!result) {
151
- return json({ success: false, error: 'Document not found' }, { status: 404 });
152
- }
153
- // Get collection API (TypeScript-safe)
154
- const collection = localAPI.collections[result.type];
155
- if (!collection) {
156
- return json({
157
- success: false,
158
- error: 'Invalid document type',
159
- message: `Collection '${result.type}' not found`
160
- }, { status: 400 });
161
- }
162
- // Delete via LocalAPI (permission checks happen inside)
163
- const success = await collection.delete(context, id);
164
- if (!success) {
165
- return json({ success: false, error: 'Document not found' }, { status: 404 });
166
- }
167
- return json({
168
- success: true,
169
- message: 'Document deleted successfully'
170
- });
171
- }
172
- catch (error) {
173
- cmsLogger.error('Failed to delete document:', error);
174
- if (error instanceof PermissionError) {
175
- return json({
176
- success: false,
177
- error: 'Forbidden',
178
- message: error.message
179
- }, { status: 403 });
180
- }
181
- return json({
182
- success: false,
183
- error: 'Failed to delete document',
184
- message: error instanceof Error ? error.message : 'Unknown error'
185
- }, { status: 500 });
186
- }
187
- };
@@ -1,4 +0,0 @@
1
- import type { RequestHandler } from '@sveltejs/kit';
2
- export declare const POST: RequestHandler;
3
- export declare const DELETE: RequestHandler;
4
- //# sourceMappingURL=documents-publish.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"documents-publish.d.ts","sourceRoot":"","sources":["../../src/lib/routes/documents-publish.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAMpD,eAAO,MAAM,IAAI,EAAE,cAiGlB,CAAC;AAGF,eAAO,MAAM,MAAM,EAAE,cAqFpB,CAAC"}
@@ -1,26 +0,0 @@
1
- import type { RequestHandler } from '@sveltejs/kit';
2
- /**
3
- * POST /api/documents/query - Advanced document querying with complex filters
4
- *
5
- * Accepts LocalAPI FindOptions in request body for full filtering power
6
- *
7
- * @example
8
- * POST /api/documents/query
9
- * {
10
- * "type": "page",
11
- * "where": {
12
- * "status": { "equals": "published" },
13
- * "hero.heading": { "contains": "Welcome" },
14
- * "publishedAt": { "gte": "2024-01-01" }
15
- * },
16
- * "limit": 20,
17
- * "page": 1,
18
- * "sort": ["-publishedAt", "title"],
19
- * "depth": 1,
20
- * "perspective": "published",
21
- * "filterOrganizationIds": ["org_child1", "org_child2"],
22
- * "includeChildOrganizations": false
23
- * }
24
- */
25
- export declare const POST: RequestHandler;
26
- //# sourceMappingURL=documents-query.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"documents-query.d.ts","sourceRoot":"","sources":["../../src/lib/routes/documents-query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAWpD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,IAAI,EAAE,cAyFlB,CAAC"}