@aphexcms/cms-core 0.1.8 → 0.1.10

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 (351) hide show
  1. package/dist/api/assets.d.ts +48 -0
  2. package/dist/api/assets.d.ts.map +1 -0
  3. package/dist/api/assets.js +52 -0
  4. package/dist/api/client.d.ts +37 -0
  5. package/dist/api/client.d.ts.map +1 -0
  6. package/dist/api/client.js +125 -0
  7. package/dist/api/documents.d.ts +56 -0
  8. package/dist/api/documents.d.ts.map +1 -0
  9. package/dist/api/documents.js +77 -0
  10. package/dist/api/index.d.ts +7 -0
  11. package/dist/api/index.d.ts.map +1 -0
  12. package/dist/api/index.js +5 -0
  13. package/dist/api/organizations.d.ts +101 -0
  14. package/dist/api/organizations.d.ts.map +1 -0
  15. package/dist/api/organizations.js +92 -0
  16. package/dist/api/types.d.ts +23 -0
  17. package/dist/api/types.d.ts.map +1 -0
  18. package/dist/api/types.js +1 -0
  19. package/dist/auth/auth-errors.d.ts +7 -0
  20. package/dist/auth/auth-errors.d.ts.map +1 -0
  21. package/dist/auth/auth-errors.js +13 -0
  22. package/dist/auth/auth-hooks.d.ts +6 -0
  23. package/dist/auth/auth-hooks.d.ts.map +1 -0
  24. package/dist/auth/auth-hooks.js +108 -0
  25. package/dist/auth/provider.d.ts +17 -0
  26. package/dist/auth/provider.d.ts.map +1 -0
  27. package/dist/auth/provider.js +1 -0
  28. package/dist/client/index.d.ts +24 -0
  29. package/dist/client/index.d.ts.map +1 -0
  30. package/{src/lib/client/index.ts → dist/client/index.js} +7 -18
  31. package/dist/components/AdminApp.svelte.d.ts +24 -0
  32. package/dist/components/AdminApp.svelte.d.ts.map +1 -0
  33. package/dist/components/admin/AdminLayout.svelte.d.ts +15 -0
  34. package/dist/components/admin/AdminLayout.svelte.d.ts.map +1 -0
  35. package/dist/components/admin/DocumentEditor.svelte.d.ts +18 -0
  36. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -0
  37. package/dist/components/admin/DocumentTypesList.svelte.d.ts +14 -0
  38. package/dist/components/admin/DocumentTypesList.svelte.d.ts.map +1 -0
  39. package/dist/components/admin/ObjectModal.svelte.d.ts +15 -0
  40. package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -0
  41. package/dist/components/admin/SchemaField.svelte.d.ts +19 -0
  42. package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -0
  43. package/dist/components/admin/fields/ArrayField.svelte.d.ts +12 -0
  44. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -0
  45. package/dist/components/admin/fields/BooleanField.svelte.d.ts +13 -0
  46. package/dist/components/admin/fields/BooleanField.svelte.d.ts.map +1 -0
  47. package/dist/components/admin/fields/ImageField.svelte.d.ts +15 -0
  48. package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -0
  49. package/dist/components/admin/fields/NumberField.svelte.d.ts +14 -0
  50. package/dist/components/admin/fields/NumberField.svelte.d.ts.map +1 -0
  51. package/dist/components/admin/fields/ReferenceField.svelte.d.ts +12 -0
  52. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -0
  53. package/dist/components/admin/fields/SlugField.svelte.d.ts +15 -0
  54. package/dist/components/admin/fields/SlugField.svelte.d.ts.map +1 -0
  55. package/dist/components/admin/fields/StringField.svelte.d.ts +14 -0
  56. package/dist/components/admin/fields/StringField.svelte.d.ts.map +1 -0
  57. package/dist/components/admin/fields/TextareaField.svelte.d.ts +14 -0
  58. package/dist/components/admin/fields/TextareaField.svelte.d.ts.map +1 -0
  59. package/dist/components/fields/index.d.ts +9 -0
  60. package/dist/components/fields/index.d.ts.map +1 -0
  61. package/dist/components/index.d.ts +7 -0
  62. package/dist/components/index.d.ts.map +1 -0
  63. package/{src/lib/components/index.ts → dist/components/index.js} +1 -5
  64. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts +11 -0
  65. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts.map +1 -0
  66. package/dist/components/layout/Sidebar.svelte.d.ts +14 -0
  67. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -0
  68. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts +4 -0
  69. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts.map +1 -0
  70. package/dist/components/layout/sidebar/NavMain.svelte.d.ts +19 -0
  71. package/dist/components/layout/sidebar/NavMain.svelte.d.ts.map +1 -0
  72. package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts +9 -0
  73. package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts.map +1 -0
  74. package/dist/components/layout/sidebar/NavUser.svelte.d.ts +9 -0
  75. package/dist/components/layout/sidebar/NavUser.svelte.d.ts.map +1 -0
  76. package/dist/config.d.ts +3 -0
  77. package/dist/config.d.ts.map +1 -0
  78. package/dist/config.js +15 -0
  79. package/dist/db/adapters/index.d.ts +1 -0
  80. package/dist/db/adapters/index.d.ts.map +1 -0
  81. package/{src/lib/db/adapters/index.ts → dist/db/adapters/index.js} +1 -0
  82. package/dist/db/index.d.ts +2 -0
  83. package/dist/db/index.d.ts.map +1 -0
  84. package/{src/lib/db/index.ts → dist/db/index.js} +1 -2
  85. package/dist/db/interfaces/asset.d.ts +51 -0
  86. package/dist/db/interfaces/asset.d.ts.map +1 -0
  87. package/dist/db/interfaces/asset.js +1 -0
  88. package/dist/db/interfaces/document.d.ts +36 -0
  89. package/dist/db/interfaces/document.d.ts.map +1 -0
  90. package/dist/db/interfaces/document.js +1 -0
  91. package/dist/db/interfaces/index.d.ts +73 -0
  92. package/dist/db/interfaces/index.d.ts.map +1 -0
  93. package/dist/db/interfaces/index.js +1 -0
  94. package/dist/db/interfaces/organization.d.ts +27 -0
  95. package/dist/db/interfaces/organization.d.ts.map +1 -0
  96. package/dist/db/interfaces/organization.js +1 -0
  97. package/dist/db/interfaces/schema.d.ts +21 -0
  98. package/dist/db/interfaces/schema.d.ts.map +1 -0
  99. package/dist/db/interfaces/schema.js +1 -0
  100. package/dist/db/interfaces/user.d.ts +15 -0
  101. package/dist/db/interfaces/user.d.ts.map +1 -0
  102. package/dist/db/interfaces/user.js +1 -0
  103. package/dist/db/utils/reference-resolver.d.ts +18 -0
  104. package/dist/db/utils/reference-resolver.d.ts.map +1 -0
  105. package/dist/db/utils/reference-resolver.js +80 -0
  106. package/dist/define.d.ts +3 -0
  107. package/dist/define.d.ts.map +1 -0
  108. package/dist/define.js +4 -0
  109. package/dist/email/index.d.ts +2 -0
  110. package/dist/email/index.d.ts.map +1 -0
  111. package/{src/lib/email/index.ts → dist/email/index.js} +1 -2
  112. package/dist/email/interfaces/email.d.ts +42 -0
  113. package/dist/email/interfaces/email.d.ts.map +1 -0
  114. package/dist/email/interfaces/email.js +1 -0
  115. package/dist/engine.d.ts +26 -0
  116. package/dist/engine.d.ts.map +1 -0
  117. package/dist/engine.js +66 -0
  118. package/dist/field-validation/rule.d.ts +51 -0
  119. package/dist/field-validation/rule.d.ts.map +1 -0
  120. package/dist/field-validation/rule.js +221 -0
  121. package/dist/field-validation/utils.d.ts +21 -0
  122. package/dist/field-validation/utils.d.ts.map +1 -0
  123. package/dist/field-validation/utils.js +66 -0
  124. package/dist/hooks.d.ts +23 -0
  125. package/dist/hooks.d.ts.map +1 -0
  126. package/dist/hooks.js +96 -0
  127. package/dist/index.d.ts +2 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/{src/lib/index.ts → dist/index.js} +1 -2
  130. package/dist/is-mobile.svelte.d.ts +5 -0
  131. package/dist/is-mobile.svelte.d.ts.map +1 -0
  132. package/{src/lib/is-mobile.svelte.ts → dist/is-mobile.svelte.js} +3 -5
  133. package/dist/routes/assets-by-id.d.ts +5 -0
  134. package/dist/routes/assets-by-id.d.ts.map +1 -0
  135. package/dist/routes/assets-by-id.js +138 -0
  136. package/dist/routes/assets-cdn.d.ts +3 -0
  137. package/dist/routes/assets-cdn.d.ts.map +1 -0
  138. package/dist/routes/assets-cdn.js +155 -0
  139. package/dist/routes/assets.d.ts +4 -0
  140. package/dist/routes/assets.d.ts.map +1 -0
  141. package/dist/routes/assets.js +94 -0
  142. package/dist/routes/documents-by-id.d.ts +5 -0
  143. package/dist/routes/documents-by-id.d.ts.map +1 -0
  144. package/dist/routes/documents-by-id.js +142 -0
  145. package/dist/routes/documents-publish.d.ts +4 -0
  146. package/dist/routes/documents-publish.d.ts.map +1 -0
  147. package/dist/routes/documents-publish.js +151 -0
  148. package/dist/routes/documents.d.ts +4 -0
  149. package/dist/routes/documents.d.ts.map +1 -0
  150. package/dist/routes/documents.js +131 -0
  151. package/dist/routes/index.d.ts +6 -0
  152. package/dist/routes/index.d.ts.map +1 -0
  153. package/dist/routes/index.js +10 -0
  154. package/dist/routes/organizations-by-id.d.ts +5 -0
  155. package/dist/routes/organizations-by-id.d.ts.map +1 -0
  156. package/dist/routes/organizations-by-id.js +187 -0
  157. package/dist/routes/organizations-invitations.d.ts +4 -0
  158. package/dist/routes/organizations-invitations.d.ts.map +1 -0
  159. package/dist/routes/organizations-invitations.js +125 -0
  160. package/dist/routes/organizations-members.d.ts +5 -0
  161. package/dist/routes/organizations-members.d.ts.map +1 -0
  162. package/dist/routes/organizations-members.js +206 -0
  163. package/dist/routes/organizations-switch.d.ts +3 -0
  164. package/dist/routes/organizations-switch.d.ts.map +1 -0
  165. package/dist/routes/organizations-switch.js +53 -0
  166. package/dist/routes/organizations.d.ts +4 -0
  167. package/dist/routes/organizations.d.ts.map +1 -0
  168. package/dist/routes/organizations.js +109 -0
  169. package/dist/routes/schemas-by-type.d.ts +3 -0
  170. package/dist/routes/schemas-by-type.d.ts.map +1 -0
  171. package/dist/routes/schemas-by-type.js +25 -0
  172. package/dist/routes/schemas.d.ts +3 -0
  173. package/dist/routes/schemas.d.ts.map +1 -0
  174. package/dist/routes/schemas.js +11 -0
  175. package/dist/routes-exports.d.ts +14 -0
  176. package/dist/routes-exports.d.ts.map +1 -0
  177. package/dist/routes-exports.js +19 -0
  178. package/dist/schema-context.svelte.d.ts +10 -0
  179. package/dist/schema-context.svelte.d.ts.map +1 -0
  180. package/dist/schema-context.svelte.js +18 -0
  181. package/dist/schema-utils/cleanup.d.ts +21 -0
  182. package/dist/schema-utils/cleanup.d.ts.map +1 -0
  183. package/dist/schema-utils/cleanup.js +80 -0
  184. package/dist/schema-utils/index.d.ts +4 -0
  185. package/dist/schema-utils/index.d.ts.map +1 -0
  186. package/dist/schema-utils/index.js +4 -0
  187. package/dist/schema-utils/utils.d.ts +30 -0
  188. package/dist/schema-utils/utils.d.ts.map +1 -0
  189. package/dist/schema-utils/utils.js +37 -0
  190. package/dist/schema-utils/validator.d.ts +6 -0
  191. package/dist/schema-utils/validator.d.ts.map +1 -0
  192. package/dist/schema-utils/validator.js +45 -0
  193. package/dist/server/index.d.ts +16 -0
  194. package/dist/server/index.d.ts.map +1 -0
  195. package/dist/server/index.js +28 -0
  196. package/dist/services/asset-service.d.ts +86 -0
  197. package/dist/services/asset-service.d.ts.map +1 -0
  198. package/dist/services/asset-service.js +187 -0
  199. package/dist/services/index.d.ts +3 -0
  200. package/dist/services/index.d.ts.map +1 -0
  201. package/dist/services/index.js +4 -0
  202. package/dist/storage/adapters/index.d.ts +2 -0
  203. package/dist/storage/adapters/index.d.ts.map +1 -0
  204. package/dist/storage/adapters/index.js +2 -0
  205. package/dist/storage/adapters/local-storage-adapter.d.ts +54 -0
  206. package/dist/storage/adapters/local-storage-adapter.d.ts.map +1 -0
  207. package/dist/storage/adapters/local-storage-adapter.js +187 -0
  208. package/dist/storage/index.d.ts +3 -0
  209. package/dist/storage/index.d.ts.map +1 -0
  210. package/{src/lib/storage/index.ts → dist/storage/index.js} +2 -4
  211. package/dist/storage/interfaces/index.d.ts +2 -0
  212. package/dist/storage/interfaces/index.d.ts.map +1 -0
  213. package/dist/storage/interfaces/index.js +2 -0
  214. package/dist/storage/interfaces/storage.d.ts +91 -0
  215. package/dist/storage/interfaces/storage.d.ts.map +1 -0
  216. package/dist/storage/interfaces/storage.js +1 -0
  217. package/dist/storage/providers/storage.d.ts +43 -0
  218. package/dist/storage/providers/storage.d.ts.map +1 -0
  219. package/dist/storage/providers/storage.js +64 -0
  220. package/dist/types/asset.d.ts +73 -0
  221. package/dist/types/asset.d.ts.map +1 -0
  222. package/dist/types/asset.js +2 -0
  223. package/dist/types/auth.d.ts +50 -0
  224. package/dist/types/auth.d.ts.map +1 -0
  225. package/dist/types/auth.js +41 -0
  226. package/dist/types/config.d.ts +47 -0
  227. package/dist/types/config.d.ts.map +1 -0
  228. package/dist/types/config.js +1 -0
  229. package/dist/types/document.d.ts +34 -0
  230. package/dist/types/document.d.ts.map +1 -0
  231. package/dist/types/document.js +1 -0
  232. package/dist/types/index.d.ts +9 -0
  233. package/dist/types/index.d.ts.map +1 -0
  234. package/dist/types/index.js +8 -0
  235. package/dist/types/organization.d.ts +105 -0
  236. package/dist/types/organization.d.ts.map +1 -0
  237. package/dist/types/organization.js +3 -0
  238. package/dist/types/schemas.d.ts +114 -0
  239. package/dist/types/schemas.d.ts.map +1 -0
  240. package/dist/types/schemas.js +1 -0
  241. package/dist/types/sidebar.d.ts +33 -0
  242. package/dist/types/sidebar.d.ts.map +1 -0
  243. package/dist/types/sidebar.js +1 -0
  244. package/dist/types/user.d.ts +14 -0
  245. package/dist/types/user.d.ts.map +1 -0
  246. package/dist/types/user.js +1 -0
  247. package/dist/utils/content-hash.d.ts +22 -0
  248. package/dist/utils/content-hash.d.ts.map +1 -0
  249. package/dist/utils/content-hash.js +67 -0
  250. package/dist/utils/image-url.d.ts +88 -0
  251. package/dist/utils/image-url.d.ts.map +1 -0
  252. package/dist/utils/image-url.js +165 -0
  253. package/dist/utils/index.d.ts +6 -0
  254. package/dist/utils/index.d.ts.map +1 -0
  255. package/dist/utils/index.js +9 -0
  256. package/dist/utils/slug.d.ts +13 -0
  257. package/dist/utils/slug.d.ts.map +1 -0
  258. package/dist/utils/slug.js +30 -0
  259. package/dist/utils.d.ts +13 -0
  260. package/dist/utils.d.ts.map +1 -0
  261. package/dist/utils.js +5 -0
  262. package/package.json +2 -2
  263. package/src/lib/api/assets.ts +0 -75
  264. package/src/lib/api/client.ts +0 -150
  265. package/src/lib/api/documents.ts +0 -102
  266. package/src/lib/api/index.ts +0 -7
  267. package/src/lib/api/organizations.ts +0 -154
  268. package/src/lib/api/types.ts +0 -34
  269. package/src/lib/auth/auth-errors.ts +0 -23
  270. package/src/lib/auth/auth-hooks.ts +0 -132
  271. package/src/lib/auth/provider.ts +0 -25
  272. package/src/lib/config.ts +0 -18
  273. package/src/lib/db/interfaces/asset.ts +0 -61
  274. package/src/lib/db/interfaces/document.ts +0 -53
  275. package/src/lib/db/interfaces/index.ts +0 -98
  276. package/src/lib/db/interfaces/organization.ts +0 -51
  277. package/src/lib/db/interfaces/schema.ts +0 -13
  278. package/src/lib/db/interfaces/user.ts +0 -16
  279. package/src/lib/db/utils/reference-resolver.ts +0 -119
  280. package/src/lib/define.ts +0 -7
  281. package/src/lib/email/interfaces/email.ts +0 -45
  282. package/src/lib/engine.ts +0 -85
  283. package/src/lib/field-validation/rule.ts +0 -287
  284. package/src/lib/field-validation/utils.ts +0 -91
  285. package/src/lib/hooks.ts +0 -142
  286. package/src/lib/routes/assets-by-id.ts +0 -161
  287. package/src/lib/routes/assets-cdn.ts +0 -185
  288. package/src/lib/routes/assets.ts +0 -116
  289. package/src/lib/routes/documents-by-id.ts +0 -188
  290. package/src/lib/routes/documents-publish.ts +0 -211
  291. package/src/lib/routes/documents.ts +0 -172
  292. package/src/lib/routes/index.ts +0 -13
  293. package/src/lib/routes/organizations-by-id.ts +0 -258
  294. package/src/lib/routes/organizations-invitations.ts +0 -183
  295. package/src/lib/routes/organizations-members.ts +0 -301
  296. package/src/lib/routes/organizations-switch.ts +0 -74
  297. package/src/lib/routes/organizations.ts +0 -147
  298. package/src/lib/routes/schemas-by-type.ts +0 -35
  299. package/src/lib/routes/schemas.ts +0 -19
  300. package/src/lib/routes-exports.ts +0 -42
  301. package/src/lib/schema-context.svelte.ts +0 -24
  302. package/src/lib/schema-utils/cleanup.ts +0 -116
  303. package/src/lib/schema-utils/index.ts +0 -4
  304. package/src/lib/schema-utils/utils.ts +0 -47
  305. package/src/lib/schema-utils/validator.ts +0 -58
  306. package/src/lib/server/index.ts +0 -40
  307. package/src/lib/services/asset-service.ts +0 -256
  308. package/src/lib/services/index.ts +0 -6
  309. package/src/lib/storage/adapters/index.ts +0 -2
  310. package/src/lib/storage/adapters/local-storage-adapter.ts +0 -215
  311. package/src/lib/storage/interfaces/index.ts +0 -2
  312. package/src/lib/storage/interfaces/storage.ts +0 -114
  313. package/src/lib/storage/providers/storage.ts +0 -83
  314. package/src/lib/types/asset.ts +0 -81
  315. package/src/lib/types/auth.ts +0 -80
  316. package/src/lib/types/config.ts +0 -45
  317. package/src/lib/types/document.ts +0 -38
  318. package/src/lib/types/index.ts +0 -8
  319. package/src/lib/types/organization.ts +0 -119
  320. package/src/lib/types/schemas.ts +0 -151
  321. package/src/lib/types/sidebar.ts +0 -37
  322. package/src/lib/types/user.ts +0 -17
  323. package/src/lib/utils/content-hash.ts +0 -75
  324. package/src/lib/utils/image-url.ts +0 -204
  325. package/src/lib/utils/index.ts +0 -12
  326. package/src/lib/utils/slug.ts +0 -33
  327. package/src/lib/utils.ts +0 -13
  328. /package/{src/lib → dist}/app.d.ts +0 -0
  329. /package/{src/lib → dist}/auth/MULTI_TENANCY_PLAN.md +0 -0
  330. /package/{src/lib → dist}/components/AdminApp.svelte +0 -0
  331. /package/{src/lib → dist}/components/admin/AdminLayout.svelte +0 -0
  332. /package/{src/lib → dist}/components/admin/DocumentEditor.svelte +0 -0
  333. /package/{src/lib → dist}/components/admin/DocumentTypesList.svelte +0 -0
  334. /package/{src/lib → dist}/components/admin/ObjectModal.svelte +0 -0
  335. /package/{src/lib → dist}/components/admin/SchemaField.svelte +0 -0
  336. /package/{src/lib → dist}/components/admin/fields/ArrayField.svelte +0 -0
  337. /package/{src/lib → dist}/components/admin/fields/BooleanField.svelte +0 -0
  338. /package/{src/lib → dist}/components/admin/fields/ImageField.svelte +0 -0
  339. /package/{src/lib → dist}/components/admin/fields/NumberField.svelte +0 -0
  340. /package/{src/lib → dist}/components/admin/fields/ReferenceField.svelte +0 -0
  341. /package/{src/lib → dist}/components/admin/fields/SlugField.svelte +0 -0
  342. /package/{src/lib → dist}/components/admin/fields/StringField.svelte +0 -0
  343. /package/{src/lib → dist}/components/admin/fields/TextareaField.svelte +0 -0
  344. /package/{src/lib/components/fields/index.ts → dist/components/fields/index.js} +0 -0
  345. /package/{src/lib → dist}/components/layout/OrganizationSwitcher.svelte +0 -0
  346. /package/{src/lib → dist}/components/layout/Sidebar.svelte +0 -0
  347. /package/{src/lib → dist}/components/layout/sidebar/AppSidebar.svelte +0 -0
  348. /package/{src/lib → dist}/components/layout/sidebar/NavMain.svelte +0 -0
  349. /package/{src/lib → dist}/components/layout/sidebar/NavSecondary.svelte +0 -0
  350. /package/{src/lib → dist}/components/layout/sidebar/NavUser.svelte +0 -0
  351. /package/{src/lib → dist}/plugins/README.md +0 -0
