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.
Files changed (539) hide show
  1. package/README.md +30 -3
  2. package/dist/ai/generate.js +1 -27
  3. package/dist/ai/handler.d.ts +0 -4
  4. package/dist/ai/handler.js +0 -11
  5. package/dist/ai/index.d.ts +1 -8
  6. package/dist/ai/index.js +1 -8
  7. package/dist/ai/json-to-markdown.js +15 -58
  8. package/dist/ai/resolve-branch.d.ts +2 -7
  9. package/dist/ai/resolve-branch.js +2 -8
  10. package/dist/ai/strip-mdx.d.ts +5 -13
  11. package/dist/ai/strip-mdx.js +5 -17
  12. package/dist/ai/to-plain-text.d.ts +10 -28
  13. package/dist/ai/to-plain-text.js +10 -28
  14. package/dist/ai/transform-components.d.ts +2 -4
  15. package/dist/ai/transform-components.js +8 -19
  16. package/dist/ai/types.d.ts +5 -10
  17. package/dist/api/admin-branch-health.d.ts +4 -12
  18. package/dist/api/admin-branch-health.js +26 -66
  19. package/dist/api/admin.d.ts +4 -12
  20. package/dist/api/admin.js +10 -26
  21. package/dist/api/assets.d.ts +0 -25
  22. package/dist/api/assets.js +50 -91
  23. package/dist/api/branch-merge.d.ts +1 -1
  24. package/dist/api/branch-merge.js +0 -2
  25. package/dist/api/branch-review.d.ts +0 -8
  26. package/dist/api/branch-review.js +0 -13
  27. package/dist/api/branch-status.d.ts +0 -3
  28. package/dist/api/branch-status.js +8 -33
  29. package/dist/api/branch-withdraw.d.ts +0 -1
  30. package/dist/api/branch-withdraw.js +6 -9
  31. package/dist/api/branch.d.ts +7 -12
  32. package/dist/api/branch.js +7 -44
  33. package/dist/api/client.d.ts +71 -224
  34. package/dist/api/client.js +82 -233
  35. package/dist/api/comments.d.ts +2 -4
  36. package/dist/api/comments.js +0 -17
  37. package/dist/api/content.d.ts +0 -6
  38. package/dist/api/content.js +66 -142
  39. package/dist/api/entries-constants.d.ts +5 -9
  40. package/dist/api/entries-constants.js +5 -9
  41. package/dist/api/entries.d.ts +8 -13
  42. package/dist/api/entries.js +20 -51
  43. package/dist/api/github-sync.d.ts +2 -4
  44. package/dist/api/github-sync.js +4 -8
  45. package/dist/api/groups.d.ts +3 -0
  46. package/dist/api/groups.js +8 -21
  47. package/dist/api/guards.d.ts +4 -16
  48. package/dist/api/guards.js +3 -22
  49. package/dist/api/index.d.ts +4 -4
  50. package/dist/api/permissions.d.ts +2 -0
  51. package/dist/api/permissions.js +18 -40
  52. package/dist/api/reference-options.d.ts +0 -1
  53. package/dist/api/reference-options.js +3 -11
  54. package/dist/api/request-body-hash.d.ts +12 -23
  55. package/dist/api/request-body-hash.js +12 -23
  56. package/dist/api/resolve-references.d.ts +0 -1
  57. package/dist/api/resolve-references.js +13 -28
  58. package/dist/api/route-builder.d.ts +3 -7
  59. package/dist/api/route-builder.js +1 -1
  60. package/dist/api/routes.d.ts +12 -0
  61. package/dist/api/routes.js +47 -0
  62. package/dist/api/schema.d.ts +23 -33
  63. package/dist/api/schema.js +20 -74
  64. package/dist/api/settings-helpers.js +4 -5
  65. package/dist/api/types.d.ts +0 -5
  66. package/dist/api/user.js +0 -5
  67. package/dist/api/validators.d.ts +14 -52
  68. package/dist/api/validators.js +14 -52
  69. package/dist/assets/asset-prefixes.d.ts +4 -8
  70. package/dist/assets/asset-prefixes.js +4 -8
  71. package/dist/assets/asset-src.d.ts +5 -22
  72. package/dist/assets/asset-src.js +5 -21
  73. package/dist/assets/factory.d.ts +1 -2
  74. package/dist/assets/factory.js +1 -2
  75. package/dist/assets/finalize.d.ts +3 -1
  76. package/dist/assets/finalize.js +3 -1
  77. package/dist/assets/index.d.ts +3 -3
  78. package/dist/assets/index.js +1 -1
  79. package/dist/assets/keys.d.ts +5 -3
  80. package/dist/assets/keys.js +6 -3
  81. package/dist/assets/pipeline.d.ts +3 -2
  82. package/dist/assets/pipeline.js +22 -56
  83. package/dist/assets/sharp-loader.d.ts +2 -10
  84. package/dist/assets/sharp-loader.js +2 -10
  85. package/dist/assets/store-local.d.ts +1 -2
  86. package/dist/assets/store-local.js +1 -2
  87. package/dist/assets/store-s3.d.ts +3 -4
  88. package/dist/assets/svg-sanitizer.d.ts +6 -14
  89. package/dist/assets/svg-sanitizer.js +6 -14
  90. package/dist/assets/transform-directives.d.ts +3 -4
  91. package/dist/assets/transform-directives.js +1 -1
  92. package/dist/assets/transform.d.ts +19 -30
  93. package/dist/assets/transform.js +18 -31
  94. package/dist/auth/cache.d.ts +2 -3
  95. package/dist/auth/cache.js +2 -3
  96. package/dist/auth/caching-auth-plugin.d.ts +11 -22
  97. package/dist/auth/caching-auth-plugin.js +12 -14
  98. package/dist/auth/context-helpers.d.ts +6 -20
  99. package/dist/auth/context-helpers.js +5 -17
  100. package/dist/auth/file-based-auth-cache.d.ts +10 -21
  101. package/dist/auth/file-based-auth-cache.js +23 -51
  102. package/dist/auth/plugin.d.ts +29 -61
  103. package/dist/auth/plugin.js +9 -13
  104. package/dist/auth/types.d.ts +11 -20
  105. package/dist/authorization/branch.d.ts +30 -49
  106. package/dist/authorization/branch.js +16 -42
  107. package/dist/authorization/content.d.ts +11 -40
  108. package/dist/authorization/content.js +13 -45
  109. package/dist/authorization/groups/index.d.ts +0 -3
  110. package/dist/authorization/groups/index.js +0 -3
  111. package/dist/authorization/groups/loader.d.ts +14 -28
  112. package/dist/authorization/groups/loader.js +14 -38
  113. package/dist/authorization/groups/schema.d.ts +0 -6
  114. package/dist/authorization/groups/schema.js +4 -7
  115. package/dist/authorization/helpers.d.ts +9 -28
  116. package/dist/authorization/helpers.js +9 -28
  117. package/dist/authorization/index.d.ts +3 -25
  118. package/dist/authorization/index.js +3 -35
  119. package/dist/authorization/path.d.ts +6 -13
  120. package/dist/authorization/path.js +8 -25
  121. package/dist/authorization/permissions/index.d.ts +0 -3
  122. package/dist/authorization/permissions/index.js +0 -3
  123. package/dist/authorization/permissions/loader.d.ts +14 -27
  124. package/dist/authorization/permissions/loader.js +14 -32
  125. package/dist/authorization/permissions/schema.d.ts +1 -6
  126. package/dist/authorization/permissions/schema.js +6 -13
  127. package/dist/authorization/protected-branch.d.ts +36 -65
  128. package/dist/authorization/protected-branch.js +29 -41
  129. package/dist/authorization/settings-file-store.d.ts +38 -81
  130. package/dist/authorization/settings-file-store.js +38 -79
  131. package/dist/authorization/types.d.ts +4 -26
  132. package/dist/authorization/types.js +0 -6
  133. package/dist/authorization/validation.d.ts +1 -23
  134. package/dist/authorization/validation.js +1 -24
  135. package/dist/branch-health.d.ts +39 -67
  136. package/dist/branch-health.js +27 -43
  137. package/dist/branch-metadata-file.d.ts +16 -32
  138. package/dist/branch-metadata-file.js +13 -26
  139. package/dist/branch-metadata.d.ts +49 -80
  140. package/dist/branch-metadata.js +57 -87
  141. package/dist/branch-registry.d.ts +26 -64
  142. package/dist/branch-registry.js +44 -93
  143. package/dist/branch-schema-cache.d.ts +34 -124
  144. package/dist/branch-schema-cache.js +49 -155
  145. package/dist/branch-workspace.d.ts +4 -4
  146. package/dist/branch-workspace.js +15 -19
  147. package/dist/build/generate-ai-content.d.ts +1 -0
  148. package/dist/build/generate-ai-content.js +12 -25
  149. package/dist/build-canopy.d.ts +17 -27
  150. package/dist/build-canopy.js +16 -23
  151. package/dist/build-mode.d.ts +25 -27
  152. package/dist/build-mode.js +25 -29
  153. package/dist/cli/cli.d.ts +15 -26
  154. package/dist/cli/cli.js +601 -978
  155. package/dist/cli/generate-ai-content.js +351 -628
  156. package/dist/cli/github-app-manifest.d.ts +84 -0
  157. package/dist/cli/github-app-manifest.js +161 -0
  158. package/dist/cli/init-github-app.d.ts +110 -444
  159. package/dist/cli/init-github-app.js +236 -773
  160. package/dist/cli/init.js +39 -80
  161. package/dist/cli/migrate.d.ts +13 -10
  162. package/dist/cli/migrate.js +22 -30
  163. package/dist/cli/project-detect.d.ts +17 -31
  164. package/dist/cli/project-detect.js +31 -42
  165. package/dist/cli/project-root.d.ts +4 -11
  166. package/dist/cli/project-root.js +4 -11
  167. package/dist/cli/prompt.d.ts +10 -0
  168. package/dist/cli/prompt.js +67 -0
  169. package/dist/cli/sync.d.ts +0 -8
  170. package/dist/cli/sync.js +8 -28
  171. package/dist/cli/template-files/middleware.ts.template +15 -29
  172. package/dist/cli/templates.d.ts +2 -12
  173. package/dist/cli/templates.js +4 -4
  174. package/dist/client.d.ts +1 -1
  175. package/dist/comment-store.d.ts +32 -53
  176. package/dist/comment-store.js +32 -52
  177. package/dist/config/flatten.d.ts +0 -3
  178. package/dist/config/flatten.js +2 -12
  179. package/dist/config/helpers.js +2 -2
  180. package/dist/config/index.d.ts +2 -2
  181. package/dist/config/index.js +1 -4
  182. package/dist/config/schemas/collection.d.ts +0 -8
  183. package/dist/config/schemas/collection.js +0 -10
  184. package/dist/config/schemas/config.d.ts +6 -78
  185. package/dist/config/schemas/config.js +38 -54
  186. package/dist/config/schemas/field.d.ts +2 -242
  187. package/dist/config/schemas/field.js +9 -20
  188. package/dist/config/schemas/media.js +1 -1
  189. package/dist/config/schemas/permissions.js +0 -2
  190. package/dist/config/schemas/url.d.ts +5 -6
  191. package/dist/config/schemas/url.js +5 -6
  192. package/dist/config/types.d.ts +45 -33
  193. package/dist/config/types.js +0 -1
  194. package/dist/config.d.ts +1 -8
  195. package/dist/config.js +1 -9
  196. package/dist/content-id-index.d.ts +76 -188
  197. package/dist/content-id-index.js +79 -230
  198. package/dist/content-index-generation.d.ts +27 -48
  199. package/dist/content-index-generation.js +35 -84
  200. package/dist/content-index-registry.d.ts +15 -24
  201. package/dist/content-index-registry.js +5 -9
  202. package/dist/content-listing.d.ts +64 -107
  203. package/dist/content-listing.js +68 -118
  204. package/dist/content-reader.d.ts +20 -29
  205. package/dist/content-reader.js +10 -18
  206. package/dist/content-store.d.ts +210 -336
  207. package/dist/content-store.js +413 -657
  208. package/dist/content-tree.d.ts +44 -86
  209. package/dist/content-tree.js +26 -54
  210. package/dist/context.d.ts +67 -94
  211. package/dist/context.js +53 -72
  212. package/dist/dev-content-watcher.d.ts +18 -18
  213. package/dist/dev-content-watcher.js +41 -44
  214. package/dist/editor/BranchManager.d.ts +3 -6
  215. package/dist/editor/BranchManager.js +24 -44
  216. package/dist/editor/CanopyEditor.js +5 -2
  217. package/dist/editor/CommentsPanel.js +0 -2
  218. package/dist/editor/Editor.js +19 -76
  219. package/dist/editor/EditorAuthGate.d.ts +27 -0
  220. package/dist/editor/EditorAuthGate.js +140 -0
  221. package/dist/editor/EntryNavigator.js +0 -20
  222. package/dist/editor/FormRenderer.d.ts +1 -2
  223. package/dist/editor/FormRenderer.js +8 -23
  224. package/dist/editor/admin/SystemHealthPanel.js +20 -37
  225. package/dist/editor/admin/useSystemHealth.d.ts +2 -3
  226. package/dist/editor/admin/useSystemHealth.js +10 -12
  227. package/dist/editor/client-reference-resolver.d.ts +2 -5
  228. package/dist/editor/client-reference-resolver.js +2 -19
  229. package/dist/editor/comments/BranchComments.js +0 -4
  230. package/dist/editor/comments/EntryComments.js +0 -4
  231. package/dist/editor/comments/FieldWrapper.js +0 -4
  232. package/dist/editor/comments/InlineCommentThread.js +0 -2
  233. package/dist/editor/comments/ThreadCarousel.d.ts +0 -58
  234. package/dist/editor/comments/ThreadCarousel.js +0 -12
  235. package/dist/editor/components/EditorFooter.d.ts +0 -8
  236. package/dist/editor/components/EditorFooter.js +0 -5
  237. package/dist/editor/components/EditorHeader.d.ts +0 -31
  238. package/dist/editor/components/EditorHeader.js +21 -71
  239. package/dist/editor/components/EditorSidebar.d.ts +0 -19
  240. package/dist/editor/components/EditorSidebar.js +0 -16
  241. package/dist/editor/components/EntryCreateModal.d.ts +4 -4
  242. package/dist/editor/components/EntryCreateModal.js +7 -22
  243. package/dist/editor/components/RenameEntryModal.js +0 -4
  244. package/dist/editor/components/UserBadge.js +0 -10
  245. package/dist/editor/components/index.js +0 -2
  246. package/dist/editor/context/ApiClientContext.d.ts +8 -7
  247. package/dist/editor/context/ApiClientContext.js +39 -11
  248. package/dist/editor/context/AssetContext.d.ts +7 -17
  249. package/dist/editor/context/AssetContext.js +7 -17
  250. package/dist/editor/context/EditorIdentityContext.d.ts +13 -0
  251. package/dist/editor/context/EditorIdentityContext.js +7 -0
  252. package/dist/editor/context/EditorStateContext.d.ts +10 -41
  253. package/dist/editor/context/EditorStateContext.js +7 -23
  254. package/dist/editor/context/SWRProvider.d.ts +3 -6
  255. package/dist/editor/context/index.d.ts +1 -20
  256. package/dist/editor/context/index.js +1 -20
  257. package/dist/editor/editor-utils.d.ts +8 -47
  258. package/dist/editor/editor-utils.js +19 -72
  259. package/dist/editor/fields/BlockField.d.ts +2 -2
  260. package/dist/editor/fields/BlockField.js +1 -2
  261. package/dist/editor/fields/CodeField.d.ts +0 -1
  262. package/dist/editor/fields/CodeField.js +0 -1
  263. package/dist/editor/fields/DateTimeField.d.ts +15 -22
  264. package/dist/editor/fields/DateTimeField.js +17 -26
  265. package/dist/editor/fields/ImageField.d.ts +2 -2
  266. package/dist/editor/fields/ImageField.js +8 -14
  267. package/dist/editor/fields/InlineGroupField.d.ts +0 -1
  268. package/dist/editor/fields/InlineGroupField.js +0 -1
  269. package/dist/editor/fields/MarkdownField.d.ts +0 -1
  270. package/dist/editor/fields/MarkdownField.js +6 -11
  271. package/dist/editor/fields/MdxImageDialog.d.ts +1 -1
  272. package/dist/editor/fields/MdxImageDialog.js +0 -1
  273. package/dist/editor/fields/NumberField.d.ts +9 -19
  274. package/dist/editor/fields/NumberField.js +11 -22
  275. package/dist/editor/fields/NumberListField.d.ts +7 -10
  276. package/dist/editor/fields/NumberListField.js +7 -10
  277. package/dist/editor/fields/ObjectField.d.ts +5 -8
  278. package/dist/editor/fields/ObjectField.js +0 -1
  279. package/dist/editor/fields/ReferenceField.d.ts +1 -1
  280. package/dist/editor/fields/ReferenceField.js +11 -16
  281. package/dist/editor/fields/SelectField.d.ts +2 -2
  282. package/dist/editor/fields/SelectField.js +0 -1
  283. package/dist/editor/fields/StringListField.d.ts +0 -4
  284. package/dist/editor/fields/StringListField.js +4 -9
  285. package/dist/editor/fields/TextField.d.ts +0 -1
  286. package/dist/editor/fields/TextField.js +0 -1
  287. package/dist/editor/fields/ToggleField.d.ts +0 -1
  288. package/dist/editor/fields/ToggleField.js +0 -1
  289. package/dist/editor/fields/entry-link/EntryLinkContext.js +2 -4
  290. package/dist/editor/fields/entry-link/InsertEntryLink.d.ts +0 -3
  291. package/dist/editor/fields/entry-link/InsertEntryLink.js +0 -4
  292. package/dist/editor/group-manager/ExternalGroupsTab.d.ts +0 -3
  293. package/dist/editor/group-manager/ExternalGroupsTab.js +0 -1
  294. package/dist/editor/group-manager/GroupCard.d.ts +0 -3
  295. package/dist/editor/group-manager/GroupForm.d.ts +0 -3
  296. package/dist/editor/group-manager/InternalGroupsTab.d.ts +0 -3
  297. package/dist/editor/group-manager/InternalGroupsTab.js +0 -2
  298. package/dist/editor/group-manager/MemberList.d.ts +0 -3
  299. package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts +0 -3
  300. package/dist/editor/group-manager/hooks/useExternalGroupSearch.js +0 -3
  301. package/dist/editor/group-manager/hooks/useGroupState.d.ts +0 -3
  302. package/dist/editor/group-manager/hooks/useGroupState.js +0 -5
  303. package/dist/editor/group-manager/hooks/useUserSearch.d.ts +0 -3
  304. package/dist/editor/group-manager/hooks/useUserSearch.js +0 -3
  305. package/dist/editor/group-manager/index.d.ts +0 -6
  306. package/dist/editor/group-manager/index.js +0 -10
  307. package/dist/editor/group-manager/types.d.ts +2 -5
  308. package/dist/editor/group-manager/types.js +0 -3
  309. package/dist/editor/hooks/index.d.ts +6 -11
  310. package/dist/editor/hooks/index.js +6 -12
  311. package/dist/editor/hooks/useBranchActions.d.ts +0 -14
  312. package/dist/editor/hooks/useBranchActions.js +0 -22
  313. package/dist/editor/hooks/useBranchManager.d.ts +2 -48
  314. package/dist/editor/hooks/useBranchManager.js +4 -64
  315. package/dist/editor/hooks/useBranchesData.d.ts +7 -6
  316. package/dist/editor/hooks/useBranchesData.js +7 -6
  317. package/dist/editor/hooks/useCommentSystem.d.ts +0 -49
  318. package/dist/editor/hooks/useCommentSystem.js +1 -36
  319. package/dist/editor/hooks/useDraftManager.d.ts +2 -35
  320. package/dist/editor/hooks/useDraftManager.js +23 -64
  321. package/dist/editor/hooks/useEditorLayout.d.ts +0 -20
  322. package/dist/editor/hooks/useEditorLayout.js +0 -23
  323. package/dist/editor/hooks/useEntriesData.d.ts +1 -0
  324. package/dist/editor/hooks/useEntriesData.js +2 -3
  325. package/dist/editor/hooks/useEntryLinkResolution.d.ts +2 -2
  326. package/dist/editor/hooks/useEntryLinkResolution.js +2 -2
  327. package/dist/editor/hooks/useEntryManager.d.ts +2 -27
  328. package/dist/editor/hooks/useEntryManager.js +29 -78
  329. package/dist/editor/hooks/useGroupManager.d.ts +0 -21
  330. package/dist/editor/hooks/useGroupManager.js +0 -21
  331. package/dist/editor/hooks/usePermissionManager.d.ts +0 -20
  332. package/dist/editor/hooks/usePermissionManager.js +0 -20
  333. package/dist/editor/hooks/useReferenceResolution.d.ts +2 -33
  334. package/dist/editor/hooks/useReferenceResolution.js +1 -48
  335. package/dist/editor/hooks/useSchemaManager.d.ts +8 -27
  336. package/dist/editor/hooks/useSchemaManager.js +0 -19
  337. package/dist/editor/hooks/useUserContext.d.ts +2 -9
  338. package/dist/editor/hooks/useUserContext.js +10 -10
  339. package/dist/editor/hooks/useUserMetadata.d.ts +0 -2
  340. package/dist/editor/hooks/useUserMetadata.js +0 -3
  341. package/dist/editor/media/AssetCard.d.ts +0 -1
  342. package/dist/editor/media/AssetCard.js +1 -2
  343. package/dist/editor/media/CropStep.d.ts +0 -1
  344. package/dist/editor/media/CropStep.js +0 -1
  345. package/dist/editor/media/MediaLibrary.d.ts +1 -2
  346. package/dist/editor/media/MediaLibrary.js +1 -2
  347. package/dist/editor/media/MediaLibraryBody.d.ts +0 -1
  348. package/dist/editor/media/MediaLibraryBody.js +0 -1
  349. package/dist/editor/media/crop-math.d.ts +1 -1
  350. package/dist/editor/media/crop-math.js +1 -1
  351. package/dist/editor/permission-manager/GroupSelector.d.ts +0 -3
  352. package/dist/editor/permission-manager/PermissionEditor.d.ts +0 -4
  353. package/dist/editor/permission-manager/PermissionEditor.js +0 -1
  354. package/dist/editor/permission-manager/PermissionLevelBadge.d.ts +0 -7
  355. package/dist/editor/permission-manager/PermissionLevelBadge.js +0 -4
  356. package/dist/editor/permission-manager/PermissionTree.d.ts +0 -4
  357. package/dist/editor/permission-manager/UserSelector.d.ts +0 -3
  358. package/dist/editor/permission-manager/constants.d.ts +0 -3
  359. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts +0 -3
  360. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js +0 -10
  361. package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts +0 -14
  362. package/dist/editor/permission-manager/hooks/usePermissionTree.js +0 -11
  363. package/dist/editor/permission-manager/index.d.ts +0 -7
  364. package/dist/editor/permission-manager/index.js +0 -16
  365. package/dist/editor/permission-manager/types.d.ts +2 -12
  366. package/dist/editor/permission-manager/types.js +0 -3
  367. package/dist/editor/permission-manager/utils.d.ts +0 -28
  368. package/dist/editor/permission-manager/utils.js +9 -23
  369. package/dist/editor/preview-bridge.d.ts +5 -1
  370. package/dist/editor/preview-bridge.js +4 -4
  371. package/dist/editor/schema-editor/CollectionEditor.d.ts +0 -5
  372. package/dist/editor/schema-editor/CollectionEditor.js +9 -31
  373. package/dist/editor/schema-editor/EntryTypeEditor.d.ts +0 -6
  374. package/dist/editor/schema-editor/EntryTypeEditor.js +3 -24
  375. package/dist/editor/schema-editor/index.d.ts +0 -7
  376. package/dist/editor/schema-editor/index.js +0 -7
  377. package/dist/editor/utils/env.d.ts +3 -18
  378. package/dist/editor/utils/env.js +6 -25
  379. package/dist/entry-link-resolver.d.ts +13 -35
  380. package/dist/entry-link-resolver.js +20 -53
  381. package/dist/entry-schema-registry.d.ts +20 -60
  382. package/dist/entry-schema-registry.js +20 -69
  383. package/dist/entry-schema.d.ts +118 -223
  384. package/dist/entry-schema.js +46 -91
  385. package/dist/git-manager.d.ts +101 -200
  386. package/dist/git-manager.js +211 -384
  387. package/dist/github-service.d.ts +34 -75
  388. package/dist/github-service.js +37 -91
  389. package/dist/http/handler.d.ts +6 -37
  390. package/dist/http/handler.js +65 -120
  391. package/dist/http/router.d.ts +15 -32
  392. package/dist/http/router.js +34 -99
  393. package/dist/http/types.d.ts +15 -40
  394. package/dist/http/types.js +3 -7
  395. package/dist/id.d.ts +4 -10
  396. package/dist/id.js +4 -10
  397. package/dist/index.js +6 -9
  398. package/dist/operating-mode/client-safe-strategy.d.ts +7 -14
  399. package/dist/operating-mode/client-safe-strategy.js +8 -28
  400. package/dist/operating-mode/client-unsafe-strategy.d.ts +6 -16
  401. package/dist/operating-mode/client-unsafe-strategy.js +9 -34
  402. package/dist/operating-mode/client.d.ts +3 -10
  403. package/dist/operating-mode/client.js +3 -8
  404. package/dist/operating-mode/deployment-name-fixtures.d.ts +14 -18
  405. package/dist/operating-mode/deployment-name-fixtures.js +14 -18
  406. package/dist/operating-mode/deployment-name.d.ts +19 -29
  407. package/dist/operating-mode/deployment-name.js +29 -47
  408. package/dist/operating-mode/index.d.ts +4 -25
  409. package/dist/operating-mode/index.js +9 -31
  410. package/dist/operating-mode/mode-env.d.ts +32 -54
  411. package/dist/operating-mode/mode-env.js +36 -58
  412. package/dist/operating-mode/types.d.ts +24 -72
  413. package/dist/operating-mode/types.js +1 -7
  414. package/dist/paths/branch-name.d.ts +30 -40
  415. package/dist/paths/branch-name.js +30 -40
  416. package/dist/paths/branch.d.ts +4 -18
  417. package/dist/paths/branch.js +6 -22
  418. package/dist/paths/index.d.ts +2 -13
  419. package/dist/paths/index.js +3 -23
  420. package/dist/paths/normalize-server.d.ts +3 -15
  421. package/dist/paths/normalize-server.js +3 -15
  422. package/dist/paths/normalize.d.ts +13 -33
  423. package/dist/paths/normalize.js +13 -33
  424. package/dist/paths/resolve.d.ts +4 -17
  425. package/dist/paths/resolve.js +4 -22
  426. package/dist/paths/types.d.ts +12 -34
  427. package/dist/paths/types.js +5 -7
  428. package/dist/paths/validation.d.ts +22 -119
  429. package/dist/paths/validation.js +30 -148
  430. package/dist/reference-resolver.d.ts +0 -13
  431. package/dist/reference-resolver.js +0 -18
  432. package/dist/resolve-canopy-user.d.ts +16 -18
  433. package/dist/resolve-canopy-user.js +17 -26
  434. package/dist/resource-generation.d.ts +16 -25
  435. package/dist/resource-generation.js +34 -97
  436. package/dist/schema/meta-loader.d.ts +2 -14
  437. package/dist/schema/meta-loader.js +15 -64
  438. package/dist/schema/resolver.d.ts +1 -4
  439. package/dist/schema/resolver.js +1 -6
  440. package/dist/schema/schema-store-types.d.ts +0 -12
  441. package/dist/schema/schema-store.d.ts +61 -138
  442. package/dist/schema/schema-store.js +85 -282
  443. package/dist/schema/types.d.ts +0 -4
  444. package/dist/server.d.ts +62 -93
  445. package/dist/server.js +63 -94
  446. package/dist/services.d.ts +23 -47
  447. package/dist/services.js +55 -98
  448. package/dist/settings-workspace.d.ts +17 -30
  449. package/dist/settings-workspace.js +51 -81
  450. package/dist/static/index.d.ts +26 -52
  451. package/dist/static/index.js +33 -67
  452. package/dist/{worker/task-queue.d.ts → task-queue/cms-task-queue.d.ts} +7 -9
  453. package/dist/task-queue/cms-task-queue.js +13 -0
  454. package/dist/task-queue/task-queue-config.d.ts +3 -0
  455. package/dist/{worker → task-queue}/task-queue-config.js +1 -6
  456. package/dist/task-queue/task-queue.d.ts +16 -22
  457. package/dist/task-queue/task-queue.js +20 -44
  458. package/dist/task-queue/types.d.ts +0 -1
  459. package/dist/task-queue/worker-status.d.ts +35 -0
  460. package/dist/task-queue/worker-status.js +40 -0
  461. package/dist/types.d.ts +40 -51
  462. package/dist/url-collision.d.ts +26 -40
  463. package/dist/url-collision.js +47 -63
  464. package/dist/url-exclusivity-fixtures.d.ts +15 -20
  465. package/dist/url-exclusivity-fixtures.js +14 -19
  466. package/dist/url-path-resolver.d.ts +8 -16
  467. package/dist/url-path-resolver.js +19 -29
  468. package/dist/user.d.ts +8 -21
  469. package/dist/user.js +10 -19
  470. package/dist/utils/async-mutex.js +4 -6
  471. package/dist/utils/atomic-write.d.ts +2 -11
  472. package/dist/utils/atomic-write.js +2 -11
  473. package/dist/utils/body-field.d.ts +8 -15
  474. package/dist/utils/body-field.js +8 -15
  475. package/dist/utils/content-serialize.d.ts +18 -24
  476. package/dist/utils/content-serialize.js +109 -160
  477. package/dist/utils/content-write-lock.d.ts +51 -106
  478. package/dist/utils/content-write-lock.js +66 -111
  479. package/dist/utils/debug.d.ts +7 -23
  480. package/dist/utils/debug.js +7 -23
  481. package/dist/utils/entry-url.d.ts +11 -23
  482. package/dist/utils/entry-url.js +11 -26
  483. package/dist/utils/error.d.ts +25 -90
  484. package/dist/utils/error.js +60 -147
  485. package/dist/utils/flatten-group-fields.d.ts +5 -7
  486. package/dist/utils/flatten-group-fields.js +5 -7
  487. package/dist/utils/format.d.ts +1 -5
  488. package/dist/utils/format.js +1 -5
  489. package/dist/utils/fs.d.ts +3 -4
  490. package/dist/utils/fs.js +3 -4
  491. package/dist/utils/git.d.ts +52 -83
  492. package/dist/utils/git.js +79 -125
  493. package/dist/utils/logger.d.ts +35 -50
  494. package/dist/utils/logger.js +35 -52
  495. package/dist/utils/provisioning-lock.d.ts +23 -35
  496. package/dist/utils/provisioning-lock.js +49 -69
  497. package/dist/utils/sanitize-href.d.ts +5 -10
  498. package/dist/utils/sanitize-href.js +8 -18
  499. package/dist/utils/title-field.d.ts +17 -20
  500. package/dist/utils/title-field.js +18 -27
  501. package/dist/utils/typed-filename.d.ts +20 -48
  502. package/dist/utils/typed-filename.js +25 -61
  503. package/dist/utils/url-prefix.d.ts +3 -3
  504. package/dist/utils/url-prefix.js +3 -3
  505. package/dist/validation/block-structural-keys.d.ts +16 -31
  506. package/dist/validation/block-structural-keys.js +19 -29
  507. package/dist/validation/deletion-checker.d.ts +0 -34
  508. package/dist/validation/deletion-checker.js +1 -43
  509. package/dist/validation/entry-link-validator.d.ts +6 -13
  510. package/dist/validation/entry-link-validator.js +4 -13
  511. package/dist/validation/entry-type-reference-validator.d.ts +13 -18
  512. package/dist/validation/entry-type-reference-validator.js +13 -18
  513. package/dist/validation/entry-validator.d.ts +13 -25
  514. package/dist/validation/entry-validator.js +15 -32
  515. package/dist/validation/field-traversal.d.ts +3 -30
  516. package/dist/validation/field-traversal.js +1 -32
  517. package/dist/validation/reference-validator.d.ts +5 -24
  518. package/dist/validation/reference-validator.js +5 -30
  519. package/dist/worker/cms-worker.d.ts +172 -232
  520. package/dist/worker/cms-worker.js +241 -333
  521. package/dist/worker/git-sync.d.ts +32 -133
  522. package/dist/worker/git-sync.js +129 -191
  523. package/dist/worker/github-auth.d.ts +13 -19
  524. package/dist/worker/github-auth.js +13 -19
  525. package/dist/worker/history-rewrite.d.ts +53 -66
  526. package/dist/worker/history-rewrite.js +54 -60
  527. package/dist/worker/log.d.ts +24 -41
  528. package/dist/worker/log.js +25 -42
  529. package/dist/worker/rebase.d.ts +20 -110
  530. package/dist/worker/rebase.js +279 -354
  531. package/dist/worker/task-runner.d.ts +32 -66
  532. package/dist/worker/task-runner.js +126 -162
  533. package/dist/worker/worker-context.d.ts +41 -81
  534. package/package.json +4 -4
  535. package/dist/cli/template-files/middleware-clerk.ts.template +0 -37
  536. package/dist/worker/task-queue-config.d.ts +0 -8
  537. package/dist/worker/task-queue.js +0 -19
  538. package/dist/worker/worker-status.d.ts +0 -47
  539. package/dist/worker/worker-status.js +0 -52
