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
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the GitHub App is called and what it may do: naming, the permission
|
|
3
|
+
* set, and the read-back check `verify` runs against an installation. Pure,
|
|
4
|
+
* so init-github-app.test.ts covers it without a live App.
|
|
5
|
+
*/
|
|
6
|
+
/** Permission levels GitHub uses for App repository permissions, weakest first. */
|
|
7
|
+
declare const PERMISSION_LEVELS: readonly ["read", "write", "admin"];
|
|
8
|
+
type PermissionLevel = (typeof PERMISSION_LEVELS)[number];
|
|
9
|
+
export type PermissionSet = Readonly<Record<string, PermissionLevel>>;
|
|
10
|
+
/**
|
|
11
|
+
* The App's entire security surface. Every entry names the call site that
|
|
12
|
+
* forces it — a permission justified only in a commit message can't be
|
|
13
|
+
* re-checked. Enumerated from `github-service.ts`,
|
|
14
|
+
* `worker/{task-runner,rebase}.ts`, and every git call reaching github.com;
|
|
15
|
+
* `canopycms-cdk` makes no REST calls at all.
|
|
16
|
+
* - `contents: write` — git over HTTPS (first-boot clone, per-cycle branch
|
|
17
|
+
* fetch, pushes) and `octokit.git.deleteRef`. GitHub's reference puts ref
|
|
18
|
+
* deletion under Contents/write, not `administration` (the plausible wrong
|
|
19
|
+
* guess). Declared even though its only call site is currently commented
|
|
20
|
+
* out, since the handler goes live the moment a producer appears.
|
|
21
|
+
* - `pull_requests: write` — `pulls.create`/`pulls.update`, and the GraphQL
|
|
22
|
+
* mutations `markPullRequestReadyForReview`/`convertPullRequestToDraft`,
|
|
23
|
+
* derived by analogy since GitHub's reference has no line for them.
|
|
24
|
+
* - `metadata: read` — implied by any repository permission; declared so
|
|
25
|
+
* this object states the whole surface, not just the non-automatic part.
|
|
26
|
+
* Nothing else: no `issues`, `administration`, `actions`, or organisation
|
|
27
|
+
* permissions. No `workflows` either, though GitHub may refuse to push
|
|
28
|
+
* rebased history touching `.github/workflows/` — see
|
|
29
|
+
* .claude/future-tasks/worker-push-refused-when-base-changes-workflows.md.
|
|
30
|
+
*/
|
|
31
|
+
export declare const CANOPY_APP_PERMISSIONS: PermissionSet;
|
|
32
|
+
/**
|
|
33
|
+
* GitHub's limit on an App's display name: documented as unlimited, but a
|
|
34
|
+
* 39-character name was refused while 33 was accepted, so the true bound is
|
|
35
|
+
* 33..38, and 34 is the safe direction — a wrongly-refused name costs one
|
|
36
|
+
* `--name` flag, a wrongly-accepted one a browser round trip to find out.
|
|
37
|
+
*/
|
|
38
|
+
export declare const APP_NAME_MAX_LENGTH = 34;
|
|
39
|
+
/**
|
|
40
|
+
* How much of a description the account's App LIST renders before
|
|
41
|
+
* truncating, mid-word with an ellipsis: an opening "Read-only,
|
|
42
|
+
* organisation-wide. Lets th…" was cut at 37 characters, by CHARACTER not
|
|
43
|
+
* line — hence `appDescription`'s shape: a summary inside this budget, then
|
|
44
|
+
* the detail only the App's own page shows.
|
|
45
|
+
* @internal Exported for tests.
|
|
46
|
+
*/
|
|
47
|
+
export declare const APP_SUMMARY_MAX_LENGTH = 37;
|
|
48
|
+
/**
|
|
49
|
+
* The App's display name, named after the REPOSITORY (per-site — see
|
|
50
|
+
* init-github-app.ts's header). Names are unique across all of GitHub, not just the account, so
|
|
51
|
+
* `create` pre-checks with `checkNameAvailable` and `--name` overrides.
|
|
52
|
+
*/
|
|
53
|
+
export declare function appName(repo: string): string;
|
|
54
|
+
/**
|
|
55
|
+
* GitHub's slug derivation, as far as this needs it: lowercase, runs of
|
|
56
|
+
* non-alphanumeric characters collapse to single hyphens. Pinned by a test —
|
|
57
|
+
* if GitHub ever derives differently, the name pre-check goes blind, not loud.
|
|
58
|
+
*/
|
|
59
|
+
export declare function appSlug(name: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* A short summary that survives the App list's truncation, then the detail —
|
|
62
|
+
* deliberately generic, since this text lives ON GITHUB and goes stale
|
|
63
|
+
* silently with no way to detect it here.
|
|
64
|
+
*/
|
|
65
|
+
export declare function appDescription(): string;
|
|
66
|
+
/** The parts of GitHub's installation object this tool reads back. */
|
|
67
|
+
export type InstallationSummary = {
|
|
68
|
+
id: number;
|
|
69
|
+
permissions?: Record<string, string>;
|
|
70
|
+
repository_selection?: string;
|
|
71
|
+
suspended_at?: string | null;
|
|
72
|
+
app_slug?: string;
|
|
73
|
+
};
|
|
74
|
+
export type ReadbackFinding = {
|
|
75
|
+
severity: 'error' | 'warn';
|
|
76
|
+
message: string;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Compare what an installation holds against what this package needs. Pure,
|
|
80
|
+
* so testable without a live App — reports in BOTH directions, since an
|
|
81
|
+
* extra or over-wide permission works perfectly and goes unnoticed.
|
|
82
|
+
*/
|
|
83
|
+
export declare function readbackVerdict(installation: InstallationSummary, desired?: PermissionSet): ReadbackFinding[];
|
|
84
|
+
export {};
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the GitHub App is called and what it may do: naming, the permission
|
|
3
|
+
* set, and the read-back check `verify` runs against an installation. Pure,
|
|
4
|
+
* so init-github-app.test.ts covers it without a live App.
|
|
5
|
+
*/
|
|
6
|
+
/** Permission levels GitHub uses for App repository permissions, weakest first. */
|
|
7
|
+
const PERMISSION_LEVELS = ['read', 'write', 'admin'];
|
|
8
|
+
/**
|
|
9
|
+
* The App's entire security surface. Every entry names the call site that
|
|
10
|
+
* forces it — a permission justified only in a commit message can't be
|
|
11
|
+
* re-checked. Enumerated from `github-service.ts`,
|
|
12
|
+
* `worker/{task-runner,rebase}.ts`, and every git call reaching github.com;
|
|
13
|
+
* `canopycms-cdk` makes no REST calls at all.
|
|
14
|
+
* - `contents: write` — git over HTTPS (first-boot clone, per-cycle branch
|
|
15
|
+
* fetch, pushes) and `octokit.git.deleteRef`. GitHub's reference puts ref
|
|
16
|
+
* deletion under Contents/write, not `administration` (the plausible wrong
|
|
17
|
+
* guess). Declared even though its only call site is currently commented
|
|
18
|
+
* out, since the handler goes live the moment a producer appears.
|
|
19
|
+
* - `pull_requests: write` — `pulls.create`/`pulls.update`, and the GraphQL
|
|
20
|
+
* mutations `markPullRequestReadyForReview`/`convertPullRequestToDraft`,
|
|
21
|
+
* derived by analogy since GitHub's reference has no line for them.
|
|
22
|
+
* - `metadata: read` — implied by any repository permission; declared so
|
|
23
|
+
* this object states the whole surface, not just the non-automatic part.
|
|
24
|
+
* Nothing else: no `issues`, `administration`, `actions`, or organisation
|
|
25
|
+
* permissions. No `workflows` either, though GitHub may refuse to push
|
|
26
|
+
* rebased history touching `.github/workflows/` — see
|
|
27
|
+
* .claude/future-tasks/worker-push-refused-when-base-changes-workflows.md.
|
|
28
|
+
*/
|
|
29
|
+
export const CANOPY_APP_PERMISSIONS = {
|
|
30
|
+
contents: 'write',
|
|
31
|
+
pull_requests: 'write',
|
|
32
|
+
metadata: 'read',
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* GitHub's limit on an App's display name: documented as unlimited, but a
|
|
36
|
+
* 39-character name was refused while 33 was accepted, so the true bound is
|
|
37
|
+
* 33..38, and 34 is the safe direction — a wrongly-refused name costs one
|
|
38
|
+
* `--name` flag, a wrongly-accepted one a browser round trip to find out.
|
|
39
|
+
*/
|
|
40
|
+
export const APP_NAME_MAX_LENGTH = 34;
|
|
41
|
+
/**
|
|
42
|
+
* How much of a description the account's App LIST renders before
|
|
43
|
+
* truncating, mid-word with an ellipsis: an opening "Read-only,
|
|
44
|
+
* organisation-wide. Lets th…" was cut at 37 characters, by CHARACTER not
|
|
45
|
+
* line — hence `appDescription`'s shape: a summary inside this budget, then
|
|
46
|
+
* the detail only the App's own page shows.
|
|
47
|
+
* @internal Exported for tests.
|
|
48
|
+
*/
|
|
49
|
+
export const APP_SUMMARY_MAX_LENGTH = 37;
|
|
50
|
+
/**
|
|
51
|
+
* The App's display name, named after the REPOSITORY (per-site — see
|
|
52
|
+
* init-github-app.ts's header). Names are unique across all of GitHub, not just the account, so
|
|
53
|
+
* `create` pre-checks with `checkNameAvailable` and `--name` overrides.
|
|
54
|
+
*/
|
|
55
|
+
export function appName(repo) {
|
|
56
|
+
return `${repo} CanopyCMS`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* GitHub's slug derivation, as far as this needs it: lowercase, runs of
|
|
60
|
+
* non-alphanumeric characters collapse to single hyphens. Pinned by a test —
|
|
61
|
+
* if GitHub ever derives differently, the name pre-check goes blind, not loud.
|
|
62
|
+
*/
|
|
63
|
+
export function appSlug(name) {
|
|
64
|
+
return name
|
|
65
|
+
.toLowerCase()
|
|
66
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
67
|
+
.replace(/^-|-$/g, '');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* A short summary that survives the App list's truncation, then the detail —
|
|
71
|
+
* deliberately generic, since this text lives ON GITHUB and goes stale
|
|
72
|
+
* silently with no way to detect it here.
|
|
73
|
+
*/
|
|
74
|
+
export function appDescription() {
|
|
75
|
+
return [
|
|
76
|
+
'Commits content edits, opens PRs',
|
|
77
|
+
'',
|
|
78
|
+
'Lets CanopyCMS publish edits made in its editor: it pushes content branches to this ' +
|
|
79
|
+
'repository and opens or updates the pull request that carries them. Installed on one ' +
|
|
80
|
+
'repository, and registered per site — so this key cannot reach another site’s repository.',
|
|
81
|
+
].join('\n');
|
|
82
|
+
}
|
|
83
|
+
function isPermissionLevel(value) {
|
|
84
|
+
return PERMISSION_LEVELS.includes(value);
|
|
85
|
+
}
|
|
86
|
+
function rank(level) {
|
|
87
|
+
return PERMISSION_LEVELS.indexOf(level);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Compare what an installation holds against what this package needs. Pure,
|
|
91
|
+
* so testable without a live App — reports in BOTH directions, since an
|
|
92
|
+
* extra or over-wide permission works perfectly and goes unnoticed.
|
|
93
|
+
*/
|
|
94
|
+
export function readbackVerdict(installation, desired = CANOPY_APP_PERMISSIONS) {
|
|
95
|
+
const findings = [];
|
|
96
|
+
const held = installation.permissions ?? {};
|
|
97
|
+
if (installation.suspended_at) {
|
|
98
|
+
findings.push({
|
|
99
|
+
severity: 'error',
|
|
100
|
+
message: `the installation is SUSPENDED (since ${installation.suspended_at}). ` +
|
|
101
|
+
'A suspended installation authenticates and then refuses everything, so this ' +
|
|
102
|
+
'presents as a permission problem that no permission change fixes.',
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// `undefined` is NOT `selected`: an absent field means GitHub didn't say, and
|
|
106
|
+
// treating that as the narrow case would be the check quietly passing itself.
|
|
107
|
+
if (installation.repository_selection !== 'selected') {
|
|
108
|
+
findings.push({
|
|
109
|
+
severity: 'error',
|
|
110
|
+
message: `repository_selection is ${JSON.stringify(installation.repository_selection ?? null)}, ` +
|
|
111
|
+
'expected "selected". This App is registered per site: an installation covering every ' +
|
|
112
|
+
'repository in the account means its key reaches repositories it was never meant to.',
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
for (const [name, level] of Object.entries(desired)) {
|
|
116
|
+
const actual = held[name];
|
|
117
|
+
if (actual === undefined) {
|
|
118
|
+
findings.push({
|
|
119
|
+
severity: 'error',
|
|
120
|
+
message: `missing permission ${name}: ${level} — the installation holds no ${name} grant at all.`,
|
|
121
|
+
});
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (actual === level)
|
|
125
|
+
continue;
|
|
126
|
+
// Exact match is the only pass: an unknown level is reported, not ranked,
|
|
127
|
+
// since guessing where it sits is how a check goes blind.
|
|
128
|
+
if (!isPermissionLevel(actual)) {
|
|
129
|
+
findings.push({
|
|
130
|
+
severity: 'error',
|
|
131
|
+
message: `permission ${name} is "${actual}", which is not a level this check knows ` +
|
|
132
|
+
`(${PERMISSION_LEVELS.join('/')}). Compare it against "${level}" by hand.`,
|
|
133
|
+
});
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if (rank(actual) < rank(level)) {
|
|
137
|
+
findings.push({
|
|
138
|
+
severity: 'error',
|
|
139
|
+
message: `permission ${name} is "${actual}", which is weaker than the required "${level}".`,
|
|
140
|
+
});
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
// Stronger than required is still wider than intended: it works perfectly,
|
|
144
|
+
// so nothing else will ever notice it.
|
|
145
|
+
findings.push({
|
|
146
|
+
severity: 'error',
|
|
147
|
+
message: `permission ${name} is "${actual}", which is STRONGER than the required "${level}". ` +
|
|
148
|
+
'Wider than intended is the failure that works perfectly and is never noticed.',
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
for (const [name, level] of Object.entries(held)) {
|
|
152
|
+
if (desired[name] === undefined) {
|
|
153
|
+
findings.push({
|
|
154
|
+
severity: 'error',
|
|
155
|
+
message: `permission ${name}: ${level} is held but NOT needed. Wider than intended is the ` +
|
|
156
|
+
'failure that works perfectly and is never noticed — remove it from the App.',
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return findings;
|
|
161
|
+
}
|