@aphexcms/cms-core 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/api/assets.d.ts +48 -0
- package/dist/api/assets.d.ts.map +1 -0
- package/dist/api/assets.js +52 -0
- package/dist/api/client.d.ts +37 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +125 -0
- package/dist/api/documents.d.ts +57 -0
- package/dist/api/documents.d.ts.map +1 -0
- package/dist/api/documents.js +85 -0
- package/dist/api/index.d.ts +7 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +5 -0
- package/dist/api/organizations.d.ts +101 -0
- package/dist/api/organizations.d.ts.map +1 -0
- package/dist/api/organizations.js +92 -0
- package/dist/api/types.d.ts +45 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +1 -0
- package/dist/auth/auth-errors.d.ts +7 -0
- package/dist/auth/auth-errors.d.ts.map +1 -0
- package/dist/auth/auth-errors.js +13 -0
- package/dist/auth/auth-hooks.d.ts +6 -0
- package/dist/auth/auth-hooks.d.ts.map +1 -0
- package/dist/auth/auth-hooks.js +122 -0
- package/dist/auth/provider.d.ts +17 -0
- package/dist/auth/provider.d.ts.map +1 -0
- package/dist/auth/provider.js +1 -0
- package/dist/cli/generate-types.js +218 -0
- package/dist/cli/index.js +86 -0
- package/dist/client/index.d.ts +24 -0
- package/dist/client/index.d.ts.map +1 -0
- package/{src/lib/client/index.ts → dist/client/index.js} +7 -18
- package/{src/lib → dist}/components/AdminApp.svelte +26 -55
- package/dist/components/AdminApp.svelte.d.ts +24 -0
- package/dist/components/AdminApp.svelte.d.ts.map +1 -0
- package/dist/components/admin/AdminLayout.svelte.d.ts +15 -0
- package/dist/components/admin/AdminLayout.svelte.d.ts.map +1 -0
- package/{src/lib → dist}/components/admin/DocumentEditor.svelte +60 -14
- package/dist/components/admin/DocumentEditor.svelte.d.ts +18 -0
- package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -0
- package/dist/components/admin/DocumentTypesList.svelte.d.ts +14 -0
- package/dist/components/admin/DocumentTypesList.svelte.d.ts.map +1 -0
- package/dist/components/admin/ObjectModal.svelte.d.ts +15 -0
- package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -0
- package/dist/components/admin/SchemaField.svelte.d.ts +19 -0
- package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -0
- package/dist/components/admin/fields/ArrayField.svelte.d.ts +12 -0
- package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -0
- package/dist/components/admin/fields/BooleanField.svelte.d.ts +13 -0
- package/dist/components/admin/fields/BooleanField.svelte.d.ts.map +1 -0
- package/dist/components/admin/fields/ImageField.svelte.d.ts +15 -0
- package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -0
- package/dist/components/admin/fields/NumberField.svelte.d.ts +14 -0
- package/dist/components/admin/fields/NumberField.svelte.d.ts.map +1 -0
- package/{src/lib → dist}/components/admin/fields/ReferenceField.svelte +2 -3
- package/dist/components/admin/fields/ReferenceField.svelte.d.ts +12 -0
- package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -0
- package/dist/components/admin/fields/SlugField.svelte.d.ts +15 -0
- package/dist/components/admin/fields/SlugField.svelte.d.ts.map +1 -0
- package/dist/components/admin/fields/StringField.svelte.d.ts +14 -0
- package/dist/components/admin/fields/StringField.svelte.d.ts.map +1 -0
- package/dist/components/admin/fields/TextareaField.svelte.d.ts +14 -0
- package/dist/components/admin/fields/TextareaField.svelte.d.ts.map +1 -0
- package/dist/components/fields/index.d.ts +9 -0
- package/dist/components/fields/index.d.ts.map +1 -0
- package/dist/components/index.d.ts +7 -0
- package/dist/components/index.d.ts.map +1 -0
- package/{src/lib/components/index.ts → dist/components/index.js} +1 -5
- package/dist/components/layout/OrganizationSwitcher.svelte.d.ts +11 -0
- package/dist/components/layout/OrganizationSwitcher.svelte.d.ts.map +1 -0
- package/dist/components/layout/Sidebar.svelte.d.ts +14 -0
- package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -0
- package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts +11 -0
- package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts.map +1 -0
- package/dist/components/layout/sidebar/NavMain.svelte.d.ts +19 -0
- package/dist/components/layout/sidebar/NavMain.svelte.d.ts.map +1 -0
- package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts +9 -0
- package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts.map +1 -0
- package/dist/components/layout/sidebar/NavUser.svelte.d.ts +9 -0
- package/dist/components/layout/sidebar/NavUser.svelte.d.ts.map +1 -0
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +15 -0
- package/dist/db/adapters/index.d.ts +1 -0
- package/dist/db/adapters/index.d.ts.map +1 -0
- package/{src/lib/db/adapters/index.ts → dist/db/adapters/index.js} +1 -0
- package/dist/db/index.d.ts +2 -0
- package/dist/db/index.d.ts.map +1 -0
- package/{src/lib/db/index.ts → dist/db/index.js} +1 -2
- package/dist/db/interfaces/asset.d.ts +73 -0
- package/dist/db/interfaces/asset.d.ts.map +1 -0
- package/dist/db/interfaces/asset.js +1 -0
- package/dist/db/interfaces/document.d.ts +61 -0
- package/dist/db/interfaces/document.d.ts.map +1 -0
- package/dist/db/interfaces/document.js +1 -0
- package/dist/db/interfaces/index.d.ts +73 -0
- package/dist/db/interfaces/index.d.ts.map +1 -0
- package/dist/db/interfaces/index.js +1 -0
- package/dist/db/interfaces/organization.d.ts +27 -0
- package/dist/db/interfaces/organization.d.ts.map +1 -0
- package/dist/db/interfaces/organization.js +1 -0
- package/dist/db/interfaces/schema.d.ts +21 -0
- package/dist/db/interfaces/schema.d.ts.map +1 -0
- package/dist/db/interfaces/schema.js +1 -0
- package/dist/db/interfaces/user.d.ts +15 -0
- package/dist/db/interfaces/user.d.ts.map +1 -0
- package/dist/db/interfaces/user.js +1 -0
- package/dist/db/utils/reference-resolver.d.ts +18 -0
- package/dist/db/utils/reference-resolver.d.ts.map +1 -0
- package/dist/db/utils/reference-resolver.js +80 -0
- package/dist/define.d.ts +3 -0
- package/dist/define.d.ts.map +1 -0
- package/dist/define.js +4 -0
- package/dist/email/index.d.ts +2 -0
- package/dist/email/index.d.ts.map +1 -0
- package/{src/lib/email/index.ts → dist/email/index.js} +1 -2
- package/dist/email/interfaces/email.d.ts +42 -0
- package/dist/email/interfaces/email.d.ts.map +1 -0
- package/dist/email/interfaces/email.js +1 -0
- package/dist/engine.d.ts +26 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +66 -0
- package/dist/field-validation/rule.d.ts +51 -0
- package/dist/field-validation/rule.d.ts.map +1 -0
- package/dist/field-validation/rule.js +221 -0
- package/dist/field-validation/utils.d.ts +39 -0
- package/dist/field-validation/utils.d.ts.map +1 -0
- package/dist/field-validation/utils.js +99 -0
- package/dist/hooks.d.ts +25 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +164 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/{src/lib/index.ts → dist/index.js} +1 -2
- package/dist/is-mobile.svelte.d.ts +5 -0
- package/dist/is-mobile.svelte.d.ts.map +1 -0
- package/{src/lib/is-mobile.svelte.ts → dist/is-mobile.svelte.js} +3 -5
- package/dist/lib/auth/provider.js +1 -0
- package/dist/lib/db/index.js +4 -0
- package/dist/lib/db/interfaces/asset.js +1 -0
- package/dist/lib/db/interfaces/document.js +1 -0
- package/dist/lib/db/interfaces/index.js +1 -0
- package/dist/lib/db/interfaces/organization.js +1 -0
- package/dist/lib/db/interfaces/schema.js +1 -0
- package/dist/lib/db/interfaces/user.js +1 -0
- package/dist/lib/email/index.js +4 -0
- package/dist/lib/email/interfaces/email.js +1 -0
- package/dist/lib/field-validation/rule.js +221 -0
- package/dist/lib/field-validation/utils.js +99 -0
- package/dist/lib/storage/interfaces/index.js +2 -0
- package/dist/lib/storage/interfaces/storage.js +1 -0
- package/dist/lib/types/asset.js +2 -0
- package/dist/lib/types/auth.js +41 -0
- package/dist/lib/types/config.js +1 -0
- package/dist/lib/types/document.js +1 -0
- package/dist/lib/types/filters.js +5 -0
- package/dist/lib/types/index.js +9 -0
- package/dist/lib/types/organization.js +3 -0
- package/dist/lib/types/schemas.js +1 -0
- package/dist/lib/types/sidebar.js +1 -0
- package/dist/lib/types/user.js +1 -0
- package/dist/local-api/auth-helpers.d.ts +65 -0
- package/dist/local-api/auth-helpers.d.ts.map +1 -0
- package/dist/local-api/auth-helpers.js +102 -0
- package/dist/local-api/collection-api.d.ts +138 -0
- package/dist/local-api/collection-api.d.ts.map +1 -0
- package/dist/local-api/collection-api.js +276 -0
- package/dist/local-api/index.d.ts +108 -0
- package/dist/local-api/index.d.ts.map +1 -0
- package/dist/local-api/index.js +157 -0
- package/dist/local-api/permissions.d.ts +45 -0
- package/dist/local-api/permissions.d.ts.map +1 -0
- package/dist/local-api/permissions.js +117 -0
- package/dist/local-api/types.d.ts +65 -0
- package/dist/local-api/types.d.ts.map +1 -0
- package/dist/local-api/types.js +4 -0
- package/dist/routes/assets-by-id.d.ts +5 -0
- package/dist/routes/assets-by-id.d.ts.map +1 -0
- package/dist/routes/assets-by-id.js +138 -0
- package/dist/routes/assets-cdn.d.ts +3 -0
- package/dist/routes/assets-cdn.d.ts.map +1 -0
- package/dist/routes/assets-cdn.js +155 -0
- package/dist/routes/assets.d.ts +4 -0
- package/dist/routes/assets.d.ts.map +1 -0
- package/dist/routes/assets.js +94 -0
- package/dist/routes/documents-by-id.d.ts +5 -0
- package/dist/routes/documents-by-id.d.ts.map +1 -0
- package/dist/routes/documents-by-id.js +163 -0
- package/dist/routes/documents-publish.d.ts +4 -0
- package/dist/routes/documents-publish.d.ts.map +1 -0
- package/dist/routes/documents-publish.js +136 -0
- package/dist/routes/documents-query.d.ts +24 -0
- package/dist/routes/documents-query.d.ts.map +1 -0
- package/dist/routes/documents-query.js +95 -0
- package/dist/routes/documents.d.ts +4 -0
- package/dist/routes/documents.d.ts.map +1 -0
- package/dist/routes/documents.js +136 -0
- package/dist/routes/index.d.ts +8 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +12 -0
- package/dist/routes/organizations-by-id.d.ts +5 -0
- package/dist/routes/organizations-by-id.d.ts.map +1 -0
- package/dist/routes/organizations-by-id.js +187 -0
- package/dist/routes/organizations-invitations.d.ts +4 -0
- package/dist/routes/organizations-invitations.d.ts.map +1 -0
- package/dist/routes/organizations-invitations.js +125 -0
- package/dist/routes/organizations-members.d.ts +5 -0
- package/dist/routes/organizations-members.d.ts.map +1 -0
- package/dist/routes/organizations-members.js +206 -0
- package/dist/routes/organizations-switch.d.ts +3 -0
- package/dist/routes/organizations-switch.d.ts.map +1 -0
- package/dist/routes/organizations-switch.js +53 -0
- package/dist/routes/organizations.d.ts +4 -0
- package/dist/routes/organizations.d.ts.map +1 -0
- package/dist/routes/organizations.js +109 -0
- package/dist/routes/schemas-by-type.d.ts +3 -0
- package/dist/routes/schemas-by-type.d.ts.map +1 -0
- package/dist/routes/schemas-by-type.js +25 -0
- package/dist/routes/schemas.d.ts +3 -0
- package/dist/routes/schemas.d.ts.map +1 -0
- package/dist/routes/schemas.js +11 -0
- package/dist/routes-exports.d.ts +14 -0
- package/dist/routes-exports.d.ts.map +1 -0
- package/dist/routes-exports.js +19 -0
- package/dist/schema-context.svelte.d.ts +10 -0
- package/dist/schema-context.svelte.d.ts.map +1 -0
- package/dist/schema-context.svelte.js +18 -0
- package/dist/schema-utils/cleanup.d.ts +21 -0
- package/dist/schema-utils/cleanup.d.ts.map +1 -0
- package/dist/schema-utils/cleanup.js +80 -0
- package/dist/schema-utils/index.d.ts +4 -0
- package/dist/schema-utils/index.d.ts.map +1 -0
- package/dist/schema-utils/index.js +4 -0
- package/dist/schema-utils/utils.d.ts +30 -0
- package/dist/schema-utils/utils.d.ts.map +1 -0
- package/dist/schema-utils/utils.js +37 -0
- package/dist/schema-utils/validator.d.ts +6 -0
- package/dist/schema-utils/validator.d.ts.map +1 -0
- package/dist/schema-utils/validator.js +45 -0
- package/dist/server/index.d.ts +17 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +30 -0
- package/dist/services/asset-service.d.ts +86 -0
- package/dist/services/asset-service.d.ts.map +1 -0
- package/dist/services/asset-service.js +187 -0
- package/dist/services/index.d.ts +3 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +4 -0
- package/dist/storage/adapters/index.d.ts +2 -0
- package/dist/storage/adapters/index.d.ts.map +1 -0
- package/dist/storage/adapters/index.js +2 -0
- package/dist/storage/adapters/local-storage-adapter.d.ts +54 -0
- package/dist/storage/adapters/local-storage-adapter.d.ts.map +1 -0
- package/dist/storage/adapters/local-storage-adapter.js +187 -0
- package/dist/storage/index.d.ts +3 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/{src/lib/storage/index.ts → dist/storage/index.js} +2 -4
- package/dist/storage/interfaces/index.d.ts +2 -0
- package/dist/storage/interfaces/index.d.ts.map +1 -0
- package/dist/storage/interfaces/index.js +2 -0
- package/dist/storage/interfaces/storage.d.ts +91 -0
- package/dist/storage/interfaces/storage.d.ts.map +1 -0
- package/dist/storage/interfaces/storage.js +1 -0
- package/dist/storage/providers/storage.d.ts +43 -0
- package/dist/storage/providers/storage.d.ts.map +1 -0
- package/dist/storage/providers/storage.js +64 -0
- package/dist/types/asset.d.ts +73 -0
- package/dist/types/asset.d.ts.map +1 -0
- package/dist/types/asset.js +2 -0
- package/dist/types/auth.d.ts +50 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +41 -0
- package/dist/types/config.d.ts +64 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +1 -0
- package/dist/types/document.d.ts +35 -0
- package/dist/types/document.d.ts.map +1 -0
- package/dist/types/document.js +1 -0
- package/dist/types/filters.d.ts +173 -0
- package/dist/types/filters.d.ts.map +1 -0
- package/dist/types/filters.js +5 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/organization.d.ts +105 -0
- package/dist/types/organization.d.ts.map +1 -0
- package/dist/types/organization.js +3 -0
- package/dist/types/schemas.d.ts +114 -0
- package/dist/types/schemas.d.ts.map +1 -0
- package/dist/types/schemas.js +1 -0
- package/dist/types/sidebar.d.ts +33 -0
- package/dist/types/sidebar.d.ts.map +1 -0
- package/dist/types/sidebar.js +1 -0
- package/dist/types/user.d.ts +14 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +1 -0
- package/dist/utils/content-hash.d.ts +22 -0
- package/dist/utils/content-hash.d.ts.map +1 -0
- package/dist/utils/content-hash.js +67 -0
- package/dist/utils/image-url.d.ts +88 -0
- package/dist/utils/image-url.d.ts.map +1 -0
- package/dist/utils/image-url.js +165 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/slug.d.ts +13 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +30 -0
- package/dist/utils.d.ts +13 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +5 -0
- package/package.json +101 -95
- package/src/lib/api/assets.ts +0 -75
- package/src/lib/api/client.ts +0 -150
- package/src/lib/api/documents.ts +0 -102
- package/src/lib/api/index.ts +0 -7
- package/src/lib/api/organizations.ts +0 -154
- package/src/lib/api/types.ts +0 -34
- package/src/lib/auth/auth-errors.ts +0 -23
- package/src/lib/auth/auth-hooks.ts +0 -132
- package/src/lib/auth/provider.ts +0 -25
- package/src/lib/config.ts +0 -18
- package/src/lib/db/interfaces/asset.ts +0 -61
- package/src/lib/db/interfaces/document.ts +0 -53
- package/src/lib/db/interfaces/index.ts +0 -98
- package/src/lib/db/interfaces/organization.ts +0 -51
- package/src/lib/db/interfaces/schema.ts +0 -13
- package/src/lib/db/interfaces/user.ts +0 -16
- package/src/lib/db/utils/reference-resolver.ts +0 -119
- package/src/lib/define.ts +0 -7
- package/src/lib/email/interfaces/email.ts +0 -45
- package/src/lib/engine.ts +0 -85
- package/src/lib/field-validation/rule.ts +0 -287
- package/src/lib/field-validation/utils.ts +0 -91
- package/src/lib/hooks.ts +0 -142
- package/src/lib/routes/assets-by-id.ts +0 -161
- package/src/lib/routes/assets-cdn.ts +0 -185
- package/src/lib/routes/assets.ts +0 -116
- package/src/lib/routes/documents-by-id.ts +0 -188
- package/src/lib/routes/documents-publish.ts +0 -211
- package/src/lib/routes/documents.ts +0 -172
- package/src/lib/routes/index.ts +0 -13
- package/src/lib/routes/organizations-by-id.ts +0 -258
- package/src/lib/routes/organizations-invitations.ts +0 -183
- package/src/lib/routes/organizations-members.ts +0 -301
- package/src/lib/routes/organizations-switch.ts +0 -74
- package/src/lib/routes/organizations.ts +0 -147
- package/src/lib/routes/schemas-by-type.ts +0 -35
- package/src/lib/routes/schemas.ts +0 -19
- package/src/lib/routes-exports.ts +0 -42
- package/src/lib/schema-context.svelte.ts +0 -24
- package/src/lib/schema-utils/cleanup.ts +0 -116
- package/src/lib/schema-utils/index.ts +0 -4
- package/src/lib/schema-utils/utils.ts +0 -47
- package/src/lib/schema-utils/validator.ts +0 -58
- package/src/lib/server/index.ts +0 -40
- package/src/lib/services/asset-service.ts +0 -256
- package/src/lib/services/index.ts +0 -6
- package/src/lib/storage/adapters/index.ts +0 -2
- package/src/lib/storage/adapters/local-storage-adapter.ts +0 -215
- package/src/lib/storage/interfaces/index.ts +0 -2
- package/src/lib/storage/interfaces/storage.ts +0 -114
- package/src/lib/storage/providers/storage.ts +0 -83
- package/src/lib/types/asset.ts +0 -81
- package/src/lib/types/auth.ts +0 -80
- package/src/lib/types/config.ts +0 -45
- package/src/lib/types/document.ts +0 -38
- package/src/lib/types/index.ts +0 -8
- package/src/lib/types/organization.ts +0 -119
- package/src/lib/types/schemas.ts +0 -156
- package/src/lib/types/sidebar.ts +0 -37
- package/src/lib/types/user.ts +0 -17
- package/src/lib/utils/content-hash.ts +0 -75
- package/src/lib/utils/image-url.ts +0 -204
- package/src/lib/utils/index.ts +0 -12
- package/src/lib/utils/slug.ts +0 -33
- package/src/lib/utils.ts +0 -13
- /package/{src/lib → dist}/app.d.ts +0 -0
- /package/{src/lib → dist}/auth/MULTI_TENANCY_PLAN.md +0 -0
- /package/{src/lib → dist}/components/admin/AdminLayout.svelte +0 -0
- /package/{src/lib → dist}/components/admin/DocumentTypesList.svelte +0 -0
- /package/{src/lib → dist}/components/admin/ObjectModal.svelte +0 -0
- /package/{src/lib → dist}/components/admin/SchemaField.svelte +0 -0
- /package/{src/lib → dist}/components/admin/fields/ArrayField.svelte +0 -0
- /package/{src/lib → dist}/components/admin/fields/BooleanField.svelte +0 -0
- /package/{src/lib → dist}/components/admin/fields/ImageField.svelte +0 -0
- /package/{src/lib → dist}/components/admin/fields/NumberField.svelte +0 -0
- /package/{src/lib → dist}/components/admin/fields/SlugField.svelte +0 -0
- /package/{src/lib → dist}/components/admin/fields/StringField.svelte +0 -0
- /package/{src/lib → dist}/components/admin/fields/TextareaField.svelte +0 -0
- /package/{src/lib/components/fields/index.ts → dist/components/fields/index.js} +0 -0
- /package/{src/lib → dist}/components/layout/OrganizationSwitcher.svelte +0 -0
- /package/{src/lib → dist}/components/layout/Sidebar.svelte +0 -0
- /package/{src/lib → dist}/components/layout/sidebar/AppSidebar.svelte +0 -0
- /package/{src/lib → dist}/components/layout/sidebar/NavMain.svelte +0 -0
- /package/{src/lib → dist}/components/layout/sidebar/NavSecondary.svelte +0 -0
- /package/{src/lib → dist}/components/layout/sidebar/NavUser.svelte +0 -0
- /package/{src/lib → dist}/plugins/README.md +0 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// Aphex CMS Organization Members API Handlers
|
|
2
|
+
import { json } from '@sveltejs/kit';
|
|
3
|
+
// GET /api/organizations/members - List organization members
|
|
4
|
+
export const GET = async ({ locals }) => {
|
|
5
|
+
try {
|
|
6
|
+
const { databaseAdapter } = locals.aphexCMS;
|
|
7
|
+
const auth = locals.auth;
|
|
8
|
+
if (!auth || auth.type !== 'session') {
|
|
9
|
+
return json({
|
|
10
|
+
success: false,
|
|
11
|
+
error: 'Unauthorized',
|
|
12
|
+
message: 'Session authentication required'
|
|
13
|
+
}, { status: 401 });
|
|
14
|
+
}
|
|
15
|
+
// Get members of the current active organization
|
|
16
|
+
const members = await databaseAdapter.findOrganizationMembers(auth.organizationId);
|
|
17
|
+
return json({
|
|
18
|
+
success: true,
|
|
19
|
+
data: members
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.error('Failed to fetch organization members:', error);
|
|
24
|
+
return json({
|
|
25
|
+
success: false,
|
|
26
|
+
error: 'Failed to fetch members',
|
|
27
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
28
|
+
}, { status: 500 });
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
// DELETE /api/organizations/members - Remove a member
|
|
32
|
+
export const DELETE = async ({ request, locals }) => {
|
|
33
|
+
try {
|
|
34
|
+
const { databaseAdapter } = locals.aphexCMS;
|
|
35
|
+
const auth = locals.auth;
|
|
36
|
+
if (!auth || auth.type !== 'session') {
|
|
37
|
+
return json({
|
|
38
|
+
success: false,
|
|
39
|
+
error: 'Unauthorized',
|
|
40
|
+
message: 'Session authentication required'
|
|
41
|
+
}, { status: 401 });
|
|
42
|
+
}
|
|
43
|
+
// Only owners and admins can remove members
|
|
44
|
+
if (auth.organizationRole !== 'owner' && auth.organizationRole !== 'admin') {
|
|
45
|
+
return json({
|
|
46
|
+
success: false,
|
|
47
|
+
error: 'Forbidden',
|
|
48
|
+
message: 'Only owners and admins can remove members'
|
|
49
|
+
}, { status: 403 });
|
|
50
|
+
}
|
|
51
|
+
const body = await request.json();
|
|
52
|
+
if (!body.userId) {
|
|
53
|
+
return json({
|
|
54
|
+
success: false,
|
|
55
|
+
error: 'Missing required field',
|
|
56
|
+
message: 'userId is required'
|
|
57
|
+
}, { status: 400 });
|
|
58
|
+
}
|
|
59
|
+
// Prevent removing yourself
|
|
60
|
+
if (body.userId === auth.user.id) {
|
|
61
|
+
return json({
|
|
62
|
+
success: false,
|
|
63
|
+
error: 'Invalid operation',
|
|
64
|
+
message: 'You cannot remove yourself from the organization'
|
|
65
|
+
}, { status: 400 });
|
|
66
|
+
}
|
|
67
|
+
// Get the target member's role
|
|
68
|
+
const targetMember = await databaseAdapter.findUserMembership(body.userId, auth.organizationId);
|
|
69
|
+
if (!targetMember) {
|
|
70
|
+
return json({
|
|
71
|
+
success: false,
|
|
72
|
+
error: 'Member not found',
|
|
73
|
+
message: 'User is not a member of this organization'
|
|
74
|
+
}, { status: 404 });
|
|
75
|
+
}
|
|
76
|
+
// Admins cannot remove owners
|
|
77
|
+
if (auth.organizationRole === 'admin' && targetMember.role === 'owner') {
|
|
78
|
+
return json({
|
|
79
|
+
success: false,
|
|
80
|
+
error: 'Forbidden',
|
|
81
|
+
message: 'Admins cannot remove owners'
|
|
82
|
+
}, { status: 403 });
|
|
83
|
+
}
|
|
84
|
+
// Remove the member
|
|
85
|
+
const removed = await databaseAdapter.removeMember(auth.organizationId, body.userId);
|
|
86
|
+
if (!removed) {
|
|
87
|
+
return json({
|
|
88
|
+
success: false,
|
|
89
|
+
error: 'Failed to remove member'
|
|
90
|
+
}, { status: 500 });
|
|
91
|
+
}
|
|
92
|
+
// Clear the user's session if their active org is the one they were removed from
|
|
93
|
+
const userSession = await databaseAdapter.findUserSession(body.userId);
|
|
94
|
+
if (userSession?.activeOrganizationId === auth.organizationId) {
|
|
95
|
+
console.log(`[Organizations]: Clearing user session for ${body.userId} - removed from active org ${auth.organizationId}`);
|
|
96
|
+
// Check if user has other organizations
|
|
97
|
+
const otherOrgs = await databaseAdapter.findUserOrganizations(body.userId);
|
|
98
|
+
if (otherOrgs.length > 0 && otherOrgs[0]) {
|
|
99
|
+
// Set their first remaining org as active
|
|
100
|
+
await databaseAdapter.updateUserSession(body.userId, otherOrgs[0].organization.id);
|
|
101
|
+
console.log(`[Organizations]: Set org ${otherOrgs[0].organization.id} as new active org for ${body.userId}`);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// No other orgs - delete the session so invitations can be processed on next login
|
|
105
|
+
await databaseAdapter.deleteUserSession(body.userId);
|
|
106
|
+
console.log(`[Organizations]: Deleted user session for ${body.userId} - no remaining organizations`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return json({
|
|
110
|
+
success: true,
|
|
111
|
+
message: 'Member removed successfully'
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.error('Failed to remove member:', error);
|
|
116
|
+
return json({
|
|
117
|
+
success: false,
|
|
118
|
+
error: 'Failed to remove member',
|
|
119
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
120
|
+
}, { status: 500 });
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
// PATCH /api/organizations/members - Update member role
|
|
124
|
+
export const PATCH = async ({ request, locals }) => {
|
|
125
|
+
try {
|
|
126
|
+
const { databaseAdapter } = locals.aphexCMS;
|
|
127
|
+
const auth = locals.auth;
|
|
128
|
+
if (!auth || auth.type !== 'session') {
|
|
129
|
+
return json({
|
|
130
|
+
success: false,
|
|
131
|
+
error: 'Unauthorized',
|
|
132
|
+
message: 'Session authentication required'
|
|
133
|
+
}, { status: 401 });
|
|
134
|
+
}
|
|
135
|
+
// Only owners and admins can update roles
|
|
136
|
+
if (auth.organizationRole !== 'owner' && auth.organizationRole !== 'admin') {
|
|
137
|
+
return json({
|
|
138
|
+
success: false,
|
|
139
|
+
error: 'Forbidden',
|
|
140
|
+
message: 'Only owners and admins can update member roles'
|
|
141
|
+
}, { status: 403 });
|
|
142
|
+
}
|
|
143
|
+
const body = await request.json();
|
|
144
|
+
if (!body.userId || !body.role) {
|
|
145
|
+
return json({
|
|
146
|
+
success: false,
|
|
147
|
+
error: 'Missing required fields',
|
|
148
|
+
message: 'userId and role are required'
|
|
149
|
+
}, { status: 400 });
|
|
150
|
+
}
|
|
151
|
+
// Validate role
|
|
152
|
+
const validRoles = ['owner', 'admin', 'editor', 'viewer'];
|
|
153
|
+
if (!validRoles.includes(body.role)) {
|
|
154
|
+
return json({
|
|
155
|
+
success: false,
|
|
156
|
+
error: 'Invalid role',
|
|
157
|
+
message: 'Role must be one of: owner, admin, editor, viewer'
|
|
158
|
+
}, { status: 400 });
|
|
159
|
+
}
|
|
160
|
+
// Prevent changing your own role
|
|
161
|
+
if (body.userId === auth.user.id) {
|
|
162
|
+
return json({
|
|
163
|
+
success: false,
|
|
164
|
+
error: 'Invalid operation',
|
|
165
|
+
message: 'You cannot change your own role'
|
|
166
|
+
}, { status: 400 });
|
|
167
|
+
}
|
|
168
|
+
// Get the target member's current role
|
|
169
|
+
const targetMember = await databaseAdapter.findUserMembership(body.userId, auth.organizationId);
|
|
170
|
+
if (!targetMember) {
|
|
171
|
+
return json({
|
|
172
|
+
success: false,
|
|
173
|
+
error: 'Member not found',
|
|
174
|
+
message: 'User is not a member of this organization'
|
|
175
|
+
}, { status: 404 });
|
|
176
|
+
}
|
|
177
|
+
// Admins cannot modify owners
|
|
178
|
+
if (auth.organizationRole === 'admin' && targetMember.role === 'owner') {
|
|
179
|
+
return json({
|
|
180
|
+
success: false,
|
|
181
|
+
error: 'Forbidden',
|
|
182
|
+
message: 'Admins cannot modify owner roles'
|
|
183
|
+
}, { status: 403 });
|
|
184
|
+
}
|
|
185
|
+
// Update the role
|
|
186
|
+
const updatedMember = await databaseAdapter.updateMemberRole(auth.organizationId, body.userId, body.role);
|
|
187
|
+
if (!updatedMember) {
|
|
188
|
+
return json({
|
|
189
|
+
success: false,
|
|
190
|
+
error: 'Failed to update role'
|
|
191
|
+
}, { status: 500 });
|
|
192
|
+
}
|
|
193
|
+
return json({
|
|
194
|
+
success: true,
|
|
195
|
+
data: updatedMember
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
console.error('Failed to update member role:', error);
|
|
200
|
+
return json({
|
|
201
|
+
success: false,
|
|
202
|
+
error: 'Failed to update role',
|
|
203
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
204
|
+
}, { status: 500 });
|
|
205
|
+
}
|
|
206
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organizations-switch.d.ts","sourceRoot":"","sources":["../../src/lib/routes/organizations-switch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,eAAO,MAAM,IAAI,EAAE,cAoElB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Aphex CMS Organization Switch API Handler
|
|
2
|
+
import { json } from '@sveltejs/kit';
|
|
3
|
+
// POST /api/organizations/switch - Switch active organization
|
|
4
|
+
export const POST = async ({ request, locals }) => {
|
|
5
|
+
try {
|
|
6
|
+
const { databaseAdapter } = locals.aphexCMS;
|
|
7
|
+
const auth = locals.auth;
|
|
8
|
+
if (!auth || auth.type !== 'session') {
|
|
9
|
+
return json({
|
|
10
|
+
success: false,
|
|
11
|
+
error: 'Unauthorized',
|
|
12
|
+
message: 'Session authentication required'
|
|
13
|
+
}, { status: 401 });
|
|
14
|
+
}
|
|
15
|
+
const body = await request.json();
|
|
16
|
+
if (!body.organizationId) {
|
|
17
|
+
return json({
|
|
18
|
+
success: false,
|
|
19
|
+
error: 'Missing required field',
|
|
20
|
+
message: 'organizationId is required'
|
|
21
|
+
}, { status: 400 });
|
|
22
|
+
}
|
|
23
|
+
// Verify user is a member of the target organization
|
|
24
|
+
const membership = await databaseAdapter.findUserMembership(auth.user.id, body.organizationId);
|
|
25
|
+
if (!membership) {
|
|
26
|
+
return json({
|
|
27
|
+
success: false,
|
|
28
|
+
error: 'Access denied',
|
|
29
|
+
message: 'You are not a member of this organization'
|
|
30
|
+
}, { status: 403 });
|
|
31
|
+
}
|
|
32
|
+
// Update user's active organization
|
|
33
|
+
await databaseAdapter.updateUserSession(auth.user.id, body.organizationId);
|
|
34
|
+
// Get the organization details
|
|
35
|
+
const organization = await databaseAdapter.findOrganizationById(body.organizationId);
|
|
36
|
+
return json({
|
|
37
|
+
success: true,
|
|
38
|
+
data: {
|
|
39
|
+
organizationId: body.organizationId,
|
|
40
|
+
organizationName: organization?.name,
|
|
41
|
+
role: membership.role
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.error('Failed to switch organization:', error);
|
|
47
|
+
return json({
|
|
48
|
+
success: false,
|
|
49
|
+
error: 'Failed to switch organization',
|
|
50
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
51
|
+
}, { status: 500 });
|
|
52
|
+
}
|
|
53
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../src/lib/routes/organizations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,eAAO,MAAM,GAAG,EAAE,cA6CjB,CAAC;AAGF,eAAO,MAAM,IAAI,EAAE,cA6FlB,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// Aphex CMS Organization API Handlers
|
|
2
|
+
import { json } from '@sveltejs/kit';
|
|
3
|
+
// GET /api/organizations - List user's organizations
|
|
4
|
+
export const GET = async ({ locals }) => {
|
|
5
|
+
try {
|
|
6
|
+
const { databaseAdapter } = locals.aphexCMS;
|
|
7
|
+
const auth = locals.auth;
|
|
8
|
+
if (!auth || auth.type !== 'session') {
|
|
9
|
+
return json({
|
|
10
|
+
success: false,
|
|
11
|
+
error: 'Unauthorized',
|
|
12
|
+
message: 'Session authentication required'
|
|
13
|
+
}, { status: 401 });
|
|
14
|
+
}
|
|
15
|
+
// Get all organizations the user belongs to
|
|
16
|
+
const memberships = await databaseAdapter.findUserOrganizations(auth.user.id);
|
|
17
|
+
// Map to a cleaner format with organization details and user's role
|
|
18
|
+
const organizations = memberships.map((membership) => ({
|
|
19
|
+
id: membership.organization.id,
|
|
20
|
+
name: membership.organization.name,
|
|
21
|
+
slug: membership.organization.slug,
|
|
22
|
+
metadata: membership.organization.metadata,
|
|
23
|
+
role: membership.member.role,
|
|
24
|
+
joinedAt: membership.member.createdAt,
|
|
25
|
+
isActive: membership.organization.id === auth.organizationId
|
|
26
|
+
}));
|
|
27
|
+
return json({
|
|
28
|
+
success: true,
|
|
29
|
+
data: organizations
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error('Failed to fetch organizations:', error);
|
|
34
|
+
return json({
|
|
35
|
+
success: false,
|
|
36
|
+
error: 'Failed to fetch organizations',
|
|
37
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
38
|
+
}, { status: 500 });
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
// POST /api/organizations - Create new organization
|
|
42
|
+
export const POST = async ({ request, locals }) => {
|
|
43
|
+
try {
|
|
44
|
+
const { databaseAdapter } = locals.aphexCMS;
|
|
45
|
+
const auth = locals.auth;
|
|
46
|
+
if (!auth || auth.type !== 'session') {
|
|
47
|
+
return json({
|
|
48
|
+
success: false,
|
|
49
|
+
error: 'Unauthorized',
|
|
50
|
+
message: 'Session authentication required'
|
|
51
|
+
}, { status: 401 });
|
|
52
|
+
}
|
|
53
|
+
// Only SUPER_ADMIN can create organizations
|
|
54
|
+
if (auth.user.role !== 'super_admin') {
|
|
55
|
+
return json({
|
|
56
|
+
success: false,
|
|
57
|
+
error: 'Forbidden',
|
|
58
|
+
message: 'Only super admins can create organizations'
|
|
59
|
+
}, { status: 403 });
|
|
60
|
+
}
|
|
61
|
+
const body = await request.json();
|
|
62
|
+
// Validate required fields
|
|
63
|
+
if (!body.name || !body.slug) {
|
|
64
|
+
return json({
|
|
65
|
+
success: false,
|
|
66
|
+
error: 'Missing required fields',
|
|
67
|
+
message: 'Organization name and slug are required'
|
|
68
|
+
}, { status: 400 });
|
|
69
|
+
}
|
|
70
|
+
// Check if slug is already taken
|
|
71
|
+
const existingOrg = await databaseAdapter.findOrganizationBySlug(body.slug);
|
|
72
|
+
if (existingOrg) {
|
|
73
|
+
return json({
|
|
74
|
+
success: false,
|
|
75
|
+
error: 'Slug already exists',
|
|
76
|
+
message: `Organization with slug '${body.slug}' already exists`
|
|
77
|
+
}, { status: 409 });
|
|
78
|
+
}
|
|
79
|
+
// Create the organization with current active org as parent
|
|
80
|
+
// Note: Only supports 1-level hierarchy for performance
|
|
81
|
+
const newOrganization = await databaseAdapter.createOrganization({
|
|
82
|
+
name: body.name,
|
|
83
|
+
slug: body.slug,
|
|
84
|
+
metadata: body.metadata || null,
|
|
85
|
+
parentOrganizationId: auth.organizationId, // Current active org becomes parent
|
|
86
|
+
createdBy: auth.user.id
|
|
87
|
+
});
|
|
88
|
+
// Add the creator as owner
|
|
89
|
+
await databaseAdapter.addMember({
|
|
90
|
+
organizationId: newOrganization.id,
|
|
91
|
+
userId: auth.user.id,
|
|
92
|
+
role: 'owner'
|
|
93
|
+
});
|
|
94
|
+
// Set as active organization for this user
|
|
95
|
+
await databaseAdapter.updateUserSession(auth.user.id, newOrganization.id);
|
|
96
|
+
return json({
|
|
97
|
+
success: true,
|
|
98
|
+
data: newOrganization
|
|
99
|
+
}, { status: 201 });
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
console.error('Failed to create organization:', error);
|
|
103
|
+
return json({
|
|
104
|
+
success: false,
|
|
105
|
+
error: 'Failed to create organization',
|
|
106
|
+
message: error instanceof Error ? error.message : 'Unknown error'
|
|
107
|
+
}, { status: 500 });
|
|
108
|
+
}
|
|
109
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas-by-type.d.ts","sourceRoot":"","sources":["../../src/lib/routes/schemas-by-type.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,eAAO,MAAM,GAAG,EAAE,cA+BjB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const GET = async ({ locals, params }) => {
|
|
2
|
+
const { type } = params;
|
|
3
|
+
const { cmsEngine } = locals.aphexCMS;
|
|
4
|
+
if (!type) {
|
|
5
|
+
return new Response(JSON.stringify({ error: 'Schema type is required' }), {
|
|
6
|
+
status: 400,
|
|
7
|
+
headers: { 'content-type': 'application/json' }
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
console.log('GETTING SCHEMA TYPE FROM: ', type);
|
|
11
|
+
const schema = cmsEngine.getSchemaTypeByName(type);
|
|
12
|
+
console.log('SCHEMA: ', schema);
|
|
13
|
+
if (!schema) {
|
|
14
|
+
return new Response(JSON.stringify({ error: `Schema type '${type}' not found` }), {
|
|
15
|
+
status: 404,
|
|
16
|
+
headers: { 'content-type': 'application/json' }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return new Response(JSON.stringify({
|
|
20
|
+
success: true,
|
|
21
|
+
data: schema
|
|
22
|
+
}), {
|
|
23
|
+
headers: { 'content-type': 'application/json' }
|
|
24
|
+
});
|
|
25
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/lib/routes/schemas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,eAAO,MAAM,GAAG,EAAE,cAejB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const GET = async ({ locals }) => {
|
|
2
|
+
const { cmsEngine } = locals.aphexCMS;
|
|
3
|
+
// Get schemas from config (not database) to preserve validation functions
|
|
4
|
+
const schemas = cmsEngine.config.schemaTypes;
|
|
5
|
+
return new Response(JSON.stringify({
|
|
6
|
+
success: true,
|
|
7
|
+
data: schemas
|
|
8
|
+
}), {
|
|
9
|
+
headers: { 'content-type': 'application/json' }
|
|
10
|
+
});
|
|
11
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { GET as getDocuments, POST as createDocument } from './routes/documents.js';
|
|
2
|
+
export { GET as getDocumentById, PUT as updateDocument, DELETE as deleteDocument } from './routes/documents-by-id.js';
|
|
3
|
+
export { POST as publishDocument, DELETE as unpublishDocument } from './routes/documents-publish.js';
|
|
4
|
+
export { GET as getAssets, POST as createAsset } from './routes/assets.js';
|
|
5
|
+
export { GET as getAssetById, PATCH as updateAsset, DELETE as deleteAsset } from './routes/assets-by-id.js';
|
|
6
|
+
export { GET as serveAssetCDN } from './routes/assets-cdn.js';
|
|
7
|
+
export { GET as getSchemas } from './routes/schemas.js';
|
|
8
|
+
export { GET as getSchemaByType } from './routes/schemas-by-type.js';
|
|
9
|
+
export { GET as getOrganizations, POST as createOrganization } from './routes/organizations.js';
|
|
10
|
+
export { GET as getOrganizationById, PATCH as updateOrganization, DELETE as deleteOrganization } from './routes/organizations-by-id.js';
|
|
11
|
+
export { POST as switchOrganization } from './routes/organizations-switch.js';
|
|
12
|
+
export { GET as getOrganizationMembers, DELETE as removeMember, PATCH as updateMemberRole } from './routes/organizations-members.js';
|
|
13
|
+
export { POST as inviteMember, DELETE as cancelInvitation } from './routes/organizations-invitations.js';
|
|
14
|
+
//# sourceMappingURL=routes-exports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes-exports.d.ts","sourceRoot":"","sources":["../src/lib/routes-exports.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,IAAI,YAAY,EAAE,IAAI,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EACN,GAAG,IAAI,eAAe,EACtB,GAAG,IAAI,cAAc,EACrB,MAAM,IAAI,cAAc,EACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGlG,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACN,GAAG,IAAI,YAAY,EACnB,KAAK,IAAI,WAAW,EACpB,MAAM,IAAI,WAAW,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,GAAG,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,GAAG,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,GAAG,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EACN,GAAG,IAAI,mBAAmB,EAC1B,KAAK,IAAI,kBAAkB,EAC3B,MAAM,IAAI,kBAAkB,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EACN,GAAG,IAAI,sBAAsB,EAC7B,MAAM,IAAI,YAAY,EACtB,KAAK,IAAI,gBAAgB,EACzB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACN,IAAI,IAAI,YAAY,EACpB,MAAM,IAAI,gBAAgB,EAC1B,MAAM,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Route handler exports for re-use in apps
|
|
2
|
+
// This file provides named exports to avoid ambiguity
|
|
3
|
+
// Document routes
|
|
4
|
+
export { GET as getDocuments, POST as createDocument } from './routes/documents.js';
|
|
5
|
+
export { GET as getDocumentById, PUT as updateDocument, DELETE as deleteDocument } from './routes/documents-by-id.js';
|
|
6
|
+
export { POST as publishDocument, DELETE as unpublishDocument } from './routes/documents-publish.js';
|
|
7
|
+
// Asset routes
|
|
8
|
+
export { GET as getAssets, POST as createAsset } from './routes/assets.js';
|
|
9
|
+
export { GET as getAssetById, PATCH as updateAsset, DELETE as deleteAsset } from './routes/assets-by-id.js';
|
|
10
|
+
export { GET as serveAssetCDN } from './routes/assets-cdn.js';
|
|
11
|
+
// Schema routes
|
|
12
|
+
export { GET as getSchemas } from './routes/schemas.js';
|
|
13
|
+
export { GET as getSchemaByType } from './routes/schemas-by-type.js';
|
|
14
|
+
// Organization routes
|
|
15
|
+
export { GET as getOrganizations, POST as createOrganization } from './routes/organizations.js';
|
|
16
|
+
export { GET as getOrganizationById, PATCH as updateOrganization, DELETE as deleteOrganization } from './routes/organizations-by-id.js';
|
|
17
|
+
export { POST as switchOrganization } from './routes/organizations-switch.js';
|
|
18
|
+
export { GET as getOrganizationMembers, DELETE as removeMember, PATCH as updateMemberRole } from './routes/organizations-members.js';
|
|
19
|
+
export { POST as inviteMember, DELETE as cancelInvitation } from './routes/organizations-invitations.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SchemaType } from './types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Provides schemas to child components via Svelte context
|
|
4
|
+
*/
|
|
5
|
+
export declare function setSchemaContext(schemas: SchemaType[]): void;
|
|
6
|
+
/**
|
|
7
|
+
* Gets schemas from Svelte context
|
|
8
|
+
*/
|
|
9
|
+
export declare function getSchemaContext(): SchemaType[];
|
|
10
|
+
//# sourceMappingURL=schema-context.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-context.svelte.d.ts","sourceRoot":"","sources":["../src/lib/schema-context.svelte.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,QAErD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,EAAE,CAQ/C"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getContext, setContext } from 'svelte';
|
|
2
|
+
const SCHEMA_CONTEXT_KEY = Symbol('aphex-schemas');
|
|
3
|
+
/**
|
|
4
|
+
* Provides schemas to child components via Svelte context
|
|
5
|
+
*/
|
|
6
|
+
export function setSchemaContext(schemas) {
|
|
7
|
+
setContext(SCHEMA_CONTEXT_KEY, schemas);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Gets schemas from Svelte context
|
|
11
|
+
*/
|
|
12
|
+
export function getSchemaContext() {
|
|
13
|
+
const schemas = getContext(SCHEMA_CONTEXT_KEY);
|
|
14
|
+
if (!schemas) {
|
|
15
|
+
throw new Error('Schema context not found. Make sure to call setSchemaContext() in a parent component.');
|
|
16
|
+
}
|
|
17
|
+
return schemas;
|
|
18
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SchemaType } from '../types/schemas.js';
|
|
2
|
+
export interface OrphanedField {
|
|
3
|
+
path: string;
|
|
4
|
+
key: string;
|
|
5
|
+
value: any;
|
|
6
|
+
level: 'document' | 'nested';
|
|
7
|
+
}
|
|
8
|
+
export interface SchemaCleanupResult {
|
|
9
|
+
hasOrphanedFields: boolean;
|
|
10
|
+
orphanedFields: OrphanedField[];
|
|
11
|
+
cleanedData: Record<string, any>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Find orphaned fields in document data that no longer exist in the schema
|
|
15
|
+
*/
|
|
16
|
+
export declare function findOrphanedFields(documentData: Record<string, any>, schema: SchemaType): SchemaCleanupResult;
|
|
17
|
+
/**
|
|
18
|
+
* Apply cleanup by removing orphaned fields from document data
|
|
19
|
+
*/
|
|
20
|
+
export declare function applySchemaCleanup(documentData: Record<string, any>, schema: SchemaType): Record<string, any>;
|
|
21
|
+
//# sourceMappingURL=cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/lib/schema-utils/cleanup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,UAAU,GAAG,QAAQ,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IACnC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CACjC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,MAAM,EAAE,UAAU,GAChB,mBAAmB,CAkErB;AAmBD;;GAEG;AACH,wBAAgB,kBAAkB,CACjC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,MAAM,EAAE,UAAU,GAChB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAGrB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find orphaned fields in document data that no longer exist in the schema
|
|
3
|
+
*/
|
|
4
|
+
export function findOrphanedFields(documentData, schema) {
|
|
5
|
+
const orphanedFields = [];
|
|
6
|
+
function checkObject(obj, fields, pathPrefix = '') {
|
|
7
|
+
const cleaned = {};
|
|
8
|
+
const fieldMap = new Map(fields.map((field) => [field.name, field]));
|
|
9
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
10
|
+
const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;
|
|
11
|
+
const field = fieldMap.get(key);
|
|
12
|
+
if (!field) {
|
|
13
|
+
// Orphaned field found
|
|
14
|
+
orphanedFields.push({
|
|
15
|
+
path: currentPath,
|
|
16
|
+
key,
|
|
17
|
+
value,
|
|
18
|
+
level: pathPrefix ? 'nested' : 'document'
|
|
19
|
+
});
|
|
20
|
+
continue; // Skip this field in cleaned data
|
|
21
|
+
}
|
|
22
|
+
// Recursively check nested objects and arrays
|
|
23
|
+
if (field.type === 'object' && field.fields && value && typeof value === 'object') {
|
|
24
|
+
cleaned[key] = checkObject(value, field.fields, currentPath);
|
|
25
|
+
}
|
|
26
|
+
else if (field.type === 'array' && Array.isArray(value)) {
|
|
27
|
+
cleaned[key] = checkArray(value, field, currentPath);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
cleaned[key] = value;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return cleaned;
|
|
34
|
+
}
|
|
35
|
+
function checkArray(array, arrayField, pathPrefix) {
|
|
36
|
+
if (arrayField.type !== 'array' || !arrayField.of) {
|
|
37
|
+
return array;
|
|
38
|
+
}
|
|
39
|
+
return array.map((item, index) => {
|
|
40
|
+
const itemPath = `${pathPrefix}[${index}]`;
|
|
41
|
+
if (item && typeof item === 'object' && item._type) {
|
|
42
|
+
// Find the schema for this array item type
|
|
43
|
+
const itemTypeSchema = getSchemaForArrayItem(item._type, arrayField);
|
|
44
|
+
if (itemTypeSchema && itemTypeSchema.fields) {
|
|
45
|
+
return checkObject(item, itemTypeSchema.fields, itemPath);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return item;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const cleanedData = checkObject(documentData, schema.fields);
|
|
52
|
+
return {
|
|
53
|
+
hasOrphanedFields: orphanedFields.length > 0,
|
|
54
|
+
orphanedFields,
|
|
55
|
+
cleanedData
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get the schema for an array item type (helper function)
|
|
60
|
+
* This would need to be integrated with your schema registry
|
|
61
|
+
*/
|
|
62
|
+
function getSchemaForArrayItem(typeName, arrayField) {
|
|
63
|
+
// This is a placeholder - you'd need to integrate with your actual schema registry
|
|
64
|
+
// For now, we'll assume inline object schemas
|
|
65
|
+
if (arrayField.of) {
|
|
66
|
+
const typeRef = arrayField.of.find((ref) => ref.type === typeName);
|
|
67
|
+
if (typeRef && typeof typeRef !== 'string') {
|
|
68
|
+
// Handle inline schema definitions if needed
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Apply cleanup by removing orphaned fields from document data
|
|
76
|
+
*/
|
|
77
|
+
export function applySchemaCleanup(documentData, schema) {
|
|
78
|
+
const result = findOrphanedFields(documentData, schema);
|
|
79
|
+
return result.cleanedData;
|
|
80
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/schema-utils/index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
|