@aphexcms/cms-core 0.1.11 → 0.1.13

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 (399) hide show
  1. package/LICENSE +21 -0
  2. package/dist/api/assets.d.ts +48 -0
  3. package/dist/api/assets.d.ts.map +1 -0
  4. package/dist/api/assets.js +52 -0
  5. package/dist/api/client.d.ts +37 -0
  6. package/dist/api/client.d.ts.map +1 -0
  7. package/dist/api/client.js +125 -0
  8. package/dist/api/documents.d.ts +57 -0
  9. package/dist/api/documents.d.ts.map +1 -0
  10. package/dist/api/documents.js +85 -0
  11. package/dist/api/index.d.ts +7 -0
  12. package/dist/api/index.d.ts.map +1 -0
  13. package/dist/api/index.js +5 -0
  14. package/dist/api/organizations.d.ts +101 -0
  15. package/dist/api/organizations.d.ts.map +1 -0
  16. package/dist/api/organizations.js +92 -0
  17. package/dist/api/types.d.ts +45 -0
  18. package/dist/api/types.d.ts.map +1 -0
  19. package/dist/api/types.js +1 -0
  20. package/dist/auth/auth-errors.d.ts +7 -0
  21. package/dist/auth/auth-errors.d.ts.map +1 -0
  22. package/dist/auth/auth-errors.js +13 -0
  23. package/dist/auth/auth-hooks.d.ts +6 -0
  24. package/dist/auth/auth-hooks.d.ts.map +1 -0
  25. package/dist/auth/auth-hooks.js +122 -0
  26. package/dist/auth/provider.d.ts +17 -0
  27. package/dist/auth/provider.d.ts.map +1 -0
  28. package/dist/auth/provider.js +1 -0
  29. package/dist/cli/generate-types.js +218 -0
  30. package/dist/cli/index.js +86 -0
  31. package/dist/client/index.d.ts +24 -0
  32. package/dist/client/index.d.ts.map +1 -0
  33. package/{src/lib/client/index.ts → dist/client/index.js} +7 -18
  34. package/{src/lib → dist}/components/AdminApp.svelte +26 -55
  35. package/dist/components/AdminApp.svelte.d.ts +24 -0
  36. package/dist/components/AdminApp.svelte.d.ts.map +1 -0
  37. package/dist/components/admin/AdminLayout.svelte.d.ts +15 -0
  38. package/dist/components/admin/AdminLayout.svelte.d.ts.map +1 -0
  39. package/{src/lib → dist}/components/admin/DocumentEditor.svelte +60 -14
  40. package/dist/components/admin/DocumentEditor.svelte.d.ts +18 -0
  41. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -0
  42. package/dist/components/admin/DocumentTypesList.svelte.d.ts +14 -0
  43. package/dist/components/admin/DocumentTypesList.svelte.d.ts.map +1 -0
  44. package/dist/components/admin/ObjectModal.svelte.d.ts +15 -0
  45. package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -0
  46. package/dist/components/admin/SchemaField.svelte.d.ts +19 -0
  47. package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -0
  48. package/dist/components/admin/fields/ArrayField.svelte.d.ts +12 -0
  49. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -0
  50. package/dist/components/admin/fields/BooleanField.svelte.d.ts +13 -0
  51. package/dist/components/admin/fields/BooleanField.svelte.d.ts.map +1 -0
  52. package/dist/components/admin/fields/ImageField.svelte.d.ts +15 -0
  53. package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -0
  54. package/dist/components/admin/fields/NumberField.svelte.d.ts +14 -0
  55. package/dist/components/admin/fields/NumberField.svelte.d.ts.map +1 -0
  56. package/{src/lib → dist}/components/admin/fields/ReferenceField.svelte +2 -3
  57. package/dist/components/admin/fields/ReferenceField.svelte.d.ts +12 -0
  58. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -0
  59. package/dist/components/admin/fields/SlugField.svelte.d.ts +15 -0
  60. package/dist/components/admin/fields/SlugField.svelte.d.ts.map +1 -0
  61. package/dist/components/admin/fields/StringField.svelte.d.ts +14 -0
  62. package/dist/components/admin/fields/StringField.svelte.d.ts.map +1 -0
  63. package/dist/components/admin/fields/TextareaField.svelte.d.ts +14 -0
  64. package/dist/components/admin/fields/TextareaField.svelte.d.ts.map +1 -0
  65. package/dist/components/fields/index.d.ts +9 -0
  66. package/dist/components/fields/index.d.ts.map +1 -0
  67. package/dist/components/index.d.ts +7 -0
  68. package/dist/components/index.d.ts.map +1 -0
  69. package/{src/lib/components/index.ts → dist/components/index.js} +1 -5
  70. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts +11 -0
  71. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts.map +1 -0
  72. package/dist/components/layout/Sidebar.svelte.d.ts +14 -0
  73. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -0
  74. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts +11 -0
  75. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts.map +1 -0
  76. package/dist/components/layout/sidebar/NavMain.svelte.d.ts +19 -0
  77. package/dist/components/layout/sidebar/NavMain.svelte.d.ts.map +1 -0
  78. package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts +9 -0
  79. package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts.map +1 -0
  80. package/dist/components/layout/sidebar/NavUser.svelte.d.ts +9 -0
  81. package/dist/components/layout/sidebar/NavUser.svelte.d.ts.map +1 -0
  82. package/dist/config.d.ts +3 -0
  83. package/dist/config.d.ts.map +1 -0
  84. package/dist/config.js +15 -0
  85. package/dist/db/adapters/index.d.ts +1 -0
  86. package/dist/db/adapters/index.d.ts.map +1 -0
  87. package/{src/lib/db/adapters/index.ts → dist/db/adapters/index.js} +1 -0
  88. package/dist/db/index.d.ts +2 -0
  89. package/dist/db/index.d.ts.map +1 -0
  90. package/{src/lib/db/index.ts → dist/db/index.js} +1 -2
  91. package/dist/db/interfaces/asset.d.ts +73 -0
  92. package/dist/db/interfaces/asset.d.ts.map +1 -0
  93. package/dist/db/interfaces/asset.js +1 -0
  94. package/dist/db/interfaces/document.d.ts +61 -0
  95. package/dist/db/interfaces/document.d.ts.map +1 -0
  96. package/dist/db/interfaces/document.js +1 -0
  97. package/dist/db/interfaces/index.d.ts +73 -0
  98. package/dist/db/interfaces/index.d.ts.map +1 -0
  99. package/dist/db/interfaces/index.js +1 -0
  100. package/dist/db/interfaces/organization.d.ts +27 -0
  101. package/dist/db/interfaces/organization.d.ts.map +1 -0
  102. package/dist/db/interfaces/organization.js +1 -0
  103. package/dist/db/interfaces/schema.d.ts +21 -0
  104. package/dist/db/interfaces/schema.d.ts.map +1 -0
  105. package/dist/db/interfaces/schema.js +1 -0
  106. package/dist/db/interfaces/user.d.ts +15 -0
  107. package/dist/db/interfaces/user.d.ts.map +1 -0
  108. package/dist/db/interfaces/user.js +1 -0
  109. package/dist/db/utils/reference-resolver.d.ts +18 -0
  110. package/dist/db/utils/reference-resolver.d.ts.map +1 -0
  111. package/dist/db/utils/reference-resolver.js +80 -0
  112. package/dist/define.d.ts +3 -0
  113. package/dist/define.d.ts.map +1 -0
  114. package/dist/define.js +4 -0
  115. package/dist/email/index.d.ts +2 -0
  116. package/dist/email/index.d.ts.map +1 -0
  117. package/{src/lib/email/index.ts → dist/email/index.js} +1 -2
  118. package/dist/email/interfaces/email.d.ts +42 -0
  119. package/dist/email/interfaces/email.d.ts.map +1 -0
  120. package/dist/email/interfaces/email.js +1 -0
  121. package/dist/engine.d.ts +26 -0
  122. package/dist/engine.d.ts.map +1 -0
  123. package/dist/engine.js +66 -0
  124. package/dist/field-validation/rule.d.ts +51 -0
  125. package/dist/field-validation/rule.d.ts.map +1 -0
  126. package/dist/field-validation/rule.js +221 -0
  127. package/dist/field-validation/utils.d.ts +39 -0
  128. package/dist/field-validation/utils.d.ts.map +1 -0
  129. package/dist/field-validation/utils.js +99 -0
  130. package/dist/hooks.d.ts +25 -0
  131. package/dist/hooks.d.ts.map +1 -0
  132. package/dist/hooks.js +164 -0
  133. package/dist/index.d.ts +2 -0
  134. package/dist/index.d.ts.map +1 -0
  135. package/{src/lib/index.ts → dist/index.js} +1 -2
  136. package/dist/is-mobile.svelte.d.ts +5 -0
  137. package/dist/is-mobile.svelte.d.ts.map +1 -0
  138. package/{src/lib/is-mobile.svelte.ts → dist/is-mobile.svelte.js} +3 -5
  139. package/dist/lib/auth/provider.js +1 -0
  140. package/dist/lib/db/index.js +4 -0
  141. package/dist/lib/db/interfaces/asset.js +1 -0
  142. package/dist/lib/db/interfaces/document.js +1 -0
  143. package/dist/lib/db/interfaces/index.js +1 -0
  144. package/dist/lib/db/interfaces/organization.js +1 -0
  145. package/dist/lib/db/interfaces/schema.js +1 -0
  146. package/dist/lib/db/interfaces/user.js +1 -0
  147. package/dist/lib/email/index.js +4 -0
  148. package/dist/lib/email/interfaces/email.js +1 -0
  149. package/dist/lib/field-validation/rule.js +221 -0
  150. package/dist/lib/field-validation/utils.js +99 -0
  151. package/dist/lib/storage/interfaces/index.js +2 -0
  152. package/dist/lib/storage/interfaces/storage.js +1 -0
  153. package/dist/lib/types/asset.js +2 -0
  154. package/dist/lib/types/auth.js +41 -0
  155. package/dist/lib/types/config.js +1 -0
  156. package/dist/lib/types/document.js +1 -0
  157. package/dist/lib/types/filters.js +5 -0
  158. package/dist/lib/types/index.js +9 -0
  159. package/dist/lib/types/organization.js +3 -0
  160. package/dist/lib/types/schemas.js +1 -0
  161. package/dist/lib/types/sidebar.js +1 -0
  162. package/dist/lib/types/user.js +1 -0
  163. package/dist/local-api/auth-helpers.d.ts +65 -0
  164. package/dist/local-api/auth-helpers.d.ts.map +1 -0
  165. package/dist/local-api/auth-helpers.js +102 -0
  166. package/dist/local-api/collection-api.d.ts +138 -0
  167. package/dist/local-api/collection-api.d.ts.map +1 -0
  168. package/dist/local-api/collection-api.js +276 -0
  169. package/dist/local-api/index.d.ts +108 -0
  170. package/dist/local-api/index.d.ts.map +1 -0
  171. package/dist/local-api/index.js +157 -0
  172. package/dist/local-api/permissions.d.ts +45 -0
  173. package/dist/local-api/permissions.d.ts.map +1 -0
  174. package/dist/local-api/permissions.js +117 -0
  175. package/dist/local-api/types.d.ts +65 -0
  176. package/dist/local-api/types.d.ts.map +1 -0
  177. package/dist/local-api/types.js +4 -0
  178. package/dist/routes/assets-by-id.d.ts +5 -0
  179. package/dist/routes/assets-by-id.d.ts.map +1 -0
  180. package/dist/routes/assets-by-id.js +138 -0
  181. package/dist/routes/assets-cdn.d.ts +3 -0
  182. package/dist/routes/assets-cdn.d.ts.map +1 -0
  183. package/dist/routes/assets-cdn.js +155 -0
  184. package/dist/routes/assets.d.ts +4 -0
  185. package/dist/routes/assets.d.ts.map +1 -0
  186. package/dist/routes/assets.js +94 -0
  187. package/dist/routes/documents-by-id.d.ts +5 -0
  188. package/dist/routes/documents-by-id.d.ts.map +1 -0
  189. package/dist/routes/documents-by-id.js +163 -0
  190. package/dist/routes/documents-publish.d.ts +4 -0
  191. package/dist/routes/documents-publish.d.ts.map +1 -0
  192. package/dist/routes/documents-publish.js +136 -0
  193. package/dist/routes/documents-query.d.ts +24 -0
  194. package/dist/routes/documents-query.d.ts.map +1 -0
  195. package/dist/routes/documents-query.js +95 -0
  196. package/dist/routes/documents.d.ts +4 -0
  197. package/dist/routes/documents.d.ts.map +1 -0
  198. package/dist/routes/documents.js +136 -0
  199. package/dist/routes/index.d.ts +8 -0
  200. package/dist/routes/index.d.ts.map +1 -0
  201. package/dist/routes/index.js +12 -0
  202. package/dist/routes/organizations-by-id.d.ts +5 -0
  203. package/dist/routes/organizations-by-id.d.ts.map +1 -0
  204. package/dist/routes/organizations-by-id.js +187 -0
  205. package/dist/routes/organizations-invitations.d.ts +4 -0
  206. package/dist/routes/organizations-invitations.d.ts.map +1 -0
  207. package/dist/routes/organizations-invitations.js +125 -0
  208. package/dist/routes/organizations-members.d.ts +5 -0
  209. package/dist/routes/organizations-members.d.ts.map +1 -0
  210. package/dist/routes/organizations-members.js +206 -0
  211. package/dist/routes/organizations-switch.d.ts +3 -0
  212. package/dist/routes/organizations-switch.d.ts.map +1 -0
  213. package/dist/routes/organizations-switch.js +53 -0
  214. package/dist/routes/organizations.d.ts +4 -0
  215. package/dist/routes/organizations.d.ts.map +1 -0
  216. package/dist/routes/organizations.js +109 -0
  217. package/dist/routes/schemas-by-type.d.ts +3 -0
  218. package/dist/routes/schemas-by-type.d.ts.map +1 -0
  219. package/dist/routes/schemas-by-type.js +25 -0
  220. package/dist/routes/schemas.d.ts +3 -0
  221. package/dist/routes/schemas.d.ts.map +1 -0
  222. package/dist/routes/schemas.js +11 -0
  223. package/dist/routes-exports.d.ts +14 -0
  224. package/dist/routes-exports.d.ts.map +1 -0
  225. package/dist/routes-exports.js +19 -0
  226. package/dist/schema-context.svelte.d.ts +10 -0
  227. package/dist/schema-context.svelte.d.ts.map +1 -0
  228. package/dist/schema-context.svelte.js +18 -0
  229. package/dist/schema-utils/cleanup.d.ts +21 -0
  230. package/dist/schema-utils/cleanup.d.ts.map +1 -0
  231. package/dist/schema-utils/cleanup.js +80 -0
  232. package/dist/schema-utils/index.d.ts +4 -0
  233. package/dist/schema-utils/index.d.ts.map +1 -0
  234. package/dist/schema-utils/index.js +4 -0
  235. package/dist/schema-utils/utils.d.ts +30 -0
  236. package/dist/schema-utils/utils.d.ts.map +1 -0
  237. package/dist/schema-utils/utils.js +37 -0
  238. package/dist/schema-utils/validator.d.ts +6 -0
  239. package/dist/schema-utils/validator.d.ts.map +1 -0
  240. package/dist/schema-utils/validator.js +45 -0
  241. package/dist/server/index.d.ts +17 -0
  242. package/dist/server/index.d.ts.map +1 -0
  243. package/dist/server/index.js +30 -0
  244. package/dist/services/asset-service.d.ts +86 -0
  245. package/dist/services/asset-service.d.ts.map +1 -0
  246. package/dist/services/asset-service.js +187 -0
  247. package/dist/services/index.d.ts +3 -0
  248. package/dist/services/index.d.ts.map +1 -0
  249. package/dist/services/index.js +4 -0
  250. package/dist/storage/adapters/index.d.ts +2 -0
  251. package/dist/storage/adapters/index.d.ts.map +1 -0
  252. package/dist/storage/adapters/index.js +2 -0
  253. package/dist/storage/adapters/local-storage-adapter.d.ts +54 -0
  254. package/dist/storage/adapters/local-storage-adapter.d.ts.map +1 -0
  255. package/dist/storage/adapters/local-storage-adapter.js +187 -0
  256. package/dist/storage/index.d.ts +3 -0
  257. package/dist/storage/index.d.ts.map +1 -0
  258. package/{src/lib/storage/index.ts → dist/storage/index.js} +2 -4
  259. package/dist/storage/interfaces/index.d.ts +2 -0
  260. package/dist/storage/interfaces/index.d.ts.map +1 -0
  261. package/dist/storage/interfaces/index.js +2 -0
  262. package/dist/storage/interfaces/storage.d.ts +91 -0
  263. package/dist/storage/interfaces/storage.d.ts.map +1 -0
  264. package/dist/storage/interfaces/storage.js +1 -0
  265. package/dist/storage/providers/storage.d.ts +43 -0
  266. package/dist/storage/providers/storage.d.ts.map +1 -0
  267. package/dist/storage/providers/storage.js +64 -0
  268. package/dist/types/asset.d.ts +73 -0
  269. package/dist/types/asset.d.ts.map +1 -0
  270. package/dist/types/asset.js +2 -0
  271. package/dist/types/auth.d.ts +50 -0
  272. package/dist/types/auth.d.ts.map +1 -0
  273. package/dist/types/auth.js +41 -0
  274. package/dist/types/config.d.ts +64 -0
  275. package/dist/types/config.d.ts.map +1 -0
  276. package/dist/types/config.js +1 -0
  277. package/dist/types/document.d.ts +35 -0
  278. package/dist/types/document.d.ts.map +1 -0
  279. package/dist/types/document.js +1 -0
  280. package/dist/types/filters.d.ts +173 -0
  281. package/dist/types/filters.d.ts.map +1 -0
  282. package/dist/types/filters.js +5 -0
  283. package/dist/types/index.d.ts +10 -0
  284. package/dist/types/index.d.ts.map +1 -0
  285. package/dist/types/index.js +9 -0
  286. package/dist/types/organization.d.ts +105 -0
  287. package/dist/types/organization.d.ts.map +1 -0
  288. package/dist/types/organization.js +3 -0
  289. package/dist/types/schemas.d.ts +114 -0
  290. package/dist/types/schemas.d.ts.map +1 -0
  291. package/dist/types/schemas.js +1 -0
  292. package/dist/types/sidebar.d.ts +33 -0
  293. package/dist/types/sidebar.d.ts.map +1 -0
  294. package/dist/types/sidebar.js +1 -0
  295. package/dist/types/user.d.ts +14 -0
  296. package/dist/types/user.d.ts.map +1 -0
  297. package/dist/types/user.js +1 -0
  298. package/dist/utils/content-hash.d.ts +22 -0
  299. package/dist/utils/content-hash.d.ts.map +1 -0
  300. package/dist/utils/content-hash.js +67 -0
  301. package/dist/utils/image-url.d.ts +88 -0
  302. package/dist/utils/image-url.d.ts.map +1 -0
  303. package/dist/utils/image-url.js +165 -0
  304. package/dist/utils/index.d.ts +6 -0
  305. package/dist/utils/index.d.ts.map +1 -0
  306. package/dist/utils/index.js +9 -0
  307. package/dist/utils/slug.d.ts +13 -0
  308. package/dist/utils/slug.d.ts.map +1 -0
  309. package/dist/utils/slug.js +30 -0
  310. package/dist/utils.d.ts +13 -0
  311. package/dist/utils.d.ts.map +1 -0
  312. package/dist/utils.js +5 -0
  313. package/package.json +101 -95
  314. package/src/lib/api/assets.ts +0 -75
  315. package/src/lib/api/client.ts +0 -150
  316. package/src/lib/api/documents.ts +0 -102
  317. package/src/lib/api/index.ts +0 -7
  318. package/src/lib/api/organizations.ts +0 -154
  319. package/src/lib/api/types.ts +0 -34
  320. package/src/lib/auth/auth-errors.ts +0 -23
  321. package/src/lib/auth/auth-hooks.ts +0 -132
  322. package/src/lib/auth/provider.ts +0 -25
  323. package/src/lib/config.ts +0 -18
  324. package/src/lib/db/interfaces/asset.ts +0 -61
  325. package/src/lib/db/interfaces/document.ts +0 -53
  326. package/src/lib/db/interfaces/index.ts +0 -98
  327. package/src/lib/db/interfaces/organization.ts +0 -51
  328. package/src/lib/db/interfaces/schema.ts +0 -13
  329. package/src/lib/db/interfaces/user.ts +0 -16
  330. package/src/lib/db/utils/reference-resolver.ts +0 -119
  331. package/src/lib/define.ts +0 -7
  332. package/src/lib/email/interfaces/email.ts +0 -45
  333. package/src/lib/engine.ts +0 -85
  334. package/src/lib/field-validation/rule.ts +0 -287
  335. package/src/lib/field-validation/utils.ts +0 -91
  336. package/src/lib/hooks.ts +0 -142
  337. package/src/lib/routes/assets-by-id.ts +0 -161
  338. package/src/lib/routes/assets-cdn.ts +0 -185
  339. package/src/lib/routes/assets.ts +0 -116
  340. package/src/lib/routes/documents-by-id.ts +0 -188
  341. package/src/lib/routes/documents-publish.ts +0 -211
  342. package/src/lib/routes/documents.ts +0 -172
  343. package/src/lib/routes/index.ts +0 -13
  344. package/src/lib/routes/organizations-by-id.ts +0 -258
  345. package/src/lib/routes/organizations-invitations.ts +0 -183
  346. package/src/lib/routes/organizations-members.ts +0 -301
  347. package/src/lib/routes/organizations-switch.ts +0 -74
  348. package/src/lib/routes/organizations.ts +0 -147
  349. package/src/lib/routes/schemas-by-type.ts +0 -35
  350. package/src/lib/routes/schemas.ts +0 -19
  351. package/src/lib/routes-exports.ts +0 -42
  352. package/src/lib/schema-context.svelte.ts +0 -24
  353. package/src/lib/schema-utils/cleanup.ts +0 -116
  354. package/src/lib/schema-utils/index.ts +0 -4
  355. package/src/lib/schema-utils/utils.ts +0 -47
  356. package/src/lib/schema-utils/validator.ts +0 -58
  357. package/src/lib/server/index.ts +0 -40
  358. package/src/lib/services/asset-service.ts +0 -256
  359. package/src/lib/services/index.ts +0 -6
  360. package/src/lib/storage/adapters/index.ts +0 -2
  361. package/src/lib/storage/adapters/local-storage-adapter.ts +0 -215
  362. package/src/lib/storage/interfaces/index.ts +0 -2
  363. package/src/lib/storage/interfaces/storage.ts +0 -114
  364. package/src/lib/storage/providers/storage.ts +0 -83
  365. package/src/lib/types/asset.ts +0 -81
  366. package/src/lib/types/auth.ts +0 -80
  367. package/src/lib/types/config.ts +0 -45
  368. package/src/lib/types/document.ts +0 -38
  369. package/src/lib/types/index.ts +0 -8
  370. package/src/lib/types/organization.ts +0 -119
  371. package/src/lib/types/schemas.ts +0 -156
  372. package/src/lib/types/sidebar.ts +0 -37
  373. package/src/lib/types/user.ts +0 -17
  374. package/src/lib/utils/content-hash.ts +0 -75
  375. package/src/lib/utils/image-url.ts +0 -204
  376. package/src/lib/utils/index.ts +0 -12
  377. package/src/lib/utils/slug.ts +0 -33
  378. package/src/lib/utils.ts +0 -13
  379. /package/{src/lib → dist}/app.d.ts +0 -0
  380. /package/{src/lib → dist}/auth/MULTI_TENANCY_PLAN.md +0 -0
  381. /package/{src/lib → dist}/components/admin/AdminLayout.svelte +0 -0
  382. /package/{src/lib → dist}/components/admin/DocumentTypesList.svelte +0 -0
  383. /package/{src/lib → dist}/components/admin/ObjectModal.svelte +0 -0
  384. /package/{src/lib → dist}/components/admin/SchemaField.svelte +0 -0
  385. /package/{src/lib → dist}/components/admin/fields/ArrayField.svelte +0 -0
  386. /package/{src/lib → dist}/components/admin/fields/BooleanField.svelte +0 -0
  387. /package/{src/lib → dist}/components/admin/fields/ImageField.svelte +0 -0
  388. /package/{src/lib → dist}/components/admin/fields/NumberField.svelte +0 -0
  389. /package/{src/lib → dist}/components/admin/fields/SlugField.svelte +0 -0
  390. /package/{src/lib → dist}/components/admin/fields/StringField.svelte +0 -0
  391. /package/{src/lib → dist}/components/admin/fields/TextareaField.svelte +0 -0
  392. /package/{src/lib/components/fields/index.ts → dist/components/fields/index.js} +0 -0
  393. /package/{src/lib → dist}/components/layout/OrganizationSwitcher.svelte +0 -0
  394. /package/{src/lib → dist}/components/layout/Sidebar.svelte +0 -0
  395. /package/{src/lib → dist}/components/layout/sidebar/AppSidebar.svelte +0 -0
  396. /package/{src/lib → dist}/components/layout/sidebar/NavMain.svelte +0 -0
  397. /package/{src/lib → dist}/components/layout/sidebar/NavSecondary.svelte +0 -0
  398. /package/{src/lib → dist}/components/layout/sidebar/NavUser.svelte +0 -0
  399. /package/{src/lib → dist}/plugins/README.md +0 -0