@@ -1,258 +0,0 @@
1
- // Aphex CMS Organization by ID API Handlers
2
- import { json } from '@sveltejs/kit';
3
- import type { RequestHandler } from '@sveltejs/kit';
4
-
5
- // GET /api/organizations/[id] - Get organization by ID
6
- export const GET: RequestHandler = async ({ params, locals }) => {
7
- try {
8
- const { databaseAdapter } = locals.aphexCMS;
9
- const auth = locals.auth;
10
- const { id } = params;
11
-
12
- if (!auth || auth.type !== 'session') {
13
- return json(
14
- {
15
- success: false,
16
- error: 'Unauthorized',
17
- message: 'Session authentication required'
18
- },
19
- { status: 401 }
20
- );
21
- }
22
-
23
- if (!id) {
24
- return json(
25
- {
26
- success: false,
27
- error: 'Missing required field',
28
- message: 'Organization ID is required'
29
- },
30
- { status: 400 }
31
- );
32
- }
33
-
34
- // Check if user is a member of this organization
35
- const membership = await databaseAdapter.findUserMembership(auth.user.id, id);
36
- if (!membership) {
37
- return json(
38
- {
39
- success: false,
40
- error: 'Forbidden',
41
- message: 'You are not a member of this organization'
42
- },
43
- { status: 403 }
44
- );
45
- }
46
-
47
- const organization = await databaseAdapter.findOrganizationById(id);
48
- if (!organization) {
49
- return json(
50
- {
51
- success: false,
52
- error: 'Organization not found'
53
- },
54
- { status: 404 }
55
- );
56
- }
57
-
58
- return json({
59
- success: true,
60
- data: organization
61
- });
62
- } catch (error) {
63
- console.error('Failed to fetch organization:', error);
64
- return json(
65
- {
66
- success: false,
67
- error: 'Failed to fetch organization',
68
- message: error instanceof Error ? error.message : 'Unknown error'
69
- },
70
- { status: 500 }
71
- );
72
- }
73
- };
74
-
75
- // PATCH /api/organizations/[id] - Update organization
76
- export const PATCH: RequestHandler = async ({ params, request, locals }) => {
77
- try {
78
- const { databaseAdapter } = locals.aphexCMS;
79
- const auth = locals.auth;
80
- const { id } = params;
81
-
82
- if (!auth || auth.type !== 'session') {
83
- return json(
84
- {
85
- success: false,
86
- error: 'Unauthorized',
87
- message: 'Session authentication required'
88
- },
89
- { status: 401 }
90
- );
91
- }
92
-
93
- if (!id) {
94
- return json(
95
- {
96
- success: false,
97
- error: 'Missing required field',
98
- message: 'Organization ID is required'
99
- },
100
- { status: 400 }
101
- );
102
- }
103
-
104
- // Check if user is owner or admin of this organization
105
- const membership = await databaseAdapter.findUserMembership(auth.user.id, id);
106
- if (!membership || (membership.role !== 'owner' && membership.role !== 'admin')) {
107
- return json(
108
- {
109
- success: false,
110
- error: 'Forbidden',
111
- message: 'Only owners and admins can update organization settings'
112
- },
113
- { status: 403 }
114
- );
115
- }
116
-
117
- const body = await request.json();
118
-
119
- // Validate: if slug is being changed, check it's not already taken
120
- if (body.slug) {
121
- const existingOrg = await databaseAdapter.findOrganizationBySlug(body.slug);
122
- if (existingOrg && existingOrg.id !== id) {
123
- return json(
124
- {
125
- success: false,
126
- error: 'Slug already exists',
127
- message: `Organization with slug '${body.slug}' already exists`
128
- },
129
- { status: 409 }
130
- );
131
- }
132
- }
133
-
134
- // Update organization
135
- const updateData: {
136
- name?: string;
137
- slug?: string;
138
- metadata?: any;
139
- } = {};
140
-
141
- if (body.name !== undefined) updateData.name = body.name;
142
- if (body.slug !== undefined) updateData.slug = body.slug;
143
- if (body.metadata !== undefined) updateData.metadata = body.metadata;
144
-
145
- const updatedOrganization = await databaseAdapter.updateOrganization(id, updateData);
146
-
147
- if (!updatedOrganization) {
148
- return json(
149
- {
150
- success: false,
151
- error: 'Organization not found'
152
- },
153
- { status: 404 }
154
- );
155
- }
156
-
157
- return json({
158
- success: true,
159
- data: updatedOrganization
160
- });
161
- } catch (error) {
162
- console.error('Failed to update organization:', error);
163
- return json(
164
- {
165
- success: false,
166
- error: 'Failed to update organization',
167
- message: error instanceof Error ? error.message : 'Unknown error'
168
- },
169
- { status: 500 }
170
- );
171
- }
172
- };
173
-
174
- // DELETE /api/organizations/[id] - Delete an organization
175
- export const DELETE: RequestHandler = async ({ params, locals }) => {
176
- try {
177
- const { databaseAdapter } = locals.aphexCMS;
178
- const auth = locals.auth;
179
- const { id } = params;
180
-
181
- if (!auth || auth.type !== 'session') {
182
- return json(
183
- {
184
- success: false,
185
- error: 'Unauthorized',
186
- message: 'Session authentication required'
187
- },
188
- { status: 401 }
189
- );
190
- }
191
-
192
- if (!id) {
193
- return json(
194
- {
195
- success: false,
196
- error: 'Missing required field',
197
- message: 'Organization ID is required'
198
- },
199
- { status: 400 }
200
- );
201
- }
202
-
203
- // Only owners can delete an organization
204
- const membership = await databaseAdapter.findUserMembership(auth.user.id, id);
205
- if (!membership || membership.role !== 'owner') {
206
- return json(
207
- {
208
- success: false,
209
- error: 'Forbidden',
210
- message: 'Only owners can delete an organization'
211
- },
212
- { status: 403 }
213
- );
214
- }
215
-
216
- // Get all members of the organization
217
- const members = await databaseAdapter.findOrganizationMembers(id);
218
-
219
- // Handle member lifecycle
220
- for (const member of members) {
221
- const userSession = await databaseAdapter.findUserSession(member.userId);
222
- if (userSession?.activeOrganizationId === id) {
223
- const otherOrgs = await databaseAdapter.findUserOrganizations(member.userId);
224
- const remainingOrgs = otherOrgs.filter((org) => org.organization.id !== id);
225
-
226
- if (remainingOrgs.length > 0 && remainingOrgs[0]) {
227
- await databaseAdapter.updateUserSession(member.userId, remainingOrgs[0].organization.id);
228
- } else {
229
- await databaseAdapter.deleteUserSession(member.userId);
230
- }
231
- }
232
- }
233
-
234
- // Delete all members from the organization
235
- await databaseAdapter.removeAllMembers(id);
236
-
237
- // Delete all invitations for the organization
238
- await databaseAdapter.removeAllInvitations(id);
239
-
240
- // Delete the organization
241
- await databaseAdapter.deleteOrganization(id);
242
-
243
- return json({
244
- success: true,
245
- message: 'Organization deleted successfully'
246
- });
247
- } catch (error) {
248
- console.error('Failed to delete organization:', error);
249
- return json(
250
- {
251
- success: false,
252
- error: 'Failed to delete organization',
253
- message: error instanceof Error ? error.message : 'Unknown error'
254
- },
255
- { status: 500 }
256
- );
257
- }
258
- };
@@ -1,183 +0,0 @@
1
- // Aphex CMS Organization Invitations API Handlers
2
- import { json } from '@sveltejs/kit';
3
- import type { RequestHandler } from '@sveltejs/kit';
4
-
5
- // POST /api/organizations/invitations - Create/send an invitation
6
- export const POST: RequestHandler = async ({ request, locals }) => {
7
- try {
8
- const { databaseAdapter } = locals.aphexCMS;
9
- const auth = locals.auth;
10
-
11
- if (!auth || auth.type !== 'session') {
12
- return json(
13
- {
14
- success: false,
15
- error: 'Unauthorized',
16
- message: 'Session authentication required'
17
- },
18
- { status: 401 }
19
- );
20
- }
21
-
22
- // Only owners and admins can invite members
23
- if (auth.organizationRole !== 'owner' && auth.organizationRole !== 'admin') {
24
- return json(
25
- {
26
- success: false,
27
- error: 'Forbidden',
28
- message: 'Only owners and admins can invite members'
29
- },
30
- { status: 403 }
31
- );
32
- }
33
-
34
- const body = await request.json();
35
-
36
- if (!body.email || !body.role) {
37
- return json(
38
- {
39
- success: false,
40
- error: 'Missing required fields',
41
- message: 'email and role are required'
42
- },
43
- { status: 400 }
44
- );
45
- }
46
-
47
- // Validate role
48
- const validRoles = ['admin', 'editor', 'viewer'];
49
- if (!validRoles.includes(body.role)) {
50
- return json(
51
- {
52
- success: false,
53
- error: 'Invalid role',
54
- message: 'Role must be one of: admin, editor, viewer'
55
- },
56
- { status: 400 }
57
- );
58
- }
59
-
60
- // Check if there's already a pending invitation for this email
61
- const existingInvitations = await databaseAdapter.findOrganizationInvitations(
62
- auth.organizationId
63
- );
64
- const pendingInvitation = existingInvitations.find(
65
- (inv) => inv.email.toLowerCase() === body.email.toLowerCase() && inv.acceptedAt === null
66
- );
67
-
68
- if (pendingInvitation) {
69
- return json(
70
- {
71
- success: false,
72
- error: 'Already invited',
73
- message: 'This email has already been invited to the organization'
74
- },
75
- { status: 400 }
76
- );
77
- }
78
-
79
- // Generate a unique invitation token
80
- const token = crypto.randomUUID();
81
-
82
- // Create invitation - will auto-join when user signs up
83
- const invitation = await databaseAdapter.createInvitation({
84
- organizationId: auth.organizationId,
85
- email: body.email.toLowerCase(),
86
- role: body.role,
87
- invitedBy: auth.user.id,
88
- token,
89
- expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000) // 7 days
90
- });
91
-
92
- return json(
93
- {
94
- success: true,
95
- data: invitation,
96
- message: 'Invitation sent successfully. User will automatically join when they sign up.'
97
- },
98
- { status: 201 }
99
- );
100
- } catch (error) {
101
- console.error('Failed to create invitation:', error);
102
- return json(
103
- {
104
- success: false,
105
- error: 'Failed to create invitation',
106
- message: error instanceof Error ? error.message : 'Unknown error'
107
- },
108
- { status: 500 }
109
- );
110
- }
111
- };
112
-
113
- // DELETE /api/organizations/invitations - Cancel an invitation
114
- export const DELETE: RequestHandler = async ({ request, locals }) => {
115
- try {
116
- const { databaseAdapter } = locals.aphexCMS;
117
- const auth = locals.auth;
118
-
119
- if (!auth || auth.type !== 'session') {
120
- return json(
121
- {
122
- success: false,
123
- error: 'Unauthorized',
124
- message: 'Session authentication required'
125
- },
126
- { status: 401 }
127
- );
128
- }
129
-
130
- // Only owners and admins can cancel invitations
131
- if (auth.organizationRole !== 'owner' && auth.organizationRole !== 'admin') {
132
- return json(
133
- {
134
- success: false,
135
- error: 'Forbidden',
136
- message: 'Only owners and admins can cancel invitations'
137
- },
138
- { status: 403 }
139
- );
140
- }
141
-
142
- const body = await request.json();
143
-
144
- if (!body.invitationId) {
145
- return json(
146
- {
147
- success: false,
148
- error: 'Missing required field',
149
- message: 'invitationId is required'
150
- },
151
- { status: 400 }
152
- );
153
- }
154
-
155
- // Delete the invitation
156
- const deleted = await databaseAdapter.deleteInvitation(body.invitationId);
157
-
158
- if (!deleted) {
159
- return json(
160
- {
161
- success: false,
162
- error: 'Invitation not found'
163
- },
164
- { status: 404 }
165
- );
166
- }
167
-
168
- return json({
169
- success: true,
170
- message: 'Invitation canceled successfully'
171
- });
172
- } catch (error) {
173
- console.error('Failed to cancel invitation:', error);
174
- return json(
175
- {
176
- success: false,
177
- error: 'Failed to cancel invitation',
178
- message: error instanceof Error ? error.message : 'Unknown error'
179
- },
180
- { status: 500 }
181
- );
182
- }
183
- };