@aphexcms/cms-core 2.0.9 → 2.0.11
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/LICENSE +21 -0
- package/dist/api/api-keys.d.ts +8 -7
- package/dist/api/api-keys.d.ts.map +1 -1
- package/dist/api/assets.d.ts +7 -22
- package/dist/api/assets.d.ts.map +1 -1
- package/dist/api/assets.js +1 -10
- package/dist/api/documents.d.ts +17 -16
- package/dist/api/documents.d.ts.map +1 -1
- package/dist/api/documents.js +2 -2
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +1 -0
- package/dist/api/organizations.d.ts +15 -35
- package/dist/api/organizations.d.ts.map +1 -1
- package/dist/api/roles.d.ts +22 -0
- package/dist/api/roles.d.ts.map +1 -0
- package/dist/api/roles.js +26 -0
- package/dist/api/schemas/api-keys.d.ts +62 -0
- package/dist/api/schemas/api-keys.d.ts.map +1 -0
- package/dist/api/schemas/api-keys.js +28 -0
- package/dist/api/schemas/assets.d.ts +174 -0
- package/dist/api/schemas/assets.d.ts.map +1 -0
- package/dist/api/schemas/assets.js +99 -0
- package/dist/api/schemas/documents.d.ts +325 -0
- package/dist/api/schemas/documents.d.ts.map +1 -0
- package/dist/api/schemas/documents.js +161 -0
- package/dist/api/schemas/organizations.d.ts +41 -0
- package/dist/api/schemas/organizations.d.ts.map +1 -0
- package/dist/api/schemas/organizations.js +56 -0
- package/dist/api/schemas/roles.d.ts +77 -0
- package/dist/api/schemas/roles.d.ts.map +1 -0
- package/dist/api/schemas/roles.js +42 -0
- package/dist/api/schemas/user.d.ts +10 -0
- package/dist/api/schemas/user.d.ts.map +1 -0
- package/dist/api/schemas/user.js +11 -0
- package/dist/api/user.d.ts +4 -6
- package/dist/api/user.d.ts.map +1 -1
- package/dist/app-augment.d.ts +32 -0
- package/dist/app-augment.d.ts.map +1 -0
- package/dist/app-augment.js +18 -0
- package/dist/auth/auth-hooks.d.ts +2 -1
- package/dist/auth/auth-hooks.d.ts.map +1 -1
- package/dist/auth/auth-hooks.js +22 -2
- package/dist/auth/provider.d.ts +5 -0
- package/dist/auth/provider.d.ts.map +1 -1
- package/dist/cli/index.js +0 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +7 -0
- package/dist/components/AdminApp.svelte +306 -142
- package/dist/components/AdminApp.svelte.d.ts +8 -0
- package/dist/components/AdminApp.svelte.d.ts.map +1 -1
- package/dist/components/admin/DocumentEditor.svelte +653 -365
- package/dist/components/admin/DocumentEditor.svelte.d.ts +2 -0
- package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
- package/dist/components/admin/DocumentVersionPanel.svelte +57 -44
- package/dist/components/admin/DocumentVersionPanel.svelte.d.ts.map +1 -1
- package/dist/components/admin/MediaBrowser.svelte +70 -30
- package/dist/components/admin/MediaBrowser.svelte.d.ts.map +1 -1
- package/dist/components/admin/ObjectModal.svelte +70 -95
- package/dist/components/admin/ObjectModal.svelte.d.ts +1 -2
- package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -1
- package/dist/components/admin/PermissionsDebug.svelte +119 -0
- package/dist/components/admin/PermissionsDebug.svelte.d.ts +4 -0
- package/dist/components/admin/PermissionsDebug.svelte.d.ts.map +1 -0
- package/dist/components/admin/SchemaField.svelte +3 -1
- package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -1
- package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte +35 -0
- package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte.d.ts +19 -0
- package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte.d.ts.map +1 -0
- package/dist/components/admin/confirm-dialog/confirm-dialog.svelte.d.ts +16 -0
- package/dist/components/admin/confirm-dialog/confirm-dialog.svelte.d.ts.map +1 -0
- package/dist/components/admin/confirm-dialog/confirm-dialog.svelte.js +29 -0
- package/dist/components/admin/fields/ArrayField.svelte +104 -108
- package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/FileField.svelte +22 -17
- package/dist/components/admin/fields/FileField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/ImageField.svelte +21 -15
- package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/ReferenceField.svelte +142 -112
- package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/TextareaField.svelte +4 -3
- package/dist/components/admin/fields/TextareaField.svelte.d.ts +2 -2
- package/dist/components/admin/fields/TextareaField.svelte.d.ts.map +1 -1
- package/dist/components/layout/Sidebar.svelte +21 -11
- package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -1
- package/dist/components/layout/sidebar/NavMain.svelte +1 -0
- package/dist/db/interfaces/document.d.ts.map +1 -1
- package/dist/db/interfaces/index.d.ts +3 -1
- package/dist/db/interfaces/index.d.ts.map +1 -1
- package/dist/db/interfaces/organization.d.ts +1 -1
- package/dist/db/interfaces/organization.d.ts.map +1 -1
- package/dist/db/interfaces/role.d.ts +25 -0
- package/dist/db/interfaces/role.d.ts.map +1 -0
- package/dist/db/interfaces/role.js +1 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +5 -0
- package/dist/field-access.d.ts +30 -0
- package/dist/field-access.d.ts.map +1 -0
- package/dist/field-access.js +79 -0
- package/dist/hooks.d.ts +2 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +23 -13
- package/dist/lib/api/api-keys.d.ts +8 -7
- package/dist/lib/api/api-keys.d.ts.map +1 -1
- package/dist/lib/api/api-keys.js.map +1 -1
- package/dist/lib/api/assets.d.ts +7 -22
- package/dist/lib/api/assets.d.ts.map +1 -1
- package/dist/lib/api/assets.js +1 -10
- package/dist/lib/api/assets.js.map +1 -1
- package/dist/lib/api/documents.d.ts +17 -16
- package/dist/lib/api/documents.d.ts.map +1 -1
- package/dist/lib/api/documents.js +2 -2
- package/dist/lib/api/documents.js.map +1 -1
- package/dist/lib/api/index.d.ts +1 -0
- package/dist/lib/api/index.d.ts.map +1 -1
- package/dist/lib/api/index.js +1 -0
- package/dist/lib/api/index.js.map +1 -1
- package/dist/lib/api/organizations.d.ts +15 -35
- package/dist/lib/api/organizations.d.ts.map +1 -1
- package/dist/lib/api/organizations.js.map +1 -1
- package/dist/lib/api/roles.d.ts +22 -0
- package/dist/lib/api/roles.d.ts.map +1 -0
- package/dist/lib/api/roles.js +27 -0
- package/dist/lib/api/roles.js.map +1 -0
- package/dist/lib/api/schemas/api-keys.d.ts +62 -0
- package/dist/lib/api/schemas/api-keys.d.ts.map +1 -0
- package/dist/lib/api/schemas/api-keys.js +29 -0
- package/dist/lib/api/schemas/api-keys.js.map +1 -0
- package/dist/lib/api/schemas/assets.d.ts +174 -0
- package/dist/lib/api/schemas/assets.d.ts.map +1 -0
- package/dist/lib/api/schemas/assets.js +100 -0
- package/dist/lib/api/schemas/assets.js.map +1 -0
- package/dist/lib/api/schemas/documents.d.ts +325 -0
- package/dist/lib/api/schemas/documents.d.ts.map +1 -0
- package/dist/lib/api/schemas/documents.js +162 -0
- package/dist/lib/api/schemas/documents.js.map +1 -0
- package/dist/lib/api/schemas/organizations.d.ts +41 -0
- package/dist/lib/api/schemas/organizations.d.ts.map +1 -0
- package/dist/lib/api/schemas/organizations.js +57 -0
- package/dist/lib/api/schemas/organizations.js.map +1 -0
- package/dist/lib/api/schemas/roles.d.ts +77 -0
- package/dist/lib/api/schemas/roles.d.ts.map +1 -0
- package/dist/lib/api/schemas/roles.js +43 -0
- package/dist/lib/api/schemas/roles.js.map +1 -0
- package/dist/lib/api/schemas/user.d.ts +10 -0
- package/dist/lib/api/schemas/user.d.ts.map +1 -0
- package/dist/lib/api/schemas/user.js +12 -0
- package/dist/lib/api/schemas/user.js.map +1 -0
- package/dist/lib/api/user.d.ts +4 -6
- package/dist/lib/api/user.d.ts.map +1 -1
- package/dist/lib/api/user.js.map +1 -1
- package/dist/lib/app-augment.d.ts +32 -0
- package/dist/lib/app-augment.d.ts.map +1 -0
- package/dist/lib/app-augment.js +19 -0
- package/dist/lib/app-augment.js.map +1 -0
- package/dist/lib/auth/auth-hooks.d.ts +2 -1
- package/dist/lib/auth/auth-hooks.d.ts.map +1 -1
- package/dist/lib/auth/auth-hooks.js +22 -2
- package/dist/lib/auth/auth-hooks.js.map +1 -1
- package/dist/lib/auth/provider.d.ts +5 -0
- package/dist/lib/auth/provider.d.ts.map +1 -1
- package/dist/lib/client/index.d.ts +4 -0
- package/dist/lib/client/index.d.ts.map +1 -1
- package/dist/lib/client/index.js +7 -0
- package/dist/lib/client/index.js.map +1 -1
- package/dist/lib/components/admin/confirm-dialog/confirm-dialog.svelte.d.ts +16 -0
- package/dist/lib/components/admin/confirm-dialog/confirm-dialog.svelte.d.ts.map +1 -0
- package/dist/lib/components/admin/confirm-dialog/confirm-dialog.svelte.js +30 -0
- package/dist/lib/components/admin/confirm-dialog/confirm-dialog.svelte.js.map +1 -0
- package/dist/lib/db/interfaces/document.d.ts.map +1 -1
- package/dist/lib/db/interfaces/index.d.ts +3 -1
- package/dist/lib/db/interfaces/index.d.ts.map +1 -1
- package/dist/lib/db/interfaces/organization.d.ts +1 -1
- package/dist/lib/db/interfaces/organization.d.ts.map +1 -1
- package/dist/lib/db/interfaces/role.d.ts +25 -0
- package/dist/lib/db/interfaces/role.d.ts.map +1 -0
- package/dist/lib/db/interfaces/role.js +2 -0
- package/dist/lib/db/interfaces/role.js.map +1 -0
- package/dist/lib/engine.d.ts.map +1 -1
- package/dist/lib/engine.js +5 -0
- package/dist/lib/engine.js.map +1 -1
- package/dist/lib/field-access.d.ts +30 -0
- package/dist/lib/field-access.d.ts.map +1 -0
- package/dist/lib/field-access.js +80 -0
- package/dist/lib/field-access.js.map +1 -0
- package/dist/lib/hooks.d.ts +2 -0
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +23 -13
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/local-api/collection-api.d.ts +2 -0
- package/dist/lib/local-api/collection-api.d.ts.map +1 -1
- package/dist/lib/local-api/collection-api.js +98 -30
- package/dist/lib/local-api/collection-api.js.map +1 -1
- package/dist/lib/local-api/index.d.ts.map +1 -1
- package/dist/lib/local-api/index.js.map +1 -1
- package/dist/lib/local-api/permissions.d.ts +26 -26
- package/dist/lib/local-api/permissions.d.ts.map +1 -1
- package/dist/lib/local-api/permissions.js +122 -80
- package/dist/lib/local-api/permissions.js.map +1 -1
- package/dist/lib/permissions-context.svelte.d.ts +44 -0
- package/dist/lib/permissions-context.svelte.d.ts.map +1 -0
- package/dist/lib/permissions-context.svelte.js +80 -0
- package/dist/lib/permissions-context.svelte.js.map +1 -0
- package/dist/lib/routes/assets-bulk.d.ts.map +1 -1
- package/dist/lib/routes/assets-bulk.js +10 -3
- package/dist/lib/routes/assets-bulk.js.map +1 -1
- package/dist/lib/routes/assets-by-id.d.ts.map +1 -1
- package/dist/lib/routes/assets-by-id.js +11 -1
- package/dist/lib/routes/assets-by-id.js.map +1 -1
- package/dist/lib/routes/assets-references-counts.d.ts.map +1 -1
- package/dist/lib/routes/assets-references-counts.js +12 -2
- package/dist/lib/routes/assets-references-counts.js.map +1 -1
- package/dist/lib/routes/assets.d.ts.map +1 -1
- package/dist/lib/routes/assets.js +14 -13
- package/dist/lib/routes/assets.js.map +1 -1
- package/dist/lib/routes/document-versions.d.ts.map +1 -1
- package/dist/lib/routes/document-versions.js +16 -2
- package/dist/lib/routes/document-versions.js.map +1 -1
- package/dist/lib/routes/documents-by-id.d.ts.map +1 -1
- package/dist/lib/routes/documents-by-id.js +15 -3
- package/dist/lib/routes/documents-by-id.js.map +1 -1
- package/dist/lib/routes/documents-query.d.ts.map +1 -1
- package/dist/lib/routes/documents-query.js +13 -10
- package/dist/lib/routes/documents-query.js.map +1 -1
- package/dist/lib/routes/documents.d.ts.map +1 -1
- package/dist/lib/routes/documents.js +29 -26
- package/dist/lib/routes/documents.js.map +1 -1
- package/dist/lib/routes/organizations-by-id.d.ts.map +1 -1
- package/dist/lib/routes/organizations-by-id.js +17 -4
- package/dist/lib/routes/organizations-by-id.js.map +1 -1
- package/dist/lib/routes/organizations-invitations.d.ts.map +1 -1
- package/dist/lib/routes/organizations-invitations.js +48 -18
- package/dist/lib/routes/organizations-invitations.js.map +1 -1
- package/dist/lib/routes/organizations-members.d.ts.map +1 -1
- package/dist/lib/routes/organizations-members.js +24 -18
- package/dist/lib/routes/organizations-members.js.map +1 -1
- package/dist/lib/routes/organizations-switch.d.ts.map +1 -1
- package/dist/lib/routes/organizations-switch.js +7 -3
- package/dist/lib/routes/organizations-switch.js.map +1 -1
- package/dist/lib/routes/organizations.d.ts.map +1 -1
- package/dist/lib/routes/organizations.js +11 -5
- package/dist/lib/routes/organizations.js.map +1 -1
- package/dist/lib/routes/roles-by-name.d.ts +4 -0
- package/dist/lib/routes/roles-by-name.d.ts.map +1 -0
- package/dist/lib/routes/roles-by-name.js +112 -0
- package/dist/lib/routes/roles-by-name.js.map +1 -0
- package/dist/lib/routes/roles.d.ts +4 -0
- package/dist/lib/routes/roles.d.ts.map +1 -0
- package/dist/lib/routes/roles.js +91 -0
- package/dist/lib/routes/roles.js.map +1 -0
- package/dist/lib/routes/user-preferences.d.ts.map +1 -1
- package/dist/lib/routes/user-preferences.js +7 -13
- package/dist/lib/routes/user-preferences.js.map +1 -1
- package/dist/lib/routes-exports.d.ts +2 -0
- package/dist/lib/routes-exports.d.ts.map +1 -1
- package/dist/lib/routes-exports.js +3 -0
- package/dist/lib/routes-exports.js.map +1 -1
- package/dist/lib/save-state-context.svelte.d.ts +8 -0
- package/dist/lib/save-state-context.svelte.d.ts.map +1 -0
- package/dist/lib/save-state-context.svelte.js +9 -0
- package/dist/lib/save-state-context.svelte.js.map +1 -0
- package/dist/lib/schema-utils/validator.d.ts.map +1 -1
- package/dist/lib/schema-utils/validator.js +14 -0
- package/dist/lib/schema-utils/validator.js.map +1 -1
- package/dist/lib/server/index.d.ts +1 -0
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +1 -0
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/services/index.d.ts +1 -0
- package/dist/lib/services/index.d.ts.map +1 -1
- package/dist/lib/services/index.js +1 -0
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/roles-service.d.ts +35 -0
- package/dist/lib/services/roles-service.d.ts.map +1 -0
- package/dist/lib/services/roles-service.js +91 -0
- package/dist/lib/services/roles-service.js.map +1 -0
- package/dist/lib/services/version-service.d.ts.map +1 -1
- package/dist/lib/services/version-service.js.map +1 -1
- package/dist/lib/types/auth.d.ts +43 -9
- package/dist/lib/types/auth.d.ts.map +1 -1
- package/dist/lib/types/auth.js +31 -26
- package/dist/lib/types/auth.js.map +1 -1
- package/dist/lib/types/capabilities.d.ts +104 -0
- package/dist/lib/types/capabilities.d.ts.map +1 -0
- package/dist/lib/types/capabilities.js +217 -0
- package/dist/lib/types/capabilities.js.map +1 -0
- package/dist/lib/types/index.d.ts +1 -0
- package/dist/lib/types/index.d.ts.map +1 -1
- package/dist/lib/types/index.js +1 -0
- package/dist/lib/types/index.js.map +1 -1
- package/dist/lib/types/organization.d.ts +13 -4
- package/dist/lib/types/organization.d.ts.map +1 -1
- package/dist/lib/types/schemas.d.ts +71 -0
- package/dist/lib/types/schemas.d.ts.map +1 -1
- package/dist/lib/types/sidebar.d.ts +1 -1
- package/dist/lib/types/sidebar.d.ts.map +1 -1
- package/dist/lib/utils/mime-detect.d.ts.map +1 -1
- package/dist/lib/utils/mime-detect.js +28 -6
- package/dist/lib/utils/mime-detect.js.map +1 -1
- package/dist/local-api/collection-api.d.ts +2 -0
- package/dist/local-api/collection-api.d.ts.map +1 -1
- package/dist/local-api/collection-api.js +98 -30
- package/dist/local-api/index.d.ts.map +1 -1
- package/dist/local-api/permissions.d.ts +26 -26
- package/dist/local-api/permissions.d.ts.map +1 -1
- package/dist/local-api/permissions.js +122 -80
- package/dist/permissions-context.svelte.d.ts +44 -0
- package/dist/permissions-context.svelte.d.ts.map +1 -0
- package/dist/permissions-context.svelte.js +79 -0
- package/dist/plugins/README.md +20 -20
- package/dist/routes/assets-bulk.d.ts.map +1 -1
- package/dist/routes/assets-bulk.js +10 -3
- package/dist/routes/assets-by-id.d.ts.map +1 -1
- package/dist/routes/assets-by-id.js +11 -1
- package/dist/routes/assets-references-counts.d.ts.map +1 -1
- package/dist/routes/assets-references-counts.js +12 -2
- package/dist/routes/assets.d.ts.map +1 -1
- package/dist/routes/assets.js +14 -13
- package/dist/routes/document-versions.d.ts.map +1 -1
- package/dist/routes/document-versions.js +16 -2
- package/dist/routes/documents-by-id.d.ts.map +1 -1
- package/dist/routes/documents-by-id.js +15 -3
- package/dist/routes/documents-query.d.ts.map +1 -1
- package/dist/routes/documents-query.js +13 -10
- package/dist/routes/documents.d.ts.map +1 -1
- package/dist/routes/documents.js +29 -26
- package/dist/routes/organizations-by-id.d.ts.map +1 -1
- package/dist/routes/organizations-by-id.js +17 -4
- package/dist/routes/organizations-invitations.d.ts.map +1 -1
- package/dist/routes/organizations-invitations.js +48 -18
- package/dist/routes/organizations-members.d.ts.map +1 -1
- package/dist/routes/organizations-members.js +24 -18
- package/dist/routes/organizations-switch.d.ts.map +1 -1
- package/dist/routes/organizations-switch.js +7 -3
- package/dist/routes/organizations.d.ts.map +1 -1
- package/dist/routes/organizations.js +11 -5
- package/dist/routes/roles-by-name.d.ts +4 -0
- package/dist/routes/roles-by-name.d.ts.map +1 -0
- package/dist/routes/roles-by-name.js +111 -0
- package/dist/routes/roles.d.ts +4 -0
- package/dist/routes/roles.d.ts.map +1 -0
- package/dist/routes/roles.js +90 -0
- package/dist/routes/user-preferences.d.ts.map +1 -1
- package/dist/routes/user-preferences.js +7 -13
- package/dist/routes-exports.d.ts +2 -0
- package/dist/routes-exports.d.ts.map +1 -1
- package/dist/routes-exports.js +3 -0
- package/dist/save-state-context.svelte.d.ts +8 -0
- package/dist/save-state-context.svelte.d.ts.map +1 -0
- package/dist/save-state-context.svelte.js +8 -0
- package/dist/schema-utils/validator.d.ts.map +1 -1
- package/dist/schema-utils/validator.js +14 -0
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -0
- package/dist/services/roles-service.d.ts +35 -0
- package/dist/services/roles-service.d.ts.map +1 -0
- package/dist/services/roles-service.js +90 -0
- package/dist/services/version-service.d.ts.map +1 -1
- package/dist/types/auth.d.ts +43 -9
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/auth.js +31 -26
- package/dist/types/capabilities.d.ts +104 -0
- package/dist/types/capabilities.d.ts.map +1 -0
- package/dist/types/capabilities.js +216 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/organization.d.ts +13 -4
- package/dist/types/organization.d.ts.map +1 -1
- package/dist/types/schemas.d.ts +71 -0
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/sidebar.d.ts +1 -1
- package/dist/types/sidebar.d.ts.map +1 -1
- package/dist/utils/mime-detect.d.ts.map +1 -1
- package/dist/utils/mime-detect.js +28 -6
- package/package.json +142 -138
|
@@ -103,6 +103,20 @@ export function validateSchemaReferences(schemas) {
|
|
|
103
103
|
validateField(field, schema.name);
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
+
// Validate field.group references against schema.groups
|
|
107
|
+
if (schema.fields) {
|
|
108
|
+
const groupNames = new Set((schema.groups ?? []).map((g) => g.name));
|
|
109
|
+
for (const field of schema.fields) {
|
|
110
|
+
if (!field.group)
|
|
111
|
+
continue;
|
|
112
|
+
const refs = Array.isArray(field.group) ? field.group : [field.group];
|
|
113
|
+
for (const ref of refs) {
|
|
114
|
+
if (!groupNames.has(ref)) {
|
|
115
|
+
errors.push(`Schema "${schema.name}" field "${field.name}" references unknown group "${ref}". Declare it in schema.groups.`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
106
120
|
// Validate preview config references
|
|
107
121
|
if (schema.preview?.select) {
|
|
108
122
|
const fieldNames = new Set(schema.fields?.map((f) => f.name) || []);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/lib/schema-utils/validator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/lib/schema-utils/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export * from '../storage/interfaces/index.js';
|
|
|
12
12
|
export * from '../storage/providers/storage.js';
|
|
13
13
|
export * from '../services/index.js';
|
|
14
14
|
export { AssetService } from '../services/asset-service.js';
|
|
15
|
+
export { RolesService } from '../services/roles-service.js';
|
|
15
16
|
export * from '../routes-exports.js';
|
|
16
17
|
export * from '../schema-utils/index.js';
|
|
17
18
|
export { createHashForPublishing } from '../utils/content-hash.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/server/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAE/B,cAAc,kBAAkB,CAAC;AAEjC,cAAc,gBAAgB,CAAC;AAE/B,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAG5D,cAAc,wBAAwB,CAAC;AAGvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAG7C,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIzD,cAAc,mBAAmB,CAAC;AAGlC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,OAAO,EACN,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACN,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/server/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAE/B,cAAc,kBAAkB,CAAC;AAEjC,cAAc,gBAAgB,CAAC;AAE/B,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAG5D,cAAc,wBAAwB,CAAC;AAGvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAG7C,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIzD,cAAc,mBAAmB,CAAC;AAGlC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,OAAO,EACN,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACN,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,MAAM,oBAAoB,CAAC"}
|
package/dist/lib/server/index.js
CHANGED
|
@@ -22,6 +22,7 @@ export * from '../storage/providers/storage.js';
|
|
|
22
22
|
// Services (includes sharp for image processing)
|
|
23
23
|
export * from '../services/index.js';
|
|
24
24
|
export { AssetService } from '../services/asset-service.js';
|
|
25
|
+
export { RolesService } from '../services/roles-service.js';
|
|
25
26
|
// API Route handlers (for re-exporting in your app's API routes)
|
|
26
27
|
// Re-export from routes-exports to avoid .js extension issues in workspace
|
|
27
28
|
export * from '../routes-exports.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/server/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,+DAA+D;AAE/D,sDAAsD;AACtD,cAAc,gBAAgB,CAAC;AAE/B,cAAc,kBAAkB,CAAC;AAEjC,cAAc,gBAAgB,CAAC;AAE/B,cAAc,gBAAgB,CAAC;AAE/B,wBAAwB;AACxB,OAAO,EAAE,SAAS,EAAsB,MAAM,qBAAqB,CAAC;AAEpE,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,6CAA6C;AAC7C,OAAO,EAAE,aAAa,EAAqB,MAAM,UAAU,CAAC;AAE5D,qFAAqF;AACrF,cAAc,wBAAwB,CAAC;AAEvC,kCAAkC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAE7C,iDAAiD;AACjD,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,iEAAiE;AACjE,2EAA2E;AAC3E,cAAc,mBAAmB,CAAC;AAElC,mBAAmB;AACnB,cAAc,uBAAuB,CAAC;AAEtC,uCAAuC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,yCAAyC;AACzC,OAAO,EACN,oBAAoB,EAIpB,MAAM,kBAAkB,CAAC;AAE1B,uCAAuC;AACvC,OAAO,EACN,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,EAKf,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/server/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,+DAA+D;AAE/D,sDAAsD;AACtD,cAAc,gBAAgB,CAAC;AAE/B,cAAc,kBAAkB,CAAC;AAEjC,cAAc,gBAAgB,CAAC;AAE/B,cAAc,gBAAgB,CAAC;AAE/B,wBAAwB;AACxB,OAAO,EAAE,SAAS,EAAsB,MAAM,qBAAqB,CAAC;AAEpE,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,6CAA6C;AAC7C,OAAO,EAAE,aAAa,EAAqB,MAAM,UAAU,CAAC;AAE5D,qFAAqF;AACrF,cAAc,wBAAwB,CAAC;AAEvC,kCAAkC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAE7C,iDAAiD;AACjD,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,iEAAiE;AACjE,2EAA2E;AAC3E,cAAc,mBAAmB,CAAC;AAElC,mBAAmB;AACnB,cAAc,uBAAuB,CAAC;AAEtC,uCAAuC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,yCAAyC;AACzC,OAAO,EACN,oBAAoB,EAIpB,MAAM,kBAAkB,CAAC;AAE1B,uCAAuC;AACvC,OAAO,EACN,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,EAKf,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { AssetService } from './asset-service.js';
|
|
2
2
|
export type { AssetUploadData, AssetFilters } from './asset-service.js';
|
|
3
3
|
export { HierarchyService } from './hierarchy-service.js';
|
|
4
|
+
export { RolesService } from './roles-service.js';
|
|
4
5
|
export { VersionService } from './version-service.js';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/services/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/services/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -3,5 +3,6 @@
|
|
|
3
3
|
// Re-export services
|
|
4
4
|
export { AssetService } from './asset-service.js';
|
|
5
5
|
export { HierarchyService } from './hierarchy-service.js';
|
|
6
|
+
export { RolesService } from './roles-service.js';
|
|
6
7
|
export { VersionService } from './version-service.js';
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/services/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,uBAAuB;AAEvB,qBAAqB;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/services/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,uBAAuB;AAEvB,qBAAqB;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { CacheAdapter } from '../cache/index.js';
|
|
2
|
+
import type { DatabaseAdapter } from '../db/index.js';
|
|
3
|
+
import { type Capability, type Role } from '../types/capabilities.js';
|
|
4
|
+
/**
|
|
5
|
+
* RolesService — caches per-org role capability lookups.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors HierarchyService's shape so both services share cache and
|
|
8
|
+
* in-flight deduplication patterns.
|
|
9
|
+
*/
|
|
10
|
+
export declare class RolesService {
|
|
11
|
+
private db;
|
|
12
|
+
private cache;
|
|
13
|
+
private ttl;
|
|
14
|
+
private static DEFAULT_TTL;
|
|
15
|
+
private inflight;
|
|
16
|
+
constructor(db: DatabaseAdapter, cache?: CacheAdapter | null, ttl?: number);
|
|
17
|
+
/**
|
|
18
|
+
* Resolve the capability list for `(organizationId, roleName)`.
|
|
19
|
+
*
|
|
20
|
+
* Fallback order:
|
|
21
|
+
* 1. Cache hit.
|
|
22
|
+
* 2. DB lookup for the `(org, name)` row.
|
|
23
|
+
* 3. Built-in seed if the name matches a built-in.
|
|
24
|
+
* 4. Empty list — unknown role → no capabilities.
|
|
25
|
+
*/
|
|
26
|
+
getCapabilities(organizationId: string, roleName: string): Promise<Capability[]>;
|
|
27
|
+
/** List every role defined for an organization. */
|
|
28
|
+
listRoles(organizationId: string): Promise<Role[]>;
|
|
29
|
+
/** Idempotent — safe to call on every request if you want. */
|
|
30
|
+
ensureBuiltins(organizationId: string): Promise<void>;
|
|
31
|
+
/** Invalidate cache entries for a single role. Call after mutation. */
|
|
32
|
+
invalidate(organizationId: string, roleName?: string): Promise<void>;
|
|
33
|
+
private resolveFromDb;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=roles-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles-service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/roles-service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAGN,KAAK,UAAU,EACf,KAAK,IAAI,EACT,MAAM,uBAAuB,CAAC;AAI/B;;;;;GAKG;AACH,qBAAa,YAAY;IAKvB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,GAAG;IANZ,OAAO,CAAC,MAAM,CAAC,WAAW,CAAM;IAChC,OAAO,CAAC,QAAQ,CAA4C;gBAGnD,EAAE,EAAE,eAAe,EACnB,KAAK,GAAE,YAAY,GAAG,IAAW,EACjC,GAAG,GAAE,MAAiC;IAG/C;;;;;;;;OAQG;IACG,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAqBtF,mDAAmD;IAC7C,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIxD,8DAA8D;IACxD,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,uEAAuE;IACjE,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAW5D,aAAa;CA2B3B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// services/roles-service.ts
|
|
2
|
+
//
|
|
3
|
+
// Resolves an org + role name to a concrete capability set, with a TTL cache
|
|
4
|
+
// and a built-in fallback so a missing row never locks an org out.
|
|
5
|
+
import { BUILTIN_ROLE_SEED, BUILTIN_ROLE_NAMES } from '../types/capabilities.js';
|
|
6
|
+
import { cmsLogger } from '../utils/logger.js';
|
|
7
|
+
/**
|
|
8
|
+
* RolesService — caches per-org role capability lookups.
|
|
9
|
+
*
|
|
10
|
+
* Mirrors HierarchyService's shape so both services share cache and
|
|
11
|
+
* in-flight deduplication patterns.
|
|
12
|
+
*/
|
|
13
|
+
export class RolesService {
|
|
14
|
+
db;
|
|
15
|
+
cache;
|
|
16
|
+
ttl;
|
|
17
|
+
static DEFAULT_TTL = 30; // 30 seconds — roles change infrequently but should pick up edits quickly.
|
|
18
|
+
inflight = new Map();
|
|
19
|
+
constructor(db, cache = null, ttl = RolesService.DEFAULT_TTL) {
|
|
20
|
+
this.db = db;
|
|
21
|
+
this.cache = cache;
|
|
22
|
+
this.ttl = ttl;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Resolve the capability list for `(organizationId, roleName)`.
|
|
26
|
+
*
|
|
27
|
+
* Fallback order:
|
|
28
|
+
* 1. Cache hit.
|
|
29
|
+
* 2. DB lookup for the `(org, name)` row.
|
|
30
|
+
* 3. Built-in seed if the name matches a built-in.
|
|
31
|
+
* 4. Empty list — unknown role → no capabilities.
|
|
32
|
+
*/
|
|
33
|
+
async getCapabilities(organizationId, roleName) {
|
|
34
|
+
const key = cacheKey(organizationId, roleName);
|
|
35
|
+
if (this.cache) {
|
|
36
|
+
const cached = await this.cache.get(key);
|
|
37
|
+
if (cached)
|
|
38
|
+
return cached;
|
|
39
|
+
}
|
|
40
|
+
const existing = this.inflight.get(key);
|
|
41
|
+
if (existing)
|
|
42
|
+
return existing;
|
|
43
|
+
const promise = this.resolveFromDb(organizationId, roleName).then(async (caps) => {
|
|
44
|
+
if (this.cache)
|
|
45
|
+
await this.cache.set(key, caps, this.ttl);
|
|
46
|
+
this.inflight.delete(key);
|
|
47
|
+
return caps;
|
|
48
|
+
});
|
|
49
|
+
this.inflight.set(key, promise);
|
|
50
|
+
return promise;
|
|
51
|
+
}
|
|
52
|
+
/** List every role defined for an organization. */
|
|
53
|
+
async listRoles(organizationId) {
|
|
54
|
+
return this.db.listRoles(organizationId);
|
|
55
|
+
}
|
|
56
|
+
/** Idempotent — safe to call on every request if you want. */
|
|
57
|
+
async ensureBuiltins(organizationId) {
|
|
58
|
+
await this.db.seedBuiltinRoles(organizationId);
|
|
59
|
+
}
|
|
60
|
+
/** Invalidate cache entries for a single role. Call after mutation. */
|
|
61
|
+
async invalidate(organizationId, roleName) {
|
|
62
|
+
if (!this.cache)
|
|
63
|
+
return;
|
|
64
|
+
if (roleName) {
|
|
65
|
+
await this.cache.delete(cacheKey(organizationId, roleName));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
await this.cache.invalidateByPrefix(`roles:${organizationId}:`);
|
|
69
|
+
}
|
|
70
|
+
// ---- internals -----------------------------------------------------------
|
|
71
|
+
async resolveFromDb(organizationId, roleName) {
|
|
72
|
+
const row = await this.db.findRoleByName(organizationId, roleName);
|
|
73
|
+
if (row) {
|
|
74
|
+
cmsLogger.debug('[RBAC]', `Resolved role "${roleName}" in org=${organizationId} via DB (${row.capabilities.length} caps)`);
|
|
75
|
+
return row.capabilities;
|
|
76
|
+
}
|
|
77
|
+
// Defense in depth: if a built-in row went missing (e.g. not yet seeded
|
|
78
|
+
// on a pre-existing org), fall back to the hard-coded seed so the app
|
|
79
|
+
// stays functional until `ensureBuiltins` runs.
|
|
80
|
+
if (BUILTIN_ROLE_NAMES.includes(roleName)) {
|
|
81
|
+
cmsLogger.warn('[RBAC]', `Role "${roleName}" not found in org=${organizationId} — using BUILTIN_ROLE_SEED fallback. Run ensureBuiltins.`);
|
|
82
|
+
return [...BUILTIN_ROLE_SEED[roleName].capabilities];
|
|
83
|
+
}
|
|
84
|
+
cmsLogger.warn('[RBAC]', `Unknown role "${roleName}" in org=${organizationId} — granting no capabilities`);
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function cacheKey(organizationId, roleName) {
|
|
89
|
+
return `roles:${organizationId}:${roleName}`;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=roles-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles-service.js","sourceRoot":"","sources":["../../../src/lib/services/roles-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/version-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE7E;;;;;;GAMG;AACH,qBAAa,cAAc;IAC1B,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAI9C;;OAEG;IACG,aAAa,CAClB,EAAE,EAAE,eAAe,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,GAAG,SAAS,EAC9B,IAAI,EAAE,GAAG,EACT,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAelC;;OAEG;IACG,eAAe,CACpB,EAAE,EAAE,eAAe,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,GAAG,EACT,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IA2B3B;;OAEG;IACG,kBAAkB,CACvB,EAAE,EAAE,eAAe,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAgB3B;;OAEG;IACG,cAAc,CACnB,EAAE,EAAE,eAAe,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAqCrB,YAAY,CACjB,EAAE,EAAE,eAAe,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CAAC,mBAAmB,CAAC;IAKzB,UAAU,CACf,EAAE,EAAE,eAAe,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;YAKpB,gBAAgB;
|
|
1
|
+
{"version":3,"file":"version-service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/version-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE7E;;;;;;GAMG;AACH,qBAAa,cAAc;IAC1B,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAI9C;;OAEG;IACG,aAAa,CAClB,EAAE,EAAE,eAAe,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,GAAG,SAAS,EAC9B,IAAI,EAAE,GAAG,EACT,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAelC;;OAEG;IACG,eAAe,CACpB,EAAE,EAAE,eAAe,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,GAAG,EACT,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IA2B3B;;OAEG;IACG,kBAAkB,CACvB,EAAE,EAAE,eAAe,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAgB3B;;OAEG;IACG,cAAc,CACnB,EAAE,EAAE,eAAe,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAqCrB,YAAY,CACjB,EAAE,EAAE,eAAe,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CAAC,mBAAmB,CAAC;IAKzB,UAAU,CACf,EAAE,EAAE,eAAe,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;YAKpB,gBAAgB;CAuB9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-service.js","sourceRoot":"","sources":["../../../src/lib/services/version-service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"version-service.js","sourceRoot":"","sources":["../../../src/lib/services/version-service.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/types/auth.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CMSUser } from './user.js';
|
|
2
2
|
import type { OrganizationRole } from './organization.js';
|
|
3
|
+
import type { Capability } from './capabilities.js';
|
|
3
4
|
export interface SessionAuth {
|
|
4
5
|
type: 'session';
|
|
5
6
|
user: CMSUser;
|
|
@@ -8,12 +9,26 @@ export interface SessionAuth {
|
|
|
8
9
|
expiresAt: Date;
|
|
9
10
|
};
|
|
10
11
|
organizationId: string;
|
|
11
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Role name for the user in the active organization.
|
|
14
|
+
*
|
|
15
|
+
* Built-in roles (`owner`/`admin`/`editor`/`viewer`) are typed as the
|
|
16
|
+
* `OrganizationRole` union; custom roles defined per-org are plain
|
|
17
|
+
* strings. Consumers that need to branch on built-ins should use
|
|
18
|
+
* `effectiveOrganizationRole` from types/capabilities.
|
|
19
|
+
*/
|
|
20
|
+
organizationRole: OrganizationRole | string;
|
|
21
|
+
/**
|
|
22
|
+
* Capabilities resolved for this session by the auth hook (RolesService).
|
|
23
|
+
* Present for fully-authenticated sessions. When absent, callers fall
|
|
24
|
+
* back to built-in seed values — see `resolveCapabilities`.
|
|
25
|
+
*/
|
|
26
|
+
capabilities?: Capability[];
|
|
12
27
|
organizations?: Array<{
|
|
13
28
|
id: string;
|
|
14
29
|
name: string;
|
|
15
30
|
slug: string;
|
|
16
|
-
role: OrganizationRole;
|
|
31
|
+
role: OrganizationRole | string;
|
|
17
32
|
isActive: boolean;
|
|
18
33
|
metadata?: any;
|
|
19
34
|
}>;
|
|
@@ -34,29 +49,48 @@ export interface ApiKeyAuth {
|
|
|
34
49
|
type: 'api_key';
|
|
35
50
|
keyId: string;
|
|
36
51
|
name: string;
|
|
52
|
+
/**
|
|
53
|
+
* Legacy coarse-grained scopes: `read` (read capabilities) and `write`
|
|
54
|
+
* (mutating capabilities). Preserved for backwards compatibility with
|
|
55
|
+
* keys issued before the fine-grained capability model. Still used as
|
|
56
|
+
* the fallback source when `capabilities` is not populated.
|
|
57
|
+
*/
|
|
37
58
|
permissions: ('read' | 'write')[];
|
|
59
|
+
/**
|
|
60
|
+
* Fine-grained capability allowlist for this API key. When present,
|
|
61
|
+
* overrides the coarse `permissions` mapping — the key can do exactly
|
|
62
|
+
* what's listed and nothing else. Storage format on the key metadata
|
|
63
|
+
* matches the Capability union.
|
|
64
|
+
*/
|
|
65
|
+
capabilities?: Capability[];
|
|
38
66
|
organizationId: string;
|
|
39
67
|
environment?: string;
|
|
40
68
|
lastUsedAt?: Date;
|
|
41
69
|
}
|
|
42
70
|
export type Auth = SessionAuth | PartialSessionAuth | ApiKeyAuth;
|
|
43
71
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
72
|
+
* Does the user have *any* mutating capability?
|
|
73
|
+
*
|
|
74
|
+
* Coarse-grained on purpose: this is for UI gating where you just want to
|
|
75
|
+
* decide whether to show the entire edit/upload surface. Don't use it to
|
|
76
|
+
* authorise a specific mutation — the server's PermissionChecker does that
|
|
77
|
+
* per-operation (canCreate vs canUpdate vs canDelete, etc).
|
|
46
78
|
*/
|
|
47
79
|
export declare function canWrite(auth: Auth): boolean;
|
|
48
80
|
/**
|
|
49
|
-
*
|
|
50
|
-
* Only owners and admins can manage members
|
|
81
|
+
* Can the user manage organization members (invite / remove / change role)?
|
|
51
82
|
*/
|
|
52
83
|
export declare function canManageMembers(auth: Auth): boolean;
|
|
53
84
|
/**
|
|
54
|
-
*
|
|
55
|
-
* Only owners and admins can manage API keys
|
|
85
|
+
* Can the user manage API keys?
|
|
56
86
|
*/
|
|
57
87
|
export declare function canManageApiKeys(auth: Auth): boolean;
|
|
58
88
|
/**
|
|
59
|
-
*
|
|
89
|
+
* Is this session effectively read-only?
|
|
90
|
+
*
|
|
91
|
+
* Inverse of `canWrite`. Named for historical reasons — prefer `canWrite()`
|
|
92
|
+
* for positive checks; `isViewer()` remains available for call sites that
|
|
93
|
+
* read more naturally in the negative (e.g. `isReadOnly={isViewer(auth)}`).
|
|
60
94
|
*/
|
|
61
95
|
export declare function isViewer(auth: Auth): boolean;
|
|
62
96
|
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/lib/types/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/lib/types/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,IAAI,CAAC;KAChB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,gBAAgB,EAAE,gBAAgB,GAAG,MAAM,CAAC;IAC5C;;;;OAIG;IACH,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,KAAK,CAAC;QACrB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAAC;QAChC,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,GAAG,CAAC;KACf,CAAC,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,IAAI,CAAC;KAChB,CAAC;CACF;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,WAAW,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IAClC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,MAAM,IAAI,GAAG,WAAW,GAAG,kBAAkB,GAAG,UAAU,CAAC;AAYjE;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAO5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAMpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAE5C"}
|
package/dist/lib/types/auth.js
CHANGED
|
@@ -1,43 +1,48 @@
|
|
|
1
|
-
// Access control utilities
|
|
1
|
+
// Access control utilities.
|
|
2
|
+
//
|
|
3
|
+
// These are thin wrappers over the capability system. They exist so callers
|
|
4
|
+
// don't need to import `hasCapability` + a specific capability string for the
|
|
5
|
+
// common "can this user do X" branching in server loads and UI gating.
|
|
6
|
+
//
|
|
7
|
+
// Capabilities are resolved once per request by the auth hook and stored on
|
|
8
|
+
// `auth.capabilities`, so these remain synchronous.
|
|
9
|
+
import { hasCapability } from './capabilities.js';
|
|
2
10
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
11
|
+
* Does the user have *any* mutating capability?
|
|
12
|
+
*
|
|
13
|
+
* Coarse-grained on purpose: this is for UI gating where you just want to
|
|
14
|
+
* decide whether to show the entire edit/upload surface. Don't use it to
|
|
15
|
+
* authorise a specific mutation — the server's PermissionChecker does that
|
|
16
|
+
* per-operation (canCreate vs canUpdate vs canDelete, etc).
|
|
5
17
|
*/
|
|
6
18
|
export function canWrite(auth) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
return auth.organizationRole !== 'viewer';
|
|
19
|
+
return (hasCapability(auth, 'document.create') ||
|
|
20
|
+
hasCapability(auth, 'document.update') ||
|
|
21
|
+
hasCapability(auth, 'document.delete') ||
|
|
22
|
+
hasCapability(auth, 'asset.upload'));
|
|
13
23
|
}
|
|
14
24
|
/**
|
|
15
|
-
*
|
|
16
|
-
* Only owners and admins can manage members
|
|
25
|
+
* Can the user manage organization members (invite / remove / change role)?
|
|
17
26
|
*/
|
|
18
27
|
export function canManageMembers(auth) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
return (hasCapability(auth, 'member.invite') ||
|
|
29
|
+
hasCapability(auth, 'member.remove') ||
|
|
30
|
+
hasCapability(auth, 'member.changeRole'));
|
|
22
31
|
}
|
|
23
32
|
/**
|
|
24
|
-
*
|
|
25
|
-
* Only owners and admins can manage API keys
|
|
33
|
+
* Can the user manage API keys?
|
|
26
34
|
*/
|
|
27
35
|
export function canManageApiKeys(auth) {
|
|
28
|
-
|
|
29
|
-
return false;
|
|
30
|
-
return auth.organizationRole === 'owner' || auth.organizationRole === 'admin';
|
|
36
|
+
return hasCapability(auth, 'apiKey.manage');
|
|
31
37
|
}
|
|
32
38
|
/**
|
|
33
|
-
*
|
|
39
|
+
* Is this session effectively read-only?
|
|
40
|
+
*
|
|
41
|
+
* Inverse of `canWrite`. Named for historical reasons — prefer `canWrite()`
|
|
42
|
+
* for positive checks; `isViewer()` remains available for call sites that
|
|
43
|
+
* read more naturally in the negative (e.g. `isReadOnly={isViewer(auth)}`).
|
|
34
44
|
*/
|
|
35
45
|
export function isViewer(auth) {
|
|
36
|
-
|
|
37
|
-
return true;
|
|
38
|
-
if (auth.type === 'api_key') {
|
|
39
|
-
return !auth.permissions.includes('write');
|
|
40
|
-
}
|
|
41
|
-
return auth.organizationRole === 'viewer';
|
|
46
|
+
return !canWrite(auth);
|
|
42
47
|
}
|
|
43
48
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/lib/types/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/lib/types/auth.ts"],"names":[],"mappings":"AA4EA,4BAA4B;AAC5B,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,uEAAuE;AACvE,EAAE;AACF,4EAA4E;AAC5E,oDAAoD;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAU;IAClC,OAAO,CACN,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAAC;QACtC,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAAC;QACtC,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAAC;QACtC,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,CACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAU;IAC1C,OAAO,CACN,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC;QACpC,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC;QACpC,aAAa,CAAC,IAAI,EAAE,mBAAmB,CAAC,CACxC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAU;IAC1C,OAAO,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { Auth } from './auth.js';
|
|
2
|
+
import type { OrganizationRole } from './organization.js';
|
|
3
|
+
/**
|
|
4
|
+
* Flat, serializable permission primitives.
|
|
5
|
+
*
|
|
6
|
+
* Append-only: removing or renaming a value silently weakens every call site.
|
|
7
|
+
* If a capability is no longer needed, leave the string and stop granting it.
|
|
8
|
+
*/
|
|
9
|
+
export type Capability = 'document.read' | 'document.create' | 'document.update' | 'document.delete' | 'document.publish' | 'document.unpublish' | 'asset.read' | 'asset.upload' | 'asset.delete' | 'member.invite' | 'member.remove' | 'member.changeRole' | 'apiKey.manage' | 'role.manage' | 'org.settings';
|
|
10
|
+
/**
|
|
11
|
+
* Enumerate every capability. Useful for owner seeding and validation.
|
|
12
|
+
*/
|
|
13
|
+
export declare const ALL_CAPABILITIES: readonly Capability[];
|
|
14
|
+
/**
|
|
15
|
+
* Built-in role names. These are the guaranteed defaults every org receives.
|
|
16
|
+
* Custom role names are any other string.
|
|
17
|
+
*/
|
|
18
|
+
export declare const BUILTIN_ROLE_NAMES: readonly OrganizationRole[];
|
|
19
|
+
/**
|
|
20
|
+
* Seed data for the four built-in roles.
|
|
21
|
+
*
|
|
22
|
+
* This is the **default floor** — the set of capabilities a freshly-created
|
|
23
|
+
* org starts with. Once seeded, rows live in `cms_roles` and can be edited by
|
|
24
|
+
* admins (via future Roles UI). Custom roles live alongside these.
|
|
25
|
+
*
|
|
26
|
+
* Also acts as the defense-in-depth fallback: if a role lookup misses (e.g.
|
|
27
|
+
* a row got deleted out-of-band for a built-in name), the checker falls back
|
|
28
|
+
* to this map rather than locking the org out.
|
|
29
|
+
*/
|
|
30
|
+
export declare const BUILTIN_ROLE_SEED: Record<OrganizationRole, {
|
|
31
|
+
description: string;
|
|
32
|
+
capabilities: readonly Capability[];
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Idempotently expand a capability list so that any write cap drags in the
|
|
36
|
+
* corresponding read. Used by both the role schema and the API-key schema.
|
|
37
|
+
*/
|
|
38
|
+
export declare function normalizeCapabilities(caps: readonly Capability[]): Capability[];
|
|
39
|
+
/**
|
|
40
|
+
* A persisted role row (per organization).
|
|
41
|
+
*/
|
|
42
|
+
export interface Role {
|
|
43
|
+
id: string;
|
|
44
|
+
organizationId: string;
|
|
45
|
+
name: string;
|
|
46
|
+
description: string | null;
|
|
47
|
+
capabilities: Capability[];
|
|
48
|
+
isBuiltIn: boolean;
|
|
49
|
+
createdAt: Date;
|
|
50
|
+
updatedAt: Date;
|
|
51
|
+
}
|
|
52
|
+
export interface NewRole {
|
|
53
|
+
organizationId: string;
|
|
54
|
+
name: string;
|
|
55
|
+
description?: string | null;
|
|
56
|
+
capabilities: Capability[];
|
|
57
|
+
isBuiltIn?: boolean;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Build the four built-in role rows for a newly-created organization.
|
|
61
|
+
* Used by migration, org-creation, and the runtime seeder.
|
|
62
|
+
*/
|
|
63
|
+
export declare function buildBuiltinRoleRows(organizationId: string): NewRole[];
|
|
64
|
+
/**
|
|
65
|
+
* Check whether an Auth already has a capability.
|
|
66
|
+
*
|
|
67
|
+
* Expects `auth.capabilities` to have been populated by the auth hook via
|
|
68
|
+
* RolesService. If absent (e.g. legacy call site), falls back to the built-in
|
|
69
|
+
* seed for the org role so behavior remains safe.
|
|
70
|
+
*/
|
|
71
|
+
export declare function hasCapability(auth: Auth, capability: Capability): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Resolve the effective capability set for an Auth.
|
|
74
|
+
*
|
|
75
|
+
* Precedence:
|
|
76
|
+
* 1. `auth.capabilities` (pre-resolved by the auth hook) — authoritative.
|
|
77
|
+
* 2. Instance-role override (super_admin/admin) → all capabilities.
|
|
78
|
+
* 3. API keys → derived from `read`/`write` scopes.
|
|
79
|
+
* 4. Session fallback → built-in seed for the org role.
|
|
80
|
+
* 5. Partial session → empty set.
|
|
81
|
+
*/
|
|
82
|
+
export declare function resolveCapabilities(auth: Auth): ReadonlySet<Capability>;
|
|
83
|
+
/**
|
|
84
|
+
* Resolve the effective organization role name for an Auth, honoring
|
|
85
|
+
* instance-role overrides. Returns the role name as a string — built-in or
|
|
86
|
+
* custom — or `null` for partial sessions and API keys.
|
|
87
|
+
*
|
|
88
|
+
* Used by schema-level access lists: an allowlist like
|
|
89
|
+
* `['admin','owner','Testing']` is matched literally against this value, so
|
|
90
|
+
* custom role names participate just like built-ins do.
|
|
91
|
+
*/
|
|
92
|
+
export declare function effectiveOrganizationRole(auth: Auth): string | null;
|
|
93
|
+
/**
|
|
94
|
+
* Shape of the RBAC payload exposed to the client by the admin layout's
|
|
95
|
+
* server load. Mirror this in `App.PageData` so Svelte pages can read
|
|
96
|
+
* `$page.data.rbac` without casting to `any`.
|
|
97
|
+
*/
|
|
98
|
+
export interface RbacPayload {
|
|
99
|
+
/** Current organization role name (built-in or custom). `null` for none. */
|
|
100
|
+
role: string | null;
|
|
101
|
+
/** Capabilities resolved for this session. Safe to treat as read-only. */
|
|
102
|
+
capabilities: Capability[];
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/lib/types/capabilities.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAEnB,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,oBAAoB,GAEpB,YAAY,GACZ,cAAc,GACd,cAAc,GAEd,eAAe,GACf,eAAe,GACf,mBAAmB,GACnB,eAAe,GACf,aAAa,GACb,cAAc,CAAC;AAMlB;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,UAAU,EAgBxC,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,gBAAgB,EAKzD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACrC,gBAAgB,EAChB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,CA4C5D,CAAC;AAeF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,EAAE,CAK/E;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,EAAE,CAQtE;AAWD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAEzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,CAoCvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAInE;AAID;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC3B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,0EAA0E;IAC1E,YAAY,EAAE,UAAU,EAAE,CAAC;CAC3B"}
|