@@ -1,32 +1,21 @@
1
1
  /**
2
- * Computes the `x-amz-content-sha256` header value required by CloudFront's
3
- * Origin Access Control (OAC) SigV4 signing when a request carries a body.
2
+ * Computes the `x-amz-content-sha256` header CloudFront's Origin Access Control (OAC) requires
3
+ * for SigV4-signed origin requests that carry a body: OAC signs the request but never hashes the
4
+ * payload itself, so the viewer request must carry this header or the Function URL returns 403.
5
+ * See docs/deploying-to-aws.md for the deployment topology.
4
6
  *
5
- * Documented AWS behavior: CloudFront signs origin requests to OAC-protected
6
- * Lambda Function URLs, but it never hashes the payload itself - it forwards
7
- * whatever `x-amz-content-sha256` header value the viewer request already
8
- * has. If a request has a body and this header is missing, Lambda's
9
- * signature verification fails and the origin responds 403. See
10
- * docs/deploying-to-aws.md for the full explanation.
11
- *
12
- * Uses WebCrypto (available in secure-context browsers and in Node >= 18) to
13
- * compute the lowercase-hex SHA-256 digest of the exact bytes sent as the
14
- * request body.
7
+ * Uses WebCrypto (secure-context browsers, Node >= 18) to hash the exact bytes sent.
15
8
  */
