canopycms 0.0.67-int.90 → 0.0.67
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/README.md +30 -3
- package/dist/ai/generate.js +1 -27
- package/dist/ai/handler.d.ts +0 -4
- package/dist/ai/handler.js +0 -11
- package/dist/ai/index.d.ts +1 -8
- package/dist/ai/index.js +1 -8
- package/dist/ai/json-to-markdown.js +15 -58
- package/dist/ai/resolve-branch.d.ts +2 -7
- package/dist/ai/resolve-branch.js +2 -8
- package/dist/ai/strip-mdx.d.ts +5 -13
- package/dist/ai/strip-mdx.js +5 -17
- package/dist/ai/to-plain-text.d.ts +10 -28
- package/dist/ai/to-plain-text.js +10 -28
- package/dist/ai/transform-components.d.ts +2 -4
- package/dist/ai/transform-components.js +8 -19
- package/dist/ai/types.d.ts +5 -10
- package/dist/api/admin-branch-health.d.ts +4 -12
- package/dist/api/admin-branch-health.js +26 -66
- package/dist/api/admin.d.ts +4 -12
- package/dist/api/admin.js +10 -26
- package/dist/api/assets.d.ts +0 -25
- package/dist/api/assets.js +50 -91
- package/dist/api/branch-merge.d.ts +1 -1
- package/dist/api/branch-merge.js +0 -2
- package/dist/api/branch-review.d.ts +0 -8
- package/dist/api/branch-review.js +0 -13
- package/dist/api/branch-status.d.ts +0 -3
- package/dist/api/branch-status.js +8 -33
- package/dist/api/branch-withdraw.d.ts +0 -1
- package/dist/api/branch-withdraw.js +6 -9
- package/dist/api/branch.d.ts +7 -12
- package/dist/api/branch.js +7 -44
- package/dist/api/client.d.ts +71 -224
- package/dist/api/client.js +82 -233
- package/dist/api/comments.d.ts +2 -4
- package/dist/api/comments.js +0 -17
- package/dist/api/content.d.ts +0 -6
- package/dist/api/content.js +66 -142
- package/dist/api/entries-constants.d.ts +5 -9
- package/dist/api/entries-constants.js +5 -9
- package/dist/api/entries.d.ts +8 -13
- package/dist/api/entries.js +20 -51
- package/dist/api/github-sync.d.ts +2 -4
- package/dist/api/github-sync.js +4 -8
- package/dist/api/groups.d.ts +3 -0
- package/dist/api/groups.js +8 -21
- package/dist/api/guards.d.ts +4 -16
- package/dist/api/guards.js +3 -22
- package/dist/api/index.d.ts +4 -4
- package/dist/api/permissions.d.ts +2 -0
- package/dist/api/permissions.js +18 -40
- package/dist/api/reference-options.d.ts +0 -1
- package/dist/api/reference-options.js +3 -11
- package/dist/api/request-body-hash.d.ts +12 -23
- package/dist/api/request-body-hash.js +12 -23
- package/dist/api/resolve-references.d.ts +0 -1
- package/dist/api/resolve-references.js +13 -28
- package/dist/api/route-builder.d.ts +3 -7
- package/dist/api/route-builder.js +1 -1
- package/dist/api/routes.d.ts +12 -0
- package/dist/api/routes.js +47 -0
- package/dist/api/schema.d.ts +23 -33
- package/dist/api/schema.js +20 -74
- package/dist/api/settings-helpers.js +4 -5
- package/dist/api/types.d.ts +0 -5
- package/dist/api/user.js +0 -5
- package/dist/api/validators.d.ts +14 -52
- package/dist/api/validators.js +14 -52
- package/dist/assets/asset-prefixes.d.ts +4 -8
- package/dist/assets/asset-prefixes.js +4 -8
- package/dist/assets/asset-src.d.ts +5 -22
- package/dist/assets/asset-src.js +5 -21
- package/dist/assets/factory.d.ts +1 -2
- package/dist/assets/factory.js +1 -2
- package/dist/assets/finalize.d.ts +3 -1
- package/dist/assets/finalize.js +3 -1
- package/dist/assets/index.d.ts +3 -3
- package/dist/assets/index.js +1 -1
- package/dist/assets/keys.d.ts +5 -3
- package/dist/assets/keys.js +6 -3
- package/dist/assets/pipeline.d.ts +3 -2
- package/dist/assets/pipeline.js +22 -56
- package/dist/assets/sharp-loader.d.ts +2 -10
- package/dist/assets/sharp-loader.js +2 -10
- package/dist/assets/store-local.d.ts +1 -2
- package/dist/assets/store-local.js +1 -2
- package/dist/assets/store-s3.d.ts +3 -4
- package/dist/assets/svg-sanitizer.d.ts +6 -14
- package/dist/assets/svg-sanitizer.js +6 -14
- package/dist/assets/transform-directives.d.ts +3 -4
- package/dist/assets/transform-directives.js +1 -1
- package/dist/assets/transform.d.ts +19 -30
- package/dist/assets/transform.js +18 -31
- package/dist/auth/cache.d.ts +2 -3
- package/dist/auth/cache.js +2 -3
- package/dist/auth/caching-auth-plugin.d.ts +11 -22
- package/dist/auth/caching-auth-plugin.js +12 -14
- package/dist/auth/context-helpers.d.ts +6 -20
- package/dist/auth/context-helpers.js +5 -17
- package/dist/auth/file-based-auth-cache.d.ts +10 -21
- package/dist/auth/file-based-auth-cache.js +23 -51
- package/dist/auth/plugin.d.ts +29 -61
- package/dist/auth/plugin.js +9 -13
- package/dist/auth/types.d.ts +11 -20
- package/dist/authorization/branch.d.ts +30 -49
- package/dist/authorization/branch.js +16 -42
- package/dist/authorization/content.d.ts +11 -40
- package/dist/authorization/content.js +13 -45
- package/dist/authorization/groups/index.d.ts +0 -3
- package/dist/authorization/groups/index.js +0 -3
- package/dist/authorization/groups/loader.d.ts +14 -28
- package/dist/authorization/groups/loader.js +14 -38
- package/dist/authorization/groups/schema.d.ts +0 -6
- package/dist/authorization/groups/schema.js +4 -7
- package/dist/authorization/helpers.d.ts +9 -28
- package/dist/authorization/helpers.js +9 -28
- package/dist/authorization/index.d.ts +3 -25
- package/dist/authorization/index.js +3 -35
- package/dist/authorization/path.d.ts +6 -13
- package/dist/authorization/path.js +8 -25
- package/dist/authorization/permissions/index.d.ts +0 -3
- package/dist/authorization/permissions/index.js +0 -3
- package/dist/authorization/permissions/loader.d.ts +14 -27
- package/dist/authorization/permissions/loader.js +14 -32
- package/dist/authorization/permissions/schema.d.ts +1 -6
- package/dist/authorization/permissions/schema.js +6 -13
- package/dist/authorization/protected-branch.d.ts +36 -65
- package/dist/authorization/protected-branch.js +29 -41
- package/dist/authorization/settings-file-store.d.ts +38 -81
- package/dist/authorization/settings-file-store.js +38 -79
- package/dist/authorization/types.d.ts +4 -26
- package/dist/authorization/types.js +0 -6
- package/dist/authorization/validation.d.ts +1 -23
- package/dist/authorization/validation.js +1 -24
- package/dist/branch-health.d.ts +39 -67
- package/dist/branch-health.js +27 -43
- package/dist/branch-metadata-file.d.ts +16 -32
- package/dist/branch-metadata-file.js +13 -26
- package/dist/branch-metadata.d.ts +49 -80
- package/dist/branch-metadata.js +57 -87
- package/dist/branch-registry.d.ts +26 -64
- package/dist/branch-registry.js +44 -93
- package/dist/branch-schema-cache.d.ts +34 -124
- package/dist/branch-schema-cache.js +49 -155
- package/dist/branch-workspace.d.ts +4 -4
- package/dist/branch-workspace.js +15 -19
- package/dist/build/generate-ai-content.d.ts +1 -0
- package/dist/build/generate-ai-content.js +12 -25
- package/dist/build-canopy.d.ts +17 -27
- package/dist/build-canopy.js +16 -23
- package/dist/build-mode.d.ts +25 -27
- package/dist/build-mode.js +25 -29
- package/dist/cli/cli.d.ts +15 -26
- package/dist/cli/cli.js +601 -978
- package/dist/cli/generate-ai-content.js +351 -628
- package/dist/cli/github-app-manifest.d.ts +84 -0
- package/dist/cli/github-app-manifest.js +161 -0
- package/dist/cli/init-github-app.d.ts +110 -444
- package/dist/cli/init-github-app.js +236 -773
- package/dist/cli/init.js +39 -80
- package/dist/cli/migrate.d.ts +13 -10
- package/dist/cli/migrate.js +22 -30
- package/dist/cli/project-detect.d.ts +17 -31
- package/dist/cli/project-detect.js +31 -42
- package/dist/cli/project-root.d.ts +4 -11
- package/dist/cli/project-root.js +4 -11
- package/dist/cli/prompt.d.ts +10 -0
- package/dist/cli/prompt.js +67 -0
- package/dist/cli/sync.d.ts +0 -8
- package/dist/cli/sync.js +8 -28
- package/dist/cli/template-files/middleware.ts.template +15 -29
- package/dist/cli/templates.d.ts +2 -12
- package/dist/cli/templates.js +4 -4
- package/dist/client.d.ts +1 -1
- package/dist/comment-store.d.ts +32 -53
- package/dist/comment-store.js +32 -52
- package/dist/config/flatten.d.ts +0 -3
- package/dist/config/flatten.js +2 -12
- package/dist/config/helpers.js +2 -2
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.js +1 -4
- package/dist/config/schemas/collection.d.ts +0 -8
- package/dist/config/schemas/collection.js +0 -10
- package/dist/config/schemas/config.d.ts +6 -78
- package/dist/config/schemas/config.js +38 -54
- package/dist/config/schemas/field.d.ts +2 -242
- package/dist/config/schemas/field.js +9 -20
- package/dist/config/schemas/media.js +1 -1
- package/dist/config/schemas/permissions.js +0 -2
- package/dist/config/schemas/url.d.ts +5 -6
- package/dist/config/schemas/url.js +5 -6
- package/dist/config/types.d.ts +45 -33
- package/dist/config/types.js +0 -1
- package/dist/config.d.ts +1 -8
- package/dist/config.js +1 -9
- package/dist/content-id-index.d.ts +76 -188
- package/dist/content-id-index.js +79 -230
- package/dist/content-index-generation.d.ts +27 -48
- package/dist/content-index-generation.js +35 -84
- package/dist/content-index-registry.d.ts +15 -24
- package/dist/content-index-registry.js +5 -9
- package/dist/content-listing.d.ts +64 -107
- package/dist/content-listing.js +68 -118
- package/dist/content-reader.d.ts +20 -29
- package/dist/content-reader.js +10 -18
- package/dist/content-store.d.ts +210 -336
- package/dist/content-store.js +413 -657
- package/dist/content-tree.d.ts +44 -86
- package/dist/content-tree.js +26 -54
- package/dist/context.d.ts +67 -94
- package/dist/context.js +53 -72
- package/dist/dev-content-watcher.d.ts +18 -18
- package/dist/dev-content-watcher.js +41 -44
- package/dist/editor/BranchManager.d.ts +3 -6
- package/dist/editor/BranchManager.js +24 -44
- package/dist/editor/CanopyEditor.js +5 -2
- package/dist/editor/CommentsPanel.js +0 -2
- package/dist/editor/Editor.js +19 -76
- package/dist/editor/EditorAuthGate.d.ts +27 -0
- package/dist/editor/EditorAuthGate.js +140 -0
- package/dist/editor/EntryNavigator.js +0 -20
- package/dist/editor/FormRenderer.d.ts +1 -2
- package/dist/editor/FormRenderer.js +8 -23
- package/dist/editor/admin/SystemHealthPanel.js +20 -37
- package/dist/editor/admin/useSystemHealth.d.ts +2 -3
- package/dist/editor/admin/useSystemHealth.js +10 -12
- package/dist/editor/client-reference-resolver.d.ts +2 -5
- package/dist/editor/client-reference-resolver.js +2 -19
- package/dist/editor/comments/BranchComments.js +0 -4
- package/dist/editor/comments/EntryComments.js +0 -4
- package/dist/editor/comments/FieldWrapper.js +0 -4
- package/dist/editor/comments/InlineCommentThread.js +0 -2
- package/dist/editor/comments/ThreadCarousel.d.ts +0 -58
- package/dist/editor/comments/ThreadCarousel.js +0 -12
- package/dist/editor/components/EditorFooter.d.ts +0 -8
- package/dist/editor/components/EditorFooter.js +0 -5
- package/dist/editor/components/EditorHeader.d.ts +0 -31
- package/dist/editor/components/EditorHeader.js +21 -71
- package/dist/editor/components/EditorSidebar.d.ts +0 -19
- package/dist/editor/components/EditorSidebar.js +0 -16
- package/dist/editor/components/EntryCreateModal.d.ts +4 -4
- package/dist/editor/components/EntryCreateModal.js +7 -22
- package/dist/editor/components/RenameEntryModal.js +0 -4
- package/dist/editor/components/UserBadge.js +0 -10
- package/dist/editor/components/index.js +0 -2
- package/dist/editor/context/ApiClientContext.d.ts +8 -7
- package/dist/editor/context/ApiClientContext.js +39 -11
- package/dist/editor/context/AssetContext.d.ts +7 -17
- package/dist/editor/context/AssetContext.js +7 -17
- package/dist/editor/context/EditorIdentityContext.d.ts +13 -0
- package/dist/editor/context/EditorIdentityContext.js +7 -0
- package/dist/editor/context/EditorStateContext.d.ts +10 -41
- package/dist/editor/context/EditorStateContext.js +7 -23
- package/dist/editor/context/SWRProvider.d.ts +3 -6
- package/dist/editor/context/index.d.ts +1 -20
- package/dist/editor/context/index.js +1 -20
- package/dist/editor/editor-utils.d.ts +8 -47
- package/dist/editor/editor-utils.js +19 -72
- package/dist/editor/fields/BlockField.d.ts +2 -2
- package/dist/editor/fields/BlockField.js +1 -2
- package/dist/editor/fields/CodeField.d.ts +0 -1
- package/dist/editor/fields/CodeField.js +0 -1
- package/dist/editor/fields/DateTimeField.d.ts +15 -22
- package/dist/editor/fields/DateTimeField.js +17 -26
- package/dist/editor/fields/ImageField.d.ts +2 -2
- package/dist/editor/fields/ImageField.js +8 -14
- package/dist/editor/fields/InlineGroupField.d.ts +0 -1
- package/dist/editor/fields/InlineGroupField.js +0 -1
- package/dist/editor/fields/MarkdownField.d.ts +0 -1
- package/dist/editor/fields/MarkdownField.js +6 -11
- package/dist/editor/fields/MdxImageDialog.d.ts +1 -1
- package/dist/editor/fields/MdxImageDialog.js +0 -1
- package/dist/editor/fields/NumberField.d.ts +9 -19
- package/dist/editor/fields/NumberField.js +11 -22
- package/dist/editor/fields/NumberListField.d.ts +7 -10
- package/dist/editor/fields/NumberListField.js +7 -10
- package/dist/editor/fields/ObjectField.d.ts +5 -8
- package/dist/editor/fields/ObjectField.js +0 -1
- package/dist/editor/fields/ReferenceField.d.ts +1 -1
- package/dist/editor/fields/ReferenceField.js +11 -16
- package/dist/editor/fields/SelectField.d.ts +2 -2
- package/dist/editor/fields/SelectField.js +0 -1
- package/dist/editor/fields/StringListField.d.ts +0 -4
- package/dist/editor/fields/StringListField.js +4 -9
- package/dist/editor/fields/TextField.d.ts +0 -1
- package/dist/editor/fields/TextField.js +0 -1
- package/dist/editor/fields/ToggleField.d.ts +0 -1
- package/dist/editor/fields/ToggleField.js +0 -1
- package/dist/editor/fields/entry-link/EntryLinkContext.js +2 -4
- package/dist/editor/fields/entry-link/InsertEntryLink.d.ts +0 -3
- package/dist/editor/fields/entry-link/InsertEntryLink.js +0 -4
- package/dist/editor/group-manager/ExternalGroupsTab.d.ts +0 -3
- package/dist/editor/group-manager/ExternalGroupsTab.js +0 -1
- package/dist/editor/group-manager/GroupCard.d.ts +0 -3
- package/dist/editor/group-manager/GroupForm.d.ts +0 -3
- package/dist/editor/group-manager/InternalGroupsTab.d.ts +0 -3
- package/dist/editor/group-manager/InternalGroupsTab.js +0 -2
- package/dist/editor/group-manager/MemberList.d.ts +0 -3
- package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts +0 -3
- package/dist/editor/group-manager/hooks/useExternalGroupSearch.js +0 -3
- package/dist/editor/group-manager/hooks/useGroupState.d.ts +0 -3
- package/dist/editor/group-manager/hooks/useGroupState.js +0 -5
- package/dist/editor/group-manager/hooks/useUserSearch.d.ts +0 -3
- package/dist/editor/group-manager/hooks/useUserSearch.js +0 -3
- package/dist/editor/group-manager/index.d.ts +0 -6
- package/dist/editor/group-manager/index.js +0 -10
- package/dist/editor/group-manager/types.d.ts +2 -5
- package/dist/editor/group-manager/types.js +0 -3
- package/dist/editor/hooks/index.d.ts +6 -11
- package/dist/editor/hooks/index.js +6 -12
- package/dist/editor/hooks/useBranchActions.d.ts +0 -14
- package/dist/editor/hooks/useBranchActions.js +0 -22
- package/dist/editor/hooks/useBranchManager.d.ts +2 -48
- package/dist/editor/hooks/useBranchManager.js +4 -64
- package/dist/editor/hooks/useBranchesData.d.ts +7 -6
- package/dist/editor/hooks/useBranchesData.js +7 -6
- package/dist/editor/hooks/useCommentSystem.d.ts +0 -49
- package/dist/editor/hooks/useCommentSystem.js +1 -36
- package/dist/editor/hooks/useDraftManager.d.ts +2 -35
- package/dist/editor/hooks/useDraftManager.js +23 -64
- package/dist/editor/hooks/useEditorLayout.d.ts +0 -20
- package/dist/editor/hooks/useEditorLayout.js +0 -23
- package/dist/editor/hooks/useEntriesData.d.ts +1 -0
- package/dist/editor/hooks/useEntriesData.js +2 -3
- package/dist/editor/hooks/useEntryLinkResolution.d.ts +2 -2
- package/dist/editor/hooks/useEntryLinkResolution.js +2 -2
- package/dist/editor/hooks/useEntryManager.d.ts +2 -27
- package/dist/editor/hooks/useEntryManager.js +29 -78
- package/dist/editor/hooks/useGroupManager.d.ts +0 -21
- package/dist/editor/hooks/useGroupManager.js +0 -21
- package/dist/editor/hooks/usePermissionManager.d.ts +0 -20
- package/dist/editor/hooks/usePermissionManager.js +0 -20
- package/dist/editor/hooks/useReferenceResolution.d.ts +2 -33
- package/dist/editor/hooks/useReferenceResolution.js +1 -48
- package/dist/editor/hooks/useSchemaManager.d.ts +8 -27
- package/dist/editor/hooks/useSchemaManager.js +0 -19
- package/dist/editor/hooks/useUserContext.d.ts +2 -9
- package/dist/editor/hooks/useUserContext.js +10 -10
- package/dist/editor/hooks/useUserMetadata.d.ts +0 -2
- package/dist/editor/hooks/useUserMetadata.js +0 -3
- package/dist/editor/media/AssetCard.d.ts +0 -1
- package/dist/editor/media/AssetCard.js +1 -2
- package/dist/editor/media/CropStep.d.ts +0 -1
- package/dist/editor/media/CropStep.js +0 -1
- package/dist/editor/media/MediaLibrary.d.ts +1 -2
- package/dist/editor/media/MediaLibrary.js +1 -2
- package/dist/editor/media/MediaLibraryBody.d.ts +0 -1
- package/dist/editor/media/MediaLibraryBody.js +0 -1
- package/dist/editor/media/crop-math.d.ts +1 -1
- package/dist/editor/media/crop-math.js +1 -1
- package/dist/editor/permission-manager/GroupSelector.d.ts +0 -3
- package/dist/editor/permission-manager/PermissionEditor.d.ts +0 -4
- package/dist/editor/permission-manager/PermissionEditor.js +0 -1
- package/dist/editor/permission-manager/PermissionLevelBadge.d.ts +0 -7
- package/dist/editor/permission-manager/PermissionLevelBadge.js +0 -4
- package/dist/editor/permission-manager/PermissionTree.d.ts +0 -4
- package/dist/editor/permission-manager/UserSelector.d.ts +0 -3
- package/dist/editor/permission-manager/constants.d.ts +0 -3
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts +0 -3
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js +0 -10
- package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts +0 -14
- package/dist/editor/permission-manager/hooks/usePermissionTree.js +0 -11
- package/dist/editor/permission-manager/index.d.ts +0 -7
- package/dist/editor/permission-manager/index.js +0 -16
- package/dist/editor/permission-manager/types.d.ts +2 -12
- package/dist/editor/permission-manager/types.js +0 -3
- package/dist/editor/permission-manager/utils.d.ts +0 -28
- package/dist/editor/permission-manager/utils.js +9 -23
- package/dist/editor/preview-bridge.d.ts +5 -1
- package/dist/editor/preview-bridge.js +4 -4
- package/dist/editor/schema-editor/CollectionEditor.d.ts +0 -5
- package/dist/editor/schema-editor/CollectionEditor.js +9 -31
- package/dist/editor/schema-editor/EntryTypeEditor.d.ts +0 -6
- package/dist/editor/schema-editor/EntryTypeEditor.js +3 -24
- package/dist/editor/schema-editor/index.d.ts +0 -7
- package/dist/editor/schema-editor/index.js +0 -7
- package/dist/editor/utils/env.d.ts +3 -18
- package/dist/editor/utils/env.js +6 -25
- package/dist/entry-link-resolver.d.ts +13 -35
- package/dist/entry-link-resolver.js +20 -53
- package/dist/entry-schema-registry.d.ts +20 -60
- package/dist/entry-schema-registry.js +20 -69
- package/dist/entry-schema.d.ts +118 -223
- package/dist/entry-schema.js +46 -91
- package/dist/git-manager.d.ts +101 -200
- package/dist/git-manager.js +211 -384
- package/dist/github-service.d.ts +34 -75
- package/dist/github-service.js +37 -91
- package/dist/http/handler.d.ts +6 -37
- package/dist/http/handler.js +65 -120
- package/dist/http/router.d.ts +15 -32
- package/dist/http/router.js +34 -99
- package/dist/http/types.d.ts +15 -40
- package/dist/http/types.js +3 -7
- package/dist/id.d.ts +4 -10
- package/dist/id.js +4 -10
- package/dist/index.js +6 -9
- package/dist/operating-mode/client-safe-strategy.d.ts +7 -14
- package/dist/operating-mode/client-safe-strategy.js +8 -28
- package/dist/operating-mode/client-unsafe-strategy.d.ts +6 -16
- package/dist/operating-mode/client-unsafe-strategy.js +9 -34
- package/dist/operating-mode/client.d.ts +3 -10
- package/dist/operating-mode/client.js +3 -8
- package/dist/operating-mode/deployment-name-fixtures.d.ts +14 -18
- package/dist/operating-mode/deployment-name-fixtures.js +14 -18
- package/dist/operating-mode/deployment-name.d.ts +19 -29
- package/dist/operating-mode/deployment-name.js +29 -47
- package/dist/operating-mode/index.d.ts +4 -25
- package/dist/operating-mode/index.js +9 -31
- package/dist/operating-mode/mode-env.d.ts +32 -54
- package/dist/operating-mode/mode-env.js +36 -58
- package/dist/operating-mode/types.d.ts +24 -72
- package/dist/operating-mode/types.js +1 -7
- package/dist/paths/branch-name.d.ts +30 -40
- package/dist/paths/branch-name.js +30 -40
- package/dist/paths/branch.d.ts +4 -18
- package/dist/paths/branch.js +6 -22
- package/dist/paths/index.d.ts +2 -13
- package/dist/paths/index.js +3 -23
- package/dist/paths/normalize-server.d.ts +3 -15
- package/dist/paths/normalize-server.js +3 -15
- package/dist/paths/normalize.d.ts +13 -33
- package/dist/paths/normalize.js +13 -33
- package/dist/paths/resolve.d.ts +4 -17
- package/dist/paths/resolve.js +4 -22
- package/dist/paths/types.d.ts +12 -34
- package/dist/paths/types.js +5 -7
- package/dist/paths/validation.d.ts +22 -119
- package/dist/paths/validation.js +30 -148
- package/dist/reference-resolver.d.ts +0 -13
- package/dist/reference-resolver.js +0 -18
- package/dist/resolve-canopy-user.d.ts +16 -18
- package/dist/resolve-canopy-user.js +17 -26
- package/dist/resource-generation.d.ts +16 -25
- package/dist/resource-generation.js +34 -97
- package/dist/schema/meta-loader.d.ts +2 -14
- package/dist/schema/meta-loader.js +15 -64
- package/dist/schema/resolver.d.ts +1 -4
- package/dist/schema/resolver.js +1 -6
- package/dist/schema/schema-store-types.d.ts +0 -12
- package/dist/schema/schema-store.d.ts +61 -138
- package/dist/schema/schema-store.js +85 -282
- package/dist/schema/types.d.ts +0 -4
- package/dist/server.d.ts +62 -93
- package/dist/server.js +63 -94
- package/dist/services.d.ts +23 -47
- package/dist/services.js +55 -98
- package/dist/settings-workspace.d.ts +17 -30
- package/dist/settings-workspace.js +51 -81
- package/dist/static/index.d.ts +26 -52
- package/dist/static/index.js +33 -67
- package/dist/{worker/task-queue.d.ts → task-queue/cms-task-queue.d.ts} +7 -9
- package/dist/task-queue/cms-task-queue.js +13 -0
- package/dist/task-queue/task-queue-config.d.ts +3 -0
- package/dist/{worker → task-queue}/task-queue-config.js +1 -6
- package/dist/task-queue/task-queue.d.ts +16 -22
- package/dist/task-queue/task-queue.js +20 -44
- package/dist/task-queue/types.d.ts +0 -1
- package/dist/task-queue/worker-status.d.ts +35 -0
- package/dist/task-queue/worker-status.js +40 -0
- package/dist/types.d.ts +40 -51
- package/dist/url-collision.d.ts +26 -40
- package/dist/url-collision.js +47 -63
- package/dist/url-exclusivity-fixtures.d.ts +15 -20
- package/dist/url-exclusivity-fixtures.js +14 -19
- package/dist/url-path-resolver.d.ts +8 -16
- package/dist/url-path-resolver.js +19 -29
- package/dist/user.d.ts +8 -21
- package/dist/user.js +10 -19
- package/dist/utils/async-mutex.js +4 -6
- package/dist/utils/atomic-write.d.ts +2 -11
- package/dist/utils/atomic-write.js +2 -11
- package/dist/utils/body-field.d.ts +8 -15
- package/dist/utils/body-field.js +8 -15
- package/dist/utils/content-serialize.d.ts +18 -24
- package/dist/utils/content-serialize.js +109 -160
- package/dist/utils/content-write-lock.d.ts +51 -106
- package/dist/utils/content-write-lock.js +66 -111
- package/dist/utils/debug.d.ts +7 -23
- package/dist/utils/debug.js +7 -23
- package/dist/utils/entry-url.d.ts +11 -23
- package/dist/utils/entry-url.js +11 -26
- package/dist/utils/error.d.ts +25 -90
- package/dist/utils/error.js +60 -147
- package/dist/utils/flatten-group-fields.d.ts +5 -7
- package/dist/utils/flatten-group-fields.js +5 -7
- package/dist/utils/format.d.ts +1 -5
- package/dist/utils/format.js +1 -5
- package/dist/utils/fs.d.ts +3 -4
- package/dist/utils/fs.js +3 -4
- package/dist/utils/git.d.ts +52 -83
- package/dist/utils/git.js +79 -125
- package/dist/utils/logger.d.ts +35 -50
- package/dist/utils/logger.js +35 -52
- package/dist/utils/provisioning-lock.d.ts +23 -35
- package/dist/utils/provisioning-lock.js +49 -69
- package/dist/utils/sanitize-href.d.ts +5 -10
- package/dist/utils/sanitize-href.js +8 -18
- package/dist/utils/title-field.d.ts +17 -20
- package/dist/utils/title-field.js +18 -27
- package/dist/utils/typed-filename.d.ts +20 -48
- package/dist/utils/typed-filename.js +25 -61
- package/dist/utils/url-prefix.d.ts +3 -3
- package/dist/utils/url-prefix.js +3 -3
- package/dist/validation/block-structural-keys.d.ts +16 -31
- package/dist/validation/block-structural-keys.js +19 -29
- package/dist/validation/deletion-checker.d.ts +0 -34
- package/dist/validation/deletion-checker.js +1 -43
- package/dist/validation/entry-link-validator.d.ts +6 -13
- package/dist/validation/entry-link-validator.js +4 -13
- package/dist/validation/entry-type-reference-validator.d.ts +13 -18
- package/dist/validation/entry-type-reference-validator.js +13 -18
- package/dist/validation/entry-validator.d.ts +13 -25
- package/dist/validation/entry-validator.js +15 -32
- package/dist/validation/field-traversal.d.ts +3 -30
- package/dist/validation/field-traversal.js +1 -32
- package/dist/validation/reference-validator.d.ts +5 -24
- package/dist/validation/reference-validator.js +5 -30
- package/dist/worker/cms-worker.d.ts +172 -232
- package/dist/worker/cms-worker.js +241 -333
- package/dist/worker/git-sync.d.ts +32 -133
- package/dist/worker/git-sync.js +129 -191
- package/dist/worker/github-auth.d.ts +13 -19
- package/dist/worker/github-auth.js +13 -19
- package/dist/worker/history-rewrite.d.ts +53 -66
- package/dist/worker/history-rewrite.js +54 -60
- package/dist/worker/log.d.ts +24 -41
- package/dist/worker/log.js +25 -42
- package/dist/worker/rebase.d.ts +20 -110
- package/dist/worker/rebase.js +279 -354
- package/dist/worker/task-runner.d.ts +32 -66
- package/dist/worker/task-runner.js +126 -162
- package/dist/worker/worker-context.d.ts +41 -81
- package/package.json +4 -4
- package/dist/cli/template-files/middleware-clerk.ts.template +0 -37
- package/dist/worker/task-queue-config.d.ts +0 -8
- package/dist/worker/task-queue.js +0 -19
- package/dist/worker/worker-status.d.ts +0 -47
- package/dist/worker/worker-status.js +0 -52
package/dist/api/schema.js
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Schema API - endpoints for managing collection structure.
|
|
3
3
|
*
|
|
4
|
-
* Provides CRUD operations for:
|
|
5
|
-
* - Collections (create, read, update, delete)
|
|
6
|
-
* - Entry types (add, update, remove)
|
|
7
|
-
* - Ordering (update item order within collections)
|
|
8
|
-
*
|
|
9
4
|
* All mutations require Admin group membership.
|
|
10
5
|
* Schema changes are branch-specific (like content edits).
|
|
11
6
|
*/
|
|
@@ -107,9 +102,6 @@ function toWireFlatSchema(items, registry) {
|
|
|
107
102
|
};
|
|
108
103
|
});
|
|
109
104
|
}
|
|
110
|
-
// ============================================================================
|
|
111
|
-
// Zod Schemas for Params
|
|
112
|
-
// ============================================================================
|
|
113
105
|
const branchParamsSchema = z.object({
|
|
114
106
|
branch: branchNameSchema,
|
|
115
107
|
});
|
|
@@ -130,9 +122,6 @@ const updateEntryTypeBodySchema = updateEntryTypeInputSchema;
|
|
|
130
122
|
const updateOrderBodySchema = z.object({
|
|
131
123
|
order: z.array(z.string()),
|
|
132
124
|
});
|
|
133
|
-
// ============================================================================
|
|
134
|
-
// Helper Functions
|
|
135
|
-
// ============================================================================
|
|
136
125
|
/**
|
|
137
126
|
* Get a SchemaOps instance for a branch
|
|
138
127
|
*/
|
|
@@ -147,28 +136,16 @@ async function getSchemaOps(ctx, branchName) {
|
|
|
147
136
|
return { store, branchRoot: context.branchRoot };
|
|
148
137
|
}
|
|
149
138
|
/**
|
|
150
|
-
* `collectionPath`
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
* handler ever runs. Decoding again here would be a second, unauthorized
|
|
157
|
-
* decode pass on an already-decoded value - exactly the "double-encoding
|
|
158
|
-
* smuggles a traversal sequence" hazard this function's own re-validation
|
|
159
|
-
* was written to defend against, just relocated. This is now a passthrough;
|
|
160
|
-
* kept as a named function (rather than inlined at each call site) so a
|
|
161
|
-
* future re-validation need has one place to add it back.
|
|
139
|
+
* `collectionPath` is already decoded exactly once by matchRoute (uniformly for `:param` and
|
|
140
|
+
* catch-all segments) and re-validated for traversal by `collectionParamsSchema`'s
|
|
141
|
+
* `logicalPathSchema` before this handler runs. Decoding it again here would be a second,
|
|
142
|
+
* unauthorized decode pass — the "double-encoding smuggles a traversal sequence" hazard this
|
|
143
|
+
* function exists to guard against. A passthrough today; kept as a named function so a future
|
|
144
|
+
* re-validation need has one place to add it back.
|
|
162
145
|
*/
|
|
163
146
|
function decodeCollectionPath(collectionPath) {
|
|
164
147
|
return { ok: true, path: collectionPath };
|
|
165
148
|
}
|
|
166
|
-
// ============================================================================
|
|
167
|
-
// Handlers
|
|
168
|
-
// ============================================================================
|
|
169
|
-
/**
|
|
170
|
-
* GET /:branch/schema - Get full schema tree
|
|
171
|
-
*/
|
|
172
149
|
const getSchemaHandler = async (gc, ctx, _req, _params) => {
|
|
173
150
|
const { branchContext } = gc;
|
|
174
151
|
return {
|
|
@@ -180,10 +157,6 @@ const getSchemaHandler = async (gc, ctx, _req, _params) => {
|
|
|
180
157
|
},
|
|
181
158
|
};
|
|
182
159
|
};
|
|
183
|
-
/**
|
|
184
|
-
* GET /:branch/schema/collection/...collectionPath - Get single collection details
|
|
185
|
-
* Note: Uses 'collection' (singular) with catch-all to support paths with slashes
|
|
186
|
-
*/
|
|
187
160
|
const getCollectionHandler = async (gc, ctx, req, params) => {
|
|
188
161
|
const { branchContext } = gc;
|
|
189
162
|
const decodedPath = decodeCollectionPath(params.collectionPath);
|
|
@@ -246,9 +219,6 @@ const getCollectionHandler = async (gc, ctx, req, params) => {
|
|
|
246
219
|
data: { collection, entryTypesWithUsage },
|
|
247
220
|
};
|
|
248
221
|
};
|
|
249
|
-
/**
|
|
250
|
-
* POST /:branch/schema/collections - Create collection
|
|
251
|
-
*/
|
|
252
222
|
const createCollectionHandler = async (_gc, ctx, req, params, body) => {
|
|
253
223
|
const storeResult = await getSchemaOps(ctx, params.branch);
|
|
254
224
|
if ('error' in storeResult) {
|
|
@@ -273,10 +243,6 @@ const createCollectionHandler = async (_gc, ctx, req, params, body) => {
|
|
|
273
243
|
};
|
|
274
244
|
}
|
|
275
245
|
};
|
|
276
|
-
/**
|
|
277
|
-
* PATCH /:branch/schema/collection/...collectionPath - Update collection
|
|
278
|
-
* Note: Uses 'collection' (singular) with catch-all to support paths with slashes
|
|
279
|
-
*/
|
|
280
246
|
const updateCollectionHandler = async (_gc, ctx, req, params, body) => {
|
|
281
247
|
const storeResult = await getSchemaOps(ctx, params.branch);
|
|
282
248
|
if ('error' in storeResult) {
|
|
@@ -306,10 +272,6 @@ const updateCollectionHandler = async (_gc, ctx, req, params, body) => {
|
|
|
306
272
|
};
|
|
307
273
|
}
|
|
308
274
|
};
|
|
309
|
-
/**
|
|
310
|
-
* DELETE /:branch/schema/collection/...collectionPath - Delete collection
|
|
311
|
-
* Note: Uses 'collection' (singular) with catch-all to support paths with slashes
|
|
312
|
-
*/
|
|
313
275
|
const deleteCollectionHandler = async (_gc, ctx, req, params) => {
|
|
314
276
|
const storeResult = await getSchemaOps(ctx, params.branch);
|
|
315
277
|
if ('error' in storeResult) {
|
|
@@ -339,10 +301,6 @@ const deleteCollectionHandler = async (_gc, ctx, req, params) => {
|
|
|
339
301
|
};
|
|
340
302
|
}
|
|
341
303
|
};
|
|
342
|
-
/**
|
|
343
|
-
* POST /:branch/schema/entry-types/...collectionPath - Add entry type
|
|
344
|
-
* Note: Restructured URL with catch-all at end to support paths with slashes
|
|
345
|
-
*/
|
|
346
304
|
const addEntryTypeHandler = async (_gc, ctx, req, params, body) => {
|
|
347
305
|
const storeResult = await getSchemaOps(ctx, params.branch);
|
|
348
306
|
if ('error' in storeResult) {
|
|
@@ -372,10 +330,6 @@ const addEntryTypeHandler = async (_gc, ctx, req, params, body) => {
|
|
|
372
330
|
};
|
|
373
331
|
}
|
|
374
332
|
};
|
|
375
|
-
/**
|
|
376
|
-
* PATCH /:branch/schema/entry-types/:entryTypeName/...collectionPath - Update entry type
|
|
377
|
-
* Note: Restructured URL with entry type name before catch-all path
|
|
378
|
-
*/
|
|
379
333
|
const updateEntryTypeHandler = async (_gc, ctx, req, params, body) => {
|
|
380
334
|
const storeResult = await getSchemaOps(ctx, params.branch);
|
|
381
335
|
if ('error' in storeResult) {
|
|
@@ -386,13 +340,10 @@ const updateEntryTypeHandler = async (_gc, ctx, req, params, body) => {
|
|
|
386
340
|
return { ok: false, status: 400, error: decodedPath.error };
|
|
387
341
|
}
|
|
388
342
|
const collectionPath = decodedPath.path;
|
|
389
|
-
//
|
|
390
|
-
//
|
|
391
|
-
//
|
|
392
|
-
//
|
|
393
|
-
// otherwise a concurrent write could land a new entry between this
|
|
394
|
-
// handler's count and its call to the store (TOCTOU). See
|
|
395
|
-
// schema-store.ts's updateEntryTypeInner.
|
|
343
|
+
// The breaking-change usage guard (blocking format/schema changes while entries still use this
|
|
344
|
+
// type) lives in SchemaOps.updateEntryType, not here: the usage count must be read under the
|
|
345
|
+
// same schema lock that guards the write, or a concurrent write could land a new entry between
|
|
346
|
+
// this handler's count and the store call (TOCTOU). See schema-store.ts's updateEntryTypeInner.
|
|
396
347
|
try {
|
|
397
348
|
await storeResult.store.updateEntryType(collectionPath, params.entryTypeName, body);
|
|
398
349
|
return {
|
|
@@ -412,10 +363,6 @@ const updateEntryTypeHandler = async (_gc, ctx, req, params, body) => {
|
|
|
412
363
|
};
|
|
413
364
|
}
|
|
414
365
|
};
|
|
415
|
-
/**
|
|
416
|
-
* DELETE /:branch/schema/entry-types/:entryTypeName/...collectionPath - Remove entry type
|
|
417
|
-
* Note: Restructured URL with entry type name before catch-all path
|
|
418
|
-
*/
|
|
419
366
|
const removeEntryTypeHandler = async (_gc, ctx, req, params) => {
|
|
420
367
|
const storeResult = await getSchemaOps(ctx, params.branch);
|
|
421
368
|
if ('error' in storeResult) {
|
|
@@ -445,10 +392,6 @@ const removeEntryTypeHandler = async (_gc, ctx, req, params) => {
|
|
|
445
392
|
};
|
|
446
393
|
}
|
|
447
394
|
};
|
|
448
|
-
/**
|
|
449
|
-
* PATCH /:branch/schema/order/...collectionPath - Update item order
|
|
450
|
-
* Note: Restructured URL with catch-all at end to support paths with slashes
|
|
451
|
-
*/
|
|
452
395
|
const updateOrderHandler = async (_gc, ctx, req, params, body) => {
|
|
453
396
|
const storeResult = await getSchemaOps(ctx, params.branch);
|
|
454
397
|
if ('error' in storeResult) {
|
|
@@ -478,9 +421,6 @@ const updateOrderHandler = async (_gc, ctx, req, params, body) => {
|
|
|
478
421
|
};
|
|
479
422
|
}
|
|
480
423
|
};
|
|
481
|
-
/**
|
|
482
|
-
* POST /:branch/schema/invalidate-cache - Invalidate schema cache (for debugging/manual refresh)
|
|
483
|
-
*/
|
|
484
424
|
const invalidateSchemaCacheHandler = async (gc, ctx, _req, _params) => {
|
|
485
425
|
const { branchContext } = gc;
|
|
486
426
|
try {
|
|
@@ -502,11 +442,9 @@ const invalidateSchemaCacheHandler = async (gc, ctx, _req, _params) => {
|
|
|
502
442
|
};
|
|
503
443
|
}
|
|
504
444
|
};
|
|
505
|
-
// ============================================================================
|
|
506
|
-
// Route Definitions
|
|
507
|
-
// ============================================================================
|
|
508
445
|
/**
|
|
509
446
|
* GET /:branch/schema - Get full schema
|
|
447
|
+
* @internal Exported for tests.
|
|
510
448
|
*/
|
|
511
449
|
export const getSchema = defineEndpoint({
|
|
512
450
|
namespace: 'schema',
|
|
@@ -523,6 +461,7 @@ export const getSchema = defineEndpoint({
|
|
|
523
461
|
/**
|
|
524
462
|
* GET /:branch/schema/collection/...collectionPath - Get single collection
|
|
525
463
|
* Note: Uses 'collection' (singular) with catch-all to support paths with slashes
|
|
464
|
+
* @internal Exported for tests.
|
|
526
465
|
*/
|
|
527
466
|
export const getCollection = defineEndpoint({
|
|
528
467
|
namespace: 'schema',
|
|
@@ -538,6 +477,7 @@ export const getCollection = defineEndpoint({
|
|
|
538
477
|
});
|
|
539
478
|
/**
|
|
540
479
|
* POST /:branch/schema/collections - Create collection
|
|
480
|
+
* @internal Exported for tests.
|
|
541
481
|
*/
|
|
542
482
|
export const createCollection = defineEndpoint({
|
|
543
483
|
namespace: 'schema',
|
|
@@ -560,6 +500,7 @@ export const createCollection = defineEndpoint({
|
|
|
560
500
|
/**
|
|
561
501
|
* PATCH /:branch/schema/collection/...collectionPath - Update collection
|
|
562
502
|
* Note: Uses 'collection' (singular) with catch-all to support paths with slashes
|
|
503
|
+
* @internal Exported for tests.
|
|
563
504
|
*/
|
|
564
505
|
export const updateCollection = defineEndpoint({
|
|
565
506
|
namespace: 'schema',
|
|
@@ -578,6 +519,7 @@ export const updateCollection = defineEndpoint({
|
|
|
578
519
|
/**
|
|
579
520
|
* DELETE /:branch/schema/collection/...collectionPath - Delete collection
|
|
580
521
|
* Note: Uses 'collection' (singular) with catch-all to support paths with slashes
|
|
522
|
+
* @internal Exported for tests.
|
|
581
523
|
*/
|
|
582
524
|
export const deleteCollection = defineEndpoint({
|
|
583
525
|
namespace: 'schema',
|
|
@@ -594,6 +536,7 @@ export const deleteCollection = defineEndpoint({
|
|
|
594
536
|
/**
|
|
595
537
|
* POST /:branch/schema/entry-types/...collectionPath - Add entry type
|
|
596
538
|
* Note: Restructured URL with catch-all at end to support paths with slashes
|
|
539
|
+
* @internal Exported for tests.
|
|
597
540
|
*/
|
|
598
541
|
export const addEntryType = defineEndpoint({
|
|
599
542
|
namespace: 'schema',
|
|
@@ -612,6 +555,7 @@ export const addEntryType = defineEndpoint({
|
|
|
612
555
|
/**
|
|
613
556
|
* PATCH /:branch/schema/entry-types/:entryTypeName/...collectionPath - Update entry type
|
|
614
557
|
* Note: Restructured URL with entry type name before catch-all path
|
|
558
|
+
* @internal Exported for tests.
|
|
615
559
|
*/
|
|
616
560
|
export const updateEntryType = defineEndpoint({
|
|
617
561
|
namespace: 'schema',
|
|
@@ -630,6 +574,7 @@ export const updateEntryType = defineEndpoint({
|
|
|
630
574
|
/**
|
|
631
575
|
* DELETE /:branch/schema/entry-types/:entryTypeName/...collectionPath - Remove entry type
|
|
632
576
|
* Note: Restructured URL with entry type name before catch-all path
|
|
577
|
+
* @internal Exported for tests.
|
|
633
578
|
*/
|
|
634
579
|
export const removeEntryType = defineEndpoint({
|
|
635
580
|
namespace: 'schema',
|
|
@@ -646,6 +591,7 @@ export const removeEntryType = defineEndpoint({
|
|
|
646
591
|
/**
|
|
647
592
|
* PATCH /:branch/schema/order/...collectionPath - Update item order
|
|
648
593
|
* Note: Restructured URL with catch-all at end to support paths with slashes
|
|
594
|
+
* @internal Exported for tests.
|
|
649
595
|
*/
|
|
650
596
|
export const updateOrder = defineEndpoint({
|
|
651
597
|
namespace: 'schema',
|
|
@@ -664,7 +610,7 @@ export const updateOrder = defineEndpoint({
|
|
|
664
610
|
/**
|
|
665
611
|
* POST /:branch/schema/invalidate-cache - Invalidate schema cache
|
|
666
612
|
*/
|
|
667
|
-
|
|
613
|
+
const invalidateSchemaCache = defineEndpoint({
|
|
668
614
|
namespace: 'schema',
|
|
669
615
|
name: 'invalidateSchemaCache',
|
|
670
616
|
method: 'POST',
|
|
@@ -7,11 +7,10 @@ import { sanitizeErrorMessage } from '../utils/error.js';
|
|
|
7
7
|
export async function getSettingsBranchContext(ctx) {
|
|
8
8
|
const mode = ctx.services.config.mode;
|
|
9
9
|
const strategy = operatingStrategy(mode);
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// resolution (see resolveDeploymentName in operating-mode/deployment-name.ts).
|
|
10
|
+
// Pass the whole config, not a hand-picked subset, so deploymentName flows
|
|
11
|
+
// through (see resolveDeploymentName in operating-mode/deployment-name.ts)
|
|
12
|
+
// -- a subset silently computes the mode-default settings branch instead,
|
|
13
|
+
// ignoring any deploymentName/CANOPYCMS_DEPLOYMENT_NAME resolution.
|
|
15
14
|
const branchName = strategy.getSettingsBranchName(ctx.services.config);
|
|
16
15
|
// Both prod and dev use a separate settings branch
|
|
17
16
|
const settingsRoot = await ctx.services.getSettingsBranchRoot();
|
package/dist/api/types.d.ts
CHANGED
|
@@ -11,16 +11,11 @@ export interface ApiContext {
|
|
|
11
11
|
* Load a branch context for the requested branch name.
|
|
12
12
|
* Can be backed by BranchRegistry + BranchMetadataFileManager.
|
|
13
13
|
*
|
|
14
|
-
* @param branchName - Name of the branch to load
|
|
15
|
-
* @param options - Optional configuration
|
|
16
14
|
* @param options.loadSchema - If true, loads per-branch schema into context.flatSchema
|
|
17
15
|
*/
|
|
18
16
|
getBranchContext: (branchName: string, options?: {
|
|
19
17
|
loadSchema?: boolean;
|
|
20
18
|
}) => Promise<BranchContext | null>;
|
|
21
|
-
/**
|
|
22
|
-
* Auth plugin for user/group search (optional)
|
|
23
|
-
*/
|
|
24
19
|
authPlugin?: AuthPlugin;
|
|
25
20
|
}
|
|
26
21
|
export interface ApiRequest<TBody = unknown> {
|
package/dist/api/user.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { defineEndpoint } from './route-builder.js';
|
|
2
2
|
/**
|
|
3
|
-
* Get current user info
|
|
4
3
|
* This is a PUBLIC endpoint - no special permissions required
|
|
5
4
|
*/
|
|
6
5
|
const getUserInfoHandler = async (ctx, req) => {
|
|
@@ -14,10 +13,6 @@ const getUserInfoHandler = async (ctx, req) => {
|
|
|
14
13
|
},
|
|
15
14
|
};
|
|
16
15
|
};
|
|
17
|
-
/**
|
|
18
|
-
* Get current user information
|
|
19
|
-
* GET /whoami
|
|
20
|
-
*/
|
|
21
16
|
const getUserInfo = defineEndpoint({
|
|
22
17
|
namespace: 'user',
|
|
23
18
|
name: 'whoami',
|
package/dist/api/validators.d.ts
CHANGED
|
@@ -3,74 +3,31 @@
|
|
|
3
3
|
*
|
|
4
4
|
* These schemas validate incoming strings from HTTP requests
|
|
5
5
|
* and cast them to branded types for type-safe handling in API handlers.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* ```ts
|
|
9
|
-
* import { branchNameSchema, logicalPathSchema } from './validators.js'
|
|
10
|
-
*
|
|
11
|
-
* const paramsSchema = z.object({
|
|
12
|
-
* branch: branchNameSchema,
|
|
13
|
-
* path: logicalPathSchema,
|
|
14
|
-
* })
|
|
15
|
-
*
|
|
16
|
-
* // TypeScript infers branded types automatically
|
|
17
|
-
* const params = paramsSchema.parse(req.params)
|
|
18
|
-
* // params.branch is BranchName (not string)
|
|
19
|
-
* // params.path is LogicalPath (not string)
|
|
20
|
-
* ```
|
|
21
6
|
*/
|
|
22
7
|
import { z } from 'zod';
|
|
23
8
|
import { type BranchName, type LogicalPath, type ContentId, type Slug } from '../paths/index.js';
|
|
24
9
|
import { type PermissionPath } from '../authorization/index.js';
|
|
25
10
|
/**
|
|
26
|
-
* Zod schema for BranchName
|
|
27
|
-
*
|
|
28
|
-
* Validates:
|
|
29
|
-
* - No empty strings
|
|
30
|
-
* - No double dots (..)
|
|
31
|
-
* - No leading/trailing slashes
|
|
32
|
-
* - No spaces
|
|
33
|
-
* - No leading/trailing dots
|
|
34
|
-
* - No @{ sequences
|
|
11
|
+
* Zod schema for BranchName: validates and brands a branch-name string via `parseBranchName`
|
|
12
|
+
* (paths/validation.ts), so handlers receive a `BranchName`, not a bare `string`.
|
|
35
13
|
*/
|
|
36
14
|
export declare const branchNameSchema: z.ZodType<BranchName>;
|
|
37
15
|
/**
|
|
38
|
-
* Zod schema for LogicalPath
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* - No empty strings
|
|
42
|
-
* - No path traversal sequences (..)
|
|
43
|
-
* - Not a physical path (no embedded content IDs)
|
|
16
|
+
* Zod schema for LogicalPath: validates and brands via `parseLogicalPath` (paths/validation.ts),
|
|
17
|
+
* which blocks path-traversal sequences and physical-path shapes, so handlers get a
|
|
18
|
+
* `LogicalPath`, not a bare `string`.
|
|
44
19
|
*/
|
|
45
20
|
export declare const logicalPathSchema: z.ZodType<LogicalPath>;
|
|
46
21
|
/**
|
|
47
|
-
* Zod schema for ContentId
|
|
48
|
-
*
|
|
49
|
-
* Validates:
|
|
50
|
-
* - Exactly 12 characters
|
|
51
|
-
* - Base58 alphabet only (no 0, O, I, l)
|
|
22
|
+
* Zod schema for ContentId: validates and brands a 12-char Base58 ID via `parseContentId`
|
|
23
|
+
* (paths/validation.ts), so handlers get a `ContentId`, not a bare `string`.
|
|
52
24
|
*/
|
|
53
25
|
export declare const contentIdSchema: z.ZodType<ContentId>;
|
|
54
26
|
/**
|
|
55
|
-
* Zod schema for Slug
|
|
56
|
-
*
|
|
57
|
-
* Validates:
|
|
58
|
-
* - No path separators (/ or \)
|
|
59
|
-
* - Starts with lowercase letter or number
|
|
60
|
-
* - Only lowercase letters, numbers, and hyphens
|
|
61
|
-
* - Max 64 characters
|
|
27
|
+
* Zod schema for Slug: validates and brands via `parseSlug` (paths/validation.ts), so handlers
|
|
28
|
+
* get a `Slug`, not a bare `string`.
|
|
62
29
|
*/
|
|
63
30
|
export declare const slugSchema: z.ZodType<Slug>;
|
|
64
|
-
/**
|
|
65
|
-
* Zod schema for PermissionPath - validates permission rule paths.
|
|
66
|
-
*
|
|
67
|
-
* SECURITY: Prevents path traversal attacks in permission rules.
|
|
68
|
-
*
|
|
69
|
-
* Validates:
|
|
70
|
-
* - No path traversal sequences (..)
|
|
71
|
-
* - No leading/trailing slashes
|
|
72
|
-
* - No consecutive slashes
|
|
73
|
-
*/
|
|
74
31
|
/**
|
|
75
32
|
* Common params schema for endpoints that accept a branch name path parameter.
|
|
76
33
|
* Shared across branch-status, branch-review, branch-withdraw, comments, and branch handlers.
|
|
@@ -86,6 +43,11 @@ export declare const branchParamSchema: z.ZodObject<{
|
|
|
86
43
|
readonly __brand: "BranchName";
|
|
87
44
|
};
|
|
88
45
|
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Zod schema for PermissionPath: validates and brands via `parsePermissionPath`
|
|
48
|
+
* (authorization/validation.ts), so handlers get a `PermissionPath`, not a bare `string`.
|
|
49
|
+
* SECURITY: this is what blocks path traversal (`..`) in permission-rule paths.
|
|
50
|
+
*/
|
|
89
51
|
export declare const permissionPathSchema: z.ZodType<PermissionPath>;
|
|
90
52
|
/**
|
|
91
53
|
* Zod schema for boolean GET query params. HTTP query strings always arrive as
|
package/dist/api/validators.js
CHANGED
|
@@ -3,35 +3,13 @@
|
|
|
3
3
|
*
|
|
4
4
|
* These schemas validate incoming strings from HTTP requests
|
|
5
5
|
* and cast them to branded types for type-safe handling in API handlers.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* ```ts
|
|
9
|
-
* import { branchNameSchema, logicalPathSchema } from './validators.js'
|
|
10
|
-
*
|
|
11
|
-
* const paramsSchema = z.object({
|
|
12
|
-
* branch: branchNameSchema,
|
|
13
|
-
* path: logicalPathSchema,
|
|
14
|
-
* })
|
|
15
|
-
*
|
|
16
|
-
* // TypeScript infers branded types automatically
|
|
17
|
-
* const params = paramsSchema.parse(req.params)
|
|
18
|
-
* // params.branch is BranchName (not string)
|
|
19
|
-
* // params.path is LogicalPath (not string)
|
|
20
|
-
* ```
|
|
21
6
|
*/
|
|
22
7
|
import { z } from 'zod';
|
|
23
8
|
import { parseBranchName, parseLogicalPath, parseContentId, parseSlug, } from '../paths/index.js';
|
|
24
9
|
import { parsePermissionPath } from '../authorization/index.js';
|
|
25
10
|
/**
|
|
26
|
-
* Zod schema for BranchName
|
|
27
|
-
*
|
|
28
|
-
* Validates:
|
|
29
|
-
* - No empty strings
|
|
30
|
-
* - No double dots (..)
|
|
31
|
-
* - No leading/trailing slashes
|
|
32
|
-
* - No spaces
|
|
33
|
-
* - No leading/trailing dots
|
|
34
|
-
* - No @{ sequences
|
|
11
|
+
* Zod schema for BranchName: validates and brands a branch-name string via `parseBranchName`
|
|
12
|
+
* (paths/validation.ts), so handlers receive a `BranchName`, not a bare `string`.
|
|
35
13
|
*/
|
|
36
14
|
export const branchNameSchema = z
|
|
37
15
|
.string()
|
|
@@ -48,12 +26,9 @@ export const branchNameSchema = z
|
|
|
48
26
|
return result.name;
|
|
49
27
|
});
|
|
50
28
|
/**
|
|
51
|
-
* Zod schema for LogicalPath
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* - No empty strings
|
|
55
|
-
* - No path traversal sequences (..)
|
|
56
|
-
* - Not a physical path (no embedded content IDs)
|
|
29
|
+
* Zod schema for LogicalPath: validates and brands via `parseLogicalPath` (paths/validation.ts),
|
|
30
|
+
* which blocks path-traversal sequences and physical-path shapes, so handlers get a
|
|
31
|
+
* `LogicalPath`, not a bare `string`.
|
|
57
32
|
*/
|
|
58
33
|
export const logicalPathSchema = z
|
|
59
34
|
.string()
|
|
@@ -70,11 +45,8 @@ export const logicalPathSchema = z
|
|
|
70
45
|
return result.path;
|
|
71
46
|
});
|
|
72
47
|
/**
|
|
73
|
-
* Zod schema for ContentId
|
|
74
|
-
*
|
|
75
|
-
* Validates:
|
|
76
|
-
* - Exactly 12 characters
|
|
77
|
-
* - Base58 alphabet only (no 0, O, I, l)
|
|
48
|
+
* Zod schema for ContentId: validates and brands a 12-char Base58 ID via `parseContentId`
|
|
49
|
+
* (paths/validation.ts), so handlers get a `ContentId`, not a bare `string`.
|
|
78
50
|
*/
|
|
79
51
|
export const contentIdSchema = z.string().transform((val, ctx) => {
|
|
80
52
|
const result = parseContentId(val);
|
|
@@ -88,13 +60,8 @@ export const contentIdSchema = z.string().transform((val, ctx) => {
|
|
|
88
60
|
return result.id;
|
|
89
61
|
});
|
|
90
62
|
/**
|
|
91
|
-
* Zod schema for Slug
|
|
92
|
-
*
|
|
93
|
-
* Validates:
|
|
94
|
-
* - No path separators (/ or \)
|
|
95
|
-
* - Starts with lowercase letter or number
|
|
96
|
-
* - Only lowercase letters, numbers, and hyphens
|
|
97
|
-
* - Max 64 characters
|
|
63
|
+
* Zod schema for Slug: validates and brands via `parseSlug` (paths/validation.ts), so handlers
|
|
64
|
+
* get a `Slug`, not a bare `string`.
|
|
98
65
|
*/
|
|
99
66
|
export const slugSchema = z
|
|
100
67
|
.string()
|
|
@@ -110,16 +77,6 @@ export const slugSchema = z
|
|
|
110
77
|
}
|
|
111
78
|
return result.slug;
|
|
112
79
|
});
|
|
113
|
-
/**
|
|
114
|
-
* Zod schema for PermissionPath - validates permission rule paths.
|
|
115
|
-
*
|
|
116
|
-
* SECURITY: Prevents path traversal attacks in permission rules.
|
|
117
|
-
*
|
|
118
|
-
* Validates:
|
|
119
|
-
* - No path traversal sequences (..)
|
|
120
|
-
* - No leading/trailing slashes
|
|
121
|
-
* - No consecutive slashes
|
|
122
|
-
*/
|
|
123
80
|
/**
|
|
124
81
|
* Common params schema for endpoints that accept a branch name path parameter.
|
|
125
82
|
* Shared across branch-status, branch-review, branch-withdraw, comments, and branch handlers.
|
|
@@ -127,6 +84,11 @@ export const slugSchema = z
|
|
|
127
84
|
export const branchParamSchema = z.object({
|
|
128
85
|
branch: branchNameSchema,
|
|
129
86
|
});
|
|
87
|
+
/**
|
|
88
|
+
* Zod schema for PermissionPath: validates and brands via `parsePermissionPath`
|
|
89
|
+
* (authorization/validation.ts), so handlers get a `PermissionPath`, not a bare `string`.
|
|
90
|
+
* SECURITY: this is what blocks path traversal (`..`) in permission-rule paths.
|
|
91
|
+
*/
|
|
130
92
|
export const permissionPathSchema = z
|
|
131
93
|
.string()
|
|
132
94
|
.min(1)
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The five S3/local bucket-prefix strings (see keys.ts's module doc for the
|
|
3
|
-
* full layout: asset-originals/, asset-staging/, asset-meta/, assets/t/,
|
|
4
|
-
* assets/).
|
|
2
|
+
* The five S3/local bucket-prefix strings (see keys.ts's module doc for the full layout).
|
|
5
3
|
*
|
|
6
|
-
* Split into its own dependency-free file so
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* `hashBytes`) into a browser bundle. keys.ts re-exports `ASSET_PREFIXES`
|
|
10
|
-
* from here so existing imports of it from './keys.js' keep working unchanged.
|
|
4
|
+
* Split into its own dependency-free file so isomorphic modules (transform-directives.ts,
|
|
5
|
+
* asset-url.ts) can import the prefixes without pulling keys.ts's `node:crypto` import into a
|
|
6
|
+
* browser bundle. keys.ts re-exports `ASSET_PREFIXES` from here for existing importers.
|
|
11
7
|
*/
|
|
12
8
|
export declare const ASSET_PREFIXES: {
|
|
13
9
|
readonly originals: "asset-originals";
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The five S3/local bucket-prefix strings (see keys.ts's module doc for the
|
|
3
|
-
* full layout: asset-originals/, asset-staging/, asset-meta/, assets/t/,
|
|
4
|
-
* assets/).
|
|
2
|
+
* The five S3/local bucket-prefix strings (see keys.ts's module doc for the full layout).
|
|
5
3
|
*
|
|
6
|
-
* Split into its own dependency-free file so
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* `hashBytes`) into a browser bundle. keys.ts re-exports `ASSET_PREFIXES`
|
|
10
|
-
* from here so existing imports of it from './keys.js' keep working unchanged.
|
|
4
|
+
* Split into its own dependency-free file so isomorphic modules (transform-directives.ts,
|
|
5
|
+
* asset-url.ts) can import the prefixes without pulling keys.ts's `node:crypto` import into a
|
|
6
|
+
* browser bundle. keys.ts re-exports `ASSET_PREFIXES` from here for existing importers.
|
|
11
7
|
*/
|
|
12
8
|
export const ASSET_PREFIXES = {
|
|
13
9
|
originals: 'asset-originals',
|
|
@@ -1,35 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Compute the root-relative public URL for an asset's meta.
|
|
3
|
-
* both the API layer (list/finalize responses) and later PRs (structured
|
|
4
|
-
* image field, MediaLibrary, `assetUrl()`) build URLs through this so the
|
|
5
|
-
* URL shape is defined in exactly one place.
|
|
2
|
+
* Compute the root-relative public URL for an asset's meta.
|
|
6
3
|
*
|
|
7
4
|
* svg/pdf: served statically from the public object finalize wrote
|
|
8
5
|
* (`assets/{hash32}/{slug}.{ext}`, via keys.ts's `publicKey`).
|
|
9
6
|
*
|
|
10
7
|
* raster: served through the transform layer using the `orig` (identity)
|
|
11
|
-
* directive.
|
|
12
|
-
* decided now (rather than switching every raster URL over once transforms
|
|
13
|
-
* ship) so content written by this PR stays valid without a migration.
|
|
8
|
+
* directive.
|
|
14
9
|
*
|
|
15
10
|
* Always root-relative, and this is the value that gets STORED in content.
|
|
16
11
|
* Content moves between branches and environments, so a stored src must not
|
|
17
12
|
* name an origin or a deployment prefix - it names only the asset's position
|
|
18
|
-
* in the `/assets` URL space.
|
|
19
|
-
*
|
|
20
|
-
* Prefixing is a separate, render-time concern: `assetUrl()`'s `baseUrl` option
|
|
21
|
-
* (assets/asset-url.ts) puts the mount point in front, and is the ONLY place a
|
|
22
|
-
* prefix is applied. Do not confuse the two:
|
|
23
|
-
*
|
|
24
|
-
* - `assetSrc()` (here) -> stored, always root-relative, no prefix ever.
|
|
25
|
-
* - `assetUrl(ref, {baseUrl})` -> rendered, prefix applied, never written back.
|
|
26
|
-
*
|
|
27
|
-
* `media.publicBaseUrl` is one source of that render-time prefix (the editor's,
|
|
28
|
-
* for when the editor is served from a different origin) - it is config for
|
|
29
|
-
* display, not a property of the asset.
|
|
13
|
+
* in the `/assets` URL space. Prefixing it for display is `assetUrl()`'s
|
|
14
|
+
* render-time job - see asset-url.ts.
|
|
30
15
|
*/
|
|
31
|
-
import { IDENTITY_TRANSFORM_DIRECTIVE } from './transform-directives.js';
|
|
32
16
|
import type { AssetMeta } from './types.js';
|
|
33
|
-
/** Re-exported for existing importers (assets/index.ts barrel) - the value now lives in transform-directives.ts,
|
|
34
|
-
export { IDENTITY_TRANSFORM_DIRECTIVE };
|
|
17
|
+
/** Re-exported for existing importers (assets/index.ts barrel) - the value now lives in transform-directives.ts, so it's reachable without pulling keys.ts's node:crypto import into client bundles. */
|
|
35
18
|
export declare function assetSrc(meta: Pick<AssetMeta, 'hash32' | 'slug' | 'ext' | 'kind'>): string;
|
package/dist/assets/asset-src.js
CHANGED
|
@@ -1,37 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Compute the root-relative public URL for an asset's meta.
|
|
3
|
-
* both the API layer (list/finalize responses) and later PRs (structured
|
|
4
|
-
* image field, MediaLibrary, `assetUrl()`) build URLs through this so the
|
|
5
|
-
* URL shape is defined in exactly one place.
|
|
2
|
+
* Compute the root-relative public URL for an asset's meta.
|
|
6
3
|
*
|
|
7
4
|
* svg/pdf: served statically from the public object finalize wrote
|
|
8
5
|
* (`assets/{hash32}/{slug}.{ext}`, via keys.ts's `publicKey`).
|
|
9
6
|
*
|
|
10
7
|
* raster: served through the transform layer using the `orig` (identity)
|
|
11
|
-
* directive.
|
|
12
|
-
* decided now (rather than switching every raster URL over once transforms
|
|
13
|
-
* ship) so content written by this PR stays valid without a migration.
|
|
8
|
+
* directive.
|
|
14
9
|
*
|
|
15
10
|
* Always root-relative, and this is the value that gets STORED in content.
|
|
16
11
|
* Content moves between branches and environments, so a stored src must not
|
|
17
12
|
* name an origin or a deployment prefix - it names only the asset's position
|
|
18
|
-
* in the `/assets` URL space.
|
|
19
|
-
*
|
|
20
|
-
* Prefixing is a separate, render-time concern: `assetUrl()`'s `baseUrl` option
|
|
21
|
-
* (assets/asset-url.ts) puts the mount point in front, and is the ONLY place a
|
|
22
|
-
* prefix is applied. Do not confuse the two:
|
|
23
|
-
*
|
|
24
|
-
* - `assetSrc()` (here) -> stored, always root-relative, no prefix ever.
|
|
25
|
-
* - `assetUrl(ref, {baseUrl})` -> rendered, prefix applied, never written back.
|
|
26
|
-
*
|
|
27
|
-
* `media.publicBaseUrl` is one source of that render-time prefix (the editor's,
|
|
28
|
-
* for when the editor is served from a different origin) - it is config for
|
|
29
|
-
* display, not a property of the asset.
|
|
13
|
+
* in the `/assets` URL space. Prefixing it for display is `assetUrl()`'s
|
|
14
|
+
* render-time job - see asset-url.ts.
|
|
30
15
|
*/
|
|
31
16
|
import { ASSET_PREFIXES } from './asset-prefixes.js';
|
|
32
17
|
import { IDENTITY_TRANSFORM_DIRECTIVE } from './transform-directives.js';
|
|
33
|
-
/** Re-exported for existing importers (assets/index.ts barrel) - the value now lives in transform-directives.ts,
|
|
34
|
-
export { IDENTITY_TRANSFORM_DIRECTIVE };
|
|
18
|
+
/** Re-exported for existing importers (assets/index.ts barrel) - the value now lives in transform-directives.ts, so it's reachable without pulling keys.ts's node:crypto import into client bundles. */
|
|
35
19
|
export function assetSrc(meta) {
|
|
36
20
|
if (meta.kind === 'svg' || meta.kind === 'pdf') {
|
|
37
21
|
return `/${ASSET_PREFIXES.public}/${meta.hash32}/${meta.slug}.${meta.ext}`;
|
package/dist/assets/factory.d.ts
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
* Instantiate the configured AssetStore from a site's `media` config.
|
|
3
3
|
*
|
|
4
4
|
* This is the one place that turns the (currently-unconsumed) `media` config
|
|
5
|
-
* into a real store — see .claude/future-tasks/assets-media-system.md
|
|
6
|
-
* this was previously dead configuration.
|
|
5
|
+
* into a real store — see .claude/future-tasks/resolved/assets-media-system.md.
|
|
7
6
|
*/
|
|
8
7
|
import type { MediaConfig } from '../config/types.js';
|
|
9
8
|
import type { AssetStore } from './types.js';
|