@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,2 +1,10 @@
1
- export * from './client/index.js';
1
+ export * from './types/index.js';
2
+ export type { SidebarUser, SidebarNavItem, SidebarBranding, SidebarData } from './types/sidebar.js';
3
+ export * from './field-validation/rule.js';
4
+ export * from './field-validation/utils.js';
5
+ export { createContentHash, hasUnpublishedChanges } from './utils/content-hash.js';
6
+ export * from './schema-utils/index.js';
7
+ export * from './utils/index.js';
8
+ export * from './api/index.js';
9
+ export type { ApiResponse } from './api/index.js';
2
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAkBA,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGjG,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAGhF,cAAc,sBAAsB,CAAC;AAGrC,cAAc,eAAe,CAAC;AAG9B,cAAc,aAAa,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
package/dist/lib/index.js CHANGED
@@ -1,5 +1,44 @@
1
- // Aphex CMS Core - Main exports (client-safe only)
2
- // For server-side functionality, import from '@aphexcms/cms-core/server'
3
- // Re-export all client-safe functionality
4
- export * from './client/index.js';
1
+ // Aphex CMS Core - Main exports
2
+ //
3
+ // This barrel is the "universal" entry point: every export here is safe to
4
+ // resolve from Node ESM as well as Vite/SvelteKit — i.e. no `.svelte`
5
+ // component files. That matters because ES-module `export *` eagerly links
6
+ // every re-export, and if any server-side import path hits a raw `.svelte`
7
+ // re-export, Node's native loader throws `ERR_UNKNOWN_FILE_EXTENSION` for
8
+ // anything it happens to resolve through native ESM (SSR edge cases,
9
+ // loader-hook workers, etc).
10
+ //
11
+ // If you need the Svelte admin components (`DocumentEditor`, `AdminApp`,
12
+ // `Sidebar`, field components, `ConfirmDialogHost`, `PermissionsDebug`…)
13
+ // import them from `@aphexcms/cms-core/client` instead.
14
+ //
15
+ // For server-only functionality (adapters, hooks, engine, routes), import
16
+ // from `@aphexcms/cms-core/server`.
17
+ // Core types (shared between client and server)
18
+ export * from './types/index.js';
19
+ // Field validation
20
+ export * from './field-validation/rule.js';
21
+ export * from './field-validation/utils.js';
22
+ // Content hashing utilities
23
+ export { createContentHash, hasUnpublishedChanges } from './utils/content-hash.js';
24
+ // Schema utilities
25
+ export * from './schema-utils/index.js';
26
+ // General utility functions (logger, image URL builder, etc)
27
+ export * from './utils/index.js';
28
+ // Unified API client
29
+ export * from './api/index.js';
30
+ // NOTE: The following are intentionally NOT re-exported from this root
31
+ // barrel. They're all Svelte runtime constructs — rune modules that use
32
+ // `$state` or real `.svelte` components — and re-exporting them here would
33
+ // transitively pull Svelte-only code through every import of
34
+ // `@aphexcms/cms-core`, breaking Node-side usage (SSR module evaluation,
35
+ // loader hooks, etc). Import from their dedicated subpaths instead:
36
+ //
37
+ // import { setSchemaContext, getSchemaContext } from '@aphexcms/cms-core/client';
38
+ // import { setPermissionsContext, usePermissions } from '@aphexcms/cms-core/client';
39
+ // import { confirmDialog } from '@aphexcms/cms-core/client';
40
+ // import { toast } from 'svelte-sonner';
41
+ //
42
+ // Only use the root barrel (`@aphexcms/cms-core`) for server-safe utilities,
43
+ // types, and pure JS helpers.
5
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,yEAAyE;AAEzE,0CAA0C;AAC1C,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,EAAE;AACF,2EAA2E;AAC3E,sEAAsE;AACtE,2EAA2E;AAC3E,2EAA2E;AAC3E,0EAA0E;AAC1E,qEAAqE;AACrE,6BAA6B;AAC7B,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,wDAAwD;AACxD,EAAE;AACF,0EAA0E;AAC1E,oCAAoC;AAEpC,gDAAgD;AAChD,cAAc,eAAe,CAAC;AAG9B,mBAAmB;AACnB,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,mBAAmB;AACnB,cAAc,sBAAsB,CAAC;AAErC,6DAA6D;AAC7D,cAAc,eAAe,CAAC;AAE9B,qBAAqB;AACrB,cAAc,aAAa,CAAC;AAG5B,uEAAuE;AACvE,wEAAwE;AACxE,2EAA2E;AAC3E,6DAA6D;AAC7D,yEAAyE;AACzE,oEAAoE;AACpE,EAAE;AACF,oFAAoF;AACpF,uFAAuF;AACvF,+DAA+D;AAC/D,2CAA2C;AAC3C,EAAE;AACF,6EAA6E;AAC7E,8BAA8B"}
@@ -0,0 +1,55 @@
1
+ import { Hono } from 'hono';
2
+ import type { CMSInstances } from '../../hooks.js';
3
+ import type { Auth } from '../../types/auth.js';
4
+ /**
5
+ * Hono environment for the Aphex API.
6
+ *
7
+ * Variables on `c.var`:
8
+ * - `aphexCMS` — the singleton CMS service container (db, storage, services).
9
+ * - `auth` — the resolved auth principal for this request, or null if anonymous.
10
+ *
11
+ * These are populated by the SvelteKit catch-all, which invokes
12
+ * `app.fetch(request, { aphexCMS, auth })` and the bridge middleware below
13
+ * lifts them onto `c.var`.
14
+ */
15
+ export type AphexEnv = {
16
+ Variables: {
17
+ aphexCMS: CMSInstances;
18
+ auth: Auth | null;
19
+ };
20
+ Bindings: {
21
+ aphexCMS: CMSInstances;
22
+ auth: Auth | null;
23
+ };
24
+ };
25
+ /**
26
+ * Build the Aphex API Hono app shell.
27
+ *
28
+ * Returns a Hono app with `/api` basePath and the bridge middleware that
29
+ * lifts `app.fetch(req, env)` values onto `c.var`. Built-in routes are NOT
30
+ * mounted yet — call `mountAphexBuiltins(app)` after registering any user
31
+ * middleware/overrides (Hono is registration-order-strict).
32
+ */
33
+ export declare function createAphexApi(): import("hono/hono-base").HonoBase<AphexEnv, import("hono/types").BlankSchema, "/api", "/api">;
34
+ /**
35
+ * Mount cms-core's built-in resource routes onto an Aphex API app.
36
+ *
37
+ * Called by `createCMSHook` after `config.api?.(app)` runs, so user-provided
38
+ * middleware (e.g. an email-sending wrap on `/organizations/invitations`)
39
+ * registers ahead of the built-in handler and gets the chance to wrap it.
40
+ */
41
+ export declare function mountAphexBuiltins(app: Hono<AphexEnv>): void;
42
+ export type ApiRoutes = ReturnType<typeof createAphexApi>;
43
+ /**
44
+ * Adapter: wrap a SvelteKit-style `RequestHandler` so it can be mounted
45
+ * onto a Hono router.
46
+ *
47
+ * Used for handlers that already exist in SK form (e.g. the built-in
48
+ * GraphQL Yoga app) and don't need to be rewritten just to flow through
49
+ * the Hono catch-all. We synthesize the minimum `event` shape those
50
+ * handlers actually read: `request` + `locals.{aphexCMS,auth}` + `params`
51
+ * + `url`. If a future SK handler reaches for `cookies`, `setHeaders`, or
52
+ * `getClientAddress`, extend the synthesized event accordingly.
53
+ */
54
+ export declare function toHonoHandler(skHandler: (event: any) => Promise<Response> | Response): (c: import("hono").Context<AphexEnv>) => Promise<Response>;
55
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/server/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAoB7C;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,GAAG;IACtB,SAAS,EAAE;QACV,QAAQ,EAAE,YAAY,CAAC;QACvB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;KAClB,CAAC;IACF,QAAQ,EAAE;QACT,QAAQ,EAAE,YAAY,CAAC;QACvB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;KAClB,CAAC;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,cAAc,kGAY7B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,QAoCrD;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC5B,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,IAEzC,GAAG,OAAO,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,uBAejD"}
@@ -0,0 +1,107 @@
1
+ import { Hono } from 'hono';
2
+ import { schemasRouter } from './routes/schemas.js';
3
+ import { documentsRouter } from './routes/documents.js';
4
+ import { documentsByIdRouter } from './routes/documents-by-id.js';
5
+ import { documentsPublishRouter } from './routes/documents-publish.js';
6
+ import { documentsQueryRouter } from './routes/documents-query.js';
7
+ import { documentVersionsRouter } from './routes/document-versions.js';
8
+ import { assetsRouter } from './routes/assets.js';
9
+ import { assetsByIdRouter } from './routes/assets-by-id.js';
10
+ import { assetsBulkRouter } from './routes/assets-bulk.js';
11
+ import { assetsReferencesRouter } from './routes/assets-references.js';
12
+ import { organizationsRouter } from './routes/organizations.js';
13
+ import { organizationsByIdRouter } from './routes/organizations-by-id.js';
14
+ import { organizationsInvitationsRouter } from './routes/organizations-invitations.js';
15
+ import { organizationsMembersRouter } from './routes/organizations-members.js';
16
+ import { organizationsSwitchRouter } from './routes/organizations-switch.js';
17
+ import { rolesRouter } from './routes/roles.js';
18
+ import { userPreferencesRouter } from './routes/user-preferences.js';
19
+ import { userRouter } from './routes/user.js';
20
+ /**
21
+ * Build the Aphex API Hono app shell.
22
+ *
23
+ * Returns a Hono app with `/api` basePath and the bridge middleware that
24
+ * lifts `app.fetch(req, env)` values onto `c.var`. Built-in routes are NOT
25
+ * mounted yet — call `mountAphexBuiltins(app)` after registering any user
26
+ * middleware/overrides (Hono is registration-order-strict).
27
+ */
28
+ export function createAphexApi() {
29
+ const app = new Hono().basePath('/api');
30
+ // Bridge: lift values passed via app.fetch(req, env) onto c.var so
31
+ // handlers can read c.var.aphexCMS / c.var.auth directly.
32
+ app.use('*', async (c, next) => {
33
+ c.set('aphexCMS', c.env.aphexCMS);
34
+ c.set('auth', c.env.auth);
35
+ await next();
36
+ });
37
+ return app;
38
+ }
39
+ /**
40
+ * Mount cms-core's built-in resource routes onto an Aphex API app.
41
+ *
42
+ * Called by `createCMSHook` after `config.api?.(app)` runs, so user-provided
43
+ * middleware (e.g. an email-sending wrap on `/organizations/invitations`)
44
+ * registers ahead of the built-in handler and gets the chance to wrap it.
45
+ */
46
+ export function mountAphexBuiltins(app) {
47
+ // Order matters: more-specific paths (`/documents/query`,
48
+ // `/documents/:id/publish`, `/documents/:id/versions/...`) must be
49
+ // registered before `/documents/:id` so Hono's first-match-wins
50
+ // resolver doesn't capture them under the catch-all `:id` param.
51
+ app.route('/schemas', schemasRouter);
52
+ app.route('/documents', documentsQueryRouter);
53
+ app.route('/documents', documentsPublishRouter);
54
+ app.route('/documents', documentVersionsRouter);
55
+ app.route('/documents', documentsByIdRouter);
56
+ app.route('/documents', documentsRouter);
57
+ // Assets — same precedence rule: specific paths before parametric.
58
+ // `/assets/bulk` and `/assets/references/counts` must register before
59
+ // `/assets/:id` or Hono will capture them as `:id = "bulk"` etc.
60
+ app.route('/assets', assetsBulkRouter);
61
+ app.route('/assets', assetsReferencesRouter);
62
+ app.route('/assets', assetsByIdRouter);
63
+ app.route('/assets', assetsRouter);
64
+ // Organizations — specifics (/switch, /invitations, /members) before /:id.
65
+ app.route('/organizations', organizationsSwitchRouter);
66
+ app.route('/organizations', organizationsInvitationsRouter);
67
+ app.route('/organizations', organizationsMembersRouter);
68
+ app.route('/organizations', organizationsByIdRouter);
69
+ app.route('/organizations', organizationsRouter);
70
+ // Roles — combined router covers /, /:name, no precedence concern.
71
+ app.route('/roles', rolesRouter);
72
+ // User account routes — register specifics first.
73
+ // `/user/cms-preference`, `/user/request-password-reset`,
74
+ // `/user/reset-password` need to win over `/user` PATCH otherwise
75
+ // Hono would try to match them under the wrong handler chain.
76
+ app.route('/user', userPreferencesRouter);
77
+ app.route('/user', userRouter);
78
+ }
79
+ /**
80
+ * Adapter: wrap a SvelteKit-style `RequestHandler` so it can be mounted
81
+ * onto a Hono router.
82
+ *
83
+ * Used for handlers that already exist in SK form (e.g. the built-in
84
+ * GraphQL Yoga app) and don't need to be rewritten just to flow through
85
+ * the Hono catch-all. We synthesize the minimum `event` shape those
86
+ * handlers actually read: `request` + `locals.{aphexCMS,auth}` + `params`
87
+ * + `url`. If a future SK handler reaches for `cookies`, `setHeaders`, or
88
+ * `getClientAddress`, extend the synthesized event accordingly.
89
+ */
90
+ export function toHonoHandler(skHandler) {
91
+ return async (c) => {
92
+ const fakeEvent = {
93
+ request: c.req.raw,
94
+ url: new URL(c.req.url),
95
+ params: c.req.param(),
96
+ locals: {
97
+ aphexCMS: c.var.aphexCMS,
98
+ auth: c.var.auth
99
+ },
100
+ // No-op fallbacks — only used if a wrapped SK handler probes for them.
101
+ setHeaders: () => undefined,
102
+ getClientAddress: () => c.req.header('x-forwarded-for') ?? '127.0.0.1'
103
+ };
104
+ return skHandler(fakeEvent);
105
+ };
106
+ }
107
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/server/api/index.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 assetsBulkRouter: Hono<AphexEnv>;
4
+ //# sourceMappingURL=assets-bulk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-bulk.d.ts","sourceRoot":"","sources":["../../../../../src/lib/server/api/routes/assets-bulk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAkE3C,CAAC"}
@@ -1,35 +1,34 @@
1
- import { json } from '@sveltejs/kit';
2
- import { cmsLogger } from '../utils/logger.js';
3
- import { bulkDeleteAssetsRequest } from '../api/schemas/assets.js';
4
- export const DELETE = async ({ request, locals }) => {
1
+ import { Hono } from 'hono';
2
+ import { zValidator } from '@hono/zod-validator';
3
+ import { cmsLogger } from '../../../utils/logger.js';
4
+ import { bulkDeleteAssetsRequest } from '../../../api/schemas/assets.js';
5
+ export const assetsBulkRouter = new Hono().delete('/bulk', zValidator('json', bulkDeleteAssetsRequest, (result, c) => {
6
+ if (!result.success) {
7
+ return c.json({
8
+ success: false,
9
+ error: 'No asset IDs provided',
10
+ issues: result.error.issues
11
+ }, 400);
12
+ }
13
+ }), async (c) => {
5
14
  try {
6
- const { assetService, databaseAdapter } = locals.aphexCMS;
7
- const auth = locals.auth;
15
+ const { assetService, databaseAdapter } = c.var.aphexCMS;
16
+ const auth = c.var.auth;
8
17
  if (!auth || auth.type === 'partial_session') {
9
- return json({ success: false, error: 'Unauthorized' }, { status: 401 });
10
- }
11
- const rawBody = await request.json();
12
- const parsed = bulkDeleteAssetsRequest.safeParse(rawBody);
13
- if (!parsed.success) {
14
- return json({
15
- success: false,
16
- error: 'No asset IDs provided',
17
- issues: parsed.error.issues
18
- }, { status: 400 });
18
+ return c.json({ success: false, error: 'Unauthorized' }, 401);
19
19
  }
20
- const { ids } = parsed.data;
21
- // Check for references before deleting
20
+ const { ids } = c.req.valid('json');
22
21
  let referencedIds = [];
23
22
  if (databaseAdapter.countDocumentReferencesForAssets) {
24
23
  const counts = await databaseAdapter.countDocumentReferencesForAssets(auth.organizationId, ids);
25
24
  referencedIds = ids.filter((id) => (counts[id] || 0) > 0);
26
25
  }
27
26
  if (referencedIds.length > 0) {
28
- return json({
27
+ return c.json({
29
28
  success: false,
30
29
  error: `Cannot delete ${referencedIds.length} asset${referencedIds.length > 1 ? 's' : ''} because ${referencedIds.length > 1 ? 'they are' : 'it is'} still referenced by documents`,
31
30
  referencedIds
32
- }, { status: 409 });
31
+ }, 409);
33
32
  }
34
33
  const results = { deleted: 0, failed: 0 };
35
34
  for (const id of ids) {
@@ -46,10 +45,11 @@ export const DELETE = async ({ request, locals }) => {
46
45
  results.failed++;
47
46
  }
48
47
  }
49
- return json({ success: true, data: results });
48
+ return c.json({ success: true, data: results });
50
49
  }
51
50
  catch (error) {
52
51
  cmsLogger.error('Bulk delete failed:', error);
53
- return json({ success: false, error: 'Bulk delete failed' }, { status: 500 });
52
+ return c.json({ success: false, error: 'Bulk delete failed' }, 500);
54
53
  }
55
- };
54
+ });
55
+ //# sourceMappingURL=assets-bulk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-bulk.js","sourceRoot":"","sources":["../../../../../src/lib/server/api/routes/assets-bulk.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 assetsByIdRouter: Hono<AphexEnv>;
4
+ //# sourceMappingURL=assets-by-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-by-id.d.ts","sourceRoot":"","sources":["../../../../../src/lib/server/api/routes/assets-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,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CA8HzC,CAAC"}
@@ -0,0 +1,108 @@
1
+ import { Hono } from 'hono';
2
+ import { zValidator } from '@hono/zod-validator';
3
+ import { cmsLogger } from '../../../utils/logger.js';
4
+ import { updateAssetRequest } from '../../../api/schemas/assets.js';
5
+ export const assetsByIdRouter = new Hono()
6
+ .get('/:id', async (c) => {
7
+ try {
8
+ const { assetService } = c.var.aphexCMS;
9
+ const auth = c.var.auth;
10
+ const id = c.req.param('id');
11
+ if (!auth || auth.type === 'partial_session') {
12
+ return c.json({ success: false, error: 'Unauthorized' }, 401);
13
+ }
14
+ if (!id) {
15
+ return c.json({ success: false, error: 'Asset ID is required' }, 400);
16
+ }
17
+ const asset = await assetService.findAssetById(auth.organizationId, id);
18
+ if (!asset) {
19
+ return c.json({ success: false, error: 'Asset not found' }, 404);
20
+ }
21
+ return c.json({ success: true, data: asset });
22
+ }
23
+ catch (error) {
24
+ cmsLogger.error('[Asset API] Error fetching asset:', error);
25
+ return c.json({ success: false, error: 'Failed to fetch asset' }, 500);
26
+ }
27
+ })
28
+ .delete('/:id', async (c) => {
29
+ try {
30
+ const id = c.req.param('id');
31
+ const { assetService, databaseAdapter } = c.var.aphexCMS;
32
+ const auth = c.var.auth;
33
+ if (!auth || auth.type === 'partial_session') {
34
+ return c.json({ success: false, error: 'Unauthorized' }, 401);
35
+ }
36
+ if (!id) {
37
+ return c.json({ success: false, error: 'Asset ID is required' }, 400);
38
+ }
39
+ if (databaseAdapter.findDocumentsReferencingAsset) {
40
+ const refs = await databaseAdapter.findDocumentsReferencingAsset(auth.organizationId, id);
41
+ if (refs.length > 0) {
42
+ return c.json({
43
+ success: false,
44
+ error: `Cannot delete asset — it is referenced by ${refs.length} document${refs.length > 1 ? 's' : ''}`
45
+ }, 409);
46
+ }
47
+ }
48
+ const result = await assetService.deleteAsset(auth.organizationId, id);
49
+ if (!result) {
50
+ return c.json({ success: false, error: 'Asset not found or could not be deleted' }, 404);
51
+ }
52
+ return c.json({ success: true });
53
+ }
54
+ catch (error) {
55
+ cmsLogger.error('Error deleting asset:', error);
56
+ return c.json({ success: false, error: 'Failed to delete asset' }, 500);
57
+ }
58
+ })
59
+ .patch('/:id', zValidator('json', updateAssetRequest, (result, c) => {
60
+ if (!result.success) {
61
+ return c.json({
62
+ success: false,
63
+ error: 'Invalid request body',
64
+ issues: result.error.issues
65
+ }, 400);
66
+ }
67
+ }), async (c) => {
68
+ try {
69
+ const { assetService } = c.var.aphexCMS;
70
+ const auth = c.var.auth;
71
+ const id = c.req.param('id');
72
+ if (!auth || auth.type === 'partial_session') {
73
+ return c.json({ success: false, error: 'Unauthorized' }, 401);
74
+ }
75
+ if (!id) {
76
+ return c.json({ success: false, error: 'Asset ID is required' }, 400);
77
+ }
78
+ const { title, description, alt, creditLine } = c.req.valid('json');
79
+ let updatedAsset;
80
+ if (auth.type === 'session') {
81
+ updatedAsset = await assetService.updateAssetMetadata(auth.organizationId, id, {
82
+ title,
83
+ description,
84
+ alt,
85
+ creditLine,
86
+ updatedBy: auth.user.id
87
+ });
88
+ }
89
+ else {
90
+ updatedAsset = await assetService.updateAssetMetadata(auth.organizationId, id, {
91
+ title,
92
+ description,
93
+ alt,
94
+ creditLine,
95
+ updatedBy: auth.keyId
96
+ });
97
+ }
98
+ if (!updatedAsset) {
99
+ return c.json({ success: false, error: 'Asset not found' }, 404);
100
+ }
101
+ return c.json({ success: true, data: updatedAsset });
102
+ }
103
+ catch (error) {
104
+ cmsLogger.error('Error updating asset:', error);
105
+ return c.json({ success: false, error: 'Failed to update asset' }, 500);
106
+ }
107
+ });
108
+ //# sourceMappingURL=assets-by-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-by-id.js","sourceRoot":"","sources":["../../../../../src/lib/server/api/routes/assets-by-id.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Hono } from 'hono';
2
+ import type { AphexEnv } from '../index.js';
3
+ /**
4
+ * Asset references endpoints. Two distinct paths sharing one router file:
5
+ * - GET /:id/references → docs that reference one asset
6
+ * - POST /references/counts → batch reference counts for many ids
7
+ *
8
+ * Mounted under `/assets`, so the wire paths are
9
+ * `/api/assets/:id/references` and `/api/assets/references/counts`.
10
+ *
11
+ * Order matters in createAphexApi(): mount this BEFORE assetsByIdRouter so
12
+ * `/references/counts` doesn't get captured as `:id = "references"`.
13
+ */
14
+ export declare const assetsReferencesRouter: Hono<AphexEnv>;
15
+ //# sourceMappingURL=assets-references.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-references.d.ts","sourceRoot":"","sources":["../../../../../src/lib/server/api/routes/assets-references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAkFhD,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { Hono } from 'hono';
2
+ import { zValidator } from '@hono/zod-validator';
3
+ import { cmsLogger } from '../../../utils/logger.js';
4
+ import { assetReferenceCountsRequest } from '../../../api/schemas/assets.js';
5
+ /**
6
+ * Asset references endpoints. Two distinct paths sharing one router file:
7
+ * - GET /:id/references → docs that reference one asset
8
+ * - POST /references/counts → batch reference counts for many ids
9
+ *
10
+ * Mounted under `/assets`, so the wire paths are
11
+ * `/api/assets/:id/references` and `/api/assets/references/counts`.
12
+ *
13
+ * Order matters in createAphexApi(): mount this BEFORE assetsByIdRouter so
14
+ * `/references/counts` doesn't get captured as `:id = "references"`.
15
+ */
16
+ export const assetsReferencesRouter = new Hono()
17
+ .get('/:id/references', async (c) => {
18
+ try {
19
+ const { databaseAdapter } = c.var.aphexCMS;
20
+ const auth = c.var.auth;
21
+ if (!auth || auth.type === 'partial_session') {
22
+ return c.json({ success: false, error: 'Unauthorized' }, 401);
23
+ }
24
+ const id = c.req.param('id');
25
+ if (!id) {
26
+ return c.json({ success: false, error: 'Asset ID is required' }, 400);
27
+ }
28
+ if (!databaseAdapter.findDocumentsReferencingAsset) {
29
+ return c.json({ success: true, data: { references: [], total: 0 } });
30
+ }
31
+ const references = await databaseAdapter.findDocumentsReferencingAsset(auth.organizationId, id);
32
+ return c.json({
33
+ success: true,
34
+ data: {
35
+ references,
36
+ total: references.length
37
+ }
38
+ });
39
+ }
40
+ catch (error) {
41
+ cmsLogger.error('Failed to find asset references:', error);
42
+ return c.json({ success: false, error: 'Failed to find asset references' }, 500);
43
+ }
44
+ })
45
+ .post('/references/counts', zValidator('json', assetReferenceCountsRequest, (result, c) => {
46
+ if (!result.success) {
47
+ return c.json({
48
+ success: false,
49
+ error: 'Invalid request body',
50
+ issues: result.error.issues
51
+ }, 400);
52
+ }
53
+ }), async (c) => {
54
+ try {
55
+ const { databaseAdapter } = c.var.aphexCMS;
56
+ const auth = c.var.auth;
57
+ if (!auth || auth.type === 'partial_session') {
58
+ return c.json({ success: false, error: 'Unauthorized' }, 401);
59
+ }
60
+ const { ids } = c.req.valid('json');
61
+ if (ids.length === 0) {
62
+ return c.json({ success: true, data: {} });
63
+ }
64
+ if (!databaseAdapter.countDocumentReferencesForAssets) {
65
+ const counts = {};
66
+ for (const id of ids)
67
+ counts[id] = 0;
68
+ return c.json({ success: true, data: counts });
69
+ }
70
+ const counts = await databaseAdapter.countDocumentReferencesForAssets(auth.organizationId, ids);
71
+ return c.json({ success: true, data: counts });
72
+ }
73
+ catch (error) {
74
+ cmsLogger.error('Failed to count asset references:', error);
75
+ return c.json({ success: false, error: 'Failed to count asset references' }, 500);
76
+ }
77
+ });
78
+ //# sourceMappingURL=assets-references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-references.js","sourceRoot":"","sources":["../../../../../src/lib/server/api/routes/assets-references.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 assetsRouter: Hono<AphexEnv>;
4
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../../../../src/lib/server/api/routes/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,YAAY,EAAE,IAAI,CAAC,QAAQ,CA+IrC,CAAC"}