@aphexcms/cms-core 4.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.
- package/dist/api/schemas/user.d.ts +10 -0
- package/dist/api/schemas/user.d.ts.map +1 -1
- package/dist/api/schemas/user.js +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -2
- package/dist/hooks.d.ts +3 -4
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +20 -99
- package/dist/lib/api/schemas/user.d.ts +10 -0
- package/dist/lib/api/schemas/user.d.ts.map +1 -1
- package/dist/lib/api/schemas/user.js +10 -0
- package/dist/lib/api/schemas/user.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +1 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/hooks.d.ts +3 -4
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +20 -99
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/server/api/index.d.ts +55 -0
- package/dist/lib/server/api/index.d.ts.map +1 -0
- package/dist/lib/server/api/index.js +107 -0
- package/dist/lib/server/api/index.js.map +1 -0
- package/dist/lib/server/api/routes/assets-bulk.d.ts +4 -0
- package/dist/lib/server/api/routes/assets-bulk.d.ts.map +1 -0
- package/dist/{routes → lib/server/api/routes}/assets-bulk.js +23 -23
- package/dist/lib/server/api/routes/assets-bulk.js.map +1 -0
- package/dist/lib/server/api/routes/assets-by-id.d.ts +4 -0
- package/dist/lib/server/api/routes/assets-by-id.d.ts.map +1 -0
- package/dist/lib/server/api/routes/assets-by-id.js +108 -0
- package/dist/lib/server/api/routes/assets-by-id.js.map +1 -0
- package/dist/lib/server/api/routes/assets-references.d.ts +15 -0
- package/dist/lib/server/api/routes/assets-references.d.ts.map +1 -0
- package/dist/lib/server/api/routes/assets-references.js +78 -0
- package/dist/lib/server/api/routes/assets-references.js.map +1 -0
- package/dist/lib/server/api/routes/assets.d.ts +4 -0
- package/dist/lib/server/api/routes/assets.d.ts.map +1 -0
- package/dist/{routes → lib/server/api/routes}/assets.js +76 -87
- package/dist/lib/server/api/routes/assets.js.map +1 -0
- package/dist/lib/server/api/routes/document-versions.d.ts +4 -0
- package/dist/lib/server/api/routes/document-versions.d.ts.map +1 -0
- package/dist/lib/server/api/routes/document-versions.js +113 -0
- package/dist/lib/server/api/routes/document-versions.js.map +1 -0
- package/dist/lib/server/api/routes/documents-by-id.d.ts +4 -0
- package/dist/lib/server/api/routes/documents-by-id.d.ts.map +1 -0
- package/dist/lib/server/api/routes/documents-by-id.js +148 -0
- package/dist/lib/server/api/routes/documents-by-id.js.map +1 -0
- package/dist/lib/server/api/routes/documents-publish.d.ts +4 -0
- package/dist/lib/server/api/routes/documents-publish.d.ts.map +1 -0
- package/dist/{routes → lib/server/api/routes}/documents-publish.js +42 -58
- package/dist/lib/server/api/routes/documents-publish.js.map +1 -0
- package/dist/lib/server/api/routes/documents-query.d.ts +8 -0
- package/dist/lib/server/api/routes/documents-query.d.ts.map +1 -0
- package/dist/lib/server/api/routes/documents-query.js +75 -0
- package/dist/lib/server/api/routes/documents-query.js.map +1 -0
- package/dist/lib/server/api/routes/documents.d.ts +4 -0
- package/dist/lib/server/api/routes/documents.d.ts.map +1 -0
- package/dist/{routes → lib/server/api/routes}/documents.js +55 -76
- package/dist/lib/server/api/routes/documents.js.map +1 -0
- package/dist/lib/server/api/routes/organizations-by-id.d.ts +4 -0
- package/dist/lib/server/api/routes/organizations-by-id.d.ts.map +1 -0
- package/dist/{routes → lib/server/api/routes}/organizations-by-id.js +62 -91
- package/dist/lib/server/api/routes/organizations-by-id.js.map +1 -0
- package/dist/lib/server/api/routes/organizations-invitations.d.ts +10 -0
- package/dist/lib/server/api/routes/organizations-invitations.d.ts.map +1 -0
- package/dist/{routes → lib/server/api/routes}/organizations-invitations.js +67 -78
- package/dist/lib/server/api/routes/organizations-invitations.js.map +1 -0
- package/dist/lib/server/api/routes/organizations-members.d.ts +4 -0
- package/dist/lib/server/api/routes/organizations-members.d.ts.map +1 -0
- package/dist/{routes → lib/server/api/routes}/organizations-members.js +74 -106
- package/dist/lib/server/api/routes/organizations-members.js.map +1 -0
- package/dist/lib/server/api/routes/organizations-switch.d.ts +4 -0
- package/dist/lib/server/api/routes/organizations-switch.d.ts.map +1 -0
- package/dist/lib/server/api/routes/organizations-switch.js +54 -0
- package/dist/lib/server/api/routes/organizations-switch.js.map +1 -0
- package/dist/lib/server/api/routes/organizations.d.ts +4 -0
- package/dist/lib/server/api/routes/organizations.d.ts.map +1 -0
- package/dist/lib/server/api/routes/organizations.js +99 -0
- package/dist/lib/server/api/routes/organizations.js.map +1 -0
- package/dist/lib/server/api/routes/roles.d.ts +12 -0
- package/dist/lib/server/api/routes/roles.d.ts.map +1 -0
- package/dist/lib/server/api/routes/roles.js +219 -0
- package/dist/lib/server/api/routes/roles.js.map +1 -0
- package/dist/lib/server/api/routes/schemas.d.ts +4 -0
- package/dist/lib/server/api/routes/schemas.d.ts.map +1 -0
- package/dist/lib/server/api/routes/schemas.js +27 -0
- package/dist/lib/server/api/routes/schemas.js.map +1 -0
- package/dist/lib/server/api/routes/user-preferences.d.ts +4 -0
- package/dist/lib/server/api/routes/user-preferences.d.ts.map +1 -0
- package/dist/lib/server/api/routes/user-preferences.js +63 -0
- package/dist/lib/server/api/routes/user-preferences.js.map +1 -0
- package/dist/lib/server/api/routes/user.d.ts +12 -0
- package/dist/lib/server/api/routes/user.d.ts.map +1 -0
- package/dist/lib/server/api/routes/user.js +114 -0
- package/dist/lib/server/api/routes/user.js.map +1 -0
- package/dist/lib/server/index.d.ts +2 -1
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +7 -3
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/types/config.d.ts +28 -29
- package/dist/lib/types/config.d.ts.map +1 -1
- package/dist/server/api/index.d.ts +55 -0
- package/dist/server/api/index.d.ts.map +1 -0
- package/dist/server/api/index.js +106 -0
- package/dist/server/api/routes/assets-bulk.d.ts +4 -0
- package/dist/server/api/routes/assets-bulk.d.ts.map +1 -0
- package/dist/{lib → server/api}/routes/assets-bulk.js +22 -24
- package/dist/server/api/routes/assets-by-id.d.ts +4 -0
- package/dist/server/api/routes/assets-by-id.d.ts.map +1 -0
- package/dist/server/api/routes/assets-by-id.js +107 -0
- package/dist/server/api/routes/assets-references.d.ts +15 -0
- package/dist/server/api/routes/assets-references.d.ts.map +1 -0
- package/dist/server/api/routes/assets-references.js +77 -0
- package/dist/server/api/routes/assets.d.ts +4 -0
- package/dist/server/api/routes/assets.d.ts.map +1 -0
- package/dist/{lib → server/api}/routes/assets.js +75 -88
- package/dist/server/api/routes/document-versions.d.ts +4 -0
- package/dist/server/api/routes/document-versions.d.ts.map +1 -0
- package/dist/server/api/routes/document-versions.js +112 -0
- package/dist/server/api/routes/documents-by-id.d.ts +4 -0
- package/dist/server/api/routes/documents-by-id.d.ts.map +1 -0
- package/dist/server/api/routes/documents-by-id.js +147 -0
- package/dist/server/api/routes/documents-publish.d.ts +4 -0
- package/dist/server/api/routes/documents-publish.d.ts.map +1 -0
- package/dist/{lib → server/api}/routes/documents-publish.js +41 -59
- package/dist/server/api/routes/documents-query.d.ts +8 -0
- package/dist/server/api/routes/documents-query.d.ts.map +1 -0
- package/dist/server/api/routes/documents-query.js +74 -0
- package/dist/server/api/routes/documents.d.ts +4 -0
- package/dist/server/api/routes/documents.d.ts.map +1 -0
- package/dist/{lib → server/api}/routes/documents.js +54 -77
- package/dist/server/api/routes/organizations-by-id.d.ts +4 -0
- package/dist/server/api/routes/organizations-by-id.d.ts.map +1 -0
- package/dist/{lib → server/api}/routes/organizations-by-id.js +61 -92
- package/dist/server/api/routes/organizations-invitations.d.ts +10 -0
- package/dist/server/api/routes/organizations-invitations.d.ts.map +1 -0
- package/dist/{lib → server/api}/routes/organizations-invitations.js +66 -79
- package/dist/server/api/routes/organizations-members.d.ts +4 -0
- package/dist/server/api/routes/organizations-members.d.ts.map +1 -0
- package/dist/{lib → server/api}/routes/organizations-members.js +73 -107
- package/dist/server/api/routes/organizations-switch.d.ts +4 -0
- package/dist/server/api/routes/organizations-switch.d.ts.map +1 -0
- package/dist/server/api/routes/organizations-switch.js +53 -0
- package/dist/server/api/routes/organizations.d.ts +4 -0
- package/dist/server/api/routes/organizations.d.ts.map +1 -0
- package/dist/server/api/routes/organizations.js +98 -0
- package/dist/server/api/routes/roles.d.ts +12 -0
- package/dist/server/api/routes/roles.d.ts.map +1 -0
- package/dist/server/api/routes/roles.js +218 -0
- package/dist/server/api/routes/schemas.d.ts +4 -0
- package/dist/server/api/routes/schemas.d.ts.map +1 -0
- package/dist/server/api/routes/schemas.js +26 -0
- package/dist/server/api/routes/user-preferences.d.ts +4 -0
- package/dist/server/api/routes/user-preferences.d.ts.map +1 -0
- package/dist/server/api/routes/user-preferences.js +62 -0
- package/dist/server/api/routes/user.d.ts +12 -0
- package/dist/server/api/routes/user.d.ts.map +1 -0
- package/dist/server/api/routes/user.js +113 -0
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +7 -3
- package/dist/types/config.d.ts +28 -29
- package/dist/types/config.d.ts.map +1 -1
- package/package.json +4 -2
- package/dist/lib/routes/assets-bulk.d.ts +0 -3
- package/dist/lib/routes/assets-bulk.d.ts.map +0 -1
- package/dist/lib/routes/assets-bulk.js.map +0 -1
- package/dist/lib/routes/assets-by-id.d.ts +0 -5
- package/dist/lib/routes/assets-by-id.d.ts.map +0 -1
- package/dist/lib/routes/assets-by-id.js +0 -116
- package/dist/lib/routes/assets-by-id.js.map +0 -1
- package/dist/lib/routes/assets-references-counts.d.ts +0 -7
- package/dist/lib/routes/assets-references-counts.d.ts.map +0 -1
- package/dist/lib/routes/assets-references-counts.js +0 -42
- package/dist/lib/routes/assets-references-counts.js.map +0 -1
- package/dist/lib/routes/assets-references.d.ts +0 -7
- package/dist/lib/routes/assets-references.d.ts.map +0 -1
- package/dist/lib/routes/assets-references.js +0 -35
- package/dist/lib/routes/assets-references.js.map +0 -1
- package/dist/lib/routes/assets.d.ts +0 -4
- package/dist/lib/routes/assets.d.ts.map +0 -1
- package/dist/lib/routes/assets.js.map +0 -1
- package/dist/lib/routes/document-versions.d.ts +0 -5
- package/dist/lib/routes/document-versions.d.ts.map +0 -1
- package/dist/lib/routes/document-versions.js +0 -114
- package/dist/lib/routes/document-versions.js.map +0 -1
- package/dist/lib/routes/documents-by-id.d.ts +0 -5
- package/dist/lib/routes/documents-by-id.d.ts.map +0 -1
- package/dist/lib/routes/documents-by-id.js +0 -188
- package/dist/lib/routes/documents-by-id.js.map +0 -1
- package/dist/lib/routes/documents-publish.d.ts +0 -4
- package/dist/lib/routes/documents-publish.d.ts.map +0 -1
- package/dist/lib/routes/documents-publish.js.map +0 -1
- package/dist/lib/routes/documents-query.d.ts +0 -26
- package/dist/lib/routes/documents-query.d.ts.map +0 -1
- package/dist/lib/routes/documents-query.js +0 -104
- package/dist/lib/routes/documents-query.js.map +0 -1
- package/dist/lib/routes/documents.d.ts +0 -4
- package/dist/lib/routes/documents.d.ts.map +0 -1
- package/dist/lib/routes/documents.js.map +0 -1
- package/dist/lib/routes/index.d.ts +0 -9
- package/dist/lib/routes/index.d.ts.map +0 -1
- package/dist/lib/routes/index.js +0 -15
- package/dist/lib/routes/index.js.map +0 -1
- package/dist/lib/routes/organizations-by-id.d.ts +0 -5
- package/dist/lib/routes/organizations-by-id.d.ts.map +0 -1
- package/dist/lib/routes/organizations-by-id.js.map +0 -1
- package/dist/lib/routes/organizations-invitations.d.ts +0 -4
- package/dist/lib/routes/organizations-invitations.d.ts.map +0 -1
- package/dist/lib/routes/organizations-invitations.js.map +0 -1
- package/dist/lib/routes/organizations-members.d.ts +0 -5
- package/dist/lib/routes/organizations-members.d.ts.map +0 -1
- package/dist/lib/routes/organizations-members.js.map +0 -1
- package/dist/lib/routes/organizations-switch.d.ts +0 -3
- package/dist/lib/routes/organizations-switch.d.ts.map +0 -1
- package/dist/lib/routes/organizations-switch.js +0 -59
- package/dist/lib/routes/organizations-switch.js.map +0 -1
- package/dist/lib/routes/organizations.d.ts +0 -4
- package/dist/lib/routes/organizations.d.ts.map +0 -1
- package/dist/lib/routes/organizations.js +0 -117
- package/dist/lib/routes/organizations.js.map +0 -1
- package/dist/lib/routes/roles-by-name.d.ts +0 -4
- package/dist/lib/routes/roles-by-name.d.ts.map +0 -1
- package/dist/lib/routes/roles-by-name.js +0 -112
- package/dist/lib/routes/roles-by-name.js.map +0 -1
- package/dist/lib/routes/roles.d.ts +0 -4
- package/dist/lib/routes/roles.d.ts.map +0 -1
- package/dist/lib/routes/roles.js +0 -91
- package/dist/lib/routes/roles.js.map +0 -1
- package/dist/lib/routes/schemas-by-type.d.ts +0 -3
- package/dist/lib/routes/schemas-by-type.d.ts.map +0 -1
- package/dist/lib/routes/schemas-by-type.js +0 -27
- package/dist/lib/routes/schemas-by-type.js.map +0 -1
- package/dist/lib/routes/schemas.d.ts +0 -3
- package/dist/lib/routes/schemas.d.ts.map +0 -1
- package/dist/lib/routes/schemas.js +0 -12
- package/dist/lib/routes/schemas.js.map +0 -1
- package/dist/lib/routes/user-preferences.d.ts +0 -4
- package/dist/lib/routes/user-preferences.d.ts.map +0 -1
- package/dist/lib/routes/user-preferences.js +0 -73
- package/dist/lib/routes/user-preferences.js.map +0 -1
- package/dist/lib/routes-exports.d.ts +0 -20
- package/dist/lib/routes-exports.d.ts.map +0 -1
- package/dist/lib/routes-exports.js +0 -27
- package/dist/lib/routes-exports.js.map +0 -1
- package/dist/routes/assets-bulk.d.ts +0 -3
- package/dist/routes/assets-bulk.d.ts.map +0 -1
- package/dist/routes/assets-by-id.d.ts +0 -5
- package/dist/routes/assets-by-id.d.ts.map +0 -1
- package/dist/routes/assets-by-id.js +0 -115
- package/dist/routes/assets-references-counts.d.ts +0 -7
- package/dist/routes/assets-references-counts.d.ts.map +0 -1
- package/dist/routes/assets-references-counts.js +0 -41
- package/dist/routes/assets-references.d.ts +0 -7
- package/dist/routes/assets-references.d.ts.map +0 -1
- package/dist/routes/assets-references.js +0 -34
- package/dist/routes/assets.d.ts +0 -4
- package/dist/routes/assets.d.ts.map +0 -1
- package/dist/routes/document-versions.d.ts +0 -5
- package/dist/routes/document-versions.d.ts.map +0 -1
- package/dist/routes/document-versions.js +0 -113
- package/dist/routes/documents-by-id.d.ts +0 -5
- package/dist/routes/documents-by-id.d.ts.map +0 -1
- package/dist/routes/documents-by-id.js +0 -187
- package/dist/routes/documents-publish.d.ts +0 -4
- package/dist/routes/documents-publish.d.ts.map +0 -1
- package/dist/routes/documents-query.d.ts +0 -26
- package/dist/routes/documents-query.d.ts.map +0 -1
- package/dist/routes/documents-query.js +0 -103
- package/dist/routes/documents.d.ts +0 -4
- package/dist/routes/documents.d.ts.map +0 -1
- package/dist/routes/index.d.ts +0 -9
- package/dist/routes/index.d.ts.map +0 -1
- package/dist/routes/index.js +0 -14
- package/dist/routes/organizations-by-id.d.ts +0 -5
- package/dist/routes/organizations-by-id.d.ts.map +0 -1
- package/dist/routes/organizations-invitations.d.ts +0 -4
- package/dist/routes/organizations-invitations.d.ts.map +0 -1
- package/dist/routes/organizations-members.d.ts +0 -5
- package/dist/routes/organizations-members.d.ts.map +0 -1
- package/dist/routes/organizations-switch.d.ts +0 -3
- package/dist/routes/organizations-switch.d.ts.map +0 -1
- package/dist/routes/organizations-switch.js +0 -58
- package/dist/routes/organizations.d.ts +0 -4
- package/dist/routes/organizations.d.ts.map +0 -1
- package/dist/routes/organizations.js +0 -116
- package/dist/routes/roles-by-name.d.ts +0 -4
- package/dist/routes/roles-by-name.d.ts.map +0 -1
- package/dist/routes/roles-by-name.js +0 -111
- package/dist/routes/roles.d.ts +0 -4
- package/dist/routes/roles.d.ts.map +0 -1
- package/dist/routes/roles.js +0 -90
- package/dist/routes/schemas-by-type.d.ts +0 -3
- package/dist/routes/schemas-by-type.d.ts.map +0 -1
- package/dist/routes/schemas-by-type.js +0 -26
- package/dist/routes/schemas.d.ts +0 -3
- package/dist/routes/schemas.d.ts.map +0 -1
- package/dist/routes/schemas.js +0 -11
- package/dist/routes/user-preferences.d.ts +0 -4
- package/dist/routes/user-preferences.d.ts.map +0 -1
- package/dist/routes/user-preferences.js +0 -72
- package/dist/routes-exports.d.ts +0 -20
- package/dist/routes-exports.d.ts.map +0 -1
- package/dist/routes-exports.js +0 -26
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
// Aphex CMS Organization API Handlers
|
|
2
|
-
import { json } from '@sveltejs/kit';
|
|
3
|
-
import { cmsLogger } from '../utils/logger.js';
|
|
4
|
-
import { createOrganizationRequest } from '../api/schemas/organizations.js';
|
|
5
|
-
// GET /api/organizations - List user's organizations
|
|
6
|
-
export const GET = async ({ locals }) => {
|
|
7
|
-
try {
|
|
8
|
-
const { databaseAdapter } = locals.aphexCMS;
|
|
9
|
-
const auth = locals.auth;
|
|
10
|
-
if (!auth || auth.type !== 'session') {
|
|
11
|
-
return json({
|
|
12
|
-
success: false,
|
|
13
|
-
error: 'Unauthorized',
|
|
14
|
-
message: 'Session authentication required'
|
|
15
|
-
}, { status: 401 });
|
|
16
|
-
}
|
|
17
|
-
// Get all organizations the user belongs to
|
|
18
|
-
const memberships = await databaseAdapter.findUserOrganizations(auth.user.id);
|
|
19
|
-
// Map to a cleaner format with organization details and user's role
|
|
20
|
-
const organizations = memberships.map((membership) => ({
|
|
21
|
-
id: membership.organization.id,
|
|
22
|
-
name: membership.organization.name,
|
|
23
|
-
slug: membership.organization.slug,
|
|
24
|
-
metadata: membership.organization.metadata,
|
|
25
|
-
role: membership.member.role,
|
|
26
|
-
joinedAt: membership.member.createdAt,
|
|
27
|
-
isActive: membership.organization.id === auth.organizationId
|
|
28
|
-
}));
|
|
29
|
-
return json({
|
|
30
|
-
success: true,
|
|
31
|
-
data: organizations
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
cmsLogger.error('Failed to fetch organizations:', error);
|
|
36
|
-
return json({
|
|
37
|
-
success: false,
|
|
38
|
-
error: 'Failed to fetch organizations',
|
|
39
|
-
message: error instanceof Error ? error.message : 'Unknown error'
|
|
40
|
-
}, { status: 500 });
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
// POST /api/organizations - Create new organization
|
|
44
|
-
export const POST = async ({ request, locals }) => {
|
|
45
|
-
try {
|
|
46
|
-
const { databaseAdapter } = locals.aphexCMS;
|
|
47
|
-
const auth = locals.auth;
|
|
48
|
-
if (!auth || auth.type !== 'session') {
|
|
49
|
-
return json({
|
|
50
|
-
success: false,
|
|
51
|
-
error: 'Unauthorized',
|
|
52
|
-
message: 'Session authentication required'
|
|
53
|
-
}, { status: 401 });
|
|
54
|
-
}
|
|
55
|
-
// Only SUPER_ADMIN can create organizations
|
|
56
|
-
if (auth.user.role !== 'super_admin') {
|
|
57
|
-
return json({
|
|
58
|
-
success: false,
|
|
59
|
-
error: 'Forbidden',
|
|
60
|
-
message: 'Only super admins can create organizations'
|
|
61
|
-
}, { status: 403 });
|
|
62
|
-
}
|
|
63
|
-
const rawBody = await request.json();
|
|
64
|
-
const parsed = createOrganizationRequest.safeParse(rawBody);
|
|
65
|
-
if (!parsed.success) {
|
|
66
|
-
return json({
|
|
67
|
-
success: false,
|
|
68
|
-
error: 'Invalid request body',
|
|
69
|
-
message: 'Organization name and slug are required',
|
|
70
|
-
issues: parsed.error.issues
|
|
71
|
-
}, { status: 400 });
|
|
72
|
-
}
|
|
73
|
-
const body = parsed.data;
|
|
74
|
-
// Check if slug is already taken
|
|
75
|
-
const existingOrg = await databaseAdapter.findOrganizationBySlug(body.slug);
|
|
76
|
-
if (existingOrg) {
|
|
77
|
-
return json({
|
|
78
|
-
success: false,
|
|
79
|
-
error: 'Slug already exists',
|
|
80
|
-
message: `Organization with slug '${body.slug}' already exists`
|
|
81
|
-
}, { status: 409 });
|
|
82
|
-
}
|
|
83
|
-
// Create the organization with current active org as parent
|
|
84
|
-
// Note: Only supports 1-level hierarchy for performance
|
|
85
|
-
const newOrganization = await databaseAdapter.createOrganization({
|
|
86
|
-
name: body.name,
|
|
87
|
-
slug: body.slug,
|
|
88
|
-
metadata: body.metadata || null,
|
|
89
|
-
parentOrganizationId: auth.organizationId, // Current active org becomes parent
|
|
90
|
-
createdBy: auth.user.id
|
|
91
|
-
});
|
|
92
|
-
// Seed the four built-in roles for this org before assigning membership.
|
|
93
|
-
// The member row references the role by name, so the rows must exist.
|
|
94
|
-
await databaseAdapter.seedBuiltinRoles(newOrganization.id);
|
|
95
|
-
// Add the creator as owner
|
|
96
|
-
await databaseAdapter.addMember({
|
|
97
|
-
organizationId: newOrganization.id,
|
|
98
|
-
userId: auth.user.id,
|
|
99
|
-
role: 'owner'
|
|
100
|
-
});
|
|
101
|
-
// Set as active organization for this user
|
|
102
|
-
await databaseAdapter.updateUserSession(auth.user.id, newOrganization.id);
|
|
103
|
-
return json({
|
|
104
|
-
success: true,
|
|
105
|
-
data: newOrganization
|
|
106
|
-
}, { status: 201 });
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
cmsLogger.error('Failed to create organization:', error);
|
|
110
|
-
return json({
|
|
111
|
-
success: false,
|
|
112
|
-
error: 'Failed to create organization',
|
|
113
|
-
message: error instanceof Error ? error.message : 'Unknown error'
|
|
114
|
-
}, { status: 500 });
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
//# sourceMappingURL=organizations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"organizations.js","sourceRoot":"","sources":["../../../src/lib/routes/organizations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"roles-by-name.d.ts","sourceRoot":"","sources":["../../../src/lib/routes/roles-by-name.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAgBpD,eAAO,MAAM,KAAK,EAAE,cA4DnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,cAoEpB,CAAC"}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
// Aphex CMS Roles API Handlers (by-name)
|
|
2
|
-
//
|
|
3
|
-
// PATCH /api/roles/[name] — edit description / capabilities
|
|
4
|
-
// DELETE /api/roles/[name] — delete a custom role (built-ins cannot be deleted)
|
|
5
|
-
import { json } from '@sveltejs/kit';
|
|
6
|
-
import { cmsLogger } from '../utils/logger.js';
|
|
7
|
-
import { hasCapability, BUILTIN_ROLE_NAMES } from '../types/capabilities.js';
|
|
8
|
-
import { updateRoleRequest } from '../api/schemas/roles.js';
|
|
9
|
-
function unauthorized() {
|
|
10
|
-
return json({ success: false, error: 'Unauthorized', message: 'Session authentication required' }, { status: 401 });
|
|
11
|
-
}
|
|
12
|
-
function forbidden(message) {
|
|
13
|
-
return json({ success: false, error: 'Forbidden', message }, { status: 403 });
|
|
14
|
-
}
|
|
15
|
-
export const PATCH = async ({ params, request, locals }) => {
|
|
16
|
-
try {
|
|
17
|
-
const { databaseAdapter, rolesService } = locals.aphexCMS;
|
|
18
|
-
const auth = locals.auth;
|
|
19
|
-
if (!auth || auth.type !== 'session')
|
|
20
|
-
return unauthorized();
|
|
21
|
-
if (!hasCapability(auth, 'role.manage')) {
|
|
22
|
-
return forbidden('You do not have permission to manage roles');
|
|
23
|
-
}
|
|
24
|
-
const name = params.name;
|
|
25
|
-
if (!name) {
|
|
26
|
-
return json({ success: false, error: 'Invalid request', message: 'Role name is required' }, { status: 400 });
|
|
27
|
-
}
|
|
28
|
-
const rawBody = await request.json();
|
|
29
|
-
const parsed = updateRoleRequest.safeParse(rawBody);
|
|
30
|
-
if (!parsed.success) {
|
|
31
|
-
return json({
|
|
32
|
-
success: false,
|
|
33
|
-
error: 'Invalid request body',
|
|
34
|
-
issues: parsed.error.issues
|
|
35
|
-
}, { status: 400 });
|
|
36
|
-
}
|
|
37
|
-
const body = parsed.data;
|
|
38
|
-
const updated = await databaseAdapter.updateRole(auth.organizationId, name, body);
|
|
39
|
-
if (!updated) {
|
|
40
|
-
return json({
|
|
41
|
-
success: false,
|
|
42
|
-
error: 'Not found',
|
|
43
|
-
message: `No role named "${name}" in this organization`
|
|
44
|
-
}, { status: 404 });
|
|
45
|
-
}
|
|
46
|
-
// Bust the capability cache so open sessions pick up the change on
|
|
47
|
-
// their next request instead of waiting for TTL.
|
|
48
|
-
await rolesService.invalidate(auth.organizationId, name);
|
|
49
|
-
return json({ success: true, data: updated });
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
cmsLogger.error('Failed to update role:', error);
|
|
53
|
-
return json({
|
|
54
|
-
success: false,
|
|
55
|
-
error: 'Failed to update role',
|
|
56
|
-
message: error instanceof Error ? error.message : 'Unknown error'
|
|
57
|
-
}, { status: 500 });
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
export const DELETE = async ({ params, locals }) => {
|
|
61
|
-
try {
|
|
62
|
-
const { databaseAdapter, rolesService } = locals.aphexCMS;
|
|
63
|
-
const auth = locals.auth;
|
|
64
|
-
if (!auth || auth.type !== 'session')
|
|
65
|
-
return unauthorized();
|
|
66
|
-
if (!hasCapability(auth, 'role.manage')) {
|
|
67
|
-
return forbidden('You do not have permission to manage roles');
|
|
68
|
-
}
|
|
69
|
-
const name = params.name;
|
|
70
|
-
if (!name) {
|
|
71
|
-
return json({ success: false, error: 'Invalid request', message: 'Role name is required' }, { status: 400 });
|
|
72
|
-
}
|
|
73
|
-
// Built-ins are part of the org's guaranteed floor — deleting one
|
|
74
|
-
// would let a seed run re-create it with stale capabilities. Force the
|
|
75
|
-
// user to edit instead.
|
|
76
|
-
if (BUILTIN_ROLE_NAMES.includes(name)) {
|
|
77
|
-
return forbidden(`"${name}" is a built-in role and cannot be deleted.`);
|
|
78
|
-
}
|
|
79
|
-
// Block deletion while the role is assigned to any member or invitation.
|
|
80
|
-
// Avoids silently orphaning memberships to an unknown role name.
|
|
81
|
-
const members = await databaseAdapter.findOrganizationMembers(auth.organizationId);
|
|
82
|
-
const inUseByMember = members.some((m) => m.role === name);
|
|
83
|
-
const invitations = await databaseAdapter.findOrganizationInvitations(auth.organizationId);
|
|
84
|
-
const inUseByInvitation = invitations.some((i) => i.role === name && !i.acceptedAt);
|
|
85
|
-
if (inUseByMember || inUseByInvitation) {
|
|
86
|
-
return json({
|
|
87
|
-
success: false,
|
|
88
|
-
error: 'Role in use',
|
|
89
|
-
message: `Cannot delete "${name}": reassign affected members or invitations first.`
|
|
90
|
-
}, { status: 409 });
|
|
91
|
-
}
|
|
92
|
-
const deleted = await databaseAdapter.deleteRole(auth.organizationId, name);
|
|
93
|
-
if (!deleted) {
|
|
94
|
-
return json({
|
|
95
|
-
success: false,
|
|
96
|
-
error: 'Not found',
|
|
97
|
-
message: `No role named "${name}" in this organization`
|
|
98
|
-
}, { status: 404 });
|
|
99
|
-
}
|
|
100
|
-
await rolesService.invalidate(auth.organizationId, name);
|
|
101
|
-
return json({ success: true, message: 'Role deleted' });
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
cmsLogger.error('Failed to delete role:', error);
|
|
105
|
-
return json({
|
|
106
|
-
success: false,
|
|
107
|
-
error: 'Failed to delete role',
|
|
108
|
-
message: error instanceof Error ? error.message : 'Unknown error'
|
|
109
|
-
}, { status: 500 });
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
//# sourceMappingURL=roles-by-name.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"roles-by-name.js","sourceRoot":"","sources":["../../../src/lib/routes/roles-by-name.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../../src/lib/routes/roles.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAgBpD,eAAO,MAAM,GAAG,EAAE,cAoBjB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,cA0ElB,CAAC"}
|
package/dist/lib/routes/roles.js
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
// Aphex CMS Roles API Handlers
|
|
2
|
-
//
|
|
3
|
-
// GET /api/roles — list roles for the active org
|
|
4
|
-
// POST /api/roles — create a custom role (requires role.manage)
|
|
5
|
-
import { json } from '@sveltejs/kit';
|
|
6
|
-
import { cmsLogger } from '../utils/logger.js';
|
|
7
|
-
import { hasCapability, BUILTIN_ROLE_NAMES } from '../types/capabilities.js';
|
|
8
|
-
import { createRoleRequest } from '../api/schemas/roles.js';
|
|
9
|
-
function unauthorized() {
|
|
10
|
-
return json({ success: false, error: 'Unauthorized', message: 'Session authentication required' }, { status: 401 });
|
|
11
|
-
}
|
|
12
|
-
function forbidden(message) {
|
|
13
|
-
return json({ success: false, error: 'Forbidden', message }, { status: 403 });
|
|
14
|
-
}
|
|
15
|
-
export const GET = async ({ locals }) => {
|
|
16
|
-
try {
|
|
17
|
-
const { rolesService } = locals.aphexCMS;
|
|
18
|
-
const auth = locals.auth;
|
|
19
|
-
if (!auth || auth.type !== 'session')
|
|
20
|
-
return unauthorized();
|
|
21
|
-
const roles = await rolesService.listRoles(auth.organizationId);
|
|
22
|
-
return json({ success: true, data: roles });
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
cmsLogger.error('Failed to list roles:', error);
|
|
26
|
-
return json({
|
|
27
|
-
success: false,
|
|
28
|
-
error: 'Failed to list roles',
|
|
29
|
-
message: error instanceof Error ? error.message : 'Unknown error'
|
|
30
|
-
}, { status: 500 });
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
export const POST = async ({ request, locals }) => {
|
|
34
|
-
try {
|
|
35
|
-
const { databaseAdapter, rolesService } = locals.aphexCMS;
|
|
36
|
-
const auth = locals.auth;
|
|
37
|
-
if (!auth || auth.type !== 'session')
|
|
38
|
-
return unauthorized();
|
|
39
|
-
if (!hasCapability(auth, 'role.manage')) {
|
|
40
|
-
return forbidden('You do not have permission to manage roles');
|
|
41
|
-
}
|
|
42
|
-
const rawBody = await request.json();
|
|
43
|
-
const parsed = createRoleRequest.safeParse(rawBody);
|
|
44
|
-
if (!parsed.success) {
|
|
45
|
-
return json({
|
|
46
|
-
success: false,
|
|
47
|
-
error: 'Invalid request body',
|
|
48
|
-
message: 'name and capabilities are required',
|
|
49
|
-
issues: parsed.error.issues
|
|
50
|
-
}, { status: 400 });
|
|
51
|
-
}
|
|
52
|
-
const body = parsed.data;
|
|
53
|
-
// Reject collisions with reserved built-in names — built-ins are seeded
|
|
54
|
-
// on every org; a matching custom row would never be reachable.
|
|
55
|
-
if (BUILTIN_ROLE_NAMES.includes(body.name)) {
|
|
56
|
-
return json({
|
|
57
|
-
success: false,
|
|
58
|
-
error: 'Reserved name',
|
|
59
|
-
message: `"${body.name}" is a built-in role name. Edit the existing role instead.`
|
|
60
|
-
}, { status: 409 });
|
|
61
|
-
}
|
|
62
|
-
const existing = await databaseAdapter.findRoleByName(auth.organizationId, body.name);
|
|
63
|
-
if (existing) {
|
|
64
|
-
return json({
|
|
65
|
-
success: false,
|
|
66
|
-
error: 'Conflict',
|
|
67
|
-
message: `A role named "${body.name}" already exists in this organization.`
|
|
68
|
-
}, { status: 409 });
|
|
69
|
-
}
|
|
70
|
-
const role = await databaseAdapter.createRole({
|
|
71
|
-
organizationId: auth.organizationId,
|
|
72
|
-
name: body.name,
|
|
73
|
-
description: body.description ?? null,
|
|
74
|
-
capabilities: body.capabilities,
|
|
75
|
-
isBuiltIn: false
|
|
76
|
-
});
|
|
77
|
-
// New role can't be in use yet, but invalidate the prefix just in case
|
|
78
|
-
// a prior lookup populated the cache with an empty fallback entry.
|
|
79
|
-
await rolesService.invalidate(auth.organizationId, body.name);
|
|
80
|
-
return json({ success: true, data: role }, { status: 201 });
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
cmsLogger.error('Failed to create role:', error);
|
|
84
|
-
return json({
|
|
85
|
-
success: false,
|
|
86
|
-
error: 'Failed to create role',
|
|
87
|
-
message: error instanceof Error ? error.message : 'Unknown error'
|
|
88
|
-
}, { status: 500 });
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
//# sourceMappingURL=roles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../../src/lib/routes/roles.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schemas-by-type.d.ts","sourceRoot":"","sources":["../../../src/lib/routes/schemas-by-type.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,eAAO,MAAM,GAAG,EAAE,cA+BjB,CAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { cmsLogger } from '../utils/logger.js';
|
|
2
|
-
export const GET = async ({ locals, params }) => {
|
|
3
|
-
const { type } = params;
|
|
4
|
-
const { cmsEngine } = locals.aphexCMS;
|
|
5
|
-
if (!type) {
|
|
6
|
-
return new Response(JSON.stringify({ error: 'Schema type is required' }), {
|
|
7
|
-
status: 400,
|
|
8
|
-
headers: { 'content-type': 'application/json' }
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
cmsLogger.debug('GETTING SCHEMA TYPE FROM: ', type);
|
|
12
|
-
const schema = cmsEngine.getSchemaTypeByName(type);
|
|
13
|
-
cmsLogger.debug('SCHEMA: ', schema);
|
|
14
|
-
if (!schema) {
|
|
15
|
-
return new Response(JSON.stringify({ error: `Schema type '${type}' not found` }), {
|
|
16
|
-
status: 404,
|
|
17
|
-
headers: { 'content-type': 'application/json' }
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
return new Response(JSON.stringify({
|
|
21
|
-
success: true,
|
|
22
|
-
data: schema
|
|
23
|
-
}), {
|
|
24
|
-
headers: { 'content-type': 'application/json' }
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=schemas-by-type.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schemas-by-type.js","sourceRoot":"","sources":["../../../src/lib/routes/schemas-by-type.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,GAAG,GAAmB,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;IAC/D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACxB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,EAAE;YACzE,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAC/C,CAAC,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,KAAK,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnD,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,gBAAgB,IAAI,aAAa,EAAE,CAAC,EAAE;YACjF,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAC/C,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,QAAQ,CAClB,IAAI,CAAC,SAAS,CAAC;QACd,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,MAAM;KACZ,CAAC,EACF;QACC,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAC/C,CACD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/lib/routes/schemas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,eAAO,MAAM,GAAG,EAAE,cAejB,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export const GET = async ({ locals }) => {
|
|
2
|
-
const { cmsEngine } = locals.aphexCMS;
|
|
3
|
-
// Get schemas from config (not database) to preserve validation functions
|
|
4
|
-
const schemas = cmsEngine.config.schemaTypes;
|
|
5
|
-
return new Response(JSON.stringify({
|
|
6
|
-
success: true,
|
|
7
|
-
data: schemas
|
|
8
|
-
}), {
|
|
9
|
-
headers: { 'content-type': 'application/json' }
|
|
10
|
-
});
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=schemas.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/lib/routes/schemas.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,GAAG,GAAmB,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACvD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEtC,0EAA0E;IAC1E,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;IAE7C,OAAO,IAAI,QAAQ,CAClB,IAAI,CAAC,SAAS,CAAC;QACd,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,OAAO;KACb,CAAC,EACF;QACC,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAC/C,CACD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user-preferences.d.ts","sourceRoot":"","sources":["../../../src/lib/routes/user-preferences.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKpD,eAAO,MAAM,GAAG,EAAE,cAiCjB,CAAC;AAGF,eAAO,MAAM,KAAK,EAAE,cAoDnB,CAAC"}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
// Aphex CMS User Preferences API Handler
|
|
2
|
-
import { json } from '@sveltejs/kit';
|
|
3
|
-
import { cmsLogger } from '../utils/logger.js';
|
|
4
|
-
import { updateUserPreferencesRequest } from '../api/schemas/user.js';
|
|
5
|
-
// GET /api/user/preferences - Get user preferences
|
|
6
|
-
export const GET = async ({ locals }) => {
|
|
7
|
-
try {
|
|
8
|
-
const { databaseAdapter } = locals.aphexCMS;
|
|
9
|
-
const auth = locals.auth;
|
|
10
|
-
if (!auth || auth.type !== 'session') {
|
|
11
|
-
return json({
|
|
12
|
-
success: false,
|
|
13
|
-
error: 'Unauthorized',
|
|
14
|
-
message: 'Session authentication required'
|
|
15
|
-
}, { status: 401 });
|
|
16
|
-
}
|
|
17
|
-
const userProfile = await databaseAdapter.findUserProfileById(auth.user.id);
|
|
18
|
-
return json({
|
|
19
|
-
success: true,
|
|
20
|
-
data: userProfile?.preferences || {}
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
cmsLogger.error('Failed to get user preferences:', error);
|
|
25
|
-
return json({
|
|
26
|
-
success: false,
|
|
27
|
-
error: 'Failed to get user preferences',
|
|
28
|
-
message: error instanceof Error ? error.message : 'Unknown error'
|
|
29
|
-
}, { status: 500 });
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
// PATCH /api/user/preferences - Update user preferences (partial update)
|
|
33
|
-
export const PATCH = async ({ request, locals }) => {
|
|
34
|
-
try {
|
|
35
|
-
const { databaseAdapter } = locals.aphexCMS;
|
|
36
|
-
const auth = locals.auth;
|
|
37
|
-
if (!auth || auth.type !== 'session') {
|
|
38
|
-
return json({
|
|
39
|
-
success: false,
|
|
40
|
-
error: 'Unauthorized',
|
|
41
|
-
message: 'Session authentication required'
|
|
42
|
-
}, { status: 401 });
|
|
43
|
-
}
|
|
44
|
-
const rawBody = await request.json();
|
|
45
|
-
const parsed = updateUserPreferencesRequest.safeParse(rawBody);
|
|
46
|
-
if (!parsed.success) {
|
|
47
|
-
return json({
|
|
48
|
-
success: false,
|
|
49
|
-
error: 'Invalid request body',
|
|
50
|
-
message: 'Invalid preference values',
|
|
51
|
-
issues: parsed.error.issues
|
|
52
|
-
}, { status: 400 });
|
|
53
|
-
}
|
|
54
|
-
const body = parsed.data;
|
|
55
|
-
// Update preferences
|
|
56
|
-
await databaseAdapter.updateUserPreferences(auth.user.id, body);
|
|
57
|
-
// Get updated profile
|
|
58
|
-
const userProfile = await databaseAdapter.findUserProfileById(auth.user.id);
|
|
59
|
-
return json({
|
|
60
|
-
success: true,
|
|
61
|
-
data: userProfile?.preferences || {}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
cmsLogger.error('Failed to update user preferences:', error);
|
|
66
|
-
return json({
|
|
67
|
-
success: false,
|
|
68
|
-
error: 'Failed to update user preferences',
|
|
69
|
-
message: error instanceof Error ? error.message : 'Unknown error'
|
|
70
|
-
}, { status: 500 });
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
//# sourceMappingURL=user-preferences.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user-preferences.js","sourceRoot":"","sources":["../../../src/lib/routes/user-preferences.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export { GET as getDocuments, POST as createDocument } from './routes/documents.js';
|
|
2
|
-
export { GET as getDocumentById, PUT as updateDocument, DELETE as deleteDocument } from './routes/documents-by-id.js';
|
|
3
|
-
export { POST as publishDocument, DELETE as unpublishDocument } from './routes/documents-publish.js';
|
|
4
|
-
export { GET as getDocumentVersions, getVersion as getDocumentVersion, restoreVersion as restoreDocumentVersion } from './routes/document-versions.js';
|
|
5
|
-
export { GET as getAssets, POST as createAsset } from './routes/assets.js';
|
|
6
|
-
export { GET as getAssetById, PATCH as updateAsset, DELETE as deleteAsset } from './routes/assets-by-id.js';
|
|
7
|
-
export { GET as serveAssetCDN } from './routes/assets-cdn.js';
|
|
8
|
-
export { DELETE as bulkDeleteAssets } from './routes/assets-bulk.js';
|
|
9
|
-
export { GET as getAssetReferences } from './routes/assets-references.js';
|
|
10
|
-
export { POST as getAssetReferenceCounts } from './routes/assets-references-counts.js';
|
|
11
|
-
export { GET as getSchemas } from './routes/schemas.js';
|
|
12
|
-
export { GET as getSchemaByType } from './routes/schemas-by-type.js';
|
|
13
|
-
export { GET as getOrganizations, POST as createOrganization } from './routes/organizations.js';
|
|
14
|
-
export { GET as getOrganizationById, PATCH as updateOrganization, DELETE as deleteOrganization } from './routes/organizations-by-id.js';
|
|
15
|
-
export { POST as switchOrganization } from './routes/organizations-switch.js';
|
|
16
|
-
export { GET as getOrganizationMembers, DELETE as removeMember, PATCH as updateMemberRole } from './routes/organizations-members.js';
|
|
17
|
-
export { POST as inviteMember, DELETE as cancelInvitation } from './routes/organizations-invitations.js';
|
|
18
|
-
export { GET as getRoles, POST as createRole } from './routes/roles.js';
|
|
19
|
-
export { PATCH as updateRole, DELETE as deleteRole } from './routes/roles-by-name.js';
|
|
20
|
-
//# sourceMappingURL=routes-exports.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"routes-exports.d.ts","sourceRoot":"","sources":["../../src/lib/routes-exports.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,IAAI,YAAY,EAAE,IAAI,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EACN,GAAG,IAAI,eAAe,EACtB,GAAG,IAAI,cAAc,EACrB,MAAM,IAAI,cAAc,EACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EACN,GAAG,IAAI,mBAAmB,EAC1B,UAAU,IAAI,kBAAkB,EAChC,cAAc,IAAI,sBAAsB,EACxC,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACN,GAAG,IAAI,YAAY,EACnB,KAAK,IAAI,WAAW,EACpB,MAAM,IAAI,WAAW,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,GAAG,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,GAAG,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,IAAI,IAAI,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAGpF,OAAO,EAAE,GAAG,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,GAAG,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EACN,GAAG,IAAI,mBAAmB,EAC1B,KAAK,IAAI,kBAAkB,EAC3B,MAAM,IAAI,kBAAkB,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EACN,GAAG,IAAI,sBAAsB,EAC7B,MAAM,IAAI,YAAY,EACtB,KAAK,IAAI,gBAAgB,EACzB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACN,IAAI,IAAI,YAAY,EACpB,MAAM,IAAI,gBAAgB,EAC1B,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
// Route handler exports for re-use in apps
|
|
2
|
-
// This file provides named exports to avoid ambiguity
|
|
3
|
-
// Document routes
|
|
4
|
-
export { GET as getDocuments, POST as createDocument } from './routes/documents.js';
|
|
5
|
-
export { GET as getDocumentById, PUT as updateDocument, DELETE as deleteDocument } from './routes/documents-by-id.js';
|
|
6
|
-
export { POST as publishDocument, DELETE as unpublishDocument } from './routes/documents-publish.js';
|
|
7
|
-
export { GET as getDocumentVersions, getVersion as getDocumentVersion, restoreVersion as restoreDocumentVersion } from './routes/document-versions.js';
|
|
8
|
-
// Asset routes
|
|
9
|
-
export { GET as getAssets, POST as createAsset } from './routes/assets.js';
|
|
10
|
-
export { GET as getAssetById, PATCH as updateAsset, DELETE as deleteAsset } from './routes/assets-by-id.js';
|
|
11
|
-
export { GET as serveAssetCDN } from './routes/assets-cdn.js';
|
|
12
|
-
export { DELETE as bulkDeleteAssets } from './routes/assets-bulk.js';
|
|
13
|
-
export { GET as getAssetReferences } from './routes/assets-references.js';
|
|
14
|
-
export { POST as getAssetReferenceCounts } from './routes/assets-references-counts.js';
|
|
15
|
-
// Schema routes
|
|
16
|
-
export { GET as getSchemas } from './routes/schemas.js';
|
|
17
|
-
export { GET as getSchemaByType } from './routes/schemas-by-type.js';
|
|
18
|
-
// Organization routes
|
|
19
|
-
export { GET as getOrganizations, POST as createOrganization } from './routes/organizations.js';
|
|
20
|
-
export { GET as getOrganizationById, PATCH as updateOrganization, DELETE as deleteOrganization } from './routes/organizations-by-id.js';
|
|
21
|
-
export { POST as switchOrganization } from './routes/organizations-switch.js';
|
|
22
|
-
export { GET as getOrganizationMembers, DELETE as removeMember, PATCH as updateMemberRole } from './routes/organizations-members.js';
|
|
23
|
-
export { POST as inviteMember, DELETE as cancelInvitation } from './routes/organizations-invitations.js';
|
|
24
|
-
// Role management routes
|
|
25
|
-
export { GET as getRoles, POST as createRole } from './routes/roles.js';
|
|
26
|
-
export { PATCH as updateRole, DELETE as deleteRole } from './routes/roles-by-name.js';
|
|
27
|
-
//# sourceMappingURL=routes-exports.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"routes-exports.js","sourceRoot":"","sources":["../../src/lib/routes-exports.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,sDAAsD;AAEtD,kBAAkB;AAClB,OAAO,EAAE,GAAG,IAAI,YAAY,EAAE,IAAI,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EACN,GAAG,IAAI,eAAe,EACtB,GAAG,IAAI,cAAc,EACrB,MAAM,IAAI,cAAc,EACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EACN,GAAG,IAAI,mBAAmB,EAC1B,UAAU,IAAI,kBAAkB,EAChC,cAAc,IAAI,sBAAsB,EACxC,MAAM,4BAA4B,CAAC;AAEpC,eAAe;AACf,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACN,GAAG,IAAI,YAAY,EACnB,KAAK,IAAI,WAAW,EACpB,MAAM,IAAI,WAAW,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,GAAG,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,GAAG,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,IAAI,IAAI,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAEpF,gBAAgB;AAChB,OAAO,EAAE,GAAG,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,GAAG,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAElE,sBAAsB;AACtB,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EACN,GAAG,IAAI,mBAAmB,EAC1B,KAAK,IAAI,kBAAkB,EAC3B,MAAM,IAAI,kBAAkB,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EACN,GAAG,IAAI,sBAAsB,EAC7B,MAAM,IAAI,YAAY,EACtB,KAAK,IAAI,gBAAgB,EACzB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACN,IAAI,IAAI,YAAY,EACpB,MAAM,IAAI,gBAAgB,EAC1B,MAAM,oCAAoC,CAAC;AAE5C,yBAAyB;AACzB,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assets-bulk.d.ts","sourceRoot":"","sources":["../../src/lib/routes/assets-bulk.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,eAAO,MAAM,MAAM,EAAE,cAgEpB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assets-by-id.d.ts","sourceRoot":"","sources":["../../src/lib/routes/assets-by-id.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKpD,eAAO,MAAM,GAAG,EAAE,cA6BjB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,cA0CpB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,cA6DnB,CAAC"}
|