@aphexcms/cms-core 2.0.10 → 2.1.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/api-keys.d.ts +4 -0
- package/dist/api/api-keys.d.ts.map +1 -1
- package/dist/api/assets.d.ts.map +1 -1
- 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/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 +50 -4
- package/dist/api/schemas/api-keys.d.ts.map +1 -1
- package/dist/api/schemas/api-keys.js +22 -3
- package/dist/api/schemas/organizations.d.ts +4 -22
- package/dist/api/schemas/organizations.d.ts.map +1 -1
- package/dist/api/schemas/organizations.js +13 -2
- 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/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/client/index.d.ts +4 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +6 -2
- package/dist/components/AdminApp.svelte +300 -140
- 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 +633 -350
- 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 +46 -20
- 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 +8 -10
- package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte.d.ts.map +1 -1
- 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 +19 -13
- package/dist/lib/api/api-keys.d.ts +4 -0
- 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.map +1 -1
- package/dist/lib/api/assets.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/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 +50 -4
- package/dist/lib/api/schemas/api-keys.d.ts.map +1 -1
- package/dist/lib/api/schemas/api-keys.js +22 -3
- package/dist/lib/api/schemas/api-keys.js.map +1 -1
- package/dist/lib/api/schemas/organizations.d.ts +4 -22
- package/dist/lib/api/schemas/organizations.d.ts.map +1 -1
- package/dist/lib/api/schemas/organizations.js +13 -2
- package/dist/lib/api/schemas/organizations.js.map +1 -1
- 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/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/client/index.d.ts +4 -2
- package/dist/lib/client/index.d.ts.map +1 -1
- package/dist/lib/client/index.js +6 -2
- package/dist/lib/client/index.js.map +1 -1
- 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 +19 -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.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/lib/routes/organizations-by-id.d.ts.map +1 -1
- package/dist/lib/routes/organizations-by-id.js +6 -3
- 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 +17 -7
- 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 +15 -7
- package/dist/lib/routes/organizations-members.js.map +1 -1
- package/dist/lib/routes/organizations.d.ts.map +1 -1
- package/dist/lib/routes/organizations.js +3 -0
- 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-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.d.ts.map +1 -1
- package/dist/routes/document-versions.d.ts.map +1 -1
- package/dist/routes/organizations-by-id.d.ts.map +1 -1
- package/dist/routes/organizations-by-id.js +6 -3
- package/dist/routes/organizations-invitations.d.ts.map +1 -1
- package/dist/routes/organizations-invitations.js +17 -7
- package/dist/routes/organizations-members.d.ts.map +1 -1
- package/dist/routes/organizations-members.js +15 -7
- package/dist/routes/organizations.d.ts.map +1 -1
- package/dist/routes/organizations.js +3 -0
- 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-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 +6 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/organization.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,mBAAmB;IAEnC,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACjE,oBAAoB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChD,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC/D,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACnE,kBAAkB,CACjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,GACjE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChC,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAGjD,SAAS,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpE,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,gBAAgB,CACf,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"organization.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/organization.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,mBAAmB;IAEnC,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACjE,oBAAoB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChD,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC/D,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACnE,kBAAkB,CACjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,GACjE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChC,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAGjD,SAAS,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpE,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,gBAAgB,CACf,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACtC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAC/F,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACzE,uBAAuB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAG/E,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3D,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACjE,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3E,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7D,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC7E,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAG7C,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC7D,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Role, NewRole, Capability } from '../../types/capabilities.js';
|
|
2
|
+
export interface RolesAdapter {
|
|
3
|
+
/** List all roles for an organization (built-in + custom). */
|
|
4
|
+
listRoles(organizationId: string): Promise<Role[]>;
|
|
5
|
+
/** Look up a single role by its name within an organization. */
|
|
6
|
+
findRoleByName(organizationId: string, name: string): Promise<Role | null>;
|
|
7
|
+
/** Create a new role. Uniqueness is enforced on (organizationId, name). */
|
|
8
|
+
createRole(data: NewRole): Promise<Role>;
|
|
9
|
+
/**
|
|
10
|
+
* Update the capabilities/description of an existing role.
|
|
11
|
+
* Returns `null` if no row matched.
|
|
12
|
+
*/
|
|
13
|
+
updateRole(organizationId: string, name: string, data: {
|
|
14
|
+
description?: string | null;
|
|
15
|
+
capabilities?: Capability[];
|
|
16
|
+
}): Promise<Role | null>;
|
|
17
|
+
/** Delete a role by name. Returns `true` when a row was removed. */
|
|
18
|
+
deleteRole(organizationId: string, name: string): Promise<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* Ensure the four built-in roles exist for an organization.
|
|
21
|
+
* Idempotent: inserts missing rows and leaves existing ones untouched.
|
|
22
|
+
*/
|
|
23
|
+
seedBuiltinRoles(organizationId: string): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=role.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/role.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE1E,MAAM,WAAW,YAAY;IAC5B,8DAA8D;IAC9D,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnD,gEAAgE;IAChE,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAE3E,2EAA2E;IAC3E,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC;;;OAGG;IACH,UAAU,CACT,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,YAAY,CAAC,EAAE,UAAU,EAAE,CAAA;KAAE,GAChE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAExB,oEAAoE;IACpE,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnE;;;OAGG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/lib/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,qBAAa,SAAS;IACrB,OAAO,CAAC,EAAE,CAAkB;IACrB,MAAM,EAAE,SAAS,CAAC;gBAEb,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe;IAMzD,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAUlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIvD,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAI1C,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAI9C,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAI1F,eAAe,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAG9F;AAKD,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/lib/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,qBAAa,SAAS;IACrB,OAAO,CAAC,EAAE,CAAkB;IACrB,MAAM,EAAE,SAAS,CAAC;gBAEb,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe;IAMzD,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAUlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIvD,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAI1C,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAI9C,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAI1F,eAAe,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAG9F;AAKD,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,GAAG,SAAS,CASlF;AAED,wBAAgB,MAAM,IAAI,SAAS,CAKlC"}
|
package/dist/engine.js
CHANGED
|
@@ -60,6 +60,11 @@ export function createCMS(config, dbAdapter) {
|
|
|
60
60
|
if (!cmsInstance) {
|
|
61
61
|
cmsInstance = new CMSEngine(config, dbAdapter);
|
|
62
62
|
}
|
|
63
|
+
else {
|
|
64
|
+
// Refresh the singleton's config on subsequent calls so schema HMR
|
|
65
|
+
// doesn't get frozen by the first (possibly broken) config snapshot.
|
|
66
|
+
cmsInstance.updateConfig(config);
|
|
67
|
+
}
|
|
63
68
|
return cmsInstance;
|
|
64
69
|
}
|
|
65
70
|
export function getCMS() {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Field, SchemaType } from './types/schemas.js';
|
|
2
|
+
import type { Auth } from './types/auth.js';
|
|
3
|
+
/**
|
|
4
|
+
* Return the set of field names the caller may NOT read.
|
|
5
|
+
* Fields with no `access.read` list are readable by default.
|
|
6
|
+
*/
|
|
7
|
+
export declare function hiddenReadFields(schema: SchemaType, auth: Auth | undefined): Set<string>;
|
|
8
|
+
/**
|
|
9
|
+
* Return the set of field names the caller may NOT write.
|
|
10
|
+
* Fields with no `access.update` list are writable by default.
|
|
11
|
+
*/
|
|
12
|
+
export declare function hiddenWriteFields(schema: SchemaType, auth: Auth | undefined): Set<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Strip read-hidden fields from a document payload shape in place.
|
|
15
|
+
* Safe to call on undefined / non-object values (returns the input).
|
|
16
|
+
*/
|
|
17
|
+
export declare function stripHiddenFields<T extends Record<string, unknown>>(data: T | null | undefined, hidden: ReadonlySet<string>): T | null | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Remove write-locked fields from incoming mutation data. Prevents a caller
|
|
20
|
+
* with collection-level update from silently overwriting fields the schema
|
|
21
|
+
* protects at the field level.
|
|
22
|
+
*/
|
|
23
|
+
export declare function dropLockedWrites<T extends Record<string, unknown>>(data: T, locked: ReadonlySet<string>): T;
|
|
24
|
+
/**
|
|
25
|
+
* Extract the raw field definitions for reading (not mutating).
|
|
26
|
+
* Kept separate from hiddenReadFields so callers can iterate fields directly
|
|
27
|
+
* when they need richer context than the name set.
|
|
28
|
+
*/
|
|
29
|
+
export declare function fieldByName(schema: SchemaType, name: string): Field | undefined;
|
|
30
|
+
//# sourceMappingURL=field-access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-access.d.ts","sourceRoot":"","sources":["../src/lib/field-access.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGzC;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAUxF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAUzF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAC1B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GACzB,CAAC,GAAG,IAAI,GAAG,SAAS,CAKtB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GACzB,CAAC,CAQH;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAE/E"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// Field-level access helpers.
|
|
2
|
+
//
|
|
3
|
+
// Applied on top of document-level SchemaAccess (which already decided whether
|
|
4
|
+
// the caller can touch the collection at all). These helpers are the gate
|
|
5
|
+
// between "has read/update on the collection" and "has read/update on this
|
|
6
|
+
// specific field".
|
|
7
|
+
import { effectiveOrganizationRole } from './types/capabilities.js';
|
|
8
|
+
/**
|
|
9
|
+
* Return the set of field names the caller may NOT read.
|
|
10
|
+
* Fields with no `access.read` list are readable by default.
|
|
11
|
+
*/
|
|
12
|
+
export function hiddenReadFields(schema, auth) {
|
|
13
|
+
const hidden = new Set();
|
|
14
|
+
if (!auth)
|
|
15
|
+
return hidden;
|
|
16
|
+
const role = effectiveOrganizationRole(auth);
|
|
17
|
+
for (const field of schema.fields) {
|
|
18
|
+
const list = field.access?.read;
|
|
19
|
+
if (!list)
|
|
20
|
+
continue;
|
|
21
|
+
if (!role || !list.includes(role))
|
|
22
|
+
hidden.add(field.name);
|
|
23
|
+
}
|
|
24
|
+
return hidden;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Return the set of field names the caller may NOT write.
|
|
28
|
+
* Fields with no `access.update` list are writable by default.
|
|
29
|
+
*/
|
|
30
|
+
export function hiddenWriteFields(schema, auth) {
|
|
31
|
+
const hidden = new Set();
|
|
32
|
+
if (!auth)
|
|
33
|
+
return hidden;
|
|
34
|
+
const role = effectiveOrganizationRole(auth);
|
|
35
|
+
for (const field of schema.fields) {
|
|
36
|
+
const list = field.access?.update;
|
|
37
|
+
if (!list)
|
|
38
|
+
continue;
|
|
39
|
+
if (!role || !list.includes(role))
|
|
40
|
+
hidden.add(field.name);
|
|
41
|
+
}
|
|
42
|
+
return hidden;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Strip read-hidden fields from a document payload shape in place.
|
|
46
|
+
* Safe to call on undefined / non-object values (returns the input).
|
|
47
|
+
*/
|
|
48
|
+
export function stripHiddenFields(data, hidden) {
|
|
49
|
+
if (!data || typeof data !== 'object' || hidden.size === 0)
|
|
50
|
+
return data;
|
|
51
|
+
const copy = { ...data };
|
|
52
|
+
for (const name of hidden)
|
|
53
|
+
delete copy[name];
|
|
54
|
+
return copy;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Remove write-locked fields from incoming mutation data. Prevents a caller
|
|
58
|
+
* with collection-level update from silently overwriting fields the schema
|
|
59
|
+
* protects at the field level.
|
|
60
|
+
*/
|
|
61
|
+
export function dropLockedWrites(data, locked) {
|
|
62
|
+
if (locked.size === 0)
|
|
63
|
+
return data;
|
|
64
|
+
const copy = {};
|
|
65
|
+
for (const [key, value] of Object.entries(data)) {
|
|
66
|
+
if (locked.has(key))
|
|
67
|
+
continue;
|
|
68
|
+
copy[key] = value;
|
|
69
|
+
}
|
|
70
|
+
return copy;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Extract the raw field definitions for reading (not mutating).
|
|
74
|
+
* Kept separate from hiddenReadFields so callers can iterate fields directly
|
|
75
|
+
* when they need richer context than the name set.
|
|
76
|
+
*/
|
|
77
|
+
export function fieldByName(schema, name) {
|
|
78
|
+
return schema.fields.find((f) => f.name === name);
|
|
79
|
+
}
|
package/dist/hooks.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type { StorageAdapter } from './storage/interfaces/storage.js';
|
|
|
6
6
|
import type { EmailAdapter } from './email/index.js';
|
|
7
7
|
import type { AuthProvider } from './auth/provider.js';
|
|
8
8
|
import type { GraphQLSettings } from './graphql/index.js';
|
|
9
|
+
import { RolesService } from './services/roles-service.js';
|
|
9
10
|
import { CMSEngine } from './engine.js';
|
|
10
11
|
import { type LocalAPI } from './local-api/index.js';
|
|
11
12
|
export interface CMSInstances {
|
|
@@ -16,6 +17,7 @@ export interface CMSInstances {
|
|
|
16
17
|
emailAdapter?: EmailAdapter | null;
|
|
17
18
|
cmsEngine: CMSEngine;
|
|
18
19
|
localAPI: LocalAPI;
|
|
20
|
+
rolesService: RolesService;
|
|
19
21
|
auth?: AuthProvider;
|
|
20
22
|
graphqlSettings?: GraphQLSettings | null;
|
|
21
23
|
pluginRoutes?: Map<string, {
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/lib/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAA8B,MAAM,eAAe,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKvD,OAAO,EAAa,SAAS,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlE,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,GAAG,CACjB,MAAM,EACN;QAAE,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAC7E,CAAC;CACF;AAiFD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/lib/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAA8B,MAAM,eAAe,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAa,SAAS,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlE,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,GAAG,CACjB,MAAM,EACN;QAAE,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAC7E,CAAC;CACF;AAiFD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CA8LvD"}
|
package/dist/hooks.js
CHANGED
|
@@ -2,6 +2,7 @@ import { handleAuthHook } from './auth/auth-hooks.js';
|
|
|
2
2
|
import { cmsLogger, setLogLevel } from './utils/logger.js';
|
|
3
3
|
import { createStorageAdapter as createStorageAdapterProvider } from './storage/providers/storage.js';
|
|
4
4
|
import { AssetService as AssetServiceClass } from './services/asset-service.js';
|
|
5
|
+
import { RolesService } from './services/roles-service.js';
|
|
5
6
|
import { createCMS } from './engine.js';
|
|
6
7
|
import { createLocalAPI } from './local-api/index.js';
|
|
7
8
|
let cmsInstances = null;
|
|
@@ -82,7 +83,19 @@ export function createCMSHook(config) {
|
|
|
82
83
|
// Note: In dev mode, /storage/ might be accessible via Vite dev server
|
|
83
84
|
// In production, only /static/ folder is served - /storage/ is private
|
|
84
85
|
// Initialize CMS instances once at application startup
|
|
85
|
-
// Use a promise lock to prevent concurrent requests from racing initialization
|
|
86
|
+
// Use a promise lock to prevent concurrent requests from racing initialization.
|
|
87
|
+
// Also reset before the init check so a schema HMR or a sticky schemaError
|
|
88
|
+
// falls through into fresh init on THIS request (not next one) — otherwise
|
|
89
|
+
// locals.aphexCMS would be null for the requesting handler.
|
|
90
|
+
if (cmsInstances && (checkSchemasDirty() || schemaError)) {
|
|
91
|
+
cmsLogger.info('[CMS]', 'Schema change detected, re-initializing...');
|
|
92
|
+
if (cmsInstances.config.cache) {
|
|
93
|
+
cmsInstances.config.cache.flush();
|
|
94
|
+
}
|
|
95
|
+
cmsInstances = null;
|
|
96
|
+
schemaError = null;
|
|
97
|
+
initPromise = null;
|
|
98
|
+
}
|
|
86
99
|
if (initPromise) {
|
|
87
100
|
await initPromise;
|
|
88
101
|
}
|
|
@@ -96,6 +109,7 @@ export function createCMSHook(config) {
|
|
|
96
109
|
const emailAdapter = config.email ?? null;
|
|
97
110
|
const assetService = new AssetServiceClass(storageAdapter, databaseAdapter);
|
|
98
111
|
const cmsEngine = createCMS(config, databaseAdapter);
|
|
112
|
+
const rolesService = new RolesService(databaseAdapter, config.cache ?? null);
|
|
99
113
|
// Initialize Local API (unified operations layer)
|
|
100
114
|
const localAPI = createLocalAPI(config, databaseAdapter);
|
|
101
115
|
// Initialize schemas with validation
|
|
@@ -130,6 +144,7 @@ export function createCMSHook(config) {
|
|
|
130
144
|
emailAdapter: emailAdapter,
|
|
131
145
|
cmsEngine: cmsEngine,
|
|
132
146
|
localAPI: localAPI,
|
|
147
|
+
rolesService,
|
|
133
148
|
auth: config.auth?.provider,
|
|
134
149
|
pluginRoutes
|
|
135
150
|
};
|
|
@@ -157,6 +172,7 @@ export function createCMSHook(config) {
|
|
|
157
172
|
emailAdapter,
|
|
158
173
|
cmsEngine,
|
|
159
174
|
localAPI,
|
|
175
|
+
rolesService,
|
|
160
176
|
auth: config.auth?.provider,
|
|
161
177
|
pluginRoutes
|
|
162
178
|
}, config.schemaTypes, graphqlConfig);
|
|
@@ -182,23 +198,13 @@ export function createCMSHook(config) {
|
|
|
182
198
|
emailAdapter: emailAdapter,
|
|
183
199
|
cmsEngine: cmsEngine,
|
|
184
200
|
localAPI: localAPI,
|
|
201
|
+
rolesService,
|
|
185
202
|
auth: config.auth?.provider,
|
|
186
203
|
graphqlSettings,
|
|
187
204
|
pluginRoutes
|
|
188
205
|
};
|
|
189
206
|
resolveInit();
|
|
190
207
|
}
|
|
191
|
-
else if (checkSchemasDirty()) {
|
|
192
|
-
// HMR: Schemas changed - reset instances so full re-initialization
|
|
193
|
-
// runs on the next request with fresh config from Vite
|
|
194
|
-
cmsLogger.info('[CMS]', 'Schema change detected, re-initializing...');
|
|
195
|
-
if (cmsInstances?.config.cache) {
|
|
196
|
-
cmsInstances.config.cache.flush();
|
|
197
|
-
}
|
|
198
|
-
cmsInstances = null;
|
|
199
|
-
schemaError = null;
|
|
200
|
-
return resolve(event); // Let the next request trigger full init
|
|
201
|
-
}
|
|
202
208
|
// Attach schema error to instances so it can be accessed in load functions
|
|
203
209
|
if (cmsInstances) {
|
|
204
210
|
cmsInstances.schemaError = schemaError;
|
|
@@ -207,7 +213,7 @@ export function createCMSHook(config) {
|
|
|
207
213
|
event.locals.aphexCMS = cmsInstances;
|
|
208
214
|
// Auth protection if configured
|
|
209
215
|
if (cmsInstances.auth) {
|
|
210
|
-
const authResponse = await handleAuthHook(event, config, cmsInstances.auth, cmsInstances.databaseAdapter);
|
|
216
|
+
const authResponse = await handleAuthHook(event, config, cmsInstances.auth, cmsInstances.databaseAdapter, cmsInstances.rolesService);
|
|
211
217
|
if (authResponse)
|
|
212
218
|
return authResponse;
|
|
213
219
|
}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import type { ApiResponse } from './types.js';
|
|
2
2
|
import type { ApiKeyPermission, CreateApiKeyRequest } from './schemas/api-keys.js';
|
|
3
|
+
import type { Capability } from '../types/capabilities.js';
|
|
3
4
|
export interface ApiKey {
|
|
4
5
|
id: string;
|
|
5
6
|
name: string | null;
|
|
6
7
|
key?: string;
|
|
8
|
+
/** Legacy coarse scopes; preserved for UI compatibility. */
|
|
7
9
|
permissions: ApiKeyPermission[];
|
|
10
|
+
/** Fine-grained capability allowlist (if this key was issued with one). */
|
|
11
|
+
capabilities?: Capability[];
|
|
8
12
|
createdAt: Date | null;
|
|
9
13
|
lastRequest: Date | null;
|
|
10
14
|
expiresAt: Date | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../../src/lib/api/api-keys.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../../src/lib/api/api-keys.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,MAAM;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB;AAID,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACjC;AAED,qBAAa,UAAU;IACtB;;OAEG;WACU,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAI1F;;OAEG;WACU,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAG3E;AAED,eAAO,MAAM,OAAO;;;CAGnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../../src/lib/api/api-keys.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../../src/lib/api/api-keys.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AA0BrC,MAAM,OAAO,UAAU;IACtB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAyB;QAC5C,OAAO,SAAS,CAAC,IAAI,CAAuB,oBAAoB,EAAE,IAAI,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAU;QAC7B,OAAO,SAAS,CAAC,MAAM,CAAuB,sBAAsB,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;CACD;AAED,MAAM,CAAC,MAAM,OAAO,GAAG;IACtB,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;IAC1C,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;CAC1C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../../src/lib/api/assets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../../src/lib/api/assets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAI5F,MAAM,MAAM,YAAY,GAAG,eAAe,CAAC;AAC3C,MAAM,MAAM,eAAe,GAAG,kBAAkB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,qBAAa,SAAS;IACrB;;OAEG;WACU,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IAI3E;;OAEG;WACU,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAI7D;;;OAGG;WACU,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAIpE;;OAEG;WACU,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAItF;;OAEG;WACU,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAI3E;;OAEG;WACU,UAAU,CACtB,GAAG,EAAE,MAAM,EAAE,GACX,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAI5D;;OAEG;WACU,aAAa,CACzB,EAAE,EAAE,MAAM,GACR,OAAO,CAAC,WAAW,CAAC;QAAE,UAAU,EAAE,cAAc,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAMxE;;OAEG;WACU,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAG5F;AAGD,eAAO,MAAM,MAAM;;;;;;;;;CASlB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../src/lib/api/assets.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../src/lib/api/assets.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAWrC,MAAM,OAAO,SAAS;IACrB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAyB;QAC1C,OAAO,SAAS,CAAC,GAAG,CAAU,SAAS,EAAE,OAA8C,CAAC,CAAC;IAC1F,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAU;QAC9B,OAAO,SAAS,CAAC,GAAG,CAAQ,WAAW,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAkB;QACrC,OAAO,SAAS,CAAC,IAAI,CAAQ,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAAwB;QACvD,OAAO,SAAS,CAAC,KAAK,CAAQ,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAU;QAC7B,OAAO,SAAS,CAAC,MAAM,CAAuB,WAAW,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,UAAU,CACtB,GAAa;QAEb,OAAO,SAAS,CAAC,MAAM,CAAsC,cAAc,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACvF,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa,CACzB,EAAU;QAEV,OAAO,SAAS,CAAC,GAAG,CACnB,WAAW,EAAE,aAAa,CAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAa;QAC5C,OAAO,SAAS,CAAC,IAAI,CAAyB,2BAA2B,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACrF,CAAC;CACD;AAED,8CAA8C;AAC9C,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IACpC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;IAC1C,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IACxC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IACxC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IACxC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;IAChD,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;IACtD,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;CAChE,CAAC"}
|
package/dist/lib/api/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export { type ApiClient, ApiError, apiClient } from './client.js';
|
|
|
2
2
|
export { type ApiResponse } from './types.js';
|
|
3
3
|
export { documents } from './documents.js';
|
|
4
4
|
export { organizations } from './organizations.js';
|
|
5
|
+
export { roles } from './roles.js';
|
|
5
6
|
export { assets } from './assets.js';
|
|
6
7
|
export { user } from './user.js';
|
|
7
8
|
export { apiKeys } from './api-keys.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,mBAAmB,gBAAgB,CAAC;AACpC,mBAAmB,iBAAiB,CAAC;AACrC,mBAAmB,QAAQ,CAAC;AAC5B,mBAAmB,YAAY,CAAC;AAChC,mBAAmB,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,mBAAmB,gBAAgB,CAAC;AACpC,mBAAmB,iBAAiB,CAAC;AACrC,mBAAmB,QAAQ,CAAC;AAC5B,mBAAmB,YAAY,CAAC;AAChC,mBAAmB,eAAe,CAAC"}
|
package/dist/lib/api/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
export { ApiError, apiClient } from './client.js';
|
|
3
3
|
export { documents } from './documents.js';
|
|
4
4
|
export { organizations } from './organizations.js';
|
|
5
|
+
export { roles } from './roles.js';
|
|
5
6
|
export { assets } from './assets.js';
|
|
6
7
|
export { user } from './user.js';
|
|
7
8
|
export { apiKeys } from './api-keys.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/api/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAkB,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/api/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAkB,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ApiResponse } from './types.js';
|
|
2
|
+
import type { Role } from '../types/capabilities.js';
|
|
3
|
+
import type { CreateRoleRequest, UpdateRoleRequest } from './schemas/roles.js';
|
|
4
|
+
export declare class RolesApi {
|
|
5
|
+
/** List all roles (built-in + custom) for the active organization. */
|
|
6
|
+
static list(): Promise<ApiResponse<Role[]>>;
|
|
7
|
+
/** Create a custom role. Built-in names are rejected server-side. */
|
|
8
|
+
static create(data: CreateRoleRequest): Promise<ApiResponse<Role>>;
|
|
9
|
+
/** Edit description or capabilities. Works on built-ins too. */
|
|
10
|
+
static update(name: string, data: UpdateRoleRequest): Promise<ApiResponse<Role>>;
|
|
11
|
+
/** Delete a custom role. Built-ins and in-use roles are blocked server-side. */
|
|
12
|
+
static remove(name: string): Promise<ApiResponse<{
|
|
13
|
+
success: boolean;
|
|
14
|
+
}>>;
|
|
15
|
+
}
|
|
16
|
+
export declare const roles: {
|
|
17
|
+
list: typeof RolesApi.list;
|
|
18
|
+
create: typeof RolesApi.create;
|
|
19
|
+
update: typeof RolesApi.update;
|
|
20
|
+
remove: typeof RolesApi.remove;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=roles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../../src/lib/api/roles.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE5E,qBAAa,QAAQ;IACpB,sEAAsE;WACzD,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAIjD,qEAAqE;WACxD,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAIxE,gEAAgE;WACnD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAItF,gFAAgF;WACnE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAG7E;AAED,eAAO,MAAM,KAAK;;;;;CAKjB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Roles API client — per-organization role CRUD.
|
|
2
|
+
import { apiClient } from './client.js';
|
|
3
|
+
export class RolesApi {
|
|
4
|
+
/** List all roles (built-in + custom) for the active organization. */
|
|
5
|
+
static async list() {
|
|
6
|
+
return apiClient.get('/roles');
|
|
7
|
+
}
|
|
8
|
+
/** Create a custom role. Built-in names are rejected server-side. */
|
|
9
|
+
static async create(data) {
|
|
10
|
+
return apiClient.post('/roles', data);
|
|
11
|
+
}
|
|
12
|
+
/** Edit description or capabilities. Works on built-ins too. */
|
|
13
|
+
static async update(name, data) {
|
|
14
|
+
return apiClient.patch(`/roles/${encodeURIComponent(name)}`, data);
|
|
15
|
+
}
|
|
16
|
+
/** Delete a custom role. Built-ins and in-use roles are blocked server-side. */
|
|
17
|
+
static async remove(name) {
|
|
18
|
+
return apiClient.delete(`/roles/${encodeURIComponent(name)}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export const roles = {
|
|
22
|
+
list: RolesApi.list.bind(RolesApi),
|
|
23
|
+
create: RolesApi.create.bind(RolesApi),
|
|
24
|
+
update: RolesApi.update.bind(RolesApi),
|
|
25
|
+
remove: RolesApi.remove.bind(RolesApi)
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../../src/lib/api/roles.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAKrC,MAAM,OAAO,QAAQ;IACpB,sEAAsE;IACtE,MAAM,CAAC,KAAK,CAAC,IAAI;QAChB,OAAO,SAAS,CAAC,GAAG,CAAS,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,qEAAqE;IACrE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAuB;QAC1C,OAAO,SAAS,CAAC,IAAI,CAAO,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,gEAAgE;IAChE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,IAAuB;QACxD,OAAO,SAAS,CAAC,KAAK,CAAO,UAAU,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,gFAAgF;IAChF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAY;QAC/B,OAAO,SAAS,CAAC,MAAM,CAAuB,UAAU,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC;CACD;AAED,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAClC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IACtC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IACtC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;CACtC,CAAC"}
|
|
@@ -1,16 +1,62 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { type Capability } from '../../types/capabilities.js';
|
|
2
3
|
export declare const apiKeyPermissionSchema: z.ZodEnum<{
|
|
3
4
|
read: "read";
|
|
4
5
|
write: "write";
|
|
5
6
|
}>;
|
|
6
|
-
export declare const
|
|
7
|
+
export declare const apiKeyCapabilitySchema: z.ZodEnum<{
|
|
8
|
+
"document.read": "document.read";
|
|
9
|
+
"document.create": "document.create";
|
|
10
|
+
"document.update": "document.update";
|
|
11
|
+
"document.delete": "document.delete";
|
|
12
|
+
"document.publish": "document.publish";
|
|
13
|
+
"document.unpublish": "document.unpublish";
|
|
14
|
+
"asset.read": "asset.read";
|
|
15
|
+
"asset.upload": "asset.upload";
|
|
16
|
+
"asset.delete": "asset.delete";
|
|
17
|
+
"member.invite": "member.invite";
|
|
18
|
+
"member.remove": "member.remove";
|
|
19
|
+
"member.changeRole": "member.changeRole";
|
|
20
|
+
"apiKey.manage": "apiKey.manage";
|
|
21
|
+
"role.manage": "role.manage";
|
|
22
|
+
"org.settings": "org.settings";
|
|
23
|
+
}>;
|
|
24
|
+
export declare const createApiKeyRequest: z.ZodPipe<z.ZodObject<{
|
|
7
25
|
name: z.ZodString;
|
|
8
|
-
permissions: z.ZodArray<z.ZodEnum<{
|
|
26
|
+
permissions: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
9
27
|
read: "read";
|
|
10
28
|
write: "write";
|
|
11
|
-
}
|
|
29
|
+
}>>>;
|
|
30
|
+
capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
31
|
+
"document.read": "document.read";
|
|
32
|
+
"document.create": "document.create";
|
|
33
|
+
"document.update": "document.update";
|
|
34
|
+
"document.delete": "document.delete";
|
|
35
|
+
"document.publish": "document.publish";
|
|
36
|
+
"document.unpublish": "document.unpublish";
|
|
37
|
+
"asset.read": "asset.read";
|
|
38
|
+
"asset.upload": "asset.upload";
|
|
39
|
+
"asset.delete": "asset.delete";
|
|
40
|
+
"member.invite": "member.invite";
|
|
41
|
+
"member.remove": "member.remove";
|
|
42
|
+
"member.changeRole": "member.changeRole";
|
|
43
|
+
"apiKey.manage": "apiKey.manage";
|
|
44
|
+
"role.manage": "role.manage";
|
|
45
|
+
"org.settings": "org.settings";
|
|
46
|
+
}>>>;
|
|
12
47
|
expiresInDays: z.ZodOptional<z.ZodNumber>;
|
|
13
|
-
}, z.core.$strip
|
|
48
|
+
}, z.core.$strip>, z.ZodTransform<{
|
|
49
|
+
permissions: ("read" | "write")[] | undefined;
|
|
50
|
+
capabilities: Capability[] | undefined;
|
|
51
|
+
name: string;
|
|
52
|
+
expiresInDays?: number | undefined;
|
|
53
|
+
}, {
|
|
54
|
+
name: string;
|
|
55
|
+
permissions?: ("read" | "write")[] | undefined;
|
|
56
|
+
capabilities?: ("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")[] | undefined;
|
|
57
|
+
expiresInDays?: number | undefined;
|
|
58
|
+
}>>;
|
|
14
59
|
export type ApiKeyPermission = z.infer<typeof apiKeyPermissionSchema>;
|
|
60
|
+
export type ApiKeyCapability = z.infer<typeof apiKeyCapabilitySchema>;
|
|
15
61
|
export type CreateApiKeyRequest = z.infer<typeof createApiKeyRequest>;
|
|
16
62
|
//# sourceMappingURL=api-keys.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/schemas/api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/schemas/api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAA2C,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAIpG,eAAO,MAAM,sBAAsB;;;EAA4B,CAAC;AAEhE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;EAElC,CAAC;AASF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoB5B,CAAC;AAIL,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
|
@@ -1,10 +1,29 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { ALL_CAPABILITIES, normalizeCapabilities } from '../../types/capabilities.js';
|
|
2
3
|
// ---------- Shared ----------
|
|
3
4
|
export const apiKeyPermissionSchema = z.enum(['read', 'write']);
|
|
5
|
+
export const apiKeyCapabilitySchema = z.enum(ALL_CAPABILITIES);
|
|
4
6
|
// ---------- POST /settings/api-keys ----------
|
|
5
|
-
|
|
7
|
+
// Two provisioning modes:
|
|
8
|
+
// 1. Coarse `permissions`: 'read' alone, or 'write' (always implies read).
|
|
9
|
+
// 2. Fine-grained `capabilities`: explicit allowlist; writes auto-include
|
|
10
|
+
// the matching read cap during normalization.
|
|
11
|
+
// Exactly one of the two should be supplied (neither is invalid).
|
|
12
|
+
export const createApiKeyRequest = z
|
|
13
|
+
.object({
|
|
6
14
|
name: z.string().min(1),
|
|
7
|
-
permissions: z.array(apiKeyPermissionSchema).
|
|
15
|
+
permissions: z.array(apiKeyPermissionSchema).optional(),
|
|
16
|
+
capabilities: z.array(apiKeyCapabilitySchema).optional(),
|
|
8
17
|
expiresInDays: z.number().int().positive().optional()
|
|
9
|
-
})
|
|
18
|
+
})
|
|
19
|
+
.refine((v) => (v.permissions && v.permissions.length > 0) || (v.capabilities && v.capabilities.length > 0), { message: 'Provide at least one of `permissions` or `capabilities`.' })
|
|
20
|
+
.transform((v) => ({
|
|
21
|
+
...v,
|
|
22
|
+
permissions: v.permissions
|
|
23
|
+
? v.permissions.includes('write')
|
|
24
|
+
? ['read', 'write']
|
|
25
|
+
: ['read']
|
|
26
|
+
: undefined,
|
|
27
|
+
capabilities: v.capabilities ? normalizeCapabilities(v.capabilities) : undefined
|
|
28
|
+
}));
|
|
10
29
|
//# sourceMappingURL=api-keys.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../../../src/lib/api/schemas/api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../../../src/lib/api/schemas/api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAmB,MAAM,0BAA0B,CAAC;AAEpG,+BAA+B;AAE/B,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAC3C,gBAA4D,CAC5D,CAAC;AAEF,gDAAgD;AAEhD,0BAA0B;AAC1B,6EAA6E;AAC7E,4EAA4E;AAC5E,mDAAmD;AACnD,kEAAkE;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KAClC,MAAM,CAAC;IACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IACvD,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IACxD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACrD,CAAC;KACD,MAAM,CACN,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,EAC7F,EAAE,OAAO,EAAE,0DAA0D,EAAE,CACvE;KACA,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClB,GAAG,CAAC;IACJ,WAAW,EAAE,CAAC,CAAC,WAAW;QACzB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;YAChC,CAAC,CAAE,CAAC,MAAM,EAAE,OAAO,CAA6B;YAChD,CAAC,CAAE,CAAC,MAAM,CAA6B;QACxC,CAAC,CAAC,SAAS;IACZ,YAAY,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;CAChF,CAAC,CAAC,CAAC"}
|
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export declare const organizationRoleSchema: z.
|
|
3
|
-
|
|
4
|
-
editor: "editor";
|
|
5
|
-
viewer: "viewer";
|
|
6
|
-
owner: "owner";
|
|
7
|
-
}>;
|
|
8
|
-
export declare const invitableRoleSchema: z.ZodEnum<{
|
|
9
|
-
admin: "admin";
|
|
10
|
-
editor: "editor";
|
|
11
|
-
viewer: "viewer";
|
|
12
|
-
}>;
|
|
2
|
+
export declare const organizationRoleSchema: z.ZodString;
|
|
3
|
+
export declare const invitableRoleSchema: z.ZodString;
|
|
13
4
|
export declare const createOrganizationRequest: z.ZodObject<{
|
|
14
5
|
name: z.ZodString;
|
|
15
6
|
slug: z.ZodString;
|
|
@@ -26,11 +17,7 @@ export declare const switchOrganizationRequest: z.ZodObject<{
|
|
|
26
17
|
}, z.core.$strip>;
|
|
27
18
|
export declare const inviteMemberRequest: z.ZodObject<{
|
|
28
19
|
email: z.ZodString;
|
|
29
|
-
role: z.
|
|
30
|
-
admin: "admin";
|
|
31
|
-
editor: "editor";
|
|
32
|
-
viewer: "viewer";
|
|
33
|
-
}>;
|
|
20
|
+
role: z.ZodString;
|
|
34
21
|
}, z.core.$strip>;
|
|
35
22
|
export declare const cancelInvitationRequest: z.ZodObject<{
|
|
36
23
|
invitationId: z.ZodString;
|
|
@@ -40,12 +27,7 @@ export declare const removeMemberRequest: z.ZodObject<{
|
|
|
40
27
|
}, z.core.$strip>;
|
|
41
28
|
export declare const updateMemberRoleRequest: z.ZodObject<{
|
|
42
29
|
userId: z.ZodString;
|
|
43
|
-
role: z.
|
|
44
|
-
admin: "admin";
|
|
45
|
-
editor: "editor";
|
|
46
|
-
viewer: "viewer";
|
|
47
|
-
owner: "owner";
|
|
48
|
-
}>;
|
|
30
|
+
role: z.ZodString;
|
|
49
31
|
}, z.core.$strip>;
|
|
50
32
|
export type OrganizationRoleSchema = z.infer<typeof organizationRoleSchema>;
|
|
51
33
|
export type InvitableRoleSchema = z.infer<typeof invitableRoleSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/schemas/organizations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/schemas/organizations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,sBAAsB,aAAiB,CAAC;AAGrD,eAAO,MAAM,mBAAmB,aAE9B,CAAC;AAMH,eAAO,MAAM,yBAAyB;;;;;iBAKpC,CAAC;AAIH,eAAO,MAAM,yBAAyB;;;;iBAQnC,CAAC;AAIJ,eAAO,MAAM,yBAAyB;;iBAEpC,CAAC;AAIH,eAAO,MAAM,mBAAmB;;;iBAG9B,CAAC;AAIH,eAAO,MAAM,uBAAuB;;iBAElC,CAAC;AAIH,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AAIH,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAC;AAIH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC5E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAClF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAClF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAClF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC9E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
|