@aphexcms/cms-core 3.0.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) 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/config.d.ts.map +1 -1
  5. package/dist/config.js +1 -2
  6. package/dist/hooks.d.ts +3 -4
  7. package/dist/hooks.d.ts.map +1 -1
  8. package/dist/hooks.js +20 -99
  9. package/dist/index.d.ts +9 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +43 -4
  12. package/dist/lib/api/schemas/user.d.ts +10 -0
  13. package/dist/lib/api/schemas/user.d.ts.map +1 -1
  14. package/dist/lib/api/schemas/user.js +10 -0
  15. package/dist/lib/api/schemas/user.js.map +1 -1
  16. package/dist/lib/config.d.ts.map +1 -1
  17. package/dist/lib/config.js +1 -2
  18. package/dist/lib/config.js.map +1 -1
  19. package/dist/lib/hooks.d.ts +3 -4
  20. package/dist/lib/hooks.d.ts.map +1 -1
  21. package/dist/lib/hooks.js +20 -99
  22. package/dist/lib/hooks.js.map +1 -1
  23. package/dist/lib/index.d.ts +9 -1
  24. package/dist/lib/index.d.ts.map +1 -1
  25. package/dist/lib/index.js +43 -4
  26. package/dist/lib/index.js.map +1 -1
  27. package/dist/lib/server/api/index.d.ts +55 -0
  28. package/dist/lib/server/api/index.d.ts.map +1 -0
  29. package/dist/lib/server/api/index.js +107 -0
  30. package/dist/lib/server/api/index.js.map +1 -0
  31. package/dist/lib/server/api/routes/assets-bulk.d.ts +4 -0
  32. package/dist/lib/server/api/routes/assets-bulk.d.ts.map +1 -0
  33. package/dist/{routes → lib/server/api/routes}/assets-bulk.js +23 -23
  34. package/dist/lib/server/api/routes/assets-bulk.js.map +1 -0
  35. package/dist/lib/server/api/routes/assets-by-id.d.ts +4 -0
  36. package/dist/lib/server/api/routes/assets-by-id.d.ts.map +1 -0
  37. package/dist/lib/server/api/routes/assets-by-id.js +108 -0
  38. package/dist/lib/server/api/routes/assets-by-id.js.map +1 -0
  39. package/dist/lib/server/api/routes/assets-references.d.ts +15 -0
  40. package/dist/lib/server/api/routes/assets-references.d.ts.map +1 -0
  41. package/dist/lib/server/api/routes/assets-references.js +78 -0
  42. package/dist/lib/server/api/routes/assets-references.js.map +1 -0
  43. package/dist/lib/server/api/routes/assets.d.ts +4 -0
  44. package/dist/lib/server/api/routes/assets.d.ts.map +1 -0
  45. package/dist/{routes → lib/server/api/routes}/assets.js +76 -87
  46. package/dist/lib/server/api/routes/assets.js.map +1 -0
  47. package/dist/lib/server/api/routes/document-versions.d.ts +4 -0
  48. package/dist/lib/server/api/routes/document-versions.d.ts.map +1 -0
  49. package/dist/lib/server/api/routes/document-versions.js +113 -0
  50. package/dist/lib/server/api/routes/document-versions.js.map +1 -0
  51. package/dist/lib/server/api/routes/documents-by-id.d.ts +4 -0
  52. package/dist/lib/server/api/routes/documents-by-id.d.ts.map +1 -0
  53. package/dist/lib/server/api/routes/documents-by-id.js +148 -0
  54. package/dist/lib/server/api/routes/documents-by-id.js.map +1 -0
  55. package/dist/lib/server/api/routes/documents-publish.d.ts +4 -0
  56. package/dist/lib/server/api/routes/documents-publish.d.ts.map +1 -0
  57. package/dist/{routes → lib/server/api/routes}/documents-publish.js +42 -58
  58. package/dist/lib/server/api/routes/documents-publish.js.map +1 -0
  59. package/dist/lib/server/api/routes/documents-query.d.ts +8 -0
  60. package/dist/lib/server/api/routes/documents-query.d.ts.map +1 -0
  61. package/dist/lib/server/api/routes/documents-query.js +75 -0
  62. package/dist/lib/server/api/routes/documents-query.js.map +1 -0
  63. package/dist/lib/server/api/routes/documents.d.ts +4 -0
  64. package/dist/lib/server/api/routes/documents.d.ts.map +1 -0
  65. package/dist/{routes → lib/server/api/routes}/documents.js +55 -76
  66. package/dist/lib/server/api/routes/documents.js.map +1 -0
  67. package/dist/lib/server/api/routes/organizations-by-id.d.ts +4 -0
  68. package/dist/lib/server/api/routes/organizations-by-id.d.ts.map +1 -0
  69. package/dist/{routes → lib/server/api/routes}/organizations-by-id.js +62 -91
  70. package/dist/lib/server/api/routes/organizations-by-id.js.map +1 -0
  71. package/dist/lib/server/api/routes/organizations-invitations.d.ts +10 -0
  72. package/dist/lib/server/api/routes/organizations-invitations.d.ts.map +1 -0
  73. package/dist/{routes → lib/server/api/routes}/organizations-invitations.js +67 -78
  74. package/dist/lib/server/api/routes/organizations-invitations.js.map +1 -0
  75. package/dist/lib/server/api/routes/organizations-members.d.ts +4 -0
  76. package/dist/lib/server/api/routes/organizations-members.d.ts.map +1 -0
  77. package/dist/{routes → lib/server/api/routes}/organizations-members.js +74 -106
  78. package/dist/lib/server/api/routes/organizations-members.js.map +1 -0
  79. package/dist/lib/server/api/routes/organizations-switch.d.ts +4 -0
  80. package/dist/lib/server/api/routes/organizations-switch.d.ts.map +1 -0
  81. package/dist/lib/server/api/routes/organizations-switch.js +54 -0
  82. package/dist/lib/server/api/routes/organizations-switch.js.map +1 -0
  83. package/dist/lib/server/api/routes/organizations.d.ts +4 -0
  84. package/dist/lib/server/api/routes/organizations.d.ts.map +1 -0
  85. package/dist/lib/server/api/routes/organizations.js +99 -0
  86. package/dist/lib/server/api/routes/organizations.js.map +1 -0
  87. package/dist/lib/server/api/routes/roles.d.ts +12 -0
  88. package/dist/lib/server/api/routes/roles.d.ts.map +1 -0
  89. package/dist/lib/server/api/routes/roles.js +219 -0
  90. package/dist/lib/server/api/routes/roles.js.map +1 -0
  91. package/dist/lib/server/api/routes/schemas.d.ts +4 -0
  92. package/dist/lib/server/api/routes/schemas.d.ts.map +1 -0
  93. package/dist/lib/server/api/routes/schemas.js +27 -0
  94. package/dist/lib/server/api/routes/schemas.js.map +1 -0
  95. package/dist/lib/server/api/routes/user-preferences.d.ts +4 -0
  96. package/dist/lib/server/api/routes/user-preferences.d.ts.map +1 -0
  97. package/dist/lib/server/api/routes/user-preferences.js +63 -0
  98. package/dist/lib/server/api/routes/user-preferences.js.map +1 -0
  99. package/dist/lib/server/api/routes/user.d.ts +12 -0
  100. package/dist/lib/server/api/routes/user.d.ts.map +1 -0
  101. package/dist/lib/server/api/routes/user.js +114 -0
  102. package/dist/lib/server/api/routes/user.js.map +1 -0
  103. package/dist/lib/server/index.d.ts +2 -1
  104. package/dist/lib/server/index.d.ts.map +1 -1
  105. package/dist/lib/server/index.js +7 -3
  106. package/dist/lib/server/index.js.map +1 -1
  107. package/dist/lib/types/config.d.ts +28 -29
  108. package/dist/lib/types/config.d.ts.map +1 -1
  109. package/dist/server/api/index.d.ts +55 -0
  110. package/dist/server/api/index.d.ts.map +1 -0
  111. package/dist/server/api/index.js +106 -0
  112. package/dist/server/api/routes/assets-bulk.d.ts +4 -0
  113. package/dist/server/api/routes/assets-bulk.d.ts.map +1 -0
  114. package/dist/{lib → server/api}/routes/assets-bulk.js +22 -24
  115. package/dist/server/api/routes/assets-by-id.d.ts +4 -0
  116. package/dist/server/api/routes/assets-by-id.d.ts.map +1 -0
  117. package/dist/server/api/routes/assets-by-id.js +107 -0
  118. package/dist/server/api/routes/assets-references.d.ts +15 -0
  119. package/dist/server/api/routes/assets-references.d.ts.map +1 -0
  120. package/dist/server/api/routes/assets-references.js +77 -0
  121. package/dist/server/api/routes/assets.d.ts +4 -0
  122. package/dist/server/api/routes/assets.d.ts.map +1 -0
  123. package/dist/{lib → server/api}/routes/assets.js +75 -88
  124. package/dist/server/api/routes/document-versions.d.ts +4 -0
  125. package/dist/server/api/routes/document-versions.d.ts.map +1 -0
  126. package/dist/server/api/routes/document-versions.js +112 -0
  127. package/dist/server/api/routes/documents-by-id.d.ts +4 -0
  128. package/dist/server/api/routes/documents-by-id.d.ts.map +1 -0
  129. package/dist/server/api/routes/documents-by-id.js +147 -0
  130. package/dist/server/api/routes/documents-publish.d.ts +4 -0
  131. package/dist/server/api/routes/documents-publish.d.ts.map +1 -0
  132. package/dist/{lib → server/api}/routes/documents-publish.js +41 -59
  133. package/dist/server/api/routes/documents-query.d.ts +8 -0
  134. package/dist/server/api/routes/documents-query.d.ts.map +1 -0
  135. package/dist/server/api/routes/documents-query.js +74 -0
  136. package/dist/server/api/routes/documents.d.ts +4 -0
  137. package/dist/server/api/routes/documents.d.ts.map +1 -0
  138. package/dist/{lib → server/api}/routes/documents.js +54 -77
  139. package/dist/server/api/routes/organizations-by-id.d.ts +4 -0
  140. package/dist/server/api/routes/organizations-by-id.d.ts.map +1 -0
  141. package/dist/{lib → server/api}/routes/organizations-by-id.js +61 -92
  142. package/dist/server/api/routes/organizations-invitations.d.ts +10 -0
  143. package/dist/server/api/routes/organizations-invitations.d.ts.map +1 -0
  144. package/dist/{lib → server/api}/routes/organizations-invitations.js +66 -79
  145. package/dist/server/api/routes/organizations-members.d.ts +4 -0
  146. package/dist/server/api/routes/organizations-members.d.ts.map +1 -0
  147. package/dist/{lib → server/api}/routes/organizations-members.js +73 -107
  148. package/dist/server/api/routes/organizations-switch.d.ts +4 -0
  149. package/dist/server/api/routes/organizations-switch.d.ts.map +1 -0
  150. package/dist/server/api/routes/organizations-switch.js +53 -0
  151. package/dist/server/api/routes/organizations.d.ts +4 -0
  152. package/dist/server/api/routes/organizations.d.ts.map +1 -0
  153. package/dist/server/api/routes/organizations.js +98 -0
  154. package/dist/server/api/routes/roles.d.ts +12 -0
  155. package/dist/server/api/routes/roles.d.ts.map +1 -0
  156. package/dist/server/api/routes/roles.js +218 -0
  157. package/dist/server/api/routes/schemas.d.ts +4 -0
  158. package/dist/server/api/routes/schemas.d.ts.map +1 -0
  159. package/dist/server/api/routes/schemas.js +26 -0
  160. package/dist/server/api/routes/user-preferences.d.ts +4 -0
  161. package/dist/server/api/routes/user-preferences.d.ts.map +1 -0
  162. package/dist/server/api/routes/user-preferences.js +62 -0
  163. package/dist/server/api/routes/user.d.ts +12 -0
  164. package/dist/server/api/routes/user.d.ts.map +1 -0
  165. package/dist/server/api/routes/user.js +113 -0
  166. package/dist/server/index.d.ts +2 -1
  167. package/dist/server/index.d.ts.map +1 -1
  168. package/dist/server/index.js +7 -3
  169. package/dist/types/config.d.ts +28 -29
  170. package/dist/types/config.d.ts.map +1 -1
  171. package/package.json +4 -2
  172. package/dist/lib/routes/assets-bulk.d.ts +0 -3
  173. package/dist/lib/routes/assets-bulk.d.ts.map +0 -1
  174. package/dist/lib/routes/assets-bulk.js.map +0 -1
  175. package/dist/lib/routes/assets-by-id.d.ts +0 -5
  176. package/dist/lib/routes/assets-by-id.d.ts.map +0 -1
  177. package/dist/lib/routes/assets-by-id.js +0 -116
  178. package/dist/lib/routes/assets-by-id.js.map +0 -1
  179. package/dist/lib/routes/assets-references-counts.d.ts +0 -7
  180. package/dist/lib/routes/assets-references-counts.d.ts.map +0 -1
  181. package/dist/lib/routes/assets-references-counts.js +0 -42
  182. package/dist/lib/routes/assets-references-counts.js.map +0 -1
  183. package/dist/lib/routes/assets-references.d.ts +0 -7
  184. package/dist/lib/routes/assets-references.d.ts.map +0 -1
  185. package/dist/lib/routes/assets-references.js +0 -35
  186. package/dist/lib/routes/assets-references.js.map +0 -1
  187. package/dist/lib/routes/assets.d.ts +0 -4
  188. package/dist/lib/routes/assets.d.ts.map +0 -1
  189. package/dist/lib/routes/assets.js.map +0 -1
  190. package/dist/lib/routes/document-versions.d.ts +0 -5
  191. package/dist/lib/routes/document-versions.d.ts.map +0 -1
  192. package/dist/lib/routes/document-versions.js +0 -114
  193. package/dist/lib/routes/document-versions.js.map +0 -1
  194. package/dist/lib/routes/documents-by-id.d.ts +0 -5
  195. package/dist/lib/routes/documents-by-id.d.ts.map +0 -1
  196. package/dist/lib/routes/documents-by-id.js +0 -188
  197. package/dist/lib/routes/documents-by-id.js.map +0 -1
  198. package/dist/lib/routes/documents-publish.d.ts +0 -4
  199. package/dist/lib/routes/documents-publish.d.ts.map +0 -1
  200. package/dist/lib/routes/documents-publish.js.map +0 -1
  201. package/dist/lib/routes/documents-query.d.ts +0 -26
  202. package/dist/lib/routes/documents-query.d.ts.map +0 -1
  203. package/dist/lib/routes/documents-query.js +0 -104
  204. package/dist/lib/routes/documents-query.js.map +0 -1
  205. package/dist/lib/routes/documents.d.ts +0 -4
  206. package/dist/lib/routes/documents.d.ts.map +0 -1
  207. package/dist/lib/routes/documents.js.map +0 -1
  208. package/dist/lib/routes/index.d.ts +0 -9
  209. package/dist/lib/routes/index.d.ts.map +0 -1
  210. package/dist/lib/routes/index.js +0 -15
  211. package/dist/lib/routes/index.js.map +0 -1
  212. package/dist/lib/routes/organizations-by-id.d.ts +0 -5
  213. package/dist/lib/routes/organizations-by-id.d.ts.map +0 -1
  214. package/dist/lib/routes/organizations-by-id.js.map +0 -1
  215. package/dist/lib/routes/organizations-invitations.d.ts +0 -4
  216. package/dist/lib/routes/organizations-invitations.d.ts.map +0 -1
  217. package/dist/lib/routes/organizations-invitations.js.map +0 -1
  218. package/dist/lib/routes/organizations-members.d.ts +0 -5
  219. package/dist/lib/routes/organizations-members.d.ts.map +0 -1
  220. package/dist/lib/routes/organizations-members.js.map +0 -1
  221. package/dist/lib/routes/organizations-switch.d.ts +0 -3
  222. package/dist/lib/routes/organizations-switch.d.ts.map +0 -1
  223. package/dist/lib/routes/organizations-switch.js +0 -59
  224. package/dist/lib/routes/organizations-switch.js.map +0 -1
  225. package/dist/lib/routes/organizations.d.ts +0 -4
  226. package/dist/lib/routes/organizations.d.ts.map +0 -1
  227. package/dist/lib/routes/organizations.js +0 -117
  228. package/dist/lib/routes/organizations.js.map +0 -1
  229. package/dist/lib/routes/roles-by-name.d.ts +0 -4
  230. package/dist/lib/routes/roles-by-name.d.ts.map +0 -1
  231. package/dist/lib/routes/roles-by-name.js +0 -112
  232. package/dist/lib/routes/roles-by-name.js.map +0 -1
  233. package/dist/lib/routes/roles.d.ts +0 -4
  234. package/dist/lib/routes/roles.d.ts.map +0 -1
  235. package/dist/lib/routes/roles.js +0 -91
  236. package/dist/lib/routes/roles.js.map +0 -1
  237. package/dist/lib/routes/schemas-by-type.d.ts +0 -3
  238. package/dist/lib/routes/schemas-by-type.d.ts.map +0 -1
  239. package/dist/lib/routes/schemas-by-type.js +0 -27
  240. package/dist/lib/routes/schemas-by-type.js.map +0 -1
  241. package/dist/lib/routes/schemas.d.ts +0 -3
  242. package/dist/lib/routes/schemas.d.ts.map +0 -1
  243. package/dist/lib/routes/schemas.js +0 -12
  244. package/dist/lib/routes/schemas.js.map +0 -1
  245. package/dist/lib/routes/user-preferences.d.ts +0 -4
  246. package/dist/lib/routes/user-preferences.d.ts.map +0 -1
  247. package/dist/lib/routes/user-preferences.js +0 -73
  248. package/dist/lib/routes/user-preferences.js.map +0 -1
  249. package/dist/lib/routes-exports.d.ts +0 -20
  250. package/dist/lib/routes-exports.d.ts.map +0 -1
  251. package/dist/lib/routes-exports.js +0 -27
  252. package/dist/lib/routes-exports.js.map +0 -1
  253. package/dist/routes/assets-bulk.d.ts +0 -3
  254. package/dist/routes/assets-bulk.d.ts.map +0 -1
  255. package/dist/routes/assets-by-id.d.ts +0 -5
  256. package/dist/routes/assets-by-id.d.ts.map +0 -1
  257. package/dist/routes/assets-by-id.js +0 -115
  258. package/dist/routes/assets-references-counts.d.ts +0 -7
  259. package/dist/routes/assets-references-counts.d.ts.map +0 -1
  260. package/dist/routes/assets-references-counts.js +0 -41
  261. package/dist/routes/assets-references.d.ts +0 -7
  262. package/dist/routes/assets-references.d.ts.map +0 -1
  263. package/dist/routes/assets-references.js +0 -34
  264. package/dist/routes/assets.d.ts +0 -4
  265. package/dist/routes/assets.d.ts.map +0 -1
  266. package/dist/routes/document-versions.d.ts +0 -5
  267. package/dist/routes/document-versions.d.ts.map +0 -1
  268. package/dist/routes/document-versions.js +0 -113
  269. package/dist/routes/documents-by-id.d.ts +0 -5
  270. package/dist/routes/documents-by-id.d.ts.map +0 -1
  271. package/dist/routes/documents-by-id.js +0 -187
  272. package/dist/routes/documents-publish.d.ts +0 -4
  273. package/dist/routes/documents-publish.d.ts.map +0 -1
  274. package/dist/routes/documents-query.d.ts +0 -26
  275. package/dist/routes/documents-query.d.ts.map +0 -1
  276. package/dist/routes/documents-query.js +0 -103
  277. package/dist/routes/documents.d.ts +0 -4
  278. package/dist/routes/documents.d.ts.map +0 -1
  279. package/dist/routes/index.d.ts +0 -9
  280. package/dist/routes/index.d.ts.map +0 -1
  281. package/dist/routes/index.js +0 -14
  282. package/dist/routes/organizations-by-id.d.ts +0 -5
  283. package/dist/routes/organizations-by-id.d.ts.map +0 -1
  284. package/dist/routes/organizations-invitations.d.ts +0 -4
  285. package/dist/routes/organizations-invitations.d.ts.map +0 -1
  286. package/dist/routes/organizations-members.d.ts +0 -5
  287. package/dist/routes/organizations-members.d.ts.map +0 -1
  288. package/dist/routes/organizations-switch.d.ts +0 -3
  289. package/dist/routes/organizations-switch.d.ts.map +0 -1
  290. package/dist/routes/organizations-switch.js +0 -58
  291. package/dist/routes/organizations.d.ts +0 -4
  292. package/dist/routes/organizations.d.ts.map +0 -1
  293. package/dist/routes/organizations.js +0 -116
  294. package/dist/routes/roles-by-name.d.ts +0 -4
  295. package/dist/routes/roles-by-name.d.ts.map +0 -1
  296. package/dist/routes/roles-by-name.js +0 -111
  297. package/dist/routes/roles.d.ts +0 -4
  298. package/dist/routes/roles.d.ts.map +0 -1
  299. package/dist/routes/roles.js +0 -90
  300. package/dist/routes/schemas-by-type.d.ts +0 -3
  301. package/dist/routes/schemas-by-type.d.ts.map +0 -1
  302. package/dist/routes/schemas-by-type.js +0 -26
  303. package/dist/routes/schemas.d.ts +0 -3
  304. package/dist/routes/schemas.d.ts.map +0 -1
  305. package/dist/routes/schemas.js +0 -11
  306. package/dist/routes/user-preferences.d.ts +0 -4
  307. package/dist/routes/user-preferences.d.ts.map +0 -1
  308. package/dist/routes/user-preferences.js +0 -72
  309. package/dist/routes-exports.d.ts +0 -20
  310. package/dist/routes-exports.d.ts.map +0 -1
  311. package/dist/routes-exports.js +0 -26
