@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,50 +1,100 @@
1
- // Aphex CMS Asset API Handlers
2
- import { json } from '@sveltejs/kit';
3
- import { cmsLogger } from '../utils/logger.js';
4
- import { validateFile } from '../utils/mime-detect.js';
5
- import { listAssetsQuery } from '../api/schemas/assets.js';
6
- export const POST = async ({ request, locals }) => {
1
+ import { Hono } from 'hono';
2
+ import { zValidator } from '@hono/zod-validator';
3
+ import { cmsLogger } from '../../../utils/logger.js';
4
+ import { validateFile } from '../../../utils/mime-detect.js';
5
+ import { listAssetsQuery } from '../../../api/schemas/assets.js';
6
+ export const assetsRouter = new Hono()
7
+ .get('/', zValidator('query', listAssetsQuery, (result, c) => {
8
+ if (!result.success) {
9
+ return c.json({
10
+ success: false,
11
+ error: 'Invalid query parameters',
12
+ issues: result.error.issues
13
+ }, 400);
14
+ }
15
+ }), async (c) => {
16
+ try {
17
+ const { assetService } = c.var.aphexCMS;
18
+ const auth = c.var.auth;
19
+ if (!auth || auth.type === 'partial_session') {
20
+ return c.json({ success: false, error: 'Unauthorized' }, 401);
21
+ }
22
+ const q = c.req.valid('query');
23
+ const filters = {
24
+ assetType: q.assetType,
25
+ mimeType: q.mimeType,
26
+ search: q.search,
27
+ limit: q.limit ?? 20,
28
+ offset: q.offset ?? 0
29
+ };
30
+ const [fetchedAssets, totalAssets] = await Promise.all([
31
+ assetService.findAssets(auth.organizationId, filters),
32
+ assetService.findAssets(auth.organizationId, {
33
+ ...filters,
34
+ limit: 999999,
35
+ offset: 0
36
+ })
37
+ ]);
38
+ const total = totalAssets.length;
39
+ const pageSize = filters.limit || 20;
40
+ const currentPage = Math.floor(filters.offset / pageSize) + 1;
41
+ const totalPages = Math.ceil(total / pageSize);
42
+ return c.json({
43
+ success: true,
44
+ data: fetchedAssets,
45
+ pagination: {
46
+ total,
47
+ page: currentPage,
48
+ pageSize,
49
+ totalPages,
50
+ hasNextPage: currentPage < totalPages,
51
+ hasPrevPage: currentPage > 1
52
+ }
53
+ });
54
+ }
55
+ catch (error) {
56
+ cmsLogger.error('Failed to fetch assets:', error);
57
+ return c.json({
58
+ success: false,
59
+ error: 'Failed to fetch assets',
60
+ message: error instanceof Error ? error.message : 'Unknown error'
61
+ }, 500);
62
+ }
63
+ })
64
+ .post('/', async (c) => {
7
65
  try {
8
- const { assetService } = locals.aphexCMS;
9
- const auth = locals.auth;
66
+ const { assetService } = c.var.aphexCMS;
67
+ const auth = c.var.auth;
10
68
  if (!auth || auth.type === 'partial_session') {
11
- return json({ success: false, error: 'Unauthorized' }, { status: 401 });
69
+ return c.json({ success: false, error: 'Unauthorized' }, 401);
12
70
  }
13
- const formData = await request.formData();
71
+ const formData = await c.req.formData();
14
72
  const file = formData.get('file');
15
73
  if (!file) {
16
- return json({ success: false, error: 'No file provided' }, { status: 400 });
74
+ return c.json({ success: false, error: 'No file provided' }, 400);
17
75
  }
18
- // Convert file to buffer
19
76
  const arrayBuffer = await file.arrayBuffer();
20
77
  const buffer = Buffer.from(arrayBuffer);
21
- // Get allowed MIME types and max size from form data (set by FileField component)
22
78
  const allowedMimeTypesRaw = formData.get('allowedMimeTypes');
23
79
  const maxSizeRaw = formData.get('maxSize');
24
80
  const allowedMimeTypes = allowedMimeTypesRaw ? JSON.parse(allowedMimeTypesRaw) : undefined;
25
81
  const maxSize = maxSizeRaw ? parseInt(maxSizeRaw, 10) : undefined;
26
- // Validate file content (magic bytes, blocked types, allowed types)
27
82
  const validation = validateFile(buffer, file.name, file.type, {
28
83
  allowedMimeTypes,
29
84
  maxSize
30
85
  });
31
86
  if (!validation.valid) {
32
- return json({ success: false, error: validation.error }, { status: 400 });
87
+ return c.json({ success: false, error: validation.error }, 400);
33
88
  }
34
- // Get optional metadata from form data
35
89
  const title = formData.get('title') || undefined;
36
90
  const description = formData.get('description') || undefined;
37
91
  const alt = formData.get('alt') || undefined;
38
92
  const creditLine = formData.get('creditLine') || undefined;
39
- // Get field metadata for privacy checking
40
93
  const schemaType = formData.get('schemaType') || undefined;
41
94
  const fieldPath = formData.get('fieldPath') || undefined;
42
- // Get target organization (document's org takes precedence)
43
- // This allows assets to belong to the document's org, not the uploader's org
44
95
  const targetOrganizationId = formData.get('organizationId') || auth.organizationId;
45
- // Create asset upload data
46
96
  const uploadData = {
47
- organizationId: targetOrganizationId, // Asset belongs to document's org
97
+ organizationId: targetOrganizationId,
48
98
  buffer,
49
99
  originalFilename: file.name,
50
100
  mimeType: file.type,
@@ -59,78 +109,15 @@ export const POST = async ({ request, locals }) => {
59
109
  fieldPath
60
110
  }
61
111
  };
62
- // Upload asset using the service
63
- // The adapter will validate hierarchy access via withOrgContext
64
112
  const asset = await assetService.uploadAsset(targetOrganizationId, uploadData);
65
- return json({
66
- success: true,
67
- data: asset
68
- });
113
+ return c.json({ success: true, data: asset });
69
114
  }
70
115
  catch (error) {
71
116
  cmsLogger.error('Asset upload failed:', error);
72
- return json({
117
+ return c.json({
73
118
  success: false,
74
119
  error: 'Asset upload failed',
75
120
  message: error instanceof Error ? error.message : 'Unknown error'
76
- }, { status: 500 });
77
- }
78
- };
79
- export const GET = async ({ url, locals }) => {
80
- try {
81
- const { assetService } = locals.aphexCMS;
82
- const auth = locals.auth;
83
- if (!auth || auth.type === 'partial_session') {
84
- return json({ success: false, error: 'Unauthorized' }, { status: 401 });
85
- }
86
- const parsedQuery = listAssetsQuery.safeParse(Object.fromEntries(url.searchParams.entries()));
87
- if (!parsedQuery.success) {
88
- return json({
89
- success: false,
90
- error: 'Invalid query parameters',
91
- issues: parsedQuery.error.issues
92
- }, { status: 400 });
93
- }
94
- const filters = {
95
- assetType: parsedQuery.data.assetType,
96
- mimeType: parsedQuery.data.mimeType,
97
- search: parsedQuery.data.search,
98
- limit: parsedQuery.data.limit ?? 20,
99
- offset: parsedQuery.data.offset ?? 0
100
- };
101
- // Fetch assets and total count in parallel
102
- const [fetchedAssets, totalAssets] = await Promise.all([
103
- assetService.findAssets(auth.organizationId, filters),
104
- assetService.findAssets(auth.organizationId, {
105
- ...filters,
106
- limit: 999999,
107
- offset: 0
108
- })
109
- ]);
110
- const total = totalAssets.length;
111
- const pageSize = filters.limit || 20;
112
- const currentPage = Math.floor(filters.offset / pageSize) + 1;
113
- const totalPages = Math.ceil(total / pageSize);
114
- return json({
115
- success: true,
116
- data: fetchedAssets,
117
- pagination: {
118
- total,
119
- page: currentPage,
120
- pageSize,
121
- totalPages,
122
- hasNextPage: currentPage < totalPages,
123
- hasPrevPage: currentPage > 1
124
- }
125
- });
126
- }
127
- catch (error) {
128
- cmsLogger.error('Failed to fetch assets:', error);
129
- return json({
130
- success: false,
131
- error: 'Failed to fetch assets',
132
- message: error instanceof Error ? error.message : 'Unknown error'
133
- }, { status: 500 });
121
+ }, 500);
134
122
  }
135
- };
136
- //# sourceMappingURL=assets.js.map
123
+ });
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ import type { AphexEnv } from '../index.js';
3
+ export declare const documentVersionsRouter: Hono<AphexEnv>;
4
+ //# sourceMappingURL=document-versions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-versions.d.ts","sourceRoot":"","sources":["../../../../src/lib/server/api/routes/document-versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAqJ/C,CAAC"}
@@ -0,0 +1,112 @@
1
+ import { Hono } from 'hono';
2
+ import { zValidator } from '@hono/zod-validator';
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
+ export const documentVersionsRouter = new Hono()
7
+ .get('/:id/versions', zValidator('query', listVersionsQuery, (result, c) => {
8
+ if (!result.success) {
9
+ return c.json({
10
+ success: false,
11
+ error: 'Invalid query parameters',
12
+ issues: result.error.issues
13
+ }, 400);
14
+ }
15
+ }), async (c) => {
16
+ try {
17
+ const { localAPI, databaseAdapter } = c.var.aphexCMS;
18
+ const context = authToContext(c.var.auth);
19
+ const id = c.req.param('id');
20
+ if (!id) {
21
+ return c.json({ success: false, error: 'Document ID is required' }, 400);
22
+ }
23
+ const q = c.req.valid('query');
24
+ const limit = q.limit ?? 25;
25
+ const offset = q.offset ?? 0;
26
+ const result = await localAPI.versionService.listVersions(databaseAdapter, context.organizationId, id, { limit, offset });
27
+ const userIds = [...new Set(result.versions.map((v) => v.createdBy).filter(Boolean))];
28
+ const userMap = new Map();
29
+ if (userIds.length > 0 && c.var.aphexCMS.auth) {
30
+ await Promise.all(userIds.map(async (userId) => {
31
+ if (userId.startsWith('apikey:')) {
32
+ userMap.set(userId, 'API Key');
33
+ return;
34
+ }
35
+ try {
36
+ const user = await c.var.aphexCMS.auth.getUserById(userId);
37
+ if (user) {
38
+ userMap.set(userId, user.name || user.email);
39
+ }
40
+ }
41
+ catch {
42
+ // User not found — skip
43
+ }
44
+ }));
45
+ }
46
+ const versionsWithUsers = result.versions.map((v) => ({
47
+ ...v,
48
+ createdByName: v.createdBy ? userMap.get(v.createdBy) || null : null
49
+ }));
50
+ return c.json({
51
+ success: true,
52
+ data: versionsWithUsers,
53
+ total: result.total
54
+ });
55
+ }
56
+ catch (error) {
57
+ cmsLogger.error('Failed to list document versions:', error);
58
+ return c.json({ success: false, error: 'Failed to list versions' }, 500);
59
+ }
60
+ })
61
+ .get('/:id/versions/:version', async (c) => {
62
+ try {
63
+ const { localAPI, databaseAdapter } = c.var.aphexCMS;
64
+ const context = authToContext(c.var.auth);
65
+ const id = c.req.param('id');
66
+ const version = c.req.param('version');
67
+ if (!id || !version) {
68
+ return c.json({ success: false, error: 'Document ID and version number are required' }, 400);
69
+ }
70
+ const versionNumber = parseInt(version);
71
+ if (isNaN(versionNumber)) {
72
+ return c.json({ success: false, error: 'Version must be a number' }, 400);
73
+ }
74
+ const result = await localAPI.versionService.getVersion(databaseAdapter, context.organizationId, id, versionNumber);
75
+ if (!result) {
76
+ return c.json({ success: false, error: 'Version not found' }, 404);
77
+ }
78
+ return c.json({ success: true, data: result });
79
+ }
80
+ catch (error) {
81
+ cmsLogger.error('Failed to get document version:', error);
82
+ return c.json({ success: false, error: 'Failed to get version' }, 500);
83
+ }
84
+ })
85
+ .post('/:id/versions/:version/restore', async (c) => {
86
+ try {
87
+ const { localAPI, databaseAdapter } = c.var.aphexCMS;
88
+ const context = authToContext(c.var.auth);
89
+ const id = c.req.param('id');
90
+ const version = c.req.param('version');
91
+ if (!id || !version) {
92
+ return c.json({ success: false, error: 'Document ID and version number are required' }, 400);
93
+ }
94
+ const versionNumber = parseInt(version);
95
+ if (isNaN(versionNumber)) {
96
+ return c.json({ success: false, error: 'Version must be a number' }, 400);
97
+ }
98
+ const document = await localAPI.versionService.restoreVersion(databaseAdapter, context.organizationId, id, versionNumber, context.user?.id);
99
+ if (!document) {
100
+ return c.json({ success: false, error: 'Version not found or restore failed' }, 404);
101
+ }
102
+ return c.json({
103
+ success: true,
104
+ data: document,
105
+ message: `Restored to version ${versionNumber}`
106
+ });
107
+ }
108
+ catch (error) {
109
+ cmsLogger.error('Failed to restore document version:', error);
110
+ return c.json({ success: false, error: 'Failed to restore version' }, 500);
111
+ }
112
+ });
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ import type { AphexEnv } from '../index.js';
3
+ export declare const documentsByIdRouter: Hono<AphexEnv>;
4
+ //# sourceMappingURL=documents-by-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents-by-id.d.ts","sourceRoot":"","sources":["../../../../src/lib/server/api/routes/documents-by-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAM5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CA4L5C,CAAC"}
@@ -0,0 +1,147 @@
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 { updateDocumentRequest } from '../../../api/schemas/documents.js';
7
+ export const documentsByIdRouter = new Hono()
8
+ .get('/:id', async (c) => {
9
+ try {
10
+ const { localAPI } = c.var.aphexCMS;
11
+ const context = authToContext(c.var.auth);
12
+ const id = c.req.param('id');
13
+ if (!id) {
14
+ return c.json({ success: false, error: 'Document ID is required' }, 400);
15
+ }
16
+ const depthParam = c.req.query('depth');
17
+ const depth = depthParam ? Math.max(0, Math.min(parseInt(depthParam), 5)) : 0;
18
+ const perspective = c.req.query('perspective') || 'draft';
19
+ const result = await localAPI.findDocumentById(context, id);
20
+ if (!result) {
21
+ return c.json({ success: false, error: 'Document not found' }, 404);
22
+ }
23
+ const collection = localAPI.collections[result.type];
24
+ if (!collection) {
25
+ return c.json({
26
+ success: false,
27
+ error: 'Invalid document type',
28
+ message: `Collection '${result.type}' not found`
29
+ }, 400);
30
+ }
31
+ const document = await collection.findByID(context, id, { depth, perspective });
32
+ if (!document) {
33
+ return c.json({ success: false, error: 'Document not found' }, 404);
34
+ }
35
+ return c.json({ success: true, data: document });
36
+ }
37
+ catch (error) {
38
+ cmsLogger.error('Failed to fetch document:', error);
39
+ if (error instanceof PermissionError) {
40
+ return c.json({ success: false, error: 'Forbidden', message: error.message }, 403);
41
+ }
42
+ return c.json({
43
+ success: false,
44
+ error: 'Failed to fetch document',
45
+ message: error instanceof Error ? error.message : 'Unknown error'
46
+ }, 500);
47
+ }
48
+ })
49
+ .put('/:id', zValidator('json', updateDocumentRequest, (result, c) => {
50
+ if (!result.success) {
51
+ return c.json({
52
+ success: false,
53
+ error: 'Invalid request body',
54
+ issues: result.error.issues
55
+ }, 400);
56
+ }
57
+ }), async (c) => {
58
+ try {
59
+ const { localAPI } = c.var.aphexCMS;
60
+ const context = authToContext(c.var.auth);
61
+ const id = c.req.param('id');
62
+ if (!id) {
63
+ return c.json({ success: false, error: 'Document ID is required' }, 400);
64
+ }
65
+ const parsed = c.req.valid('json');
66
+ const documentData = parsed.draftData ?? parsed.data;
67
+ if (!documentData) {
68
+ return c.json({ success: false, error: 'Document data is required' }, 400);
69
+ }
70
+ const shouldPublish = parsed.publish ?? false;
71
+ const found = await localAPI.findDocumentById(context, id);
72
+ if (!found) {
73
+ return c.json({ success: false, error: 'Document not found' }, 404);
74
+ }
75
+ const collection = localAPI.collections[found.type];
76
+ if (!collection) {
77
+ return c.json({
78
+ success: false,
79
+ error: 'Invalid document type',
80
+ message: `Collection '${found.type}' not found`
81
+ }, 400);
82
+ }
83
+ const result = await collection.update(context, id, documentData, {
84
+ publish: shouldPublish
85
+ });
86
+ if (!result) {
87
+ return c.json({ success: false, error: 'Document not found' }, 404);
88
+ }
89
+ return c.json({
90
+ success: true,
91
+ data: result.document,
92
+ validation: result.validation
93
+ });
94
+ }
95
+ catch (error) {
96
+ cmsLogger.error('Failed to update document:', error);
97
+ if (error instanceof PermissionError) {
98
+ return c.json({ success: false, error: 'Forbidden', message: error.message }, 403);
99
+ }
100
+ if (error instanceof Error && error.message.includes('validation errors')) {
101
+ return c.json({ success: false, error: 'Validation failed', message: error.message }, 400);
102
+ }
103
+ return c.json({
104
+ success: false,
105
+ error: 'Failed to update document',
106
+ message: error instanceof Error ? error.message : 'Unknown error'
107
+ }, 500);
108
+ }
109
+ })
110
+ .delete('/:id', async (c) => {
111
+ try {
112
+ const { localAPI } = c.var.aphexCMS;
113
+ const context = authToContext(c.var.auth);
114
+ const id = c.req.param('id');
115
+ if (!id) {
116
+ return c.json({ success: false, error: 'Document ID is required' }, 400);
117
+ }
118
+ const result = await localAPI.findDocumentById(context, id);
119
+ if (!result) {
120
+ return c.json({ success: false, error: 'Document not found' }, 404);
121
+ }
122
+ const collection = localAPI.collections[result.type];
123
+ if (!collection) {
124
+ return c.json({
125
+ success: false,
126
+ error: 'Invalid document type',
127
+ message: `Collection '${result.type}' not found`
128
+ }, 400);
129
+ }
130
+ const success = await collection.delete(context, id);
131
+ if (!success) {
132
+ return c.json({ success: false, error: 'Document not found' }, 404);
133
+ }
134
+ return c.json({ success: true, message: 'Document deleted successfully' });
135
+ }
136
+ catch (error) {
137
+ cmsLogger.error('Failed to delete document:', error);
138
+ if (error instanceof PermissionError) {
139
+ return c.json({ success: false, error: 'Forbidden', message: error.message }, 403);
140
+ }
141
+ return c.json({
142
+ success: false,
143
+ error: 'Failed to delete document',
144
+ message: error instanceof Error ? error.message : 'Unknown error'
145
+ }, 500);
146
+ }
147
+ });
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ import type { AphexEnv } from '../index.js';
3
+ export declare const documentsPublishRouter: Hono<AphexEnv>;
4
+ //# sourceMappingURL=documents-publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents-publish.d.ts","sourceRoot":"","sources":["../../../../src/lib/server/api/routes/documents-publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAkK/C,CAAC"}
@@ -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,17 +109,12 @@ 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
- };
138
- //# sourceMappingURL=documents-publish.js.map
120
+ });