16
9
  /**
17
- * Hash a string request body (e.g. a JSON-serialized payload).
18
- *
19
- * Returns `undefined` if WebCrypto is unavailable (for example a dev server
20
- * running over plain http, which is not a secure context) so callers can
21
- * skip the header rather than throw - production deployments are always
22
- * https.
10
+ * Hash a string request body (e.g. a JSON-serialized payload). Returns `undefined` when
11
+ * WebCrypto is unavailable (a dev server over plain http, not a secure context) so callers can
12
+ * skip the header instead of throwing — production is always https.
23
13
  */
24
14
  export declare function computeContentSha256Hex(body: string): Promise<string | undefined>;
25
15
  /**
26
- * Hash a raw-bytes request body (e.g. an ArrayBuffer or Blob upload).
27
- *
28
- * Note: this cannot be used for `FormData` bodies - the multipart boundary
29
- * is generated by the runtime at send time, so the final byte stream isn't
30
- * known until after the request would already need to be signed.
16
+ * Hash a raw-bytes request body (e.g. an ArrayBuffer or Blob upload). Not usable for `FormData`
17
+ * bodies — the multipart boundary is generated at send time, after the request would already
18
+ * need to be signed.
19
+ * @internal Exported for tests.
31
20
  */
32
21
  export declare function computeContentSha256HexFromBytes(bytes: BufferSource): Promise<string | undefined>;