@@ -0,0 +1,155 @@
1
+ export const GET = async ({ params, locals, setHeaders, request }) => {
2
+ console.log('[Asset CDN] ========== ROUTE HIT ==========');
3
+ console.log('[Asset CDN] Params:', params);
4
+ try {
5
+ const { assetService, databaseAdapter, storageAdapter, cmsEngine, config } = locals.aphexCMS;
6
+ let auth = locals.auth;
7
+ const { id, filename } = params;
8
+ console.log('[Asset CDN] Request for asset:', id, filename);
9
+ console.log('[Asset CDN] Has auth?', !!auth);
10
+ // If no session auth, check for API key in headers
11
+ if (!auth) {
12
+ const apiKey = request.headers.get('x-api-key');
13
+ console.log('[Asset CDN] API key present?', !!apiKey);
14
+ if (apiKey && config.auth?.provider) {
15
+ try {
16
+ const apiKeyAuth = await config.auth.provider.validateApiKey(request, databaseAdapter);
17
+ if (apiKeyAuth) {
18
+ auth = apiKeyAuth;
19
+ console.log('[Asset CDN] Authenticated via API key, org:', apiKeyAuth.organizationId);
20
+ }
21
+ }
22
+ catch (err) {
23
+ console.warn('[Asset CDN] API key validation failed:', err);
24
+ }
25
+ }
26
+ }
27
+ console.log('[Asset CDN] Auth type:', auth?.type);
28
+ if (!id) {
29
+ return new Response('Asset ID is required', { status: 400 });
30
+ }
31
+ // Try to fetch asset globally first (bypasses RLS for public assets)
32
+ const asset = await assetService.findAssetByIdGlobal(id);
33
+ console.log('[Asset CDN] Asset found globally?', !!asset);
34
+ if (!asset) {
35
+ console.warn('[Asset CDN] Asset not found:', id);
36
+ return new Response('Asset not found', { status: 404 });
37
+ }
38
+ const organizationId = auth?.organizationId;
39
+ console.log('[Asset CDN] Auth object:', JSON.stringify(auth, null, 2));
40
+ console.log('[Asset CDN] Auth organizationId:', organizationId);
41
+ console.log('[Asset CDN] Asset organizationId:', asset.organizationId);
42
+ // Check if this asset is used in a private field
43
+ // The field metadata (schemaType and fieldPath) is stored when the asset is uploaded
44
+ let isPrivate = false;
45
+ const schemaType = asset.metadata?.schemaType;
46
+ const fieldPath = asset.metadata?.fieldPath;
47
+ if (schemaType && fieldPath) {
48
+ // Get the schema definition from IN-MEMORY config (always up-to-date with code changes)
49
+ const schema = cmsEngine.getSchemaTypeByName(schemaType);
50
+ console.log(`[Asset CDN] Schema lookup for ${schemaType}:`, {
51
+ found: !!schema,
52
+ fieldCount: schema?.fields?.length
53
+ });
54
+ if (schema && schema.fields) {
55
+ // Navigate the field path to find the field definition
56
+ const findField = (fields, path) => {
57
+ const parts = path.split('.');
58
+ let current = null;
59
+ for (let i = 0; i < parts.length; i++) {
60
+ const part = parts[i];
61
+ current = fields.find((f) => f.name === part);
62
+ if (!current)
63
+ return null;
64
+ // If not the last part, navigate into nested fields
65
+ if (i < parts.length - 1) {
66
+ if (current.type === 'object' && current.fields) {
67
+ fields = current.fields;
68
+ }
69
+ else {
70
+ return null;
71
+ }
72
+ }
73
+ }
74
+ return current;
75
+ };
76
+ const field = findField(schema.fields, fieldPath);
77
+ console.log(`[Asset CDN] Field lookup for ${fieldPath}:`, {
78
+ found: !!field,
79
+ type: field?.type,
80
+ private: field?.private
81
+ });
82
+ if (field && field.type === 'image') {
83
+ isPrivate = field.private === true;
84
+ console.log(`[Asset CDN] Field check: ${schemaType}.${fieldPath} - private: ${isPrivate}`);
85
+ }
86
+ else {
87
+ console.warn(`[Asset CDN] Could not find field: ${schemaType}.${fieldPath}`);
88
+ }
89
+ }
90
+ }
91
+ else {
92
+ console.log('[Asset CDN] No field metadata - treating as public');
93
+ }
94
+ console.log('[Asset CDN] Asset privacy result:', { isPrivate, schemaType, fieldPath });
95
+ // If asset is private, require auth
96
+ if (isPrivate && !organizationId) {
97
+ console.warn('[Asset CDN] Private asset accessed without auth - DENIED');
98
+ return new Response('Unauthorized - This asset is private', { status: 401 });
99
+ }
100
+ // If asset is private, verify org matches
101
+ if (isPrivate && organizationId && organizationId !== asset.organizationId) {
102
+ console.warn('[Asset CDN] Org mismatch for private asset - FORBIDDEN');
103
+ return new Response('Forbidden', { status: 403 });
104
+ }
105
+ // Log the decision
106
+ if (isPrivate && organizationId) {
107
+ console.log('[Asset CDN] Private asset access ALLOWED - user has auth and org matches');
108
+ }
109
+ else if (!isPrivate) {
110
+ console.log('[Asset CDN] Public asset access ALLOWED');
111
+ }
112
+ console.log('[Asset CDN] Asset found:', {
113
+ id: asset.id,
114
+ path: asset.path,
115
+ mimeType: asset.mimeType,
116
+ storageAdapter: asset.storageAdapter
117
+ });
118
+ // If asset has a direct URL (S3/R2), redirect to it
119
+ if (asset.url && asset.url.startsWith('http')) {
120
+ console.log('[Asset CDN] Redirecting to external URL:', asset.url);
121
+ return new Response(null, {
122
+ status: 302,
123
+ headers: { Location: asset.url }
124
+ });
125
+ }
126
+ // Otherwise, serve from local storage
127
+ if (!storageAdapter?.getObject) {
128
+ console.error('[Asset CDN] Storage adapter does not support getObject');
129
+ return new Response('Storage adapter does not support file serving', { status: 500 });
130
+ }
131
+ console.log('[Asset CDN] Reading file from storage:', asset.path);
132
+ const fileBuffer = await storageAdapter.getObject(asset.path);
133
+ console.log('[Asset CDN] Serving file:', {
134
+ size: fileBuffer.length,
135
+ mimeType: asset.mimeType
136
+ });
137
+ // Set appropriate headers for the asset
138
+ setHeaders({
139
+ 'Content-Type': asset.mimeType || 'application/octet-stream',
140
+ 'Content-Length': fileBuffer.length.toString(),
141
+ 'Cache-Control': 'public, max-age=31536000, immutable', // Cache for 1 year
142
+ 'Content-Disposition': `inline; filename="${encodeURIComponent(asset.originalFilename || asset.filename)}"`,
143
+ ...(asset.mimeType?.startsWith('image/') && {
144
+ 'Accept-Ranges': 'bytes'
145
+ })
146
+ });
147
+ // Convert Buffer to ArrayBuffer for Response
148
+ const arrayBuffer = fileBuffer.buffer.slice(fileBuffer.byteOffset, fileBuffer.byteOffset + fileBuffer.byteLength);
149
+ return new Response(arrayBuffer);
150
+ }
151
+ catch (error) {
152
+ console.error('[Asset CDN] Error serving asset:', error);
153
+ return new Response('Failed to serve asset', { status: 500 });
154
+ }
155
+ };
@@ -0,0 +1,4 @@
1
+ import type { RequestHandler } from '@sveltejs/kit';
2
+ export declare const POST: RequestHandler;
3
+ export declare const GET: RequestHandler;
4
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/lib/routes/assets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,eAAO,MAAM,IAAI,EAAE,cAiElB,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,cA4CjB,CAAC"}
@@ -0,0 +1,94 @@
1
+ // Aphex CMS Asset API Handlers
2
+ import { json } from '@sveltejs/kit';
3
+ export const POST = async ({ request, locals }) => {
4
+ try {
5
+ const { assetService } = locals.aphexCMS;
6
+ const auth = locals.auth;
7
+ if (!auth) {
8
+ return json({ success: false, error: 'Unauthorized' }, { status: 401 });
9
+ }
10
+ const formData = await request.formData();
11
+ const file = formData.get('file');
12
+ if (!file) {
13
+ return json({ success: false, error: 'No file provided' }, { status: 400 });
14
+ }
15
+ // Convert file to buffer
16
+ const arrayBuffer = await file.arrayBuffer();
17
+ const buffer = Buffer.from(arrayBuffer);
18
+ // Get optional metadata from form data
19
+ const title = formData.get('title') || undefined;
20
+ const description = formData.get('description') || undefined;
21
+ const alt = formData.get('alt') || undefined;
22
+ const creditLine = formData.get('creditLine') || undefined;
23
+ // Get field metadata for privacy checking
24
+ const schemaType = formData.get('schemaType') || undefined;
25
+ const fieldPath = formData.get('fieldPath') || undefined;
26
+ // Create asset upload data
27
+ const uploadData = {
28
+ buffer,
29
+ originalFilename: file.name,
30
+ mimeType: file.type,
31
+ size: file.size,
32
+ title,
33
+ description,
34
+ alt,
35
+ creditLine,
36
+ createdBy: auth.type === 'session' ? auth.user.id : undefined,
37
+ metadata: {
38
+ schemaType,
39
+ fieldPath
40
+ }
41
+ };
42
+ // Upload asset using the service
43
+ const asset = await assetService.uploadAsset(auth.organizationId, uploadData);
44
+ return json({
45
+ success: true,
46
+ data: asset
47
+ });
48
+ }
49
+ catch (error) {
50
+ console.error('Asset upload failed:', error);
51
+ return json({
52
+ success: false,
53
+ error: 'Asset upload failed',
54
+ message: error instanceof Error ? error.message : 'Unknown error'
55
+ }, { status: 500 });
56
+ }
57
+ };
58
+ export const GET = async ({ url, locals }) => {
59
+ try {
60
+ const { assetService } = locals.aphexCMS;
61
+ const auth = locals.auth;
62
+ if (!auth) {
63
+ return json({ success: false, error: 'Unauthorized' }, { status: 401 });
64
+ }
65
+ // Parse query parameters
66
+ const assetType = url.searchParams.get('assetType');
67
+ const mimeType = url.searchParams.get('mimeType') || undefined;
68
+ const search = url.searchParams.get('search') || undefined;
69
+ const limitParam = url.searchParams.get('limit');
70
+ const offsetParam = url.searchParams.get('offset');
71
+ const limit = limitParam ? parseInt(limitParam) : 20;
72
+ const offset = offsetParam ? parseInt(offsetParam) : 0;
73
+ const filters = {
74
+ assetType,
75
+ mimeType,
76
+ search,
77
+ limit: isNaN(limit) ? 20 : limit,
78
+ offset: isNaN(offset) ? 0 : offset
79
+ };
80
+ const assets = await assetService.findAssets(auth.organizationId, filters);
81
+ return json({
82
+ success: true,
83
+ data: assets
84
+ });
85
+ }
86
+ catch (error) {
87
+ console.error('Failed to fetch assets:', error);
88
+ return json({
89
+ success: false,
90
+ error: 'Failed to fetch assets',
91
+ message: error instanceof Error ? error.message : 'Unknown error'
92
+ }, { status: 500 });
93
+ }
94
+ };
@@ -0,0 +1,5 @@
1
+ import type { RequestHandler } from '@sveltejs/kit';
2
+ export declare const GET: RequestHandler;
3
+ export declare const PUT: RequestHandler;
4
+ export declare const DELETE: RequestHandler;
5
+ //# sourceMappingURL=documents-by-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents-by-id.d.ts","sourceRoot":"","sources":["../../src/lib/routes/documents-by-id.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKpD,eAAO,MAAM,GAAG,EAAE,cAuEjB,CAAC;AAGF,eAAO,MAAM,GAAG,EAAE,cAqEjB,CAAC;AAGF,eAAO,MAAM,MAAM,EAAE,cA+DpB,CAAC"}
@@ -0,0 +1,163 @@
1
+ // Aphex CMS Document by ID API Handlers
2
+ import { json } from '@sveltejs/kit';
3
+ import { authToContext } from '../local-api/auth-helpers.js';
4
+ import { PermissionError } from '../local-api/permissions.js';
5
+ // GET /api/documents/[id] - Get document by ID
6
+ export const GET = async ({ params, url, locals }) => {
7
+ try {
8
+ const { localAPI, databaseAdapter } = locals.aphexCMS;
9
+ const context = authToContext(locals.auth);
10
+ const { id } = params;
11
+ if (!id) {
12
+ return json({ success: false, error: 'Document ID is required' }, { status: 400 });
13
+ }
14
+ // Parse query params
15
+ const depthParam = url.searchParams.get('depth');
16
+ const depth = depthParam ? Math.max(0, Math.min(parseInt(depthParam), 5)) : 0;
17
+ const perspective = url.searchParams.get('perspective') || 'draft';
18
+ // First, fetch document to get its type (need this for collection-specific API)
19
+ const rawDoc = await databaseAdapter.findByDocId(context.organizationId, id, 0);
20
+ if (!rawDoc) {
21
+ return json({ success: false, error: 'Document not found' }, { status: 404 });
22
+ }
23
+ // Get collection API (TypeScript-safe)
24
+ const collection = localAPI.collections[rawDoc.type];
25
+ if (!collection) {
26
+ return json({
27
+ success: false,
28
+ error: 'Invalid document type',
29
+ message: `Collection '${rawDoc.type}' not found`
30
+ }, { status: 400 });
31
+ }
32
+ // Now use LocalAPI for permission-checked retrieval
33
+ const document = await collection.findByID(context, id, {
34
+ depth,
35
+ perspective
36
+ });
37
+ if (!document) {
38
+ return json({ success: false, error: 'Document not found' }, { status: 404 });
39
+ }
40
+ return json({
41
+ success: true,
42
+ data: document
43
+ });
44
+ }
45
+ catch (error) {
46
+ console.error('Failed to fetch document:', error);
47
+ if (error instanceof PermissionError) {
48
+ return json({
49
+ success: false,
50
+ error: 'Forbidden',
51
+ message: error.message
52
+ }, { status: 403 });
53
+ }
54
+ return json({
55
+ success: false,
56
+ error: 'Failed to fetch document',
57
+ message: error instanceof Error ? error.message : 'Unknown error'
58
+ }, { status: 500 });
59
+ }
60
+ };
61
+ // PUT /api/documents/[id] - Update document
62
+ export const PUT = async ({ params, request, locals }) => {
63
+ try {
64
+ const { localAPI, databaseAdapter } = locals.aphexCMS;
65
+ const context = authToContext(locals.auth);
66
+ const { id } = params;
67
+ const body = await request.json();
68
+ if (!id) {
69
+ return json({ success: false, error: 'Document ID is required' }, { status: 400 });
70
+ }
71
+ const documentData = body.draftData || body.data;
72
+ const shouldPublish = body.publish || false;
73
+ // Fetch document to get its type
74
+ const rawDoc = await databaseAdapter.findByDocId(context.organizationId, id, 0);
75
+ if (!rawDoc) {
76
+ return json({ success: false, error: 'Document not found' }, { status: 404 });
77
+ }
78
+ // Get collection API (TypeScript-safe)
79
+ const collection = localAPI.collections[rawDoc.type];
80
+ if (!collection) {
81
+ return json({
82
+ success: false,
83
+ error: 'Invalid document type',
84
+ message: `Collection '${rawDoc.type}' not found`
85
+ }, { status: 400 });
86
+ }
87
+ // Update via LocalAPI (permission checks happen inside)
88
+ const updatedDocument = await collection.update(context, id, documentData, {
89
+ publish: shouldPublish
90
+ });
91
+ if (!updatedDocument) {
92
+ return json({ success: false, error: 'Document not found' }, { status: 404 });
93
+ }
94
+ return json({
95
+ success: true,
96
+ data: updatedDocument
97
+ });
98
+ }
99
+ catch (error) {
100
+ console.error('Failed to update document:', error);
101
+ if (error instanceof PermissionError) {
102
+ return json({
103
+ success: false,
104
+ error: 'Forbidden',
105
+ message: error.message
106
+ }, { status: 403 });
107
+ }
108
+ return json({
109
+ success: false,
110
+ error: 'Failed to update document',
111
+ message: error instanceof Error ? error.message : 'Unknown error'
112
+ }, { status: 500 });
113
+ }
114
+ };
115
+ // DELETE /api/documents/[id] - Delete document
116
+ export const DELETE = async ({ params, locals }) => {
117
+ try {
118
+ const { localAPI, databaseAdapter } = locals.aphexCMS;
119
+ const context = authToContext(locals.auth);
120
+ const { id } = params;
121
+ if (!id) {
122
+ return json({ success: false, error: 'Document ID is required' }, { status: 400 });
123
+ }
124
+ // Fetch document to get its type
125
+ const rawDoc = await databaseAdapter.findByDocId(context.organizationId, id, 0);
126
+ if (!rawDoc) {
127
+ return json({ success: false, error: 'Document not found' }, { status: 404 });
128
+ }
129
+ // Get collection API (TypeScript-safe)
130
+ const collection = localAPI.collections[rawDoc.type];
131
+ if (!collection) {
132
+ return json({
133
+ success: false,
134
+ error: 'Invalid document type',
135
+ message: `Collection '${rawDoc.type}' not found`
136
+ }, { status: 400 });
137
+ }
138
+ // Delete via LocalAPI (permission checks happen inside)
139
+ const success = await collection.delete(context, id);
140
+ if (!success) {
141
+ return json({ success: false, error: 'Document not found' }, { status: 404 });
142
+ }
143
+ return json({
144
+ success: true,
145
+ message: 'Document deleted successfully'
146
+ });
147
+ }
148
+ catch (error) {
149
+ console.error('Failed to delete document:', error);
150
+ if (error instanceof PermissionError) {
151
+ return json({
152
+ success: false,
153
+ error: 'Forbidden',
154
+ message: error.message
155
+ }, { status: 403 });
156
+ }
157
+ return json({
158
+ success: false,
159
+ error: 'Failed to delete document',
160
+ message: error instanceof Error ? error.message : 'Unknown error'
161
+ }, { status: 500 });
162
+ }
163
+ };
@@ -0,0 +1,4 @@
1
+ import type { RequestHandler } from '@sveltejs/kit';
2
+ export declare const POST: RequestHandler;
3
+ export declare const DELETE: RequestHandler;
4
+ //# sourceMappingURL=documents-publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents-publish.d.ts","sourceRoot":"","sources":["../../src/lib/routes/documents-publish.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKpD,eAAO,MAAM,IAAI,EAAE,cAiGlB,CAAC;AAGF,eAAO,MAAM,MAAM,EAAE,cAqFpB,CAAC"}
@@ -0,0 +1,136 @@
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
+ // POST /api/documents/[id]/publish - Publish document
6
+ export const POST = async ({ params, locals }) => {
7
+ try {
8
+ const { localAPI, databaseAdapter } = locals.aphexCMS;
9
+ const context = authToContext(locals.auth);
10
+ const { id } = params;
11
+ if (!id) {
12
+ return json({
13
+ success: false,
14
+ error: 'Missing document ID',
15
+ message: 'Document ID is required'
16
+ }, { status: 400 });
17
+ }
18
+ // Fetch document to get its type
19
+ const rawDoc = await databaseAdapter.findByDocId(context.organizationId, id, 0);
20
+ if (!rawDoc) {
21
+ return json({
22
+ success: false,
23
+ error: 'Document not found',
24
+ message: 'Document may not exist'
25
+ }, { status: 404 });
26
+ }
27
+ // Get collection API (TypeScript-safe)
28
+ const collection = localAPI.collections[rawDoc.type];
29
+ if (!collection) {
30
+ return json({
31
+ success: false,
32
+ error: 'Invalid document type',
33
+ message: `Collection '${rawDoc.type}' not found`
34
+ }, { status: 400 });
35
+ }
36
+ // Publish via LocalAPI (permission checks and validation happen inside)
37
+ const publishedDocument = await collection.publish(context, id);
38
+ if (!publishedDocument) {
39
+ return json({
40
+ success: false,
41
+ error: 'Document not found or cannot be published',
42
+ message: 'Document may not have draft content to publish'
43
+ }, { status: 404 });
44
+ }
45
+ return json({
46
+ success: true,
47
+ data: publishedDocument,
48
+ message: 'Document published successfully'
49
+ });
50
+ }
51
+ catch (error) {
52
+ console.error('Failed to publish document:', error);
53
+ if (error instanceof PermissionError) {
54
+ return json({
55
+ success: false,
56
+ error: 'Forbidden',
57
+ message: error.message
58
+ }, { status: 403 });
59
+ }
60
+ // Validation errors from LocalAPI are regular errors with specific messages
61
+ if (error instanceof Error && error.message.includes('validation errors')) {
62
+ return json({
63
+ success: false,
64
+ error: 'Cannot publish: validation errors',
65
+ message: error.message
66
+ }, { status: 400 });
67
+ }
68
+ return json({
69
+ success: false,
70
+ error: 'Failed to publish document',
71
+ message: error instanceof Error ? error.message : 'Unknown error'
72
+ }, { status: 500 });
73
+ }
74
+ };
75
+ // DELETE /api/documents/[id]/publish - Unpublish document
76
+ export const DELETE = async ({ params, locals }) => {
77
+ try {
78
+ const { localAPI, databaseAdapter } = locals.aphexCMS;
79
+ const context = authToContext(locals.auth);
80
+ const { id } = params;
81
+ if (!id) {
82
+ return json({
83
+ success: false,
84
+ error: 'Missing document ID',
85
+ message: 'Document ID is required'
86
+ }, { status: 400 });
87
+ }
88
+ // Fetch document to get its type
89
+ const rawDoc = await databaseAdapter.findByDocId(context.organizationId, id, 0);
90
+ if (!rawDoc) {
91
+ return json({
92
+ success: false,
93
+ error: 'Document not found',
94
+ message: `No document found with ID: ${id}`
95
+ }, { status: 404 });
96
+ }
97
+ // Get collection API (TypeScript-safe)
98
+ const collection = localAPI.collections[rawDoc.type];
99
+ if (!collection) {
100
+ return json({
101
+ success: false,
102
+ error: 'Invalid document type',
103
+ message: `Collection '${rawDoc.type}' not found`
104
+ }, { status: 400 });
105
+ }
106
+ // Unpublish via LocalAPI (permission checks happen inside)
107
+ const unpublishedDocument = await collection.unpublish(context, id);
108
+ if (!unpublishedDocument) {
109
+ return json({
110
+ success: false,
111
+ error: 'Document not found',
112
+ message: `No document found with ID: ${id}`
113
+ }, { status: 404 });
114
+ }
115
+ return json({
116
+ success: true,
117
+ data: unpublishedDocument,
118
+ message: 'Document unpublished successfully'
119
+ });
120
+ }
121
+ catch (error) {
122
+ console.error('Failed to unpublish document:', error);
123
+ if (error instanceof PermissionError) {
124
+ return json({
125
+ success: false,
126
+ error: 'Forbidden',
127
+ message: error.message
128
+ }, { status: 403 });
129
+ }
130
+ return json({
131
+ success: false,
132
+ error: 'Failed to unpublish document',
133
+ message: error instanceof Error ? error.message : 'Unknown error'
134
+ }, { status: 500 });
135
+ }
136
+ };
@@ -0,0 +1,24 @@
1
+ import type { RequestHandler } from '@sveltejs/kit';
2
+ /**
3
+ * POST /api/documents/query - Advanced document querying with complex filters
4
+ *
5
+ * Accepts LocalAPI FindOptions in request body for full filtering power
6
+ *
7
+ * @example
8
+ * POST /api/documents/query
9
+ * {
10
+ * "type": "page",
11
+ * "where": {
12
+ * "status": { "equals": "published" },
13
+ * "hero.heading": { "contains": "Welcome" },
14
+ * "publishedAt": { "gte": "2024-01-01" }
15
+ * },
16
+ * "limit": 20,
17
+ * "page": 1,
18
+ * "sort": ["-publishedAt", "title"],
19
+ * "depth": 1,
20
+ * "perspective": "published"
21
+ * }
22
+ */
23
+ export declare const POST: RequestHandler;
24
+ //# sourceMappingURL=documents-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents-query.d.ts","sourceRoot":"","sources":["../../src/lib/routes/documents-query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AASpD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,IAAI,EAAE,cAqFlB,CAAC"}