@aphexcms/cms-core 2.0.10 → 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/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 +2 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +4 -0
- 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 +2 -0
- package/dist/lib/client/index.d.ts.map +1 -1
- package/dist/lib/client/index.js +4 -0
- 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
package/dist/api/api-keys.d.ts
CHANGED
|
@@ -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"}
|
package/dist/api/assets.d.ts.map
CHANGED
|
@@ -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"}
|
package/dist/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';
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -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/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';
|
|
@@ -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,26 @@
|
|
|
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
|
+
};
|
|
@@ -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,9 +1,28 @@
|
|
|
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
|
+
}));
|
|
@@ -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"}
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
// ---------- Shared ----------
|
|
3
|
-
|
|
3
|
+
// Role name — any string matching the cms_roles.name format. The actual
|
|
4
|
+
// existence check happens server-side against the roles table, so a
|
|
5
|
+
// nonexistent name yields a 404/400 rather than a Zod error.
|
|
6
|
+
const roleNameSchema = z
|
|
7
|
+
.string()
|
|
8
|
+
.trim()
|
|
9
|
+
.min(1)
|
|
10
|
+
.max(100)
|
|
11
|
+
.regex(/^[a-zA-Z0-9 _-]+$/);
|
|
12
|
+
export const organizationRoleSchema = roleNameSchema;
|
|
4
13
|
// Role used for new invitations — owners cannot be invited, only promoted.
|
|
5
|
-
export const invitableRoleSchema =
|
|
14
|
+
export const invitableRoleSchema = roleNameSchema.refine((v) => v !== 'owner', {
|
|
15
|
+
message: 'owner cannot be assigned via invitation'
|
|
16
|
+
});
|
|
6
17
|
const metadataSchema = z.record(z.string(), z.unknown());
|
|
7
18
|
// ---------- POST /organizations ----------
|
|
8
19
|
export const createOrganizationRequest = z.object({
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type Capability } from '../../types/capabilities.js';
|
|
3
|
+
export declare const capabilitySchema: z.ZodEnum<{
|
|
4
|
+
"document.read": "document.read";
|
|
5
|
+
"document.create": "document.create";
|
|
6
|
+
"document.update": "document.update";
|
|
7
|
+
"document.delete": "document.delete";
|
|
8
|
+
"document.publish": "document.publish";
|
|
9
|
+
"document.unpublish": "document.unpublish";
|
|
10
|
+
"asset.read": "asset.read";
|
|
11
|
+
"asset.upload": "asset.upload";
|
|
12
|
+
"asset.delete": "asset.delete";
|
|
13
|
+
"member.invite": "member.invite";
|
|
14
|
+
"member.remove": "member.remove";
|
|
15
|
+
"member.changeRole": "member.changeRole";
|
|
16
|
+
"apiKey.manage": "apiKey.manage";
|
|
17
|
+
"role.manage": "role.manage";
|
|
18
|
+
"org.settings": "org.settings";
|
|
19
|
+
}>;
|
|
20
|
+
export declare const createRoleRequest: z.ZodPipe<z.ZodObject<{
|
|
21
|
+
name: z.ZodString;
|
|
22
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
23
|
+
capabilities: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
24
|
+
"document.read": "document.read";
|
|
25
|
+
"document.create": "document.create";
|
|
26
|
+
"document.update": "document.update";
|
|
27
|
+
"document.delete": "document.delete";
|
|
28
|
+
"document.publish": "document.publish";
|
|
29
|
+
"document.unpublish": "document.unpublish";
|
|
30
|
+
"asset.read": "asset.read";
|
|
31
|
+
"asset.upload": "asset.upload";
|
|
32
|
+
"asset.delete": "asset.delete";
|
|
33
|
+
"member.invite": "member.invite";
|
|
34
|
+
"member.remove": "member.remove";
|
|
35
|
+
"member.changeRole": "member.changeRole";
|
|
36
|
+
"apiKey.manage": "apiKey.manage";
|
|
37
|
+
"role.manage": "role.manage";
|
|
38
|
+
"org.settings": "org.settings";
|
|
39
|
+
}>>>;
|
|
40
|
+
}, z.core.$strip>, z.ZodTransform<{
|
|
41
|
+
capabilities: Capability[];
|
|
42
|
+
name: string;
|
|
43
|
+
description?: string | null | undefined;
|
|
44
|
+
}, {
|
|
45
|
+
name: string;
|
|
46
|
+
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")[];
|
|
47
|
+
description?: string | null | undefined;
|
|
48
|
+
}>>;
|
|
49
|
+
export declare const updateRoleRequest: z.ZodPipe<z.ZodObject<{
|
|
50
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
51
|
+
capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
52
|
+
"document.read": "document.read";
|
|
53
|
+
"document.create": "document.create";
|
|
54
|
+
"document.update": "document.update";
|
|
55
|
+
"document.delete": "document.delete";
|
|
56
|
+
"document.publish": "document.publish";
|
|
57
|
+
"document.unpublish": "document.unpublish";
|
|
58
|
+
"asset.read": "asset.read";
|
|
59
|
+
"asset.upload": "asset.upload";
|
|
60
|
+
"asset.delete": "asset.delete";
|
|
61
|
+
"member.invite": "member.invite";
|
|
62
|
+
"member.remove": "member.remove";
|
|
63
|
+
"member.changeRole": "member.changeRole";
|
|
64
|
+
"apiKey.manage": "apiKey.manage";
|
|
65
|
+
"role.manage": "role.manage";
|
|
66
|
+
"org.settings": "org.settings";
|
|
67
|
+
}>>>;
|
|
68
|
+
}, z.core.$strip>, z.ZodTransform<{
|
|
69
|
+
capabilities: Capability[] | undefined;
|
|
70
|
+
description?: string | null | undefined;
|
|
71
|
+
}, {
|
|
72
|
+
description?: string | null | undefined;
|
|
73
|
+
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;
|
|
74
|
+
}>>;
|
|
75
|
+
export type CreateRoleRequest = z.infer<typeof createRoleRequest>;
|
|
76
|
+
export type UpdateRoleRequest = z.infer<typeof updateRoleRequest>;
|
|
77
|
+
//# sourceMappingURL=roles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../../src/lib/api/schemas/roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAA2C,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAMpG,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;EAE5B,CAAC;AAmBF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAMqD,CAAC;AAIpF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;GAW1B,CAAC;AAIL,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAClE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ALL_CAPABILITIES, normalizeCapabilities } from '../../types/capabilities.js';
|
|
3
|
+
// Runtime enum of every known capability. Unknown strings are rejected so a
|
|
4
|
+
// typo in a client request can't silently grant or strip permissions.
|
|
5
|
+
// The cast preserves the literal Capability union in the inferred type — Zod
|
|
6
|
+
// can't see the compile-time widening of the readonly array on its own.
|
|
7
|
+
export const capabilitySchema = z.enum(ALL_CAPABILITIES);
|
|
8
|
+
// Role name: human-readable identifier stored on member rows and referenced
|
|
9
|
+
// in the API as /api/roles/[name]. Spaces are allowed (URL-encoded client
|
|
10
|
+
// side); control characters and slashes are not, to keep routing unambiguous.
|
|
11
|
+
const roleNameSchema = z
|
|
12
|
+
.string()
|
|
13
|
+
.trim()
|
|
14
|
+
.min(1)
|
|
15
|
+
.max(100)
|
|
16
|
+
.regex(/^[a-zA-Z0-9 _-]+$/, {
|
|
17
|
+
message: 'Role name may only contain letters, numbers, spaces, underscores, and hyphens'
|
|
18
|
+
});
|
|
19
|
+
// ---------- POST /roles ----------
|
|
20
|
+
// Capabilities are normalized on intake so any write cap pulls in the matching
|
|
21
|
+
// read — a role with `document.create` but no `document.read` can't
|
|
22
|
+
// realistically edit anything, and leaving that gap trips people up.
|
|
23
|
+
export const createRoleRequest = z
|
|
24
|
+
.object({
|
|
25
|
+
name: roleNameSchema,
|
|
26
|
+
description: z.string().max(500).nullable().optional(),
|
|
27
|
+
capabilities: z.array(capabilitySchema).default([])
|
|
28
|
+
})
|
|
29
|
+
.transform((v) => ({ ...v, capabilities: normalizeCapabilities(v.capabilities) }));
|
|
30
|
+
// ---------- PATCH /roles/[name] ----------
|
|
31
|
+
export const updateRoleRequest = z
|
|
32
|
+
.object({
|
|
33
|
+
description: z.string().max(500).nullable().optional(),
|
|
34
|
+
capabilities: z.array(capabilitySchema).optional()
|
|
35
|
+
})
|
|
36
|
+
.refine((v) => v.description !== undefined || v.capabilities !== undefined, {
|
|
37
|
+
message: 'At least one field (description, capabilities) is required'
|
|
38
|
+
})
|
|
39
|
+
.transform((v) => ({
|
|
40
|
+
...v,
|
|
41
|
+
capabilities: v.capabilities ? normalizeCapabilities(v.capabilities) : undefined
|
|
42
|
+
}));
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SvelteKit ambient type augmentations emitted by Aphex CMS.
|
|
3
|
+
*
|
|
4
|
+
* Side-effect import only — activates the global `App.PageData` shape so
|
|
5
|
+
* `$page.data.rbac` is typed inside any project that uses cms-core, without
|
|
6
|
+
* requiring each app to hand-maintain the `App.PageData` interface.
|
|
7
|
+
*
|
|
8
|
+
* Import once from `src/app.d.ts`:
|
|
9
|
+
*
|
|
10
|
+
* ```ts
|
|
11
|
+
* import '@aphexcms/cms-core/app-augment';
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* The module has no runtime — it's purely a type-augmentation carrier. Kept
|
|
15
|
+
* as a `.ts` file (not `.d.ts`) so Vite/SvelteKit can resolve the import path
|
|
16
|
+
* via the package's `./*` export map.
|
|
17
|
+
*/
|
|
18
|
+
import type { RbacPayload } from './types/capabilities.js';
|
|
19
|
+
declare global {
|
|
20
|
+
namespace App {
|
|
21
|
+
interface PageData {
|
|
22
|
+
/**
|
|
23
|
+
* RBAC snapshot emitted by the admin layout's server load
|
|
24
|
+
* (`/admin/+layout.server.ts`). Absent on public routes (login,
|
|
25
|
+
* invitations) that don't pass through the admin layout.
|
|
26
|
+
*/
|
|
27
|
+
rbac?: RbacPayload;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=app-augment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-augment.d.ts","sourceRoot":"","sources":["../src/lib/app-augment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,GAAG,CAAC;QACb,UAAU,QAAQ;YACjB;;;;eAIG;YACH,IAAI,CAAC,EAAE,WAAW,CAAC;SACnB;KACD;CACD;AAED,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SvelteKit ambient type augmentations emitted by Aphex CMS.
|
|
3
|
+
*
|
|
4
|
+
* Side-effect import only — activates the global `App.PageData` shape so
|
|
5
|
+
* `$page.data.rbac` is typed inside any project that uses cms-core, without
|
|
6
|
+
* requiring each app to hand-maintain the `App.PageData` interface.
|
|
7
|
+
*
|
|
8
|
+
* Import once from `src/app.d.ts`:
|
|
9
|
+
*
|
|
10
|
+
* ```ts
|
|
11
|
+
* import '@aphexcms/cms-core/app-augment';
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* The module has no runtime — it's purely a type-augmentation carrier. Kept
|
|
15
|
+
* as a `.ts` file (not `.d.ts`) so Vite/SvelteKit can resolve the import path
|
|
16
|
+
* via the package's `./*` export map.
|
|
17
|
+
*/
|
|
18
|
+
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { RequestEvent } from '@sveltejs/kit';
|
|
2
2
|
import type { DatabaseAdapter } from '../db/index.js';
|
|
3
3
|
import type { CMSConfig } from '../types/index.js';
|
|
4
|
+
import type { RolesService } from '../services/roles-service.js';
|
|
4
5
|
import type { AuthProvider } from './provider.js';
|
|
5
|
-
export declare function handleAuthHook(event: RequestEvent, config: CMSConfig, authProvider: AuthProvider, db: DatabaseAdapter): Promise<Response | null>;
|
|
6
|
+
export declare function handleAuthHook(event: RequestEvent, config: CMSConfig, authProvider: AuthProvider, db: DatabaseAdapter, rolesService: RolesService): Promise<Response | null>;
|
|
6
7
|
//# sourceMappingURL=auth-hooks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-hooks.d.ts","sourceRoot":"","sources":["../../src/lib/auth/auth-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAQ,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-hooks.d.ts","sourceRoot":"","sources":["../../src/lib/auth/auth-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAQ,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAkB/C,wBAAsB,cAAc,CACnC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,eAAe,EACnB,YAAY,EAAE,YAAY,GACxB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAsJ1B"}
|
package/dist/auth/auth-hooks.js
CHANGED
|
@@ -1,11 +1,25 @@
|
|
|
1
1
|
import { redirect } from '@sveltejs/kit';
|
|
2
2
|
import { AuthError } from './auth-errors.js';
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Populate `auth.capabilities` for session auth via RolesService.
|
|
5
|
+
* Runs once per request so downstream permission checks stay synchronous.
|
|
6
|
+
* No-op for API keys and partial sessions — `resolveCapabilities` handles
|
|
7
|
+
* those shapes directly.
|
|
8
|
+
*/
|
|
9
|
+
async function hydrateCapabilities(auth, rolesService) {
|
|
10
|
+
if (auth.type !== 'session')
|
|
11
|
+
return;
|
|
12
|
+
if (auth.capabilities)
|
|
13
|
+
return; // Already populated (e.g. by provider).
|
|
14
|
+
auth.capabilities = await rolesService.getCapabilities(auth.organizationId, auth.organizationRole);
|
|
15
|
+
}
|
|
16
|
+
export async function handleAuthHook(event, config, authProvider, db, rolesService) {
|
|
4
17
|
const path = event.url.pathname;
|
|
5
18
|
// 1. Admin UI routes - require session authentication
|
|
6
19
|
if (path.startsWith('/admin')) {
|
|
7
20
|
try {
|
|
8
21
|
const session = await authProvider.requireSession(event.request, db);
|
|
22
|
+
await hydrateCapabilities(session, rolesService);
|
|
9
23
|
event.locals.auth = session;
|
|
10
24
|
}
|
|
11
25
|
catch (error) {
|
|
@@ -33,6 +47,7 @@ export async function handleAuthHook(event, config, authProvider, db) {
|
|
|
33
47
|
}
|
|
34
48
|
// Make auth available (can be null, route will check for signed token)
|
|
35
49
|
if (auth) {
|
|
50
|
+
await hydrateCapabilities(auth, rolesService);
|
|
36
51
|
event.locals.auth = auth;
|
|
37
52
|
}
|
|
38
53
|
}
|
|
@@ -56,7 +71,9 @@ export async function handleAuthHook(event, config, authProvider, db) {
|
|
|
56
71
|
}
|
|
57
72
|
// Check if GraphQL is enabled (built-in, on by default)
|
|
58
73
|
const graphqlEndpoint = config.graphql !== false
|
|
59
|
-
?
|
|
74
|
+
? typeof config.graphql === 'object'
|
|
75
|
+
? (config.graphql.path ?? '/api/graphql')
|
|
76
|
+
: '/api/graphql'
|
|
60
77
|
: undefined;
|
|
61
78
|
// Require authentication for protected API routes
|
|
62
79
|
const protectedApiRoutes = [
|
|
@@ -65,6 +82,7 @@ export async function handleAuthHook(event, config, authProvider, db) {
|
|
|
65
82
|
'/api/schemas',
|
|
66
83
|
'/api/organizations',
|
|
67
84
|
'/api/invitations',
|
|
85
|
+
'/api/roles',
|
|
68
86
|
'/api/settings',
|
|
69
87
|
'/api/instance-settings'
|
|
70
88
|
];
|
|
@@ -110,6 +128,7 @@ export async function handleAuthHook(event, config, authProvider, db) {
|
|
|
110
128
|
}
|
|
111
129
|
// Make auth available in API routes
|
|
112
130
|
if (auth) {
|
|
131
|
+
await hydrateCapabilities(auth, rolesService);
|
|
113
132
|
event.locals.auth = auth;
|
|
114
133
|
}
|
|
115
134
|
}
|
|
@@ -119,6 +138,7 @@ export async function handleAuthHook(event, config, authProvider, db) {
|
|
|
119
138
|
try {
|
|
120
139
|
const auth = await authProvider.getSession(event.request, db);
|
|
121
140
|
if (auth) {
|
|
141
|
+
await hydrateCapabilities(auth, rolesService);
|
|
122
142
|
event.locals.auth = auth;
|
|
123
143
|
}
|
|
124
144
|
}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -4,11 +4,13 @@ export * from '../field-validation/rule.js';
|
|
|
4
4
|
export * from '../field-validation/utils.js';
|
|
5
5
|
export { createContentHash, hasUnpublishedChanges } from '../utils/content-hash.js';
|
|
6
6
|
export { setSchemaContext, getSchemaContext } from '../schema-context.svelte';
|
|
7
|
+
export { setPermissionsContext, usePermissions, type PermissionsContext } from '../permissions-context.svelte';
|
|
7
8
|
export * from '../schema-utils/index.js';
|
|
8
9
|
export { default as DocumentEditor } from '../components/admin/DocumentEditor.svelte';
|
|
9
10
|
export { default as SchemaField } from '../components/admin/SchemaField.svelte';
|
|
10
11
|
export { default as AdminApp } from '../components/AdminApp.svelte';
|
|
11
12
|
export { default as Sidebar } from '../components/layout/Sidebar.svelte';
|
|
13
|
+
export { default as PermissionsDebug } from '../components/admin/PermissionsDebug.svelte';
|
|
12
14
|
export { default as StringField } from '../components/admin/fields/StringField.svelte';
|
|
13
15
|
export { default as TextareaField } from '../components/admin/fields/TextareaField.svelte';
|
|
14
16
|
export { default as NumberField } from '../components/admin/fields/NumberField.svelte';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/client/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlG,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAGzE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAG7F,cAAc,gBAAgB,CAAC;AAE/B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6DAA6D,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/client/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlG,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EACN,qBAAqB,EACrB,cAAc,EACd,KAAK,kBAAkB,EACvB,MAAM,+BAA+B,CAAC;AAGvC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAGzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAG1F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAG7F,cAAc,gBAAgB,CAAC;AAE/B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6DAA6D,CAAC"}
|
package/dist/client/index.js
CHANGED
|
@@ -9,6 +9,8 @@ export * from '../field-validation/utils.js';
|
|
|
9
9
|
export { createContentHash, hasUnpublishedChanges } from '../utils/content-hash.js';
|
|
10
10
|
// Schema context (for providing schemas to components)
|
|
11
11
|
export { setSchemaContext, getSchemaContext } from '../schema-context.svelte';
|
|
12
|
+
// Permissions context (for capability-based UI gating)
|
|
13
|
+
export { setPermissionsContext, usePermissions } from '../permissions-context.svelte';
|
|
12
14
|
// Schema utilities (for working with schemas)
|
|
13
15
|
export * from '../schema-utils/index.js';
|
|
14
16
|
// Components (UI components for the admin interface)
|
|
@@ -16,6 +18,8 @@ export { default as DocumentEditor } from '../components/admin/DocumentEditor.sv
|
|
|
16
18
|
export { default as SchemaField } from '../components/admin/SchemaField.svelte';
|
|
17
19
|
export { default as AdminApp } from '../components/AdminApp.svelte';
|
|
18
20
|
export { default as Sidebar } from '../components/layout/Sidebar.svelte';
|
|
21
|
+
// Debug helpers
|
|
22
|
+
export { default as PermissionsDebug } from '../components/admin/PermissionsDebug.svelte';
|
|
19
23
|
// Field components
|
|
20
24
|
export { default as StringField } from '../components/admin/fields/StringField.svelte';
|
|
21
25
|
export { default as TextareaField } from '../components/admin/fields/TextareaField.svelte';
|