@@ -1,49 +1,45 @@
1
- // Aphex CMS Document Publish 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
- // POST /api/documents/[id]/publish - Publish document
7
- export const POST = async ({ params, locals }) => {
1
+ import { Hono } from 'hono';
2
+ import { authToContext } from '../../../local-api/auth-helpers.js';
3
+ import { PermissionError } from '../../../local-api/permissions.js';
4
+ import { cmsLogger } from '../../../utils/logger.js';
5
+ export const documentsPublishRouter = new Hono()
6
+ .post('/:id/publish', async (c) => {
8
7
  try {
9
- const { localAPI } = locals.aphexCMS;
10
- const context = authToContext(locals.auth);
11
- const { id } = params;
8
+ const { localAPI } = c.var.aphexCMS;
9
+ const context = authToContext(c.var.auth);
10
+ const id = c.req.param('id');
12
11
  if (!id) {
13
- return json({
12
+ return c.json({
14
13
  success: false,
15
14
  error: 'Missing document ID',
16
15
  message: 'Document ID is required'
17
- }, { status: 400 });
16
+ }, 400);
18
17
  }
19
- // Fetch document to get its type (hierarchy-aware, no RLS transaction)
20
18
  const found = await localAPI.findDocumentById(context, id);
21
19
  if (!found) {
22
- return json({
20
+ return c.json({
23
21
  success: false,
24
22
  error: 'Document not found',
25
23
  message: 'Document may not exist'
26
- }, { status: 404 });
24
+ }, 404);
27
25
  }
28
- // Get collection API (TypeScript-safe)
29
26
  const collection = localAPI.collections[found.type];
30
27
  if (!collection) {
31
- return json({
28
+ return c.json({
32
29
  success: false,
33
30
  error: 'Invalid document type',
34
31
  message: `Collection '${found.type}' not found`
35
- }, { status: 400 });
32
+ }, 400);
36
33
  }
37
- // Publish via LocalAPI (permission checks and validation happen inside)
38
34
  const publishedDocument = await collection.publish(context, id);
39
35
  if (!publishedDocument) {
40
- return json({
36
+ return c.json({
41
37
  success: false,
42
38
  error: 'Document not found or cannot be published',
43
39
  message: 'Document may not have draft content to publish'
44
- }, { status: 404 });
40
+ }, 404);
45
41
  }
46
- return json({
42
+ return c.json({
47
43
  success: true,
48
44
  data: publishedDocument,
49
45
  message: 'Document published successfully'
@@ -52,68 +48,59 @@ export const POST = async ({ params, locals }) => {
52
48
  catch (error) {
53
49
  cmsLogger.error('Failed to publish document:', error);
54
50
  if (error instanceof PermissionError) {
55
- return json({
56
- success: false,
57
- error: 'Forbidden',
58
- message: error.message
59
- }, { status: 403 });
51
+ return c.json({ success: false, error: 'Forbidden', message: error.message }, 403);
60
52
  }
61
- // Validation errors from LocalAPI are regular errors with specific messages
62
53
  if (error instanceof Error && error.message.includes('validation errors')) {
63
- return json({
54
+ return c.json({
64
55
  success: false,
65
56
  error: 'Cannot publish: validation errors',
66
57
  message: error.message
67
- }, { status: 400 });
58
+ }, 400);
68
59
  }
69
- return json({
60
+ return c.json({
70
61
  success: false,
71
62
  error: 'Failed to publish document',
72
63
  message: error instanceof Error ? error.message : 'Unknown error'
73
- }, { status: 500 });
64
+ }, 500);
74
65
  }
75
- };
76
- // DELETE /api/documents/[id]/publish - Unpublish document
77
- export const DELETE = async ({ params, locals }) => {
66
+ })
67
+ .delete('/:id/publish', async (c) => {
78
68
  try {
79
- const { localAPI } = locals.aphexCMS;
80
- const context = authToContext(locals.auth);
81
- const { id } = params;
69
+ const { localAPI } = c.var.aphexCMS;
70
+ const context = authToContext(c.var.auth);
71
+ const id = c.req.param('id');
82
72
  if (!id) {
83
- return json({
73
+ return c.json({
84
74
  success: false,
85
75
  error: 'Missing document ID',
86
76
  message: 'Document ID is required'
87
- }, { status: 400 });
77
+ }, 400);
88
78
  }
89
- // Fetch document to get its type (hierarchy-aware, no RLS transaction)
90
79
  const found = await localAPI.findDocumentById(context, id);
91
80
  if (!found) {
92
- return json({
81
+ return c.json({
93
82
  success: false,
94
83
  error: 'Document not found',
95
84
  message: `No document found with ID: ${id}`
96
- }, { status: 404 });
85
+ }, 404);
97
86
  }
98
- // Get collection API (TypeScript-safe)
99
87
  const collection = localAPI.collections[found.type];
100
88
  if (!collection) {
101
- return json({
89
+ return c.json({
102
90
  success: false,
103
91
  error: 'Invalid document type',
104
92
  message: `Collection '${found.type}' not found`
105
- }, { status: 400 });
93
+ }, 400);
106
94
  }
107
- // Unpublish via LocalAPI (permission checks happen inside)
108
95
  const unpublishedDocument = await collection.unpublish(context, id);
109
96
  if (!unpublishedDocument) {
110
- return json({
97
+ return c.json({
111
98
  success: false,
112
99
  error: 'Document not found',
113
100
  message: `No document found with ID: ${id}`
114
- }, { status: 404 });
101
+ }, 404);
115
102
  }
116
- return json({
103
+ return c.json({
117
104
  success: true,
118
105
  data: unpublishedDocument,
119
106
  message: 'Document unpublished successfully'
@@ -122,16 +109,13 @@ export const DELETE = async ({ params, locals }) => {
122
109
  catch (error) {
123
110
  cmsLogger.error('Failed to unpublish document:', error);
124
111
  if (error instanceof PermissionError) {
125
- return json({
126
- success: false,
127
- error: 'Forbidden',
128
- message: error.message
129
- }, { status: 403 });
112
+ return c.json({ success: false, error: 'Forbidden', message: error.message }, 403);
130
113
  }
131
- return json({
114
+ return c.json({
132
115
  success: false,
133
116
  error: 'Failed to unpublish document',
134
117
  message: error instanceof Error ? error.message : 'Unknown error'
135
- }, { status: 500 });
118
+ }, 500);
136
119
  }
137
- };
120
+ });
121
+ //# sourceMappingURL=documents-publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents-publish.js","sourceRoot":"","sources":["../../../../../src/lib/server/api/routes/documents-publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Hono } from 'hono';
2
+ import type { AphexEnv } from '../index.js';
3
+ /**
4
+ * POST /api/documents/query — Advanced document querying with complex
5
+ * filters. Body shape mirrors LocalAPI's `FindOptions`.
6
+ */
7
+ export declare const documentsQueryRouter: Hono<AphexEnv>;
8
+ //# sourceMappingURL=documents-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents-query.d.ts","sourceRoot":"","sources":["../../../../../src/lib/server/api/routes/documents-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAO5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKzC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAiF/C,CAAC"}
@@ -0,0 +1,75 @@
1
+ import { Hono } from 'hono';
2
+ import { zValidator } from '@hono/zod-validator';
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 { queryDocumentsRequest } from '../../../api/schemas/documents.js';
7
+ const DEFAULT_PAGE_SIZE = 20;
8
+ const DEFAULT_PAGE = 1;
9
+ /**
10
+ * POST /api/documents/query — Advanced document querying with complex
11
+ * filters. Body shape mirrors LocalAPI's `FindOptions`.
12
+ */
13
+ export const documentsQueryRouter = new Hono().post('/query', zValidator('json', queryDocumentsRequest, (result, c) => {
14
+ if (!result.success) {
15
+ return c.json({
16
+ success: false,
17
+ error: 'Bad Request',
18
+ message: 'Document type is required in request body',
19
+ issues: result.error.issues
20
+ }, 400);
21
+ }
22
+ }), async (c) => {
23
+ try {
24
+ const { localAPI } = c.var.aphexCMS;
25
+ const context = authToContext(c.var.auth);
26
+ const body = c.req.valid('json');
27
+ const documentType = body.type;
28
+ if (!localAPI.hasCollection(documentType)) {
29
+ return c.json({
30
+ success: false,
31
+ error: 'Invalid document type',
32
+ message: `Collection '${documentType}' not found. Available: ${localAPI.getCollectionNames().join(', ')}`
33
+ }, 400);
34
+ }
35
+ const page = body.page ?? DEFAULT_PAGE;
36
+ const pageSize = body.pageSize ?? body.limit ?? DEFAULT_PAGE_SIZE;
37
+ const offset = body.offset !== undefined ? body.offset : (page - 1) * pageSize;
38
+ const findOptions = {
39
+ where: body.where,
40
+ limit: pageSize,
41
+ offset,
42
+ sort: body.sort,
43
+ depth: body.depth ?? 0,
44
+ select: body.select,
45
+ perspective: body.perspective ?? 'draft',
46
+ includeChildOrganizations: body.includeChildOrganizations,
47
+ filterOrganizationIds: body.filterOrganizationIds
48
+ };
49
+ const result = await localAPI.collections[documentType].find(context, findOptions);
50
+ return c.json({
51
+ success: true,
52
+ data: result.docs,
53
+ pagination: {
54
+ total: result.totalDocs,
55
+ page: result.page,
56
+ pageSize: result.limit,
57
+ totalPages: result.totalPages,
58
+ hasNextPage: result.hasNextPage,
59
+ hasPrevPage: result.hasPrevPage
60
+ }
61
+ });
62
+ }
63
+ catch (error) {
64
+ cmsLogger.error('Failed to query documents:', error);
65
+ if (error instanceof PermissionError) {
66
+ return c.json({ success: false, error: 'Forbidden', message: error.message }, 403);
67
+ }
68
+ return c.json({
69
+ success: false,
70
+ error: 'Failed to query documents',
71
+ message: error instanceof Error ? error.message : 'Unknown error'
72
+ }, 500);
73
+ }
74
+ });
75
+ //# sourceMappingURL=documents-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents-query.js","sourceRoot":"","sources":["../../../../../src/lib/server/api/routes/documents-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAIvE,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAmB,IAAI,IAAI,EAAY,CAAC,IAAI,CAC5E,QAAQ,EACR,UAAU,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC,IAAI,CACZ;YACC,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,2CAA2C;YACpD,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;SAC3B,EACD,GAAG,CACH,CAAC;IACH,CAAC;AACF,CAAC,CAAC,EACF,KAAK,EAAE,CAAC,EAAE,EAAE;IACX,IAAI,CAAC;QACJ,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;QACpC,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;QAE/B,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,CAAC,IAAI,CACZ;gBACC,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,eAAe,YAAY,2BAA2B,QAAQ,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACzG,EACD,GAAG,CACH,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,iBAAiB,CAAC;QAClE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;QAE/E,MAAM,WAAW,GAAgB;YAChC,KAAK,EAAE,IAAI,CAAC,KAA6B;YACzC,KAAK,EAAE,QAAQ;YACf,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAA+B;YAC5C,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,OAAO;YACxC,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;YACzD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;SACjD,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAE,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAEpF,OAAO,CAAC,CAAC,IAAI,CAAC;YACb,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE;gBACX,KAAK,EAAE,MAAM,CAAC,SAAS;gBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,KAAK;gBACtB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;aAC/B;SACD,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,SAAS,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACrD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACtC,OAAO,CAAC,CAAC,IAAI,CACZ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAC9D,GAAG,CACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC,IAAI,CACZ;YACC,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,2BAA2B;YAClC,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SACjE,EACD,GAAG,CACH,CAAC;IACH,CAAC;AACF,CAAC,CACD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ import type { AphexEnv } from '../index.js';
3
+ export declare const documentsRouter: Hono<AphexEnv>;
4
+ //# sourceMappingURL=documents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../../../../src/lib/server/api/routes/documents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAM5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKzC,eAAO,MAAM,eAAe,EAAE,IAAI,CAAC,QAAQ,CAuKxC,CAAC"}
@@ -1,28 +1,25 @@
1
- // Aphex CMS Document 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 { createDocumentRequest, listDocumentsQuery } from '../api/schemas/documents.js';
7
- // Default values for API
1
+ import { Hono } from 'hono';
2
+ import { zValidator } from '@hono/zod-validator';
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 { createDocumentRequest, listDocumentsQuery } from '../../../api/schemas/documents.js';
8
7
  const DEFAULT_PAGE_SIZE = 20;
9
8
  const DEFAULT_PAGE = 1;
10
- // GET /api/documents - Simple document listing with basic filters
11
- export const GET = async ({ url, locals }) => {
9
+ export const documentsRouter = new Hono()
10
+ .get('/', zValidator('query', listDocumentsQuery, (result, c) => {
11
+ if (!result.success) {
12
+ return c.json({
13
+ success: false,
14
+ error: 'Invalid query parameters',
15
+ issues: result.error.issues
16
+ }, 400);
17
+ }
18
+ }), async (c) => {
12
19
  try {
13
- const { localAPI } = locals.aphexCMS;
14
- const context = authToContext(locals.auth);
15
- // Parse + validate query params with zod
16
- const rawQuery = Object.fromEntries(url.searchParams.entries());
17
- const parsedQuery = listDocumentsQuery.safeParse(rawQuery);
18
- if (!parsedQuery.success) {
19
- return json({
20
- success: false,
21
- error: 'Invalid query parameters',
22
- issues: parsedQuery.error.issues
23
- }, { status: 400 });
24
- }
25
- const q = parsedQuery.data;
20
+ const { localAPI } = c.var.aphexCMS;
21
+ const context = authToContext(c.var.auth);
22
+ const q = c.req.valid('query');
26
23
  const docType = q.type ?? q.docType;
27
24
  const status = q.status;
28
25
  const sortParam = Array.isArray(q.sort) ? q.sort.join(',') : q.sort;
@@ -34,38 +31,35 @@ export const GET = async ({ url, locals }) => {
34
31
  const offset = (page - 1) * pageSize;
35
32
  const depth = q.depth ?? 0;
36
33
  if (!docType) {
37
- return json({
34
+ return c.json({
38
35
  success: false,
39
36
  error: 'Bad Request',
40
37
  message: 'Document type is required. Use ?type=page or ?docType=page'
41
- }, { status: 400 });
38
+ }, 400);
42
39
  }
43
- // Get collection API (TypeScript-safe)
44
40
  const collection = localAPI.collections[docType];
45
41
  if (!collection) {
46
- return json({
42
+ return c.json({
47
43
  success: false,
48
44
  error: 'Invalid document type',
49
45
  message: `Collection '${docType}' not found. Available: ${localAPI.getCollectionNames().join(', ')}`
50
- }, { status: 400 });
46
+ }, 400);
51
47
  }
52
- // Build where clause from query params
53
48
  const where = {};
54
49
  if (status) {
55
50
  where.status = { equals: status };
56
51
  }
57
- // Query via LocalAPI
58
52
  const result = await collection.find(context, {
59
53
  where: Object.keys(where).length > 0 ? where : undefined,
60
54
  limit: pageSize,
61
- offset: offset,
62
- depth: depth,
55
+ offset,
56
+ depth,
63
57
  sort: sortParam || undefined,
64
58
  perspective,
65
59
  includeChildOrganizations,
66
60
  filterOrganizationIds
67
61
  });
68
- return json({
62
+ return c.json({
69
63
  success: true,
70
64
  data: result.docs,
71
65
  pagination: {
@@ -81,76 +75,61 @@ export const GET = async ({ url, locals }) => {
81
75
  catch (error) {
82
76
  cmsLogger.error('Failed to fetch documents:', error);
83
77
  if (error instanceof PermissionError) {
84
- return json({
85
- success: false,
86
- error: 'Forbidden',
87
- message: error.message
88
- }, { status: 403 });
78
+ return c.json({ success: false, error: 'Forbidden', message: error.message }, 403);
89
79
  }
90
- return json({
80
+ return c.json({
91
81
  success: false,
92
82
  error: 'Failed to fetch documents',
93
83
  message: error instanceof Error ? error.message : 'Unknown error'
94
- }, { status: 500 });
84
+ }, 500);
95
85
  }
96
- };
97
- // POST /api/documents - Create new document
98
- export const POST = async ({ request, locals }) => {
86
+ })
87
+ .post('/', zValidator('json', createDocumentRequest, (result, c) => {
88
+ if (!result.success) {
89
+ return c.json({
90
+ success: false,
91
+ error: 'Invalid request body',
92
+ issues: result.error.issues
93
+ }, 400);
94
+ }
95
+ }), async (c) => {
99
96
  try {
100
- const { localAPI } = locals.aphexCMS;
101
- const context = authToContext(locals.auth);
102
- const rawBody = await request.json();
103
- const parsed = createDocumentRequest.safeParse(rawBody);
104
- if (!parsed.success) {
105
- return json({
106
- success: false,
107
- error: 'Invalid request body',
108
- issues: parsed.error.issues
109
- }, { status: 400 });
110
- }
111
- const documentType = parsed.data.type;
112
- const documentData = (parsed.data.draftData ?? parsed.data.data);
113
- const shouldPublish = parsed.data.publish ?? false;
114
- // Get collection API (TypeScript-safe)
97
+ const { localAPI } = c.var.aphexCMS;
98
+ const context = authToContext(c.var.auth);
99
+ const parsed = c.req.valid('json');
100
+ const documentType = parsed.type;
101
+ const documentData = (parsed.draftData ?? parsed.data);
102
+ const shouldPublish = parsed.publish ?? false;
115
103
  const collection = localAPI.collections[documentType];
116
104
  if (!collection) {
117
- return json({
105
+ return c.json({
118
106
  success: false,
119
107
  error: 'Invalid document type',
120
108
  message: `Collection '${documentType}' not found. Available: ${localAPI.getCollectionNames().join(', ')}`
121
- }, { status: 400 });
109
+ }, 400);
122
110
  }
123
- // Create via LocalAPI (permission checks and validation happen inside)
124
111
  const result = await collection.create(context, documentData, {
125
112
  publish: shouldPublish
126
113
  });
127
- return json({
114
+ return c.json({
128
115
  success: true,
129
116
  data: result.document,
130
117
  validation: result.validation
131
- }, { status: 201 });
118
+ }, 201);
132
119
  }
133
120
  catch (error) {
134
121
  cmsLogger.error('Failed to create document:', error);
135
122
  if (error instanceof PermissionError) {
136
- return json({
137
- success: false,
138
- error: 'Forbidden',
139
- message: error.message
140
- }, { status: 403 });
123
+ return c.json({ success: false, error: 'Forbidden', message: error.message }, 403);
141
124
  }
142
- // Validation errors from publish attempts
143
125
  if (error instanceof Error && error.message.includes('validation errors')) {
144
- return json({
145
- success: false,
146
- error: 'Validation failed',
147
- message: error.message
148
- }, { status: 400 });
126
+ return c.json({ success: false, error: 'Validation failed', message: error.message }, 400);
149
127
  }
150
- return json({
128
+ return c.json({
151
129
  success: false,
152
130
  error: 'Failed to create document',
153
131
  message: error instanceof Error ? error.message : 'Unknown error'
154
- }, { status: 500 });
132
+ }, 500);
155
133
  }
156
- };
134
+ });
135
+ //# sourceMappingURL=documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../../../src/lib/server/api/routes/documents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ import type { AphexEnv } from '../index.js';
3
+ export declare const organizationsByIdRouter: Hono<AphexEnv>;
4
+ //# sourceMappingURL=organizations-by-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organizations-by-id.d.ts","sourceRoot":"","sources":["../../../../../src/lib/server/api/routes/organizations-by-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAuOhD,CAAC"}