@@ -1,35 +1,24 @@
1
1
  /**
2
- * Computes the `x-amz-content-sha256` header value required by CloudFront's
3
- * Origin Access Control (OAC) SigV4 signing when a request carries a body.
2
+ * Computes the `x-amz-content-sha256` header CloudFront's Origin Access Control (OAC) requires
3
+ * for SigV4-signed origin requests that carry a body: OAC signs the request but never hashes the
4
+ * payload itself, so the viewer request must carry this header or the Function URL returns 403.
5
+ * See docs/deploying-to-aws.md for the deployment topology.
4
6
  *
5
- * Documented AWS behavior: CloudFront signs origin requests to OAC-protected
6
- * Lambda Function URLs, but it never hashes the payload itself - it forwards
7
- * whatever `x-amz-content-sha256` header value the viewer request already
8
- * has. If a request has a body and this header is missing, Lambda's
9
- * signature verification fails and the origin responds 403. See
10
- * docs/deploying-to-aws.md for the full explanation.
11
- *
12
- * Uses WebCrypto (available in secure-context browsers and in Node >= 18) to
13
- * compute the lowercase-hex SHA-256 digest of the exact bytes sent as the
14
- * request body.
7
+ * Uses WebCrypto (secure-context browsers, Node >= 18) to hash the exact bytes sent.
15
8
  */
