canopycms 0.0.68-int.98 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2131 -0
- package/README.md +47 -63
- package/dist/ai/generate.d.ts +5 -0
- package/dist/ai/generate.js +244 -115
- package/dist/ai/index.d.ts +1 -1
- package/dist/ai/json-to-markdown.d.ts +21 -1
- package/dist/ai/json-to-markdown.js +120 -57
- package/dist/ai/references.d.ts +72 -0
- package/dist/ai/references.js +223 -0
- package/dist/ai/resolve-branch.js +9 -2
- package/dist/ai/to-plain-text.d.ts +17 -8
- package/dist/ai/to-plain-text.js +18 -15
- package/dist/ai/types.d.ts +84 -3
- package/dist/api/admin-branch-health.d.ts +24 -1
- package/dist/api/admin-branch-health.js +52 -20
- package/dist/api/admin.d.ts +23 -5
- package/dist/api/admin.js +36 -1
- package/dist/api/assets.js +88 -78
- package/dist/api/branch-create-window.d.ts +12 -0
- package/dist/api/branch-create-window.js +13 -0
- package/dist/api/branch-merge.d.ts +1 -1
- package/dist/api/branch-merge.js +1 -1
- package/dist/api/branch-review.d.ts +3 -3
- package/dist/api/branch-review.js +16 -7
- package/dist/api/branch-status.d.ts +16 -6
- package/dist/api/branch-status.js +57 -12
- package/dist/api/branch-withdraw.d.ts +2 -2
- package/dist/api/branch-withdraw.js +8 -3
- package/dist/api/branch.d.ts +25 -12
- package/dist/api/branch.js +164 -103
- package/dist/api/client.d.ts +78 -58
- package/dist/api/client.js +150 -117
- package/dist/api/comments.d.ts +12 -3
- package/dist/api/comments.js +118 -9
- package/dist/api/content.d.ts +9 -9
- package/dist/api/content.js +131 -22
- package/dist/api/entries-constants.d.ts +14 -3
- package/dist/api/entries-constants.js +14 -3
- package/dist/api/entries.d.ts +40 -2
- package/dist/api/entries.js +102 -6
- package/dist/api/github-sync.d.ts +19 -0
- package/dist/api/github-sync.js +50 -3
- package/dist/api/groups.d.ts +4 -4
- package/dist/api/groups.js +2 -1
- package/dist/api/guards.js +23 -3
- package/dist/api/index.d.ts +3 -1
- package/dist/api/index.js +1 -0
- package/dist/api/permissions.d.ts +21 -2
- package/dist/api/permissions.js +50 -3
- package/dist/api/request-deadline.d.ts +59 -0
- package/dist/api/request-deadline.js +73 -0
- package/dist/api/resolve-references.js +8 -7
- package/dist/api/route-builder.d.ts +14 -0
- package/dist/api/route-builder.js +14 -1
- package/dist/api/schema.d.ts +11 -9
- package/dist/api/schema.js +2 -0
- package/dist/api/settings-helpers.d.ts +5 -1
- package/dist/api/settings-helpers.js +10 -2
- package/dist/api/types.d.ts +18 -0
- package/dist/api/users-constants.d.ts +6 -0
- package/dist/api/users-constants.js +6 -0
- package/dist/assets/asset-url.d.ts +28 -16
- package/dist/assets/asset-url.js +51 -25
- package/dist/assets/finalize.js +3 -0
- package/dist/assets/index.d.ts +1 -1
- package/dist/assets/materialize.d.ts +153 -0
- package/dist/assets/materialize.js +402 -0
- package/dist/assets/store-local.d.ts +19 -5
- package/dist/assets/store-local.js +69 -10
- package/dist/assets/store-s3.d.ts +38 -7
- package/dist/assets/store-s3.js +128 -22
- package/dist/assets/transform-directives.d.ts +52 -13
- package/dist/assets/transform-directives.js +87 -27
- package/dist/assets/transform.d.ts +3 -3
- package/dist/assets/transform.js +13 -8
- package/dist/assets/types.d.ts +31 -4
- package/dist/auth/cache.d.ts +1 -1
- package/dist/auth/cache.js +1 -1
- package/dist/auth/caching-auth-plugin.d.ts +2 -0
- package/dist/auth/caching-auth-plugin.js +12 -2
- package/dist/auth/file-based-auth-cache.d.ts +8 -0
- package/dist/auth/file-based-auth-cache.js +18 -8
- package/dist/auth/person-name.d.ts +5 -0
- package/dist/auth/person-name.js +8 -0
- package/dist/auth/plugin.d.ts +10 -1
- package/dist/auth/types.d.ts +2 -0
- package/dist/auth/user-metadata-lookup.d.ts +21 -0
- package/dist/auth/user-metadata-lookup.js +116 -0
- package/dist/authorization/branch.d.ts +1 -1
- package/dist/authorization/branch.js +12 -13
- package/dist/authorization/groups/schema.d.ts +4 -4
- package/dist/authorization/helpers.d.ts +8 -0
- package/dist/authorization/helpers.js +8 -0
- package/dist/authorization/index.d.ts +1 -1
- package/dist/authorization/index.js +1 -1
- package/dist/authorization/protected-branch.d.ts +5 -4
- package/dist/authorization/protected-branch.js +7 -5
- package/dist/branch-health.d.ts +35 -8
- package/dist/branch-health.js +54 -18
- package/dist/branch-metadata-error.d.ts +27 -0
- package/dist/branch-metadata-error.js +23 -0
- package/dist/branch-metadata-file.d.ts +205 -24
- package/dist/branch-metadata-file.js +126 -25
- package/dist/branch-metadata.d.ts +45 -6
- package/dist/branch-metadata.js +142 -50
- package/dist/branch-provisioning.d.ts +167 -0
- package/dist/branch-provisioning.js +501 -0
- package/dist/branch-registry.d.ts +8 -0
- package/dist/branch-registry.js +61 -9
- package/dist/branch-schema-cache.d.ts +29 -12
- package/dist/branch-schema-cache.js +64 -21
- package/dist/branch-sparse.d.ts +23 -0
- package/dist/branch-sparse.js +118 -0
- package/dist/branch-workspace.d.ts +42 -3
- package/dist/branch-workspace.js +239 -100
- package/dist/build/asset-refs.d.ts +94 -0
- package/dist/build/asset-refs.js +267 -0
- package/dist/build/generate-ai-content.js +5 -0
- package/dist/build/inline-flight.d.ts +37 -0
- package/dist/build/inline-flight.js +142 -0
- package/dist/cli/asset-refs.d.ts +52 -0
- package/dist/cli/asset-refs.js +194 -0
- package/dist/cli/cli.d.ts +15 -1
- package/dist/cli/cli.js +8543 -3193
- package/dist/cli/configured-asset-store.d.ts +12 -0
- package/dist/cli/configured-asset-store.js +46 -0
- package/dist/cli/generate-ai-content.js +4244 -1072
- package/dist/cli/init.js +217 -126
- package/dist/cli/project-detect.d.ts +2 -0
- package/dist/cli/project-detect.js +2 -0
- package/dist/cli/template-files/Dockerfile.cms.template +13 -5
- package/dist/cli/template-files/cms-stack.ts.template +16 -13
- package/dist/client.d.ts +1 -2
- package/dist/client.js +1 -2
- package/dist/comment-store.d.ts +25 -0
- package/dist/comment-store.js +43 -8
- package/dist/config/flatten.js +2 -0
- package/dist/config/helpers.js +2 -2
- package/dist/config/index.d.ts +1 -1
- package/dist/config/schemas/config.d.ts +12 -29
- package/dist/config/schemas/config.js +9 -12
- package/dist/config/schemas/field.d.ts +3 -0
- package/dist/config/schemas/field.js +58 -4
- package/dist/config/schemas/media.d.ts +4 -13
- package/dist/config/schemas/media.js +5 -8
- package/dist/config/schemas/url.d.ts +2 -20
- package/dist/config/schemas/url.js +2 -25
- package/dist/config/types.d.ts +116 -22
- package/dist/config/types.js +3 -9
- package/dist/config/validation.d.ts +25 -4
- package/dist/config/validation.js +116 -3
- package/dist/content-id-index.js +2 -2
- package/dist/content-index-generation.d.ts +1 -1
- package/dist/content-index-generation.js +1 -1
- package/dist/content-listing.d.ts +10 -1
- package/dist/content-listing.js +22 -5
- package/dist/content-reader.d.ts +9 -0
- package/dist/content-reader.js +16 -11
- package/dist/content-store.d.ts +75 -12
- package/dist/content-store.js +249 -86
- package/dist/content-tree.js +2 -2
- package/dist/context.js +5 -2
- package/dist/dangling-reference-log.d.ts +17 -0
- package/dist/dangling-reference-log.js +29 -0
- package/dist/dev-content-watcher.d.ts +1 -1
- package/dist/dev-content-watcher.js +1 -1
- package/dist/editor/BranchManager.d.ts +23 -7
- package/dist/editor/BranchManager.js +119 -54
- package/dist/editor/CanopyEditor.d.ts +1 -1
- package/dist/editor/CanopyEditor.js +1 -2
- package/dist/editor/CommentsPanel.d.ts +14 -0
- package/dist/editor/CommentsPanel.js +68 -43
- package/dist/editor/Editor.d.ts +11 -5
- package/dist/editor/Editor.js +891 -218
- package/dist/editor/EditorAuthGate.d.ts +7 -1
- package/dist/editor/EditorAuthGate.js +41 -9
- package/dist/editor/EntryNavigator.d.ts +22 -0
- package/dist/editor/EntryNavigator.js +353 -105
- package/dist/editor/FormHeader.d.ts +25 -0
- package/dist/editor/FormHeader.js +82 -0
- package/dist/editor/FormRenderer.d.ts +27 -3
- package/dist/editor/FormRenderer.js +171 -76
- package/dist/editor/PreviewFrame.d.ts +40 -0
- package/dist/editor/PreviewFrame.js +215 -0
- package/dist/editor/PreviewPane.d.ts +47 -0
- package/dist/editor/PreviewPane.js +147 -0
- package/dist/editor/PreviewToolbarTools.d.ts +22 -0
- package/dist/editor/PreviewToolbarTools.js +73 -0
- package/dist/editor/admin/SystemHealthPanel.d.ts +2 -1
- package/dist/editor/admin/SystemHealthPanel.js +163 -33
- package/dist/editor/admin/useSystemHealth.d.ts +18 -0
- package/dist/editor/admin/useSystemHealth.js +70 -1
- package/dist/editor/branch-status.d.ts +17 -0
- package/dist/editor/branch-status.js +29 -0
- package/dist/editor/canopy-path.d.ts +9 -6
- package/dist/editor/canopy-path.js +8 -11
- package/dist/editor/client-reference-resolver.d.ts +43 -16
- package/dist/editor/client-reference-resolver.js +155 -64
- package/dist/editor/comments/BranchComments.d.ts +1 -1
- package/dist/editor/comments/BranchComments.js +2 -2
- package/dist/editor/comments/CloseRefusedNotice.d.ts +4 -0
- package/dist/editor/comments/CloseRefusedNotice.js +7 -0
- package/dist/editor/comments/CommentThreadsPopover.d.ts +47 -0
- package/dist/editor/comments/CommentThreadsPopover.js +274 -0
- package/dist/editor/comments/CommentWriteAlert.d.ts +11 -0
- package/dist/editor/comments/CommentWriteAlert.js +13 -0
- package/dist/editor/comments/EntryComments.d.ts +10 -4
- package/dist/editor/comments/EntryComments.js +14 -17
- package/dist/editor/comments/FieldWrapper.d.ts +18 -4
- package/dist/editor/comments/FieldWrapper.js +62 -28
- package/dist/editor/comments/InlineCommentThread.d.ts +9 -2
- package/dist/editor/comments/InlineCommentThread.js +11 -47
- package/dist/editor/comments/ThreadCarousel.d.ts +1 -1
- package/dist/editor/comments/ThreadCarousel.js +18 -21
- package/dist/editor/comments/ThreadReplyControls.d.ts +28 -0
- package/dist/editor/comments/ThreadReplyControls.js +92 -0
- package/dist/editor/comments/field-comment-context.d.ts +14 -0
- package/dist/editor/comments/field-comment-context.js +14 -0
- package/dist/editor/comments/form-comments.d.ts +48 -0
- package/dist/editor/comments/form-comments.js +178 -0
- package/dist/editor/comments/item-anchor-copy.d.ts +6 -0
- package/dist/editor/comments/item-anchor-copy.js +6 -0
- package/dist/editor/comments/move-focus-if-unmoved.d.ts +6 -0
- package/dist/editor/comments/move-focus-if-unmoved.js +11 -0
- package/dist/editor/comments/popover-placement.d.ts +18 -0
- package/dist/editor/comments/popover-placement.js +58 -0
- package/dist/editor/comments/use-tracked-writes.d.ts +16 -0
- package/dist/editor/comments/use-tracked-writes.js +53 -0
- package/dist/editor/components/BranchAccessList.d.ts +15 -0
- package/dist/editor/components/BranchAccessList.js +52 -0
- package/dist/editor/components/BranchLockBanner.d.ts +22 -0
- package/dist/editor/components/BranchLockBanner.js +39 -0
- package/dist/editor/components/BranchPill.d.ts +32 -0
- package/dist/editor/components/BranchPill.js +33 -0
- package/dist/editor/components/BranchesDrawer.d.ts +11 -0
- package/dist/editor/components/BranchesDrawer.js +5 -0
- package/dist/editor/components/ConfirmDeleteModal.d.ts +6 -1
- package/dist/editor/components/ConfirmDeleteModal.js +3 -2
- package/dist/editor/components/DestructiveMenuItem.d.ts +7 -0
- package/dist/editor/components/DestructiveMenuItem.js +8 -0
- package/dist/editor/components/EditorCrashScreen.d.ts +17 -0
- package/dist/editor/components/EditorCrashScreen.js +22 -0
- package/dist/editor/components/EditorErrorBoundary.d.ts +38 -0
- package/dist/editor/components/EditorErrorBoundary.js +40 -0
- package/dist/editor/components/EditorHeader.d.ts +56 -106
- package/dist/editor/components/EditorHeader.js +130 -131
- package/dist/editor/components/EditorRail.d.ts +49 -0
- package/dist/editor/components/EditorRail.js +65 -0
- package/dist/editor/components/EntryBreadcrumb.d.ts +33 -0
- package/dist/editor/components/EntryBreadcrumb.js +56 -0
- package/dist/editor/components/EntryCreateModal.d.ts +12 -7
- package/dist/editor/components/EntryCreateModal.js +51 -57
- package/dist/editor/components/NoEditPermissionNotice.d.ts +6 -5
- package/dist/editor/components/NoEditPermissionNotice.js +5 -4
- package/dist/editor/components/QuickOpenPalette.d.ts +22 -0
- package/dist/editor/components/QuickOpenPalette.js +66 -0
- package/dist/editor/components/ReadOnlyDraftNotice.d.ts +11 -0
- package/dist/editor/components/ReadOnlyDraftNotice.js +12 -0
- package/dist/editor/components/ReasonedMenuItem.d.ts +15 -0
- package/dist/editor/components/ReasonedMenuItem.js +15 -0
- package/dist/editor/components/ReferencedByList.d.ts +11 -0
- package/dist/editor/components/ReferencedByList.js +28 -0
- package/dist/editor/components/RelativeTime.d.ts +10 -0
- package/dist/editor/components/RelativeTime.js +10 -0
- package/dist/editor/components/RenameEntryModal.d.ts +9 -1
- package/dist/editor/components/RenameEntryModal.js +19 -31
- package/dist/editor/components/RetryToastMessage.d.ts +9 -0
- package/dist/editor/components/RetryToastMessage.js +6 -0
- package/dist/editor/components/SaveAllResult.d.ts +25 -0
- package/dist/editor/components/SaveAllResult.js +86 -0
- package/dist/editor/components/SaveSplitButton.d.ts +30 -0
- package/dist/editor/components/SaveSplitButton.js +108 -0
- package/dist/editor/components/StagedChangesDrawer.d.ts +39 -0
- package/dist/editor/components/StagedChangesDrawer.js +92 -0
- package/dist/editor/components/UnavailableEntryNotice.d.ts +6 -0
- package/dist/editor/components/UnavailableEntryNotice.js +9 -0
- package/dist/editor/components/UnavailableTypeMessage.d.ts +6 -0
- package/dist/editor/components/UnavailableTypeMessage.js +9 -0
- package/dist/editor/components/UndoToastMessage.d.ts +18 -0
- package/dist/editor/components/UndoToastMessage.js +10 -0
- package/dist/editor/components/UserBadge.d.ts +2 -5
- package/dist/editor/components/UserBadge.js +62 -33
- package/dist/editor/components/ValidationSummary.d.ts +14 -0
- package/dist/editor/components/ValidationSummary.js +24 -0
- package/dist/editor/components/index.d.ts +2 -2
- package/dist/editor/components/index.js +2 -2
- package/dist/editor/context/ApiClientContext.d.ts +8 -2
- package/dist/editor/context/ApiClientContext.js +19 -8
- package/dist/editor/context/AssetContext.d.ts +13 -35
- package/dist/editor/context/AssetContext.js +12 -31
- package/dist/editor/context/EditorStateContext.d.ts +4 -4
- package/dist/editor/context/EditorStateContext.js +4 -4
- package/dist/editor/context/SWRProvider.d.ts +3 -3
- package/dist/editor/context/SiteMdxAllowContext.d.ts +4 -0
- package/dist/editor/context/SiteMdxAllowContext.js +7 -0
- package/dist/editor/context/index.d.ts +2 -1
- package/dist/editor/context/index.js +2 -1
- package/dist/editor/contrast.d.ts +19 -0
- package/dist/editor/contrast.js +41 -0
- package/dist/editor/copy.d.ts +18 -0
- package/dist/editor/copy.js +18 -0
- package/dist/editor/editor-config.js +16 -0
- package/dist/editor/editor-utils.d.ts +34 -8
- package/dist/editor/editor-utils.js +42 -20
- package/dist/editor/entry-search.d.ts +20 -0
- package/dist/editor/entry-search.js +34 -0
- package/dist/editor/field-breadcrumb.d.ts +12 -0
- package/dist/editor/field-breadcrumb.js +85 -0
- package/dist/editor/field-props.d.ts +86 -0
- package/dist/editor/field-props.js +27 -0
- package/dist/editor/field-target.d.ts +30 -0
- package/dist/editor/field-target.js +77 -0
- package/dist/editor/fields/BlockField.d.ts +12 -0
- package/dist/editor/fields/BlockField.js +89 -73
- package/dist/editor/fields/CodeField.d.ts +2 -0
- package/dist/editor/fields/CodeField.js +6 -2
- package/dist/editor/fields/DateTimeField.d.ts +4 -29
- package/dist/editor/fields/DateTimeField.js +79 -41
- package/dist/editor/fields/ExpandAllButton.d.ts +6 -0
- package/dist/editor/fields/ExpandAllButton.js +4 -0
- package/dist/editor/fields/FieldCrashFallback.d.ts +17 -0
- package/dist/editor/fields/FieldCrashFallback.js +30 -0
- package/dist/editor/fields/FieldLabel.d.ts +37 -0
- package/dist/editor/fields/FieldLabel.js +19 -0
- package/dist/editor/fields/ImageField.d.ts +4 -0
- package/dist/editor/fields/ImageField.js +29 -14
- package/dist/editor/fields/InlineGroupField.js +4 -3
- package/dist/editor/fields/ItemList.d.ts +42 -0
- package/dist/editor/fields/ItemList.js +130 -0
- package/dist/editor/fields/MarkdownField.d.ts +32 -0
- package/dist/editor/fields/MarkdownField.js +223 -46
- package/dist/editor/fields/MdxImageDialog.js +1 -1
- package/dist/editor/fields/NumberField.d.ts +2 -0
- package/dist/editor/fields/NumberField.js +8 -5
- package/dist/editor/fields/NumberListField.d.ts +2 -0
- package/dist/editor/fields/NumberListField.js +19 -16
- package/dist/editor/fields/ObjectField.d.ts +2 -7
- package/dist/editor/fields/ObjectField.js +15 -5
- package/dist/editor/fields/ObjectListField.d.ts +29 -0
- package/dist/editor/fields/ObjectListField.js +57 -0
- package/dist/editor/fields/ReferenceField.d.ts +2 -0
- package/dist/editor/fields/ReferenceField.js +34 -9
- package/dist/editor/fields/SelectField.d.ts +2 -0
- package/dist/editor/fields/SelectField.js +11 -2
- package/dist/editor/fields/StringListField.d.ts +4 -1
- package/dist/editor/fields/StringListField.js +22 -8
- package/dist/editor/fields/TextField.d.ts +2 -0
- package/dist/editor/fields/TextField.js +6 -2
- package/dist/editor/fields/ToggleField.d.ts +2 -0
- package/dist/editor/fields/ToggleField.js +8 -3
- package/dist/editor/fields/entry-link/InsertEntryLink.d.ts +1 -1
- package/dist/editor/fields/entry-link/InsertEntryLink.js +1 -1
- package/dist/editor/fields/form-expansion.d.ts +9 -0
- package/dist/editor/fields/form-expansion.js +2 -0
- package/dist/editor/fields/item-expansion.d.ts +15 -0
- package/dist/editor/fields/item-expansion.js +60 -0
- package/dist/editor/fields/list-item-keys.d.ts +8 -0
- package/dist/editor/fields/list-item-keys.js +50 -0
- package/dist/editor/fields/list-item-title.d.ts +20 -0
- package/dist/editor/fields/list-item-title.js +85 -0
- package/dist/editor/fields/markdown-export-options.d.ts +2 -0
- package/dist/editor/fields/markdown-export-options.js +8 -0
- package/dist/editor/fields/markdown-fidelity-visitors.d.ts +11 -0
- package/dist/editor/fields/markdown-fidelity-visitors.js +160 -0
- package/dist/editor/fields/mdx-jsx-support.d.ts +5 -1
- package/dist/editor/fields/mdx-jsx-support.js +157 -69
- package/dist/editor/fields/rich-text-failures.d.ts +5 -0
- package/dist/editor/fields/rich-text-failures.js +26 -0
- package/dist/editor/fields/toolbar-wrap.d.ts +7 -0
- package/dist/editor/fields/toolbar-wrap.js +35 -0
- package/dist/editor/form-outline.d.ts +13 -0
- package/dist/editor/form-outline.js +70 -0
- package/dist/editor/group-manager/GroupCard.d.ts +4 -1
- package/dist/editor/group-manager/GroupCard.js +12 -3
- package/dist/editor/group-manager/GroupForm.js +1 -1
- package/dist/editor/group-manager/InternalGroupsTab.d.ts +2 -1
- package/dist/editor/group-manager/InternalGroupsTab.js +4 -4
- package/dist/editor/group-manager/MemberList.d.ts +2 -1
- package/dist/editor/group-manager/MemberList.js +15 -4
- package/dist/editor/group-manager/hooks/useGroupState.d.ts +5 -0
- package/dist/editor/group-manager/hooks/useGroupState.js +30 -7
- package/dist/editor/group-manager/index.js +34 -5
- package/dist/editor/group-manager/types.d.ts +5 -2
- package/dist/editor/hooks/create-branch-request.d.ts +20 -0
- package/dist/editor/hooks/create-branch-request.js +54 -0
- package/dist/editor/hooks/save-all.d.ts +68 -0
- package/dist/editor/hooks/save-all.js +61 -0
- package/dist/editor/hooks/useBranchActions.d.ts +11 -1
- package/dist/editor/hooks/useBranchActions.js +42 -19
- package/dist/editor/hooks/useBranchManager.d.ts +21 -0
- package/dist/editor/hooks/useBranchManager.js +321 -125
- package/dist/editor/hooks/useBranchesData.d.ts +8 -4
- package/dist/editor/hooks/useBranchesData.js +9 -5
- package/dist/editor/hooks/useCommentSystem.d.ts +14 -2
- package/dist/editor/hooks/useCommentSystem.js +79 -55
- package/dist/editor/hooks/useCommentsData.d.ts +11 -7
- package/dist/editor/hooks/useCommentsData.js +20 -19
- package/dist/editor/hooks/useDraftManager.d.ts +77 -3
- package/dist/editor/hooks/useDraftManager.js +887 -94
- package/dist/editor/hooks/useEditorLayout.d.ts +53 -7
- package/dist/editor/hooks/useEditorLayout.js +98 -20
- package/dist/editor/hooks/useEntriesData.d.ts +2 -1
- package/dist/editor/hooks/useEntriesData.js +18 -4
- package/dist/editor/hooks/useEntryManager.d.ts +41 -2
- package/dist/editor/hooks/useEntryManager.js +227 -41
- package/dist/editor/hooks/useGroupManager.js +13 -16
- package/dist/editor/hooks/usePermissionManager.js +14 -6
- package/dist/editor/hooks/usePreviewMarks.d.ts +21 -0
- package/dist/editor/hooks/usePreviewMarks.js +33 -0
- package/dist/editor/hooks/useReferenceResolution.d.ts +10 -3
- package/dist/editor/hooks/useReferenceResolution.js +34 -177
- package/dist/editor/hooks/useSchemaManager.d.ts +25 -6
- package/dist/editor/hooks/useSchemaManager.js +97 -39
- package/dist/editor/hooks/useUserMetadata.d.ts +14 -4
- package/dist/editor/hooks/useUserMetadata.js +76 -47
- package/dist/editor/hooks/user-metadata-batcher.d.ts +8 -0
- package/dist/editor/hooks/user-metadata-batcher.js +33 -0
- package/dist/editor/media/AssetCard.d.ts +6 -7
- package/dist/editor/media/AssetCard.js +24 -31
- package/dist/editor/media/AssetListRow.d.ts +16 -0
- package/dist/editor/media/AssetListRow.js +41 -0
- package/dist/editor/media/CropStep.js +6 -1
- package/dist/editor/media/MediaLibrary.d.ts +4 -3
- package/dist/editor/media/MediaLibrary.js +11 -4
- package/dist/editor/media/MediaLibraryBody.d.ts +3 -3
- package/dist/editor/media/MediaLibraryBody.js +195 -80
- package/dist/editor/media/MediaLibrarySkeleton.d.ts +6 -0
- package/dist/editor/media/MediaLibrarySkeleton.js +14 -0
- package/dist/editor/media/crop-math.d.ts +3 -4
- package/dist/editor/media/crop-math.js +11 -22
- package/dist/editor/media/editor-image-src.d.ts +8 -0
- package/dist/editor/media/editor-image-src.js +10 -0
- package/dist/editor/media/format-bytes.d.ts +2 -0
- package/dist/editor/media/format-bytes.js +23 -0
- package/dist/editor/media/media-library-prefs.d.ts +23 -0
- package/dist/editor/media/media-library-prefs.js +49 -0
- package/dist/editor/media/media-library-view.d.ts +34 -0
- package/dist/editor/media/media-library-view.js +40 -0
- package/dist/editor/media/useAssetLibrary.d.ts +30 -0
- package/dist/editor/media/useAssetLibrary.js +126 -0
- package/dist/editor/media/useStableAssetOrder.d.ts +11 -0
- package/dist/editor/media/useStableAssetOrder.js +37 -0
- package/dist/editor/media/useThumbnailFailure.d.ts +6 -0
- package/dist/editor/media/useThumbnailFailure.js +16 -0
- package/dist/editor/permission-manager/GroupSelector.js +2 -2
- package/dist/editor/permission-manager/PermissionEditor.d.ts +1 -1
- package/dist/editor/permission-manager/PermissionEditor.js +15 -4
- package/dist/editor/permission-manager/PermissionLevelBadge.js +1 -1
- package/dist/editor/permission-manager/PermissionTree.d.ts +1 -1
- package/dist/editor/permission-manager/UserSelector.d.ts +1 -1
- package/dist/editor/permission-manager/UserSelector.js +3 -3
- package/dist/editor/permission-manager/index.js +12 -3
- package/dist/editor/permission-manager/types.d.ts +5 -2
- package/dist/editor/platform.d.ts +3 -0
- package/dist/editor/platform.js +9 -0
- package/dist/editor/preview-asset-base.d.ts +9 -0
- package/dist/editor/preview-asset-base.js +17 -0
- package/dist/editor/preview-bridge.d.ts +51 -27
- package/dist/editor/preview-bridge.js +103 -144
- package/dist/editor/preview-marks.d.ts +15 -0
- package/dist/editor/preview-marks.js +74 -0
- package/dist/editor/preview-path.d.ts +12 -0
- package/dist/editor/preview-path.js +45 -1
- package/dist/editor/preview-scale.d.ts +27 -0
- package/dist/editor/preview-scale.js +34 -0
- package/dist/editor/raw-asset-base.d.ts +5 -0
- package/dist/editor/raw-asset-base.js +14 -0
- package/dist/editor/relative-time.d.ts +4 -4
- package/dist/editor/relative-time.js +16 -8
- package/dist/editor/schema-editor/CollectionEditor.d.ts +20 -3
- package/dist/editor/schema-editor/CollectionEditor.js +361 -62
- package/dist/editor/schema-editor/EntryTypeEditor.d.ts +5 -1
- package/dist/editor/schema-editor/EntryTypeEditor.js +11 -6
- package/dist/editor/schema-editor/collection-draft.d.ts +22 -0
- package/dist/editor/schema-editor/collection-draft.js +40 -0
- package/dist/editor/schema-editor/index.d.ts +1 -1
- package/dist/editor/schema-label.d.ts +10 -0
- package/dist/editor/schema-label.js +17 -0
- package/dist/editor/settings-conflict.d.ts +5 -0
- package/dist/editor/settings-conflict.js +8 -0
- package/dist/editor/shell/ActivityRail.d.ts +37 -0
- package/dist/editor/shell/ActivityRail.js +91 -0
- package/dist/editor/shell/EditorShell.d.ts +17 -0
- package/dist/editor/shell/EditorShell.js +31 -0
- package/dist/editor/shell/PaneLayout.d.ts +28 -0
- package/dist/editor/shell/PaneLayout.js +116 -0
- package/dist/editor/shell/SidePanelHost.d.ts +35 -0
- package/dist/editor/shell/SidePanelHost.js +184 -0
- package/dist/editor/shell/TopBar.d.ts +12 -0
- package/dist/editor/shell/TopBar.js +14 -0
- package/dist/editor/shell/host-chrome.d.ts +16 -0
- package/dist/editor/shell/host-chrome.js +69 -0
- package/dist/editor/slug.d.ts +16 -0
- package/dist/editor/slug.js +43 -0
- package/dist/editor/theme.d.ts +2 -1
- package/dist/editor/theme.js +314 -13
- package/dist/editor/unanswered.d.ts +17 -0
- package/dist/editor/unanswered.js +26 -0
- package/dist/editor/unavailable-entry-type.d.ts +20 -0
- package/dist/editor/unavailable-entry-type.js +28 -0
- package/dist/editor/undo-removal.d.ts +57 -0
- package/dist/editor/undo-removal.js +163 -0
- package/dist/editor/user-display.d.ts +4 -0
- package/dist/editor/user-display.js +5 -0
- package/dist/editor/utils/confirm-modal.d.ts +8 -0
- package/dist/editor/utils/confirm-modal.js +12 -0
- package/dist/editor/utils/editor-errors.d.ts +19 -0
- package/dist/editor/utils/editor-errors.js +32 -0
- package/dist/editor/utils/focus-return.d.ts +56 -0
- package/dist/editor/utils/focus-return.js +106 -0
- package/dist/entry-link-resolver.d.ts +11 -1
- package/dist/entry-link-resolver.js +65 -5
- package/dist/entry-schema-registry.d.ts +3 -3
- package/dist/entry-schema-registry.js +7 -4
- package/dist/entry-schema.d.ts +49 -3
- package/dist/entry-schema.js +18 -0
- package/dist/git-manager.d.ts +172 -10
- package/dist/git-manager.js +449 -107
- package/dist/github-service.d.ts +39 -2
- package/dist/github-service.js +101 -7
- package/dist/http/handler.js +74 -9
- package/dist/http/types.d.ts +2 -0
- package/dist/http/worker-not-ready.d.ts +9 -4
- package/dist/http/worker-not-ready.js +59 -6
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/item-keys.d.ts +46 -0
- package/dist/item-keys.js +235 -0
- package/dist/operating-mode/editor-mode-check.d.ts +15 -0
- package/dist/operating-mode/editor-mode-check.js +24 -0
- package/dist/operating-mode/mode-env.d.ts +13 -14
- package/dist/operating-mode/mode-env.js +13 -14
- package/dist/operating-mode/types.d.ts +2 -2
- package/dist/paths/branch.d.ts +0 -1
- package/dist/paths/branch.js +1 -8
- package/dist/paths/index.d.ts +1 -1
- package/dist/paths/index.js +1 -1
- package/dist/paths/validation.js +0 -2
- package/dist/preview.d.ts +8 -0
- package/dist/preview.js +7 -0
- package/dist/reference-resolver.js +1 -0
- package/dist/resolve-canopy-user.d.ts +1 -1
- package/dist/resolve-canopy-user.js +1 -1
- package/dist/schema/meta-loader.d.ts +18 -8
- package/dist/schema/meta-loader.js +42 -9
- package/dist/schema/registry-fingerprint.d.ts +14 -0
- package/dist/schema/registry-fingerprint.js +63 -0
- package/dist/schema/resolver.d.ts +7 -4
- package/dist/schema/resolver.js +7 -6
- package/dist/schema/schema-store.d.ts +7 -10
- package/dist/schema/schema-store.js +13 -11
- package/dist/schema/schema-unavailable-error.d.ts +11 -0
- package/dist/schema/schema-unavailable-error.js +15 -0
- package/dist/schema/types.d.ts +22 -0
- package/dist/schema-registry-record.d.ts +35 -0
- package/dist/schema-registry-record.js +134 -0
- package/dist/server.d.ts +79 -9
- package/dist/server.js +62 -8
- package/dist/services.d.ts +33 -5
- package/dist/services.js +155 -37
- package/dist/settings-workspace.d.ts +23 -3
- package/dist/settings-workspace.js +159 -45
- package/dist/stamp-on-publish.d.ts +36 -0
- package/dist/stamp-on-publish.js +71 -0
- package/dist/static/index.d.ts +58 -5
- package/dist/static/index.js +133 -3
- package/dist/static/seo.d.ts +5 -5
- package/dist/static/seo.js +5 -5
- package/dist/submission-attribution.d.ts +8 -0
- package/dist/submission-attribution.js +22 -0
- package/dist/system-users.d.ts +12 -0
- package/dist/system-users.js +12 -0
- package/dist/task-queue/cms-task-queue.d.ts +1 -1
- package/dist/task-queue/cms-task-queue.js +1 -1
- package/dist/task-queue/index.d.ts +1 -1
- package/dist/task-queue/index.js +1 -1
- package/dist/task-queue/task-queue.d.ts +6 -0
- package/dist/task-queue/task-queue.js +29 -0
- package/dist/task-queue/worker-status.d.ts +35 -9
- package/dist/task-queue/worker-status.js +84 -17
- package/dist/types.d.ts +90 -9
- package/dist/url-collision.js +3 -3
- package/dist/url-exclusivity-fixtures.d.ts +8 -1
- package/dist/url-exclusivity-fixtures.js +11 -1
- package/dist/user.js +2 -1
- package/dist/utils/atomic-write.js +2 -1
- package/dist/utils/base-branch.d.ts +13 -0
- package/dist/utils/base-branch.js +23 -0
- package/dist/utils/content-serialize.d.ts +15 -7
- package/dist/utils/content-serialize.js +353 -51
- package/dist/utils/content-write-lock.d.ts +6 -1
- package/dist/utils/content-write-lock.js +21 -6
- package/dist/utils/debug.d.ts +1 -1
- package/dist/utils/debug.js +5 -3
- package/dist/utils/error.js +13 -2
- package/dist/utils/escape-text.d.ts +7 -0
- package/dist/utils/escape-text.js +27 -0
- package/dist/utils/fs.d.ts +12 -4
- package/dist/utils/fs.js +18 -5
- package/dist/utils/git.d.ts +21 -1
- package/dist/utils/git.js +63 -8
- package/dist/utils/json-source-splice.d.ts +14 -0
- package/dist/utils/json-source-splice.js +120 -0
- package/dist/utils/markdown-body-splice.d.ts +39 -0
- package/dist/utils/markdown-body-splice.js +421 -0
- package/dist/utils/occ-json-write.js +18 -12
- package/dist/utils/provision-log.d.ts +25 -0
- package/dist/utils/provision-log.js +49 -0
- package/dist/utils/provisioning-lock.d.ts +32 -1
- package/dist/utils/provisioning-lock.js +78 -32
- package/dist/utils/sanitize-href.d.ts +9 -23
- package/dist/utils/sanitize-href.js +14 -28
- package/dist/utils/title-field.d.ts +10 -0
- package/dist/utils/title-field.js +47 -0
- package/dist/utils/yaml-source-splice.d.ts +58 -0
- package/dist/utils/yaml-source-splice.js +515 -0
- package/dist/validation/block-structural-keys.d.ts +1 -1
- package/dist/validation/block-structural-keys.js +1 -1
- package/dist/validation/deletion-checker.d.ts +21 -29
- package/dist/validation/deletion-checker.js +41 -117
- package/dist/validation/entry-validator.d.ts +6 -10
- package/dist/validation/entry-validator.js +19 -26
- package/dist/validation/field-traversal.d.ts +22 -0
- package/dist/validation/field-traversal.js +39 -8
- package/dist/validation/markdown-safety.d.ts +68 -0
- package/dist/validation/markdown-safety.js +596 -0
- package/dist/validation/mdx-allowlist.d.ts +55 -0
- package/dist/validation/mdx-allowlist.js +183 -0
- package/dist/validation/reference-validator.d.ts +2 -0
- package/dist/validation/reference-validator.js +3 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker/branch-policy.d.ts +124 -0
- package/dist/worker/branch-policy.js +243 -0
- package/dist/worker/bundle-header.d.ts +117 -0
- package/dist/worker/bundle-header.js +253 -0
- package/dist/worker/cms-worker.d.ts +236 -142
- package/dist/worker/cms-worker.js +772 -285
- package/dist/worker/gateway-egress.d.ts +43 -0
- package/dist/worker/gateway-egress.js +209 -0
- package/dist/worker/gateway-instance.d.ts +42 -0
- package/dist/worker/gateway-instance.js +129 -0
- package/dist/worker/git-process.d.ts +81 -0
- package/dist/worker/git-process.js +234 -0
- package/dist/worker/git-sync.d.ts +34 -17
- package/dist/worker/git-sync.js +394 -131
- package/dist/worker/github-auth.d.ts +9 -9
- package/dist/worker/github-auth.js +13 -15
- package/dist/worker/github-gateway-http.d.ts +62 -0
- package/dist/worker/github-gateway-http.js +977 -0
- package/dist/worker/github-gateway-wire.d.ts +590 -0
- package/dist/worker/github-gateway-wire.js +488 -0
- package/dist/worker/github-gateway.d.ts +238 -0
- package/dist/worker/github-gateway.js +726 -0
- package/dist/worker/github-mirror-upkeep.d.ts +75 -0
- package/dist/worker/github-mirror-upkeep.js +266 -0
- package/dist/worker/github-mirror.d.ts +364 -0
- package/dist/worker/github-mirror.js +1030 -0
- package/dist/worker/github-transfer.d.ts +56 -0
- package/dist/worker/github-transfer.js +444 -0
- package/dist/worker/history-rewrite.d.ts +4 -5
- package/dist/worker/history-rewrite.js +12 -17
- package/dist/worker/provisioned-workspace.d.ts +5 -5
- package/dist/worker/provisioned-workspace.js +5 -5
- package/dist/worker/rebase.d.ts +1 -1
- package/dist/worker/rebase.js +58 -54
- package/dist/worker/remote-git-maintenance.d.ts +3 -0
- package/dist/worker/remote-git-maintenance.js +12 -0
- package/dist/worker/schema-gate.d.ts +49 -0
- package/dist/worker/schema-gate.js +226 -0
- package/dist/worker/self-checks.d.ts +107 -0
- package/dist/worker/self-checks.js +358 -0
- package/dist/worker/shared-repo-git.d.ts +96 -0
- package/dist/worker/shared-repo-git.js +459 -0
- package/dist/worker/sparse-cone.d.ts +20 -0
- package/dist/worker/sparse-cone.js +136 -0
- package/dist/worker/stale-mirror.d.ts +82 -0
- package/dist/worker/stale-mirror.js +130 -0
- package/dist/worker/task-runner.d.ts +5 -3
- package/dist/worker/task-runner.js +287 -186
- package/dist/worker/worker-context.d.ts +36 -37
- package/package.json +35 -7
- package/dist/editor/EditorPanes.d.ts +0 -10
- package/dist/editor/EditorPanes.js +0 -98
- package/dist/editor/components/EditorFooter.d.ts +0 -11
- package/dist/editor/components/EditorFooter.js +0 -9
- package/dist/editor/components/EditorSidebar.d.ts +0 -67
- package/dist/editor/components/EditorSidebar.js +0 -22
package/dist/api/branch.d.ts
CHANGED
|
@@ -2,10 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import type { BranchContext, BranchMetadata } from '../types.js';
|
|
3
3
|
import type { ApiContext, ApiRequest, ApiResponse } from './types.js';
|
|
4
4
|
import { branchParamSchema } from './validators.js';
|
|
5
|
-
|
|
6
|
-
export type BranchResponse = ApiResponse<{
|
|
7
|
-
branch: BranchMetadata;
|
|
8
|
-
}>;
|
|
5
|
+
import type { UserProfile } from '../auth/types.js';
|
|
9
6
|
/**
|
|
10
7
|
* A listed branch plus server-computed protected-base-branch flags (see
|
|
11
8
|
* authorization/protected-branch.ts). Optional on the wire, matching the
|
|
@@ -44,13 +41,21 @@ export interface BranchListItem extends BranchMetadata {
|
|
|
44
41
|
* archived non-base branch.
|
|
45
42
|
*/
|
|
46
43
|
submitBlocked?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* How many ACL entries {@link toBranchListItem} left out of `access` for a caller without the
|
|
46
|
+
* privileged user lookup. Absent for a privileged caller, who gets the whole list.
|
|
47
|
+
*/
|
|
48
|
+
withheldAccess?: {
|
|
49
|
+
users: number;
|
|
50
|
+
groups: number;
|
|
51
|
+
};
|
|
47
52
|
}
|
|
48
53
|
/**
|
|
49
|
-
* Response type for branch creation
|
|
50
|
-
* flags included) so the editor can
|
|
51
|
-
* listing that may lag behind
|
|
54
|
+
* Response type for branch creation and the workflow transitions. Carries the
|
|
55
|
+
* list-item shape (server-computed flags included) so the editor can show the
|
|
56
|
+
* result without waiting for a listing that may lag behind it.
|
|
52
57
|
*/
|
|
53
|
-
export type
|
|
58
|
+
export type BranchListItemResponse = ApiResponse<{
|
|
54
59
|
branch: BranchListItem;
|
|
55
60
|
}>;
|
|
56
61
|
/** Response type for listing branches */
|
|
@@ -62,6 +67,8 @@ export type BranchListResponse = ApiResponse<{
|
|
|
62
67
|
* Optional on the wire so older servers remain compatible.
|
|
63
68
|
*/
|
|
64
69
|
defaultBranch?: string;
|
|
70
|
+
/** Profiles of the listed branches' creators, in no order; unknown ids are absent. */
|
|
71
|
+
users: UserProfile[];
|
|
65
72
|
}>;
|
|
66
73
|
/** Response type for branch deletion */
|
|
67
74
|
export type BranchDeleteResponse = ApiResponse<{
|
|
@@ -137,8 +144,14 @@ export interface CreateBranchBody {
|
|
|
137
144
|
description?: string;
|
|
138
145
|
access?: BranchMetadata['access'];
|
|
139
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* A branch as `viewer` may see it, with server-computed protected-base-branch flags. Every
|
|
149
|
+
* branch response outside the admin-only repairs goes through here. Reads config per call so
|
|
150
|
+
* dev-mode refreshActiveBranch() updates are reflected.
|
|
151
|
+
*/
|
|
152
|
+
export declare const toBranchListItem: (config: ApiContext["services"]["config"], branch: BranchMetadata, viewer: CanopyUser) => BranchListItem;
|
|
140
153
|
/** @internal Exported for tests. */
|
|
141
|
-
export declare const createBranchHandler: (ctx: ApiContext, req: ApiRequest, body: z.infer<typeof createBranchBodySchema>) => Promise<
|
|
154
|
+
export declare const createBranchHandler: (ctx: ApiContext, req: ApiRequest, body: z.infer<typeof createBranchBodySchema>) => Promise<BranchListItemResponse>;
|
|
142
155
|
/** @internal Exported for tests. */
|
|
143
156
|
export declare const listBranchesHandler: (ctx: ApiContext, req: ApiRequest) => Promise<BranchListResponse>;
|
|
144
157
|
/** @internal Exported for tests. */
|
|
@@ -158,7 +171,7 @@ export declare const canModifyBranchAccess: (user: CanopyUser, branchContext: Br
|
|
|
158
171
|
reason: string;
|
|
159
172
|
};
|
|
160
173
|
/** @internal Exported for tests. */
|
|
161
|
-
export declare const updateBranchAccessHandler: (ctx: ApiContext, req: ApiRequest, params: z.infer<typeof branchParamSchema>, body: z.infer<typeof updateBranchAccessBodySchema>) => Promise<
|
|
174
|
+
export declare const updateBranchAccessHandler: (ctx: ApiContext, req: ApiRequest, params: z.infer<typeof branchParamSchema>, body: z.infer<typeof updateBranchAccessBodySchema>) => Promise<BranchListItemResponse>;
|
|
162
175
|
export declare const BRANCH_ROUTES: {
|
|
163
176
|
readonly list: import("./route-builder.js").RouteDefinition<undefined, undefined, BranchListResponse>;
|
|
164
177
|
readonly create: import("./route-builder.js").RouteDefinition<undefined, z.ZodObject<{
|
|
@@ -195,7 +208,7 @@ export declare const BRANCH_ROUTES: {
|
|
|
195
208
|
allowedUsers?: string[] | undefined;
|
|
196
209
|
allowedGroups?: string[] | undefined;
|
|
197
210
|
} | undefined;
|
|
198
|
-
}>,
|
|
211
|
+
}>, BranchListItemResponse>;
|
|
199
212
|
readonly delete: import("./route-builder.js").RouteDefinition<z.ZodObject<{
|
|
200
213
|
branch: z.ZodType<import("../paths/index.js").BranchName, z.ZodTypeDef, import("../paths/index.js").BranchName>;
|
|
201
214
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -226,6 +239,6 @@ export declare const BRANCH_ROUTES: {
|
|
|
226
239
|
}, {
|
|
227
240
|
allowedUsers?: string[] | undefined;
|
|
228
241
|
allowedGroups?: string[] | undefined;
|
|
229
|
-
}>,
|
|
242
|
+
}>, BranchListItemResponse>;
|
|
230
243
|
};
|
|
231
244
|
export {};
|
package/dist/api/branch.js
CHANGED
|
@@ -2,8 +2,10 @@ import fs from 'node:fs/promises';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { BranchWorkspaceManager } from '../branch-workspace.js';
|
|
5
|
+
import { BranchDirOccupiedError, BranchProvisioningBusyError, deletingDirName, removeLeftoverDir, } from '../branch-provisioning.js';
|
|
5
6
|
import { getBranchMetadataFileManager } from '../branch-metadata.js';
|
|
6
7
|
import { withOccFileLock } from '../utils/occ-json-write.js';
|
|
8
|
+
import { isCreatorsRecentBranch } from './branch-create-window.js';
|
|
7
9
|
import { defineEndpoint } from './route-builder.js';
|
|
8
10
|
import { createDebugLogger } from '../utils/debug.js';
|
|
9
11
|
import { clientOperatingStrategy } from '../operating-mode/index.js';
|
|
@@ -12,7 +14,10 @@ import { filePathExists } from '../utils/fs.js';
|
|
|
12
14
|
import { isNetworkRemoteUrl } from '../utils/git.js';
|
|
13
15
|
import { sanitizeBranchName, RESERVED_SETTINGS_BRANCH_PREFIX, RESERVED_ROUTE_BRANCH_NAMES, isSettingsBranchName, } from '../paths/index.js';
|
|
14
16
|
import { GitManager } from '../git-manager.js';
|
|
17
|
+
import { syncDeleteRemoteBranch } from './github-sync.js';
|
|
15
18
|
import { branchNameSchema, branchParamSchema } from './validators.js';
|
|
19
|
+
import { baseBranchOf } from '../utils/base-branch.js';
|
|
20
|
+
import { lookupUserProfiles } from '../auth/user-metadata-lookup.js';
|
|
16
21
|
const log = createDebugLogger({ prefix: 'BranchAPI' });
|
|
17
22
|
const createBranchBodySchema = z.object({
|
|
18
23
|
branch: branchNameSchema,
|
|
@@ -29,7 +34,7 @@ const updateBranchAccessBodySchema = z.object({
|
|
|
29
34
|
allowedUsers: z.array(z.string()).optional(),
|
|
30
35
|
allowedGroups: z.array(z.string()).optional(),
|
|
31
36
|
});
|
|
32
|
-
import { isPrivileged, isAdmin, loadPathPermissions, getBranchProtection, getBranchWriteProtection, } from '../authorization/index.js';
|
|
37
|
+
import { isPrivileged, isAdmin, isLockedOutOfBranch, loadPathPermissions, getBranchProtection, getBranchWriteProtection, } from '../authorization/index.js';
|
|
33
38
|
import { operatingStrategy } from '../operating-mode/index.js';
|
|
34
39
|
/**
|
|
35
40
|
* Returns true if:
|
|
@@ -88,13 +93,38 @@ const resolveReadOnlyMirrorPath = (ctx, strategy) => {
|
|
|
88
93
|
remoteUrlConfig.autoDetectRemotePath);
|
|
89
94
|
};
|
|
90
95
|
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
96
|
+
* The ACL as `viewer` may see it. Without the privileged user lookup, a caller gets only the
|
|
97
|
+
* entries naming them or their groups, which is all the editor's membership checks read, and a
|
|
98
|
+
* count of the rest: the other ids name people that lookup keeps from them.
|
|
93
99
|
*/
|
|
94
|
-
const
|
|
95
|
-
|
|
100
|
+
const accessForViewer = (access, viewer) => {
|
|
101
|
+
if (isPrivileged(viewer.groups))
|
|
102
|
+
return { access };
|
|
103
|
+
const viewerGroups = viewer.groups ?? [];
|
|
104
|
+
const allowedUsers = access.allowedUsers?.filter((id) => id === viewer.userId);
|
|
105
|
+
const allowedGroups = access.allowedGroups?.filter((id) => viewerGroups.includes(id));
|
|
96
106
|
return {
|
|
97
|
-
|
|
107
|
+
access: {
|
|
108
|
+
...access,
|
|
109
|
+
...(allowedUsers && { allowedUsers }),
|
|
110
|
+
...(allowedGroups && { allowedGroups }),
|
|
111
|
+
},
|
|
112
|
+
withheldAccess: {
|
|
113
|
+
users: (access.allowedUsers?.length ?? 0) - (allowedUsers?.length ?? 0),
|
|
114
|
+
groups: (access.allowedGroups?.length ?? 0) - (allowedGroups?.length ?? 0),
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* A branch as `viewer` may see it, with server-computed protected-base-branch flags. Every
|
|
120
|
+
* branch response outside the admin-only repairs goes through here. Reads config per call so
|
|
121
|
+
* dev-mode refreshActiveBranch() updates are reflected.
|
|
122
|
+
*/
|
|
123
|
+
export const toBranchListItem = (config, branch, viewer) => {
|
|
124
|
+
const protection = getBranchWriteProtection(config, branch.name, branch.baseBranch, branch.status);
|
|
125
|
+
return {
|
|
126
|
+
...branch,
|
|
127
|
+
...accessForViewer(branch.access ?? {}, viewer),
|
|
98
128
|
isProtected: protection.isProtected,
|
|
99
129
|
readOnly: protection.readOnly,
|
|
100
130
|
writeBlocked: protection.writeBlocked,
|
|
@@ -165,13 +195,9 @@ export const createBranchHandler = async (ctx, req, body) => {
|
|
|
165
195
|
error: `Branch name "${branchName}" is reserved: it collides with the /${branchName} API route namespace`,
|
|
166
196
|
};
|
|
167
197
|
}
|
|
168
|
-
// Reject the base branch name outright
|
|
169
|
-
//
|
|
170
|
-
//
|
|
171
|
-
// naming the base branch would let the caller inject themselves into the
|
|
172
|
-
// protected base branch's ACL (gaining e.g. withdraw rights via the
|
|
173
|
-
// allowed_by_acl path). No recorded fork point exists yet for a
|
|
174
|
-
// not-yet-created branch, so this checks config protection only.
|
|
198
|
+
// Reject the base branch name outright, even before the base branch is
|
|
199
|
+
// provisioned. No recorded fork point exists yet for a not-yet-created
|
|
200
|
+
// branch, so this checks config protection only.
|
|
175
201
|
const { isProtected } = getBranchProtection(ctx.services.config, branchName);
|
|
176
202
|
if (isProtected) {
|
|
177
203
|
return {
|
|
@@ -180,14 +206,10 @@ export const createBranchHandler = async (ctx, req, body) => {
|
|
|
180
206
|
error: 'Cannot create a branch with the base branch name',
|
|
181
207
|
};
|
|
182
208
|
}
|
|
183
|
-
//
|
|
184
|
-
//
|
|
185
|
-
//
|
|
186
|
-
//
|
|
187
|
-
// since that's what's persisted in branch.json (see
|
|
188
|
-
// BranchWorkspaceManager.openOrCreateBranch). System branches
|
|
189
|
-
// auto-provisioned via http/handler.ts's getBranchContext don't go
|
|
190
|
-
// through this handler, so rejecting collisions here doesn't affect them.
|
|
209
|
+
// A name collision with ANY existing branch answers before a clone is paid
|
|
210
|
+
// for. Provisioning never merges into an existing branch either: it reports
|
|
211
|
+
// `exists`, mapped the same way below. Compared sanitized, the form
|
|
212
|
+
// branch.json records.
|
|
191
213
|
if (!ctx.services.registry) {
|
|
192
214
|
return {
|
|
193
215
|
ok: false,
|
|
@@ -197,11 +219,7 @@ export const createBranchHandler = async (ctx, req, body) => {
|
|
|
197
219
|
}
|
|
198
220
|
const existingBranch = await ctx.services.registry.get(sanitizeBranchName(branchName));
|
|
199
221
|
if (existingBranch) {
|
|
200
|
-
return
|
|
201
|
-
ok: false,
|
|
202
|
-
status: 409,
|
|
203
|
-
error: 'A branch with this name already exists',
|
|
204
|
-
};
|
|
222
|
+
return existingBranchResponse(ctx, req, existingBranch);
|
|
205
223
|
}
|
|
206
224
|
// L2: create-time collision check against this deployment's local
|
|
207
225
|
// GitHub mirror (`remote.git`). The CMS Lambda has no internet access
|
|
@@ -210,7 +228,7 @@ export const createBranchHandler = async (ctx, req, body) => {
|
|
|
210
228
|
// is BOTH this deployment's local git origin AND a mirror of GitHub's
|
|
211
229
|
// view of the repo: worker/git-sync.ts's syncGit() fetches GitHub into it
|
|
212
230
|
// (see GITHUB_TRACKING_REF_PREFIX's doc comment in git-manager.ts) and
|
|
213
|
-
// then reconciles refs/heads/*
|
|
231
|
+
// then reconciles refs/heads/* without touching editor work, so it carries both
|
|
214
232
|
// this deployment's local heads and GitHub's view -- readable offline by
|
|
215
233
|
// this same Lambda, since it resolves to the same EFS inode the worker
|
|
216
234
|
// uses. Reading it here catches a sanitized-name collision with a branch
|
|
@@ -272,14 +290,14 @@ export const createBranchHandler = async (ctx, req, body) => {
|
|
|
272
290
|
// deleteBranchHandler's cleanup (below) handles the common case, but
|
|
273
291
|
// cannot cover every ordering: when the branch still existed on
|
|
274
292
|
// GitHub at editor-delete time, the sync loop's reconcile re-creates
|
|
275
|
-
// the local head from
|
|
276
|
-
// GitHub side is later deleted
|
|
277
|
-
//
|
|
278
|
-
//
|
|
279
|
-
//
|
|
280
|
-
//
|
|
281
|
-
//
|
|
282
|
-
//
|
|
293
|
+
// the local head from GitHub's branch within a cycle, and once the
|
|
294
|
+
// GitHub side is later deleted that re-created head stays until the
|
|
295
|
+
// sync loop's next prune, with no registry entry left for the delete
|
|
296
|
+
// path to run against. Healing at REUSE time covers every ordering,
|
|
297
|
+
// however the head got orphaned: the registry check above already
|
|
298
|
+
// proved no live branch owns this name, and the tracking check just
|
|
299
|
+
// proved GitHub doesn't either, so a remaining local head is stale by
|
|
300
|
+
// definition. Best-effort (old-value-guarded
|
|
283
301
|
// against a concurrent push): on failure, creation still proceeds --
|
|
284
302
|
// that is today's status quo, and the publish-time 409 message names
|
|
285
303
|
// this cause.
|
|
@@ -309,7 +327,7 @@ export const createBranchHandler = async (ctx, req, body) => {
|
|
|
309
327
|
// Load path permissions from the base branch's JSON file (the resolved
|
|
310
328
|
// fork point — baked into config at service creation; dev-mode git HEAD
|
|
311
329
|
// when not explicitly configured)
|
|
312
|
-
const baseBranch = ctx.services.config
|
|
330
|
+
const baseBranch = baseBranchOf(ctx.services.config);
|
|
313
331
|
const baseBranchContext = await ctx.getBranchContext(baseBranch);
|
|
314
332
|
let pathPermissions = [];
|
|
315
333
|
if (baseBranchContext) {
|
|
@@ -326,23 +344,47 @@ export const createBranchHandler = async (ctx, req, body) => {
|
|
|
326
344
|
};
|
|
327
345
|
}
|
|
328
346
|
const manager = new BranchWorkspaceManager(ctx.services.config);
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
347
|
+
let outcome;
|
|
348
|
+
try {
|
|
349
|
+
outcome = await manager.provisionBranch({
|
|
350
|
+
branchName,
|
|
351
|
+
mode: ctx.services.config.mode,
|
|
352
|
+
createdBy: req.user.userId,
|
|
353
|
+
title: body.title,
|
|
354
|
+
description: body.description,
|
|
355
|
+
access: body.access,
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
catch (err) {
|
|
359
|
+
if (err instanceof BranchProvisioningBusyError) {
|
|
360
|
+
return { ok: false, status: 503, error: err.message };
|
|
361
|
+
}
|
|
362
|
+
if (err instanceof BranchDirOccupiedError) {
|
|
363
|
+
return { ok: false, status: 409, error: err.message };
|
|
364
|
+
}
|
|
365
|
+
throw err;
|
|
366
|
+
}
|
|
367
|
+
if (outcome.kind === 'exists')
|
|
368
|
+
return existingBranchResponse(ctx, req, outcome.context);
|
|
369
|
+
log.debug('api', 'Branch created', { branchName: outcome.context.branch.name });
|
|
339
370
|
return {
|
|
340
371
|
ok: true,
|
|
341
372
|
status: 200,
|
|
342
|
-
data: { branch: toBranchListItem(ctx.services.config, context) },
|
|
373
|
+
data: { branch: toBranchListItem(ctx.services.config, outcome.context.branch, req.user) },
|
|
343
374
|
};
|
|
344
375
|
});
|
|
345
376
|
};
|
|
377
|
+
/** A create that names an existing branch: 409, unless it is that creator's recent retry. */
|
|
378
|
+
const existingBranchResponse = (ctx, req, existing) => {
|
|
379
|
+
if (isCreatorsRecentBranch(existing.branch, req.user.userId)) {
|
|
380
|
+
return {
|
|
381
|
+
ok: true,
|
|
382
|
+
status: 200,
|
|
383
|
+
data: { branch: toBranchListItem(ctx.services.config, existing.branch, req.user) },
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
return { ok: false, status: 409, error: 'A branch with this name already exists' };
|
|
387
|
+
};
|
|
346
388
|
/** @internal Exported for tests. */
|
|
347
389
|
export const listBranchesHandler = async (ctx, req) => {
|
|
348
390
|
if (!ctx.services.registry) {
|
|
@@ -362,21 +404,18 @@ export const listBranchesHandler = async (ctx, req) => {
|
|
|
362
404
|
// but registry branch names are filesystem-sanitized ('claude-foo') — the
|
|
363
405
|
// editor matches defaultBranch against registry names, so return the form
|
|
364
406
|
// that can actually be found there.
|
|
365
|
-
const defaultBranch = sanitizeBranchName(ctx.services.config.defaultActiveBranch ?? ctx.services.config
|
|
407
|
+
const defaultBranch = sanitizeBranchName(ctx.services.config.defaultActiveBranch ?? baseBranchOf(ctx.services.config));
|
|
366
408
|
// Admins and Reviewers see all branches
|
|
367
409
|
if (isPrivileged(req.user.groups)) {
|
|
368
|
-
return
|
|
369
|
-
ok: true,
|
|
370
|
-
status: 200,
|
|
371
|
-
data: {
|
|
372
|
-
branches: allBranches.map((context) => toBranchListItem(ctx.services.config, context)),
|
|
373
|
-
defaultBranch,
|
|
374
|
-
},
|
|
375
|
-
};
|
|
410
|
+
return branchListResponse(ctx, req, allBranches, defaultBranch);
|
|
376
411
|
}
|
|
377
|
-
// Regular users
|
|
412
|
+
// Regular users see the base branch and the branches they created or were given access to
|
|
378
413
|
const visibleBranches = allBranches.filter((context) => {
|
|
379
414
|
const branch = context.branch;
|
|
415
|
+
// Ahead of every grant below, as in checkBranchAccessWithDefault.
|
|
416
|
+
if (isLockedOutOfBranch(branch.access, req.user.groups)) {
|
|
417
|
+
return false;
|
|
418
|
+
}
|
|
380
419
|
// The protected base branch is where every user lands by default; always
|
|
381
420
|
// show it (read-only) so the editor can render its protected state.
|
|
382
421
|
if (getBranchProtection(ctx.services.config, branch.name, branch.baseBranch).isProtected) {
|
|
@@ -396,12 +435,30 @@ export const listBranchesHandler = async (ctx, req) => {
|
|
|
396
435
|
}
|
|
397
436
|
return false;
|
|
398
437
|
});
|
|
438
|
+
return branchListResponse(ctx, req, visibleBranches, defaultBranch);
|
|
439
|
+
};
|
|
440
|
+
/**
|
|
441
|
+
* The listing, with the profile of each listed branch's creator. Looked up only for branches the
|
|
442
|
+
* requester may see, so it names no one they could not; the branch ACL's users stay behind the
|
|
443
|
+
* privileged user lookup. A failed lookup costs the names, never the listing.
|
|
444
|
+
*/
|
|
445
|
+
const branchListResponse = async (ctx, req, branches, defaultBranch) => {
|
|
446
|
+
let users = [];
|
|
447
|
+
if (ctx.authPlugin) {
|
|
448
|
+
try {
|
|
449
|
+
users = await lookupUserProfiles(ctx.authPlugin, branches.map((context) => context.branch.createdBy));
|
|
450
|
+
}
|
|
451
|
+
catch (error) {
|
|
452
|
+
console.error('CanopyCMS: Failed to look up branch owners:', getErrorMessage(error));
|
|
453
|
+
}
|
|
454
|
+
}
|
|
399
455
|
return {
|
|
400
456
|
ok: true,
|
|
401
457
|
status: 200,
|
|
402
458
|
data: {
|
|
403
|
-
branches:
|
|
459
|
+
branches: branches.map((context) => toBranchListItem(ctx.services.config, context.branch, req.user)),
|
|
404
460
|
defaultBranch,
|
|
461
|
+
users,
|
|
405
462
|
},
|
|
406
463
|
};
|
|
407
464
|
};
|
|
@@ -457,7 +514,7 @@ export const deleteBranchHandler = async (ctx, req, params) => {
|
|
|
457
514
|
// writableBranch/submittableBranch guards elsewhere use 403 for the same
|
|
458
515
|
// "protected" category (tracked as a deferred, deliberately out-of-scope
|
|
459
516
|
// cleanup in
|
|
460
|
-
//
|
|
517
|
+
// safeinsights/canopycms#781); extending
|
|
461
518
|
// this check to 'approved' keeps it consistent with its own immediate
|
|
462
519
|
// neighbour rather than introducing a fresh 400/403 split between two
|
|
463
520
|
// arms of the same guard.
|
|
@@ -468,48 +525,39 @@ export const deleteBranchHandler = async (ctx, req, params) => {
|
|
|
468
525
|
error: 'Cannot delete branch with open pull request',
|
|
469
526
|
};
|
|
470
527
|
}
|
|
471
|
-
//
|
|
472
|
-
//
|
|
473
|
-
//
|
|
474
|
-
//
|
|
475
|
-
//
|
|
476
|
-
//
|
|
477
|
-
//
|
|
528
|
+
// The branch directory leaves its name by one rename, under the same
|
|
529
|
+
// server-enforced lockfile branch-metadata saves hold (see
|
|
530
|
+
// utils/occ-json-write.ts), so a save() that reaches that lock after the
|
|
531
|
+
// rename fails rather than recreating the tree, and a process killed during
|
|
532
|
+
// the `rm` leaves
|
|
533
|
+
// only a `.deleting-*` directory the worker sweeps, never residue under a
|
|
534
|
+
// name that may be created again.
|
|
478
535
|
const metadataFile = path.join(branchContext.branchRoot, '.canopy-meta', 'branch.json');
|
|
479
536
|
let cleanupWarning;
|
|
537
|
+
let deletingPath;
|
|
480
538
|
try {
|
|
481
539
|
await withOccFileLock(metadataFile, async () => {
|
|
540
|
+
if (branchContext.branchRoot === branchContext.baseRoot) {
|
|
541
|
+
await fs.unlink(metadataFile).catch((err) => {
|
|
542
|
+
if (!isNotFoundError(err))
|
|
543
|
+
throw err;
|
|
544
|
+
});
|
|
545
|
+
return;
|
|
546
|
+
}
|
|
547
|
+
const target = path.join(branchContext.baseRoot, deletingDirName(path.basename(branchContext.branchRoot)));
|
|
482
548
|
try {
|
|
483
|
-
await fs.
|
|
549
|
+
await fs.rename(branchContext.branchRoot, target);
|
|
550
|
+
deletingPath = target;
|
|
484
551
|
}
|
|
485
552
|
catch (err) {
|
|
486
|
-
if (
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
// deleted and will no longer appear in listings), but silently
|
|
495
|
-
// succeeding here would leave a full orphan clone on disk with
|
|
496
|
-
// nothing in the API surfacing its existence.
|
|
497
|
-
if (branchContext.branchRoot !== branchContext.baseRoot) {
|
|
498
|
-
try {
|
|
499
|
-
await fs.rm(branchContext.branchRoot, {
|
|
500
|
-
recursive: true,
|
|
501
|
-
force: true,
|
|
502
|
-
maxRetries: 3,
|
|
503
|
-
retryDelay: 100,
|
|
504
|
-
});
|
|
505
|
-
}
|
|
506
|
-
catch (err) {
|
|
507
|
-
// sanitizeErrorMessage: this string goes back to the browser in the
|
|
508
|
-
// delete response (API-H2 — no absolute EFS paths to clients);
|
|
509
|
-
// the console line below keeps the raw detail for server logs.
|
|
510
|
-
cleanupWarning = `Failed to fully remove branch directory: ${sanitizeErrorMessage(getErrorMessage(err))}`;
|
|
511
|
-
console.error(`CanopyCMS: Failed to delete branch directory for ${branchName}:`, getErrorMessage(err));
|
|
512
|
-
}
|
|
553
|
+
if (isNotFoundError(err))
|
|
554
|
+
return;
|
|
555
|
+
// Still deleted logically: without branch.json the branch is unlisted,
|
|
556
|
+
// and the worker quarantines what is left.
|
|
557
|
+
await fs.unlink(metadataFile).catch(() => { });
|
|
558
|
+
// [REDACT] Returned to the browser; the console line keeps the path.
|
|
559
|
+
cleanupWarning = `Failed to remove branch directory: ${sanitizeErrorMessage(getErrorMessage(err))}`;
|
|
560
|
+
console.error(`CanopyCMS: Failed to move branch directory for ${branchName} aside:`, getErrorMessage(err));
|
|
513
561
|
}
|
|
514
562
|
});
|
|
515
563
|
}
|
|
@@ -522,11 +570,13 @@ export const deleteBranchHandler = async (ctx, req, params) => {
|
|
|
522
570
|
error: `Branch is busy, try again: ${getErrorMessage(err)}`,
|
|
523
571
|
};
|
|
524
572
|
}
|
|
573
|
+
if (deletingPath)
|
|
574
|
+
await removeLeftoverDir(deletingPath);
|
|
525
575
|
// Also delete the branch's local head from the remote.git mirror (the
|
|
526
|
-
// deployment's local origin). The sync loop
|
|
527
|
-
//
|
|
528
|
-
// path that removes it -- without this, the head outlives
|
|
529
|
-
//
|
|
576
|
+
// deployment's local origin). The sync loop's reconcileTrackedBranches
|
|
577
|
+
// removes a head only once GitHub no longer has its branch, so while GitHub
|
|
578
|
+
// does, THIS is the path that removes it -- without this, the head outlives
|
|
579
|
+
// the branch, and reusing the name after the GitHub side is gone (e.g. a
|
|
530
580
|
// squash-merged PR with auto-delete) has the reused branch's first publish
|
|
531
581
|
// rejected non-fast-forward against the stale old tip: a permanent,
|
|
532
582
|
// misleading 409 -- and a retried submit would then ship the STALE head to
|
|
@@ -543,7 +593,7 @@ export const deleteBranchHandler = async (ctx, req, params) => {
|
|
|
543
593
|
const sanitizedDeleted = sanitizeBranchName(branchContext.branch.name);
|
|
544
594
|
// Defense-in-depth only -- isProtected above already rejects the base
|
|
545
595
|
// branch, and settings branches never resolve through getBranchContext.
|
|
546
|
-
const sanitizedBase = sanitizeBranchName(branchContext.branch.baseBranch ?? ctx.services.config
|
|
596
|
+
const sanitizedBase = sanitizeBranchName(branchContext.branch.baseBranch ?? baseBranchOf(ctx.services.config));
|
|
547
597
|
const deletableHead = sanitizedDeleted !== sanitizedBase &&
|
|
548
598
|
!sanitizedDeleted.startsWith(RESERVED_SETTINGS_BRANCH_PREFIX);
|
|
549
599
|
if (deletableHead &&
|
|
@@ -561,6 +611,12 @@ export const deleteBranchHandler = async (ctx, req, params) => {
|
|
|
561
611
|
console.warn(`CanopyCMS: failed to remove deleted branch's mirror head (branch ${sanitizedDeleted}, mirror ${mirrorPath}): ${getErrorMessage(err)}`);
|
|
562
612
|
}
|
|
563
613
|
}
|
|
614
|
+
// `branchContext` was read before the delete, so it still carries the PR number this gates on.
|
|
615
|
+
if (deletableHead) {
|
|
616
|
+
const warning = await syncDeleteRemoteBranch(ctx, branchContext);
|
|
617
|
+
if (warning)
|
|
618
|
+
cleanupWarning = cleanupWarning ? `${cleanupWarning}; ${warning}` : warning;
|
|
619
|
+
}
|
|
564
620
|
// Invalidate registry cache so next list() will regenerate without this branch
|
|
565
621
|
if (!ctx.services.registry) {
|
|
566
622
|
return {
|
|
@@ -636,7 +692,11 @@ export const updateBranchAccessHandler = async (ctx, req, params, body) => {
|
|
|
636
692
|
const updated = await metadata.save({
|
|
637
693
|
branch: { access: newAccess },
|
|
638
694
|
});
|
|
639
|
-
return {
|
|
695
|
+
return {
|
|
696
|
+
ok: true,
|
|
697
|
+
status: 200,
|
|
698
|
+
data: { branch: toBranchListItem(ctx.services.config, updated.branch, req.user) },
|
|
699
|
+
};
|
|
640
700
|
};
|
|
641
701
|
/**
|
|
642
702
|
* List all branches visible to current user
|
|
@@ -648,17 +708,18 @@ const listBranches = defineEndpoint({
|
|
|
648
708
|
path: '/branches',
|
|
649
709
|
responseType: 'BranchListResponse',
|
|
650
710
|
response: {},
|
|
651
|
-
defaultMockData: { branches: [] },
|
|
711
|
+
defaultMockData: { branches: [], users: [] },
|
|
652
712
|
handler: listBranchesHandler,
|
|
653
713
|
});
|
|
654
714
|
const createBranch = defineEndpoint({
|
|
655
715
|
namespace: 'branches',
|
|
656
716
|
name: 'create',
|
|
717
|
+
clientTimeout: 'long',
|
|
657
718
|
method: 'POST',
|
|
658
719
|
path: '/branches',
|
|
659
720
|
body: createBranchBodySchema,
|
|
660
721
|
bodyType: 'CreateBranchBody',
|
|
661
|
-
responseType: '
|
|
722
|
+
responseType: 'BranchListItemResponse',
|
|
662
723
|
response: {},
|
|
663
724
|
defaultMockData: {
|
|
664
725
|
branch: {
|
|
@@ -699,7 +760,7 @@ const updateBranchAccess = defineEndpoint({
|
|
|
699
760
|
params: branchParamSchema,
|
|
700
761
|
body: updateBranchAccessBodySchema,
|
|
701
762
|
bodyType: 'UpdateBranchAccessBody',
|
|
702
|
-
responseType: '
|
|
763
|
+
responseType: 'BranchListItemResponse',
|
|
703
764
|
response: {},
|
|
704
765
|
defaultMockData: {
|
|
705
766
|
branch: {
|