16
9
  /**
17
- * Hash a string request body (e.g. a JSON-serialized payload).
18
- *
19
- * Returns `undefined` if WebCrypto is unavailable (for example a dev server
20
- * running over plain http, which is not a secure context) so callers can
21
- * skip the header rather than throw - production deployments are always
22
- * https.
10
+ * Hash a string request body (e.g. a JSON-serialized payload). Returns `undefined` when
11
+ * WebCrypto is unavailable (a dev server over plain http, not a secure context) so callers can
12
+ * skip the header instead of throwing — production is always https.
23
13
  */
24
14
  export async function computeContentSha256Hex(body) {
25
15
  return computeContentSha256HexFromBytes(new TextEncoder().encode(body));
26
16
  }
27
17
  /**
28
- * Hash a raw-bytes request body (e.g. an ArrayBuffer or Blob upload).
29
- *
30
- * Note: this cannot be used for `FormData` bodies - the multipart boundary
31
- * is generated by the runtime at send time, so the final byte stream isn't
32
- * known until after the request would already need to be signed.
18
+ * Hash a raw-bytes request body (e.g. an ArrayBuffer or Blob upload). Not usable for `FormData`
19
+ * bodies — the multipart boundary is generated at send time, after the request would already
20
+ * need to be signed.
21
+ * @internal Exported for tests.
33
22
  */
34
23
  export async function computeContentSha256HexFromBytes(bytes) {
35
24
  const subtle = globalThis.crypto?.subtle;
@@ -3,7 +3,6 @@ import type { ApiResponse } from './types.js';
3
3
  export interface ResolveReferencesBody {
4
4
  ids: string[];
5
5
  }
6
- /** Response type for resolved references */
7
6
  export type ResolveReferencesResponse = ApiResponse<{
8
7
  resolved: Record<string, unknown>;
9
8
  }>;
@@ -5,14 +5,10 @@ import { ReferenceResolver } from '../reference-resolver.js';
5
5
  import { buildResolvedReference } from '../entry-schema.js';
6
6
  import { computeEntryUrl } from '../utils/entry-url.js';
7
7
  import { branchNameSchema, contentIdSchema } from './validators.js';
8
- // ============================================================================
9
- // Zod Schemas for Validation
10
- // ============================================================================
11
8
  /**
12
- * Resolution does sequential per-ID file I/O (see the loop below), so the
13
- * request body caps how much filesystem work a single authenticated caller
14
- * can force. 100 is a generous bound for real UI usage (a page's worth of
15
- * reference fields) while keeping worst-case latency/IO bounded (API-M1).
9
+ * Resolution does sequential per-ID file I/O, so the request body caps how much filesystem work
10
+ * a single caller can force. 100 is generous for real UI usage (a page's worth of reference
11
+ * fields) while keeping worst-case latency/IO bounded (API-M1).
16
12
  */
17
13
  const MAX_RESOLVE_REFERENCE_IDS = 100;
18
14
  const resolveReferencesParamsSchema = z.object({
@@ -33,10 +29,9 @@ const resolveReferencesHandler = async (gc, ctx, req, params, body) => {
33
29
  const idIndex = await store.idIndex();
34
30
  // Resolve each ID to full document
35
31
  const resolver = new ReferenceResolver(store, idIndex);
36
- // Build the access checker once: permissions are loaded a single time and reused
37
- // for every id, instead of re-loading per id inside the loop. A failure here
38
- // (e.g. settings workspace unavailable) surfaces as a handler error rather than
39
- // being silently swallowed per id.
32
+ // Build the access checker once, reused for every id instead of re-loading per id in the loop.
33
+ // A failure here (e.g. settings workspace unavailable) surfaces as a handler error, not
34
+ // swallowed silently per id.
40
35
  const checkAccess = await ctx.services.createContentAccessChecker(branchContext, branchContext.branchRoot, req.user);
41
36
  const resolved = {};
42
37
  for (const id of ids) {
@@ -48,22 +43,15 @@ const resolveReferencesHandler = async (gc, ctx, req, params, body) => {
48
43
  const access = checkAccess(resolvedPath.relativePath, 'read');
49
44
  if (!access.allowed)
50
45
  continue;
51
- // `resolveReferences: false` matches what the server-side resolver does
52
- // (content-store.ts's resolveSingleReferenceOnce reads its targets the same way).
53
- // Without it this endpoint resolved one level DEEPER than production, so a nested
54
- // reference inside a target rendered as an object in live preview and as a bare ID
55
- // string on the published site.
46
+ // `resolveReferences: false` matches the server-side resolver (content-store.ts's
47
+ // resolveSingleReferenceOnce), so a nested reference inside a target renders the same way
48
+ // in live preview as on the published site, instead of resolving one level deeper.
56
49
  const doc = await store.read(result.collection, result.slug, { resolveReferences: false });
57
50
  if (doc && doc.data) {
58
- // Same shape the server-side resolver produces (content-store.ts's
59
- // resolveSingleReferenceOnce): the target's data first, then the reserved keys.
60
- //
61
- // Both halves matter. The ORDER is the corruption guard -- a target modelling `id`
62
- // as content must not shadow the real content ID. The extra KEYS are what stops the
63
- // editor's live preview disagreeing with production: this endpoint feeds
64
- // client-reference-resolver.ts, so without `urlPath` a component rendering
65
- // `<a href={ref.urlPath}>` showed `undefined` while previewing and a real URL once
66
- // published -- exactly the class of divergence live preview exists to rule out.
51
+ // Same shape as the server-side resolver: target data first, then the reserved keys.
52
+ // Order is the corruption guard (a target modelling `id` as content must not shadow the
53
+ // real content ID); the extra keys (incl. `urlPath`) keep live preview and production
54
+ // in sync for consumers like client-reference-resolver.ts.
67
55
  resolved[id] = buildResolvedReference(doc.data, {
68
56
  id,
69
57
  slug: result.slug,
@@ -84,9 +72,6 @@ const resolveReferencesHandler = async (gc, ctx, req, params, body) => {
84
72
  data: { resolved },
85
73
  };
86
74
  };
87
- // ============================================================================
88
- // Route Definitions
89
- // ============================================================================
90
75
  /**
91
76
  * Resolve reference IDs to full document objects
92
77
  * POST /:branch/resolve-references
@@ -18,7 +18,7 @@ import { type GuardId, type ComputeGuardContext } from './guards.js';
18
18
  * @example
19
19
  * { 'collectionPath': 'createLogicalPath', 'items.*.path': 'createPhysicalPath' }
20
20
  */
21
- export type MockDataCasts = Record<string, 'createLogicalPath' | 'createPhysicalPath' | 'as ContentId'>;
21
+ type MockDataCasts = Record<string, 'createLogicalPath' | 'createPhysicalPath' | 'as ContentId'>;
22
22
  /**
23
23
  * Metadata for code generation
24
24
  */
@@ -35,10 +35,6 @@ export interface RouteMetadata {
35
35
  /** Casts to apply to mock data fields for branded types */
36
36
  mockDataCasts?: MockDataCasts;
37
37
  }
38
- /**
39
- * Global registry - generator reads this
40
- */
41
- export declare const ROUTE_REGISTRY: RouteMetadata[];
42
38
  /**
43
39
  * Route definition created by defineEndpoint.
44
40
  * Contains all metadata needed for:
@@ -77,7 +73,7 @@ export interface RouteDefinition<TParams extends z.ZodType | undefined = undefin
77
73
  /**
78
74
  * Handler function signature with validated params and body (no guards)
79
75
  */
80
- export type RouteHandler<TParams extends z.ZodType | undefined, TBody extends z.ZodType | undefined, TResponse> = (ctx: ApiContext, req: ApiRequest, ...args: [
76
+ type RouteHandler<TParams extends z.ZodType | undefined, TBody extends z.ZodType | undefined, TResponse> = (ctx: ApiContext, req: ApiRequest, ...args: [
81
77
  ...(TParams extends z.ZodType ? [params: z.infer<TParams>] : []),
82
78
  ...(TBody extends z.ZodType ? [body: z.infer<TBody>] : [])
83
79
  ]) => Promise<TResponse>;
@@ -85,7 +81,7 @@ export type RouteHandler<TParams extends z.ZodType | undefined, TBody extends z.
85
81
  * Guarded handler: receives guard context as first argument.
86
82
  * The guard context shape is computed from the declared guards.
87
83
  */
88
- export type GuardedRouteHandler<TGuards extends readonly GuardId[], TParams extends z.ZodType | undefined, TBody extends z.ZodType | undefined, TResponse> = (gc: ComputeGuardContext<TGuards>, ctx: ApiContext, req: ApiRequest, ...args: [
84
+ type GuardedRouteHandler<TGuards extends readonly GuardId[], TParams extends z.ZodType | undefined, TBody extends z.ZodType | undefined, TResponse> = (gc: ComputeGuardContext<TGuards>, ctx: ApiContext, req: ApiRequest, ...args: [
89
85
  ...(TParams extends z.ZodType ? [params: z.infer<TParams>] : []),
90
86
  ...(TBody extends z.ZodType ? [body: z.infer<TBody>] : [])
91
87
  ]) => Promise<TResponse>;
@@ -12,7 +12,7 @@ import { executeGuards } from './guards.js';
12
12
  /**
13
13
  * Global registry - generator reads this
14
14
  */
15
- export const ROUTE_REGISTRY = [];
15
+ const ROUTE_REGISTRY = [];
16
16
  /** Implementation — uses `any` for the union of overloaded config types */
17
17
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
18
  export function defineEndpoint(config) {
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Every route table, assembled for http/router.ts. Server-only: the tables
3
+ * pull in node built-ins, so api/index.ts (reachable from client.ts) never
4
+ * re-exports this module. `pnpm lint:bundle` holds that edge and the
5
+ * `http-reaches-api-only-via-routes` dependency-cruiser rule holds this one.
6
+ */
7
+ import type { RouteDefinition } from '../http/router.js';
8
+ /**
9
+ * A function, not a top-level constant, so every route module is fully
10
+ * initialized before its exports are read.
11
+ */
12
+ export declare function buildCanopyRoutes(): RouteDefinition[];
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Every route table, assembled for http/router.ts. Server-only: the tables
3
+ * pull in node built-ins, so api/index.ts (reachable from client.ts) never
4
+ * re-exports this module. `pnpm lint:bundle` holds that edge and the
5
+ * `http-reaches-api-only-via-routes` dependency-cruiser rule holds this one.
6
+ */
7
+ import { BRANCH_ROUTES } from './branch.js';
8
+ import { WORKFLOW_ROUTES } from './branch-status.js';
9
+ import { COMMENT_ROUTES } from './comments.js';
10
+ import { CONTENT_ROUTES } from './content.js';
11
+ import { REFERENCE_OPTIONS_ROUTES } from './reference-options.js';
12
+ import { RESOLVE_REFERENCES_ROUTES } from './resolve-references.js';
13
+ import { ENTRY_ROUTES } from './entries.js';
14
+ import { ASSET_ROUTES, assetRawRoute } from './assets.js';
15
+ import { PERMISSION_ROUTES } from './permissions.js';
16
+ import { GROUP_ROUTES } from './groups.js';
17
+ import { USER_ROUTES } from './user.js';
18
+ import { SCHEMA_ROUTES } from './schema.js';
19
+ import { ADMIN_ROUTES } from './admin.js';
20
+ /**
21
+ * A function, not a top-level constant, so every route module is fully
22
+ * initialized before its exports are read.
23
+ */
24
+ export function buildCanopyRoutes() {
25
+ return [
26
+ ...Object.values(BRANCH_ROUTES),
27
+ ...Object.values(WORKFLOW_ROUTES),
28
+ ...Object.values(COMMENT_ROUTES),
29
+ ...Object.values(CONTENT_ROUTES),
30
+ ...Object.values(REFERENCE_OPTIONS_ROUTES),
31
+ ...Object.values(RESOLVE_REFERENCES_ROUTES),
32
+ ...Object.values(ENTRY_ROUTES),
33
+ ...Object.values(ASSET_ROUTES),
34
+ assetRawRoute,
35
+ ...Object.values(PERMISSION_ROUTES),
36
+ ...Object.values(GROUP_ROUTES),
37
+ ...Object.values(USER_ROUTES),
38
+ ...Object.values(SCHEMA_ROUTES),
39
+ ...Object.values(ADMIN_ROUTES),
40
+ ].map((route) => ({
41
+ method: route.method,
42
+ pattern: route.pattern,
43
+ handler: route.handler,
44
+ validate: 'validate' in route ? route.validate : undefined,
45
+ bodyFormat: 'bodyFormat' in route ? route.bodyFormat : undefined,
46
+ }));
47
+ }
@@ -1,11 +1,6 @@
1
1
  /**
2
2
  * Schema API - endpoints for managing collection structure.
3
3
  *
4
- * Provides CRUD operations for:
5
- * - Collections (create, read, update, delete)
6
- * - Entry types (add, update, remove)
7
- * - Ordering (update item order within collections)
8
- *
9
4
  * All mutations require Admin group membership.
10
5
  * Schema changes are branch-specific (like content edits).
11
6
  */
@@ -14,7 +9,7 @@ import type { ApiResponse } from './types.js';
14
9
  import type { ContentFormat, EntrySchema } from '../config/index.js';
15
10
  import { type LogicalPath, type ContentId } from '../paths/index.js';
16
11
  /** Entry type in wire format: schemaRef instead of resolved schema */
17
- export interface WireEntryType {
12
+ interface WireEntryType {
18
13
  readonly name: string;
19
14
  readonly format: ContentFormat;
20
15
  readonly schemaRef: string;
@@ -23,7 +18,7 @@ export interface WireEntryType {
23
18
  readonly maxItems?: number;
24
19
  }
25
20
  /** Collection in wire format (entry types carry schemaRef, not resolved schema) */
26
- export interface WireCollectionConfig {
21
+ interface WireCollectionConfig {
27
22
  readonly name: string;
28
23
  readonly path: string;
29
24
  readonly label?: string;
@@ -38,7 +33,7 @@ export interface WireCollectionConfig {
38
33
  * collections appear as their own flat items, linked via `parentPath`.
39
34
  * Embedding subtrees would re-serialize every collection once per ancestor.
40
35
  */
41
- export type WireFlatSchemaItem = {
36
+ type WireFlatSchemaItem = {
42
37
  type: 'collection';
43
38
  logicalPath: LogicalPath;
44
39
  name: string;
@@ -58,12 +53,12 @@ export type WireFlatSchemaItem = {
58
53
  default?: boolean;
59
54
  maxItems?: number;
60
55
  };
61
- export interface SchemaResponse {
56
+ interface SchemaResponse {
62
57
  flatSchema: WireFlatSchemaItem[];
63
58
  /** Entry schema definitions keyed by registry name */
64
59
  entrySchemas: Record<string, EntrySchema>;
65
60
  }
66
- export interface EntryTypeWithUsage {
61
+ interface EntryTypeWithUsage {
67
62
  name: string;
68
63
  label?: string;
69
64
  format: ContentFormat;
@@ -73,36 +68,36 @@ export interface EntryTypeWithUsage {
73
68
  /** Number of entries using this entry type (for locking validation) */
74
69
  usageCount: number;
75
70
  }
76
- export interface CollectionResponse {
71
+ interface CollectionResponse {
77
72
  collection: WireCollectionConfig | null;
78
73
  /** Entry types with usage counts (only present when collection exists) */
79
74
  entryTypesWithUsage?: EntryTypeWithUsage[];
80
75
  }
81
- export interface CreateCollectionResponse {
76
+ interface CreateCollectionResponse {
82
77
  /** The logical path to the created collection (e.g., "posts" or "blog/posts") */
83
78
  collectionPath: LogicalPath;
84
79
  /** The unique 12-character content ID for the collection */
85
80
  contentId: ContentId;
86
81
  }
87
- export interface UpdateCollectionResponse {
82
+ interface UpdateCollectionResponse {
88
83
  success: boolean;
89
84
  }
90
- export interface DeleteCollectionResponse {
85
+ interface DeleteCollectionResponse {
91
86
  success: boolean;
92
87
  }
93
- export interface AddEntryTypeResponse {
88
+ interface AddEntryTypeResponse {
94
89
  success: boolean;
95
90
  }
96
- export interface UpdateEntryTypeResponse {
91
+ interface UpdateEntryTypeResponse {
97
92
  success: boolean;
98
93
  }
99
- export interface RemoveEntryTypeResponse {
94
+ interface RemoveEntryTypeResponse {
100
95
  success: boolean;
101
96
  }
102
- export interface UpdateOrderResponse {
97
+ interface UpdateOrderResponse {
103
98
  success: boolean;
104
99
  }
105
- export interface InvalidateSchemaCacheResponse {
100
+ interface InvalidateSchemaCacheResponse {
106
101
  success: boolean;
107
102
  message: string;
108
103
  }
@@ -125,6 +120,7 @@ declare const updateOrderBodySchema: z.ZodObject<{
125
120
  }>;
126
121
  /**
127
122
  * GET /:branch/schema - Get full schema
123
+ * @internal Exported for tests.
128
124
  */
129
125
  export declare const getSchema: import("./route-builder.js").RouteDefinition<z.ZodObject<{
130
126
  branch: z.ZodType<import("../paths/index.js").BranchName, z.ZodTypeDef, import("../paths/index.js").BranchName>;
@@ -140,6 +136,7 @@ export declare const getSchema: import("./route-builder.js").RouteDefinition<z.Z
140
136
  /**
141
137
  * GET /:branch/schema/collection/...collectionPath - Get single collection
142
138
  * Note: Uses 'collection' (singular) with catch-all to support paths with slashes
139
+ * @internal Exported for tests.
143
140
  */
144
141
  export declare const getCollection: import("./route-builder.js").RouteDefinition<z.ZodObject<{
145
142
  branch: z.ZodType<import("../paths/index.js").BranchName, z.ZodTypeDef, import("../paths/index.js").BranchName>;
@@ -161,6 +158,7 @@ export declare const getCollection: import("./route-builder.js").RouteDefinition
161
158
  }>, undefined, GetCollectionApiResponse>;
162
159
  /**
163
160
  * POST /:branch/schema/collections - Create collection
161
+ * @internal Exported for tests.
164
162
  */
165
163
  export declare const createCollection: import("./route-builder.js").RouteDefinition<z.ZodObject<{
166
164
  branch: z.ZodType<import("../paths/index.js").BranchName, z.ZodTypeDef, import("../paths/index.js").BranchName>;
@@ -226,6 +224,7 @@ export declare const createCollection: import("./route-builder.js").RouteDefinit
226
224
  /**
227
225
  * PATCH /:branch/schema/collection/...collectionPath - Update collection
228
226
  * Note: Uses 'collection' (singular) with catch-all to support paths with slashes
227
+ * @internal Exported for tests.
229
228
  */
230
229
  export declare const updateCollection: import("./route-builder.js").RouteDefinition<z.ZodObject<{
231
230
  branch: z.ZodType<import("../paths/index.js").BranchName, z.ZodTypeDef, import("../paths/index.js").BranchName>;
@@ -263,6 +262,7 @@ export declare const updateCollection: import("./route-builder.js").RouteDefinit
263
262
  /**
264
263
  * DELETE /:branch/schema/collection/...collectionPath - Delete collection
265
264
  * Note: Uses 'collection' (singular) with catch-all to support paths with slashes
265
+ * @internal Exported for tests.
266
266
  */
267
267
  export declare const deleteCollection: import("./route-builder.js").RouteDefinition<z.ZodObject<{
268
268
  branch: z.ZodType<import("../paths/index.js").BranchName, z.ZodTypeDef, import("../paths/index.js").BranchName>;
@@ -285,6 +285,7 @@ export declare const deleteCollection: import("./route-builder.js").RouteDefinit
285
285
  /**
286
286
  * POST /:branch/schema/entry-types/...collectionPath - Add entry type
287
287
  * Note: Restructured URL with catch-all at end to support paths with slashes
288
+ * @internal Exported for tests.
288
289
  */
289
290
  export declare const addEntryType: import("./route-builder.js").RouteDefinition<z.ZodObject<{
290
291
  branch: z.ZodType<import("../paths/index.js").BranchName, z.ZodTypeDef, import("../paths/index.js").BranchName>;
@@ -328,6 +329,7 @@ export declare const addEntryType: import("./route-builder.js").RouteDefinition<
328
329
  /**
329
330
  * PATCH /:branch/schema/entry-types/:entryTypeName/...collectionPath - Update entry type
330
331
  * Note: Restructured URL with entry type name before catch-all path
332
+ * @internal Exported for tests.
331
333
  */
332
334
  export declare const updateEntryType: import("./route-builder.js").RouteDefinition<z.ZodObject<{
333
335
  branch: z.ZodType<import("../paths/index.js").BranchName, z.ZodTypeDef, import("../paths/index.js").BranchName>;
@@ -371,6 +373,7 @@ export declare const updateEntryType: import("./route-builder.js").RouteDefiniti
371
373
  /**
372
374
  * DELETE /:branch/schema/entry-types/:entryTypeName/...collectionPath - Remove entry type
373
375
  * Note: Restructured URL with entry type name before catch-all path
376
+ * @internal Exported for tests.
374
377
  */
375
378
  export declare const removeEntryType: import("./route-builder.js").RouteDefinition<z.ZodObject<{
376
379
  branch: z.ZodType<import("../paths/index.js").BranchName, z.ZodTypeDef, import("../paths/index.js").BranchName>;
@@ -396,6 +399,7 @@ export declare const removeEntryType: import("./route-builder.js").RouteDefiniti
396
399
  /**
397
400
  * PATCH /:branch/schema/order/...collectionPath - Update item order
398
401
  * Note: Restructured URL with catch-all at end to support paths with slashes
402
+ * @internal Exported for tests.
399
403
  */
400
404
  export declare const updateOrder: import("./route-builder.js").RouteDefinition<z.ZodObject<{
401
405
  branch: z.ZodType<import("../paths/index.js").BranchName, z.ZodTypeDef, import("../paths/index.js").BranchName>;
@@ -421,20 +425,6 @@ export declare const updateOrder: import("./route-builder.js").RouteDefinition<z
421
425
  }, {
422
426
  order: string[];
423
427
  }>, UpdateOrderApiResponse>;
424
- /**
425
- * POST /:branch/schema/invalidate-cache - Invalidate schema cache
426
- */
427
- export declare const invalidateSchemaCache: import("./route-builder.js").RouteDefinition<z.ZodObject<{
428
- branch: z.ZodType<import("../paths/index.js").BranchName, z.ZodTypeDef, import("../paths/index.js").BranchName>;
429
- }, "strip", z.ZodTypeAny, {
430
- branch: string & {
431
- readonly __brand: "BranchName";
432
- };
433
- }, {
434
- branch: string & {
435
- readonly __brand: "BranchName";
436
- };
437
- }>, undefined, InvalidateSchemaCacheApiResponse>;
438
428
  /** Body type for updateOrder endpoint */
439
429
  export type UpdateOrderBody = z.infer<typeof updateOrderBodySchema>;
440
430
  export declare const SCHEMA_ROUTES: {