@orthacms/content-server 0.0.0-reserve.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.
Files changed (396) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/dist/define.d.ts +17 -0
  4. package/dist/define.d.ts.map +1 -0
  5. package/dist/define.js +28 -0
  6. package/dist/index.d.ts +48 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +109 -0
  9. package/dist/lib/collection/define.d.ts +35 -0
  10. package/dist/lib/collection/define.d.ts.map +1 -0
  11. package/dist/lib/collection/define.js +217 -0
  12. package/dist/lib/collection/table-builder.d.ts +28 -0
  13. package/dist/lib/collection/table-builder.d.ts.map +1 -0
  14. package/dist/lib/collection/table-builder.js +306 -0
  15. package/dist/lib/content-types/controllers/get-content-schema.controller.d.ts +24 -0
  16. package/dist/lib/content-types/controllers/get-content-schema.controller.d.ts.map +1 -0
  17. package/dist/lib/content-types/controllers/get-content-schema.controller.js +58 -0
  18. package/dist/lib/content-types/controllers/get-filter-fields.controller.d.ts +35 -0
  19. package/dist/lib/content-types/controllers/get-filter-fields.controller.d.ts.map +1 -0
  20. package/dist/lib/content-types/controllers/get-filter-fields.controller.js +74 -0
  21. package/dist/lib/content-types/controllers/list-content-schema.controller.d.ts +15 -0
  22. package/dist/lib/content-types/controllers/list-content-schema.controller.d.ts.map +1 -0
  23. package/dist/lib/content-types/controllers/list-content-schema.controller.js +38 -0
  24. package/dist/lib/content-types/queries/workspace-grants.query.d.ts +25 -0
  25. package/dist/lib/content-types/queries/workspace-grants.query.d.ts.map +1 -0
  26. package/dist/lib/content-types/queries/workspace-grants.query.js +45 -0
  27. package/dist/lib/content.module.d.ts +21 -0
  28. package/dist/lib/content.module.d.ts.map +1 -0
  29. package/dist/lib/content.module.js +264 -0
  30. package/dist/lib/content.tokens.d.ts +5 -0
  31. package/dist/lib/content.tokens.d.ts.map +1 -0
  32. package/dist/lib/content.tokens.js +9 -0
  33. package/dist/lib/copilot/content-tool.provider.d.ts +64 -0
  34. package/dist/lib/copilot/content-tool.provider.d.ts.map +1 -0
  35. package/dist/lib/copilot/content-tool.provider.js +309 -0
  36. package/dist/lib/copilot/diff-snapshots.d.ts +42 -0
  37. package/dist/lib/copilot/diff-snapshots.d.ts.map +1 -0
  38. package/dist/lib/copilot/diff-snapshots.js +77 -0
  39. package/dist/lib/copilot/entry-proposal.applier.d.ts +89 -0
  40. package/dist/lib/copilot/entry-proposal.applier.d.ts.map +1 -0
  41. package/dist/lib/copilot/entry-proposal.applier.js +245 -0
  42. package/dist/lib/copilot/entry-proposal.provider.d.ts +157 -0
  43. package/dist/lib/copilot/entry-proposal.provider.d.ts.map +1 -0
  44. package/dist/lib/copilot/entry-proposal.provider.js +619 -0
  45. package/dist/lib/copilot/filter-schema.d.ts +61 -0
  46. package/dist/lib/copilot/filter-schema.d.ts.map +1 -0
  47. package/dist/lib/copilot/filter-schema.js +139 -0
  48. package/dist/lib/copilot/project-entry.d.ts +23 -0
  49. package/dist/lib/copilot/project-entry.d.ts.map +1 -0
  50. package/dist/lib/copilot/project-entry.js +36 -0
  51. package/dist/lib/copilot/proposal-kinds.d.ts +30 -0
  52. package/dist/lib/copilot/proposal-kinds.d.ts.map +1 -0
  53. package/dist/lib/copilot/proposal-kinds.js +32 -0
  54. package/dist/lib/copilot/revision-tool.provider.d.ts +56 -0
  55. package/dist/lib/copilot/revision-tool.provider.d.ts.map +1 -0
  56. package/dist/lib/copilot/revision-tool.provider.js +215 -0
  57. package/dist/lib/docs/content-schemas.d.ts +34 -0
  58. package/dist/lib/docs/content-schemas.d.ts.map +1 -0
  59. package/dist/lib/docs/content-schemas.js +617 -0
  60. package/dist/lib/docs/describe-content-api.d.ts +22 -0
  61. package/dist/lib/docs/describe-content-api.d.ts.map +1 -0
  62. package/dist/lib/docs/describe-content-api.js +173 -0
  63. package/dist/lib/docs/field-schema.d.ts +28 -0
  64. package/dist/lib/docs/field-schema.d.ts.map +1 -0
  65. package/dist/lib/docs/field-schema.js +214 -0
  66. package/dist/lib/entries/application/use-cases/bulk-publish-entries.use-case.d.ts +23 -0
  67. package/dist/lib/entries/application/use-cases/bulk-publish-entries.use-case.d.ts.map +1 -0
  68. package/dist/lib/entries/application/use-cases/bulk-publish-entries.use-case.js +77 -0
  69. package/dist/lib/entries/application/use-cases/bulk-unpublish-entries.use-case.d.ts +23 -0
  70. package/dist/lib/entries/application/use-cases/bulk-unpublish-entries.use-case.d.ts.map +1 -0
  71. package/dist/lib/entries/application/use-cases/bulk-unpublish-entries.use-case.js +66 -0
  72. package/dist/lib/entries/application/use-cases/publish-entry.use-case.d.ts +43 -0
  73. package/dist/lib/entries/application/use-cases/publish-entry.use-case.d.ts.map +1 -0
  74. package/dist/lib/entries/application/use-cases/publish-entry.use-case.js +106 -0
  75. package/dist/lib/entries/application/use-cases/unpublish-entry.use-case.d.ts +30 -0
  76. package/dist/lib/entries/application/use-cases/unpublish-entry.use-case.d.ts.map +1 -0
  77. package/dist/lib/entries/application/use-cases/unpublish-entry.use-case.js +70 -0
  78. package/dist/lib/entries/controllers/bulk-entries.controller.d.ts +26 -0
  79. package/dist/lib/entries/controllers/bulk-entries.controller.d.ts.map +1 -0
  80. package/dist/lib/entries/controllers/create-entry.controller.d.ts +20 -0
  81. package/dist/lib/entries/controllers/create-entry.controller.d.ts.map +1 -0
  82. package/dist/lib/entries/controllers/delete-entry.controller.d.ts +24 -0
  83. package/dist/lib/entries/controllers/delete-entry.controller.d.ts.map +1 -0
  84. package/dist/lib/entries/controllers/get-entry.controller.d.ts +34 -0
  85. package/dist/lib/entries/controllers/get-entry.controller.d.ts.map +1 -0
  86. package/dist/lib/entries/controllers/list-entries.controller.d.ts +20 -0
  87. package/dist/lib/entries/controllers/list-entries.controller.d.ts.map +1 -0
  88. package/dist/lib/entries/controllers/publish-entry.controller.d.ts +19 -0
  89. package/dist/lib/entries/controllers/publish-entry.controller.d.ts.map +1 -0
  90. package/dist/lib/entries/controllers/resolve-type.d.ts +9 -0
  91. package/dist/lib/entries/controllers/resolve-type.d.ts.map +1 -0
  92. package/dist/lib/entries/controllers/update-entry.controller.d.ts +18 -0
  93. package/dist/lib/entries/controllers/update-entry.controller.d.ts.map +1 -0
  94. package/dist/lib/entries/domain/entry-publish-blocked.error.d.ts +13 -0
  95. package/dist/lib/entries/domain/entry-publish-blocked.error.d.ts.map +1 -0
  96. package/dist/lib/entries/domain/entry-publish-blocked.error.js +19 -0
  97. package/dist/lib/entries/domain/entry.d.ts +71 -0
  98. package/dist/lib/entries/domain/entry.d.ts.map +1 -0
  99. package/dist/lib/entries/domain/entry.js +90 -0
  100. package/dist/lib/entries/domain/events/entry-events.d.ts +67 -0
  101. package/dist/lib/entries/domain/events/entry-events.d.ts.map +1 -0
  102. package/dist/lib/entries/domain/events/entry-events.js +100 -0
  103. package/dist/lib/entries/dto/bulk-ids.dto.d.ts +11 -0
  104. package/dist/lib/entries/dto/bulk-ids.dto.d.ts.map +1 -0
  105. package/dist/lib/entries/dto/list-entries-query.dto.d.ts +46 -0
  106. package/dist/lib/entries/dto/list-entries-query.dto.d.ts.map +1 -0
  107. package/dist/lib/entries/dto/relation-delta-map.validator.d.ts +19 -0
  108. package/dist/lib/entries/dto/relation-delta-map.validator.d.ts.map +1 -0
  109. package/dist/lib/entries/dto/save-entry.dto.d.ts +46 -0
  110. package/dist/lib/entries/dto/save-entry.dto.d.ts.map +1 -0
  111. package/dist/lib/entries/entries.constants.d.ts +19 -0
  112. package/dist/lib/entries/entries.constants.d.ts.map +1 -0
  113. package/dist/lib/entries/entries.constants.js +21 -0
  114. package/dist/lib/entries/http/controllers/bulk-entries.controller.d.ts +33 -0
  115. package/dist/lib/entries/http/controllers/bulk-entries.controller.d.ts.map +1 -0
  116. package/dist/lib/entries/http/controllers/bulk-entries.controller.js +143 -0
  117. package/dist/lib/entries/http/controllers/create-entry.controller.d.ts +21 -0
  118. package/dist/lib/entries/http/controllers/create-entry.controller.d.ts.map +1 -0
  119. package/dist/lib/entries/http/controllers/create-entry.controller.js +52 -0
  120. package/dist/lib/entries/http/controllers/delete-entry.controller.d.ts +25 -0
  121. package/dist/lib/entries/http/controllers/delete-entry.controller.d.ts.map +1 -0
  122. package/dist/lib/entries/http/controllers/delete-entry.controller.js +84 -0
  123. package/dist/lib/entries/http/controllers/get-entry.controller.d.ts +44 -0
  124. package/dist/lib/entries/http/controllers/get-entry.controller.d.ts.map +1 -0
  125. package/dist/lib/entries/http/controllers/get-entry.controller.js +124 -0
  126. package/dist/lib/entries/http/controllers/list-entries.controller.d.ts +20 -0
  127. package/dist/lib/entries/http/controllers/list-entries.controller.d.ts.map +1 -0
  128. package/dist/lib/entries/http/controllers/list-entries.controller.js +52 -0
  129. package/dist/lib/entries/http/controllers/publish-entry.controller.d.ts +22 -0
  130. package/dist/lib/entries/http/controllers/publish-entry.controller.d.ts.map +1 -0
  131. package/dist/lib/entries/http/controllers/publish-entry.controller.js +68 -0
  132. package/dist/lib/entries/http/controllers/resolve-type.d.ts +9 -0
  133. package/dist/lib/entries/http/controllers/resolve-type.d.ts.map +1 -0
  134. package/dist/lib/entries/http/controllers/resolve-type.js +16 -0
  135. package/dist/lib/entries/http/controllers/to-actor.d.ts +13 -0
  136. package/dist/lib/entries/http/controllers/to-actor.d.ts.map +1 -0
  137. package/dist/lib/entries/http/controllers/to-actor.js +15 -0
  138. package/dist/lib/entries/http/controllers/update-entry.controller.d.ts +19 -0
  139. package/dist/lib/entries/http/controllers/update-entry.controller.d.ts.map +1 -0
  140. package/dist/lib/entries/http/controllers/update-entry.controller.js +51 -0
  141. package/dist/lib/entries/http/dto/bulk-ids.dto.d.ts +11 -0
  142. package/dist/lib/entries/http/dto/bulk-ids.dto.d.ts.map +1 -0
  143. package/dist/lib/entries/http/dto/bulk-ids.dto.js +33 -0
  144. package/dist/lib/entries/http/dto/list-entries-query.dto.d.ts +66 -0
  145. package/dist/lib/entries/http/dto/list-entries-query.dto.d.ts.map +1 -0
  146. package/dist/lib/entries/http/dto/list-entries-query.dto.js +192 -0
  147. package/dist/lib/entries/http/dto/relation-delta-map.validator.d.ts +30 -0
  148. package/dist/lib/entries/http/dto/relation-delta-map.validator.d.ts.map +1 -0
  149. package/dist/lib/entries/http/dto/relation-delta-map.validator.js +102 -0
  150. package/dist/lib/entries/http/dto/save-entry.dto.d.ts +48 -0
  151. package/dist/lib/entries/http/dto/save-entry.dto.d.ts.map +1 -0
  152. package/dist/lib/entries/http/dto/save-entry.dto.js +120 -0
  153. package/dist/lib/entries/http/guards/content-grant.guard.d.ts +37 -0
  154. package/dist/lib/entries/http/guards/content-grant.guard.d.ts.map +1 -0
  155. package/dist/lib/entries/http/guards/content-grant.guard.js +67 -0
  156. package/dist/lib/entries/infrastructure/persistence/bulk-publish-verdicts.d.ts +22 -0
  157. package/dist/lib/entries/infrastructure/persistence/bulk-publish-verdicts.d.ts.map +1 -0
  158. package/dist/lib/entries/infrastructure/persistence/bulk-publish-verdicts.js +81 -0
  159. package/dist/lib/entries/infrastructure/persistence/entry-counter.service.d.ts +42 -0
  160. package/dist/lib/entries/infrastructure/persistence/entry-counter.service.d.ts.map +1 -0
  161. package/dist/lib/entries/infrastructure/persistence/entry-counter.service.js +73 -0
  162. package/dist/lib/entries/infrastructure/persistence/entry-row.d.ts +56 -0
  163. package/dist/lib/entries/infrastructure/persistence/entry-row.d.ts.map +1 -0
  164. package/dist/lib/entries/infrastructure/persistence/entry-row.js +185 -0
  165. package/dist/lib/entries/infrastructure/persistence/entry-writer.service.d.ts +392 -0
  166. package/dist/lib/entries/infrastructure/persistence/entry-writer.service.d.ts.map +1 -0
  167. package/dist/lib/entries/infrastructure/persistence/entry-writer.service.js +1223 -0
  168. package/dist/lib/entries/infrastructure/persistence/field-selection.d.ts +24 -0
  169. package/dist/lib/entries/infrastructure/persistence/field-selection.d.ts.map +1 -0
  170. package/dist/lib/entries/infrastructure/persistence/media-accept.d.ts +23 -0
  171. package/dist/lib/entries/infrastructure/persistence/media-accept.d.ts.map +1 -0
  172. package/dist/lib/entries/infrastructure/persistence/media-accept.js +55 -0
  173. package/dist/lib/entries/infrastructure/persistence/relation-link.service.d.ts +327 -0
  174. package/dist/lib/entries/infrastructure/persistence/relation-link.service.d.ts.map +1 -0
  175. package/dist/lib/entries/infrastructure/persistence/relation-link.service.js +1008 -0
  176. package/dist/lib/entries/infrastructure/queries/bulk-publish-preview.query.d.ts +19 -0
  177. package/dist/lib/entries/infrastructure/queries/bulk-publish-preview.query.d.ts.map +1 -0
  178. package/dist/lib/entries/infrastructure/queries/bulk-publish-preview.query.js +39 -0
  179. package/dist/lib/entries/infrastructure/queries/entries.service.d.ts +64 -0
  180. package/dist/lib/entries/infrastructure/queries/entries.service.d.ts.map +1 -0
  181. package/dist/lib/entries/infrastructure/queries/entries.service.js +202 -0
  182. package/dist/lib/entries/infrastructure/queries/entry-filter-schema.d.ts +40 -0
  183. package/dist/lib/entries/infrastructure/queries/entry-filter-schema.d.ts.map +1 -0
  184. package/dist/lib/entries/infrastructure/queries/entry-filter-surface.d.ts +38 -0
  185. package/dist/lib/entries/infrastructure/queries/entry-filter-surface.d.ts.map +1 -0
  186. package/dist/lib/entries/infrastructure/queries/entry-filter-surface.js +310 -0
  187. package/dist/lib/entries/infrastructure/queries/entry-scalar-fields.d.ts +25 -0
  188. package/dist/lib/entries/infrastructure/queries/entry-scalar-fields.d.ts.map +1 -0
  189. package/dist/lib/entries/infrastructure/queries/entry-scalar-fields.js +51 -0
  190. package/dist/lib/entries/infrastructure/queries/entry-search.d.ts +19 -0
  191. package/dist/lib/entries/infrastructure/queries/entry-search.d.ts.map +1 -0
  192. package/dist/lib/entries/infrastructure/queries/entry-search.js +52 -0
  193. package/dist/lib/entries/infrastructure/queries/media-refs.query.d.ts +21 -0
  194. package/dist/lib/entries/infrastructure/queries/media-refs.query.d.ts.map +1 -0
  195. package/dist/lib/entries/infrastructure/queries/media-refs.query.js +117 -0
  196. package/dist/lib/entries/services/entries.service.d.ts +59 -0
  197. package/dist/lib/entries/services/entries.service.d.ts.map +1 -0
  198. package/dist/lib/entries/services/entry-counter.service.d.ts +31 -0
  199. package/dist/lib/entries/services/entry-counter.service.d.ts.map +1 -0
  200. package/dist/lib/entries/services/entry-filter-schema.d.ts +32 -0
  201. package/dist/lib/entries/services/entry-filter-schema.d.ts.map +1 -0
  202. package/dist/lib/entries/services/entry-row.d.ts +56 -0
  203. package/dist/lib/entries/services/entry-row.d.ts.map +1 -0
  204. package/dist/lib/entries/services/entry-writer.service.d.ts +193 -0
  205. package/dist/lib/entries/services/entry-writer.service.d.ts.map +1 -0
  206. package/dist/lib/entries/services/relation-link.service.d.ts +115 -0
  207. package/dist/lib/entries/services/relation-link.service.d.ts.map +1 -0
  208. package/dist/lib/entries/types/bulk-publish.d.ts +75 -0
  209. package/dist/lib/entries/types/bulk-publish.d.ts.map +1 -0
  210. package/dist/lib/entries/types/bulk-publish.js +22 -0
  211. package/dist/lib/entries/types/entry-list-view.d.ts +205 -0
  212. package/dist/lib/entries/types/entry-list-view.d.ts.map +1 -0
  213. package/dist/lib/entries/types/entry-list-view.js +5 -0
  214. package/dist/lib/entries/types/filter-surface.d.ts +35 -0
  215. package/dist/lib/entries/types/filter-surface.d.ts.map +1 -0
  216. package/dist/lib/entries/types/filter-surface.js +2 -0
  217. package/dist/lib/extension/entry-extension-boot-check.d.ts +16 -0
  218. package/dist/lib/extension/entry-extension-boot-check.d.ts.map +1 -0
  219. package/dist/lib/extension/entry-extension-boot-check.js +42 -0
  220. package/dist/lib/extension/entry-extension.d.ts +225 -0
  221. package/dist/lib/extension/entry-extension.d.ts.map +1 -0
  222. package/dist/lib/extension/entry-extension.js +27 -0
  223. package/dist/lib/extension/media-asset-resolver.d.ts +85 -0
  224. package/dist/lib/extension/media-asset-resolver.d.ts.map +1 -0
  225. package/dist/lib/extension/media-asset-resolver.js +26 -0
  226. package/dist/lib/extension/per-locale-relation.d.ts +18 -0
  227. package/dist/lib/extension/per-locale-relation.d.ts.map +1 -0
  228. package/dist/lib/extension/relation-locale-sync.d.ts +62 -0
  229. package/dist/lib/extension/relation-locale-sync.d.ts.map +1 -0
  230. package/dist/lib/extension/relation-locale-sync.js +88 -0
  231. package/dist/lib/fields/index.d.ts +94 -0
  232. package/dist/lib/fields/index.d.ts.map +1 -0
  233. package/dist/lib/fields/index.js +203 -0
  234. package/dist/lib/insights/http/controllers/content-pipeline.controller.d.ts +16 -0
  235. package/dist/lib/insights/http/controllers/content-pipeline.controller.d.ts.map +1 -0
  236. package/dist/lib/insights/http/controllers/content-pipeline.controller.js +39 -0
  237. package/dist/lib/insights/http/controllers/content-punchcard.controller.d.ts +18 -0
  238. package/dist/lib/insights/http/controllers/content-punchcard.controller.d.ts.map +1 -0
  239. package/dist/lib/insights/http/controllers/content-punchcard.controller.js +42 -0
  240. package/dist/lib/insights/http/controllers/content-stale.controller.d.ts +17 -0
  241. package/dist/lib/insights/http/controllers/content-stale.controller.d.ts.map +1 -0
  242. package/dist/lib/insights/http/controllers/content-stale.controller.js +40 -0
  243. package/dist/lib/insights/http/controllers/content-totals.controller.d.ts +18 -0
  244. package/dist/lib/insights/http/controllers/content-totals.controller.d.ts.map +1 -0
  245. package/dist/lib/insights/http/controllers/content-totals.controller.js +42 -0
  246. package/dist/lib/insights/http/controllers/content-unshipped.controller.d.ts +17 -0
  247. package/dist/lib/insights/http/controllers/content-unshipped.controller.d.ts.map +1 -0
  248. package/dist/lib/insights/http/controllers/content-unshipped.controller.js +40 -0
  249. package/dist/lib/insights/http/controllers/content-velocity.controller.d.ts +17 -0
  250. package/dist/lib/insights/http/controllers/content-velocity.controller.d.ts.map +1 -0
  251. package/dist/lib/insights/http/controllers/content-velocity.controller.js +41 -0
  252. package/dist/lib/insights/http/dto/insights-range-query.dto.d.ts +15 -0
  253. package/dist/lib/insights/http/dto/insights-range-query.dto.d.ts.map +1 -0
  254. package/dist/lib/insights/http/dto/insights-range-query.dto.js +38 -0
  255. package/dist/lib/insights/infrastructure/queries/content-insights.query.d.ts +77 -0
  256. package/dist/lib/insights/infrastructure/queries/content-insights.query.d.ts.map +1 -0
  257. package/dist/lib/insights/infrastructure/queries/content-insights.query.js +380 -0
  258. package/dist/lib/insights/types/content-insights-view.d.ts +134 -0
  259. package/dist/lib/insights/types/content-insights-view.d.ts.map +1 -0
  260. package/dist/lib/insights/types/content-insights-view.js +10 -0
  261. package/dist/lib/mcp/content-tools.provider.d.ts +83 -0
  262. package/dist/lib/mcp/content-tools.provider.d.ts.map +1 -0
  263. package/dist/lib/mcp/content-tools.provider.js +441 -0
  264. package/dist/lib/mcp/tool-input.d.ts +43 -0
  265. package/dist/lib/mcp/tool-input.d.ts.map +1 -0
  266. package/dist/lib/mcp/tool-input.js +117 -0
  267. package/dist/lib/mcp/tool-schemas.d.ts +34 -0
  268. package/dist/lib/mcp/tool-schemas.d.ts.map +1 -0
  269. package/dist/lib/mcp/tool-schemas.js +282 -0
  270. package/dist/lib/public/controllers/get-public-entry.controller.d.ts +26 -0
  271. package/dist/lib/public/controllers/get-public-entry.controller.d.ts.map +1 -0
  272. package/dist/lib/public/controllers/list-public-entries.controller.d.ts +24 -0
  273. package/dist/lib/public/controllers/list-public-entries.controller.d.ts.map +1 -0
  274. package/dist/lib/public/controllers/public-schema.controller.d.ts +18 -0
  275. package/dist/lib/public/controllers/public-schema.controller.d.ts.map +1 -0
  276. package/dist/lib/public-api/http/api-token-request.d.ts +41 -0
  277. package/dist/lib/public-api/http/api-token-request.d.ts.map +1 -0
  278. package/dist/lib/public-api/http/api-token-request.js +2 -0
  279. package/dist/lib/public-api/http/controllers/public-content-types.controller.d.ts +31 -0
  280. package/dist/lib/public-api/http/controllers/public-content-types.controller.d.ts.map +1 -0
  281. package/dist/lib/public-api/http/controllers/public-content-types.controller.js +93 -0
  282. package/dist/lib/public-api/http/controllers/public-entries.controller.d.ts +101 -0
  283. package/dist/lib/public-api/http/controllers/public-entries.controller.d.ts.map +1 -0
  284. package/dist/lib/public-api/http/controllers/public-entries.controller.js +307 -0
  285. package/dist/lib/public-api/http/controllers/public-entry-writes.controller.d.ts +76 -0
  286. package/dist/lib/public-api/http/controllers/public-entry-writes.controller.d.ts.map +1 -0
  287. package/dist/lib/public-api/http/controllers/public-entry-writes.controller.js +353 -0
  288. package/dist/lib/public-api/http/controllers/resolve-granted-type.d.ts +42 -0
  289. package/dist/lib/public-api/http/controllers/resolve-granted-type.d.ts.map +1 -0
  290. package/dist/lib/public-api/http/controllers/resolve-granted-type.js +25 -0
  291. package/dist/lib/public-api/http/decorators/current-api-token.decorator.d.ts +8 -0
  292. package/dist/lib/public-api/http/decorators/current-api-token.decorator.d.ts.map +1 -0
  293. package/dist/lib/public-api/http/decorators/current-api-token.decorator.js +17 -0
  294. package/dist/lib/public-api/http/dto/public-bulk.dto.d.ts +58 -0
  295. package/dist/lib/public-api/http/dto/public-bulk.dto.d.ts.map +1 -0
  296. package/dist/lib/public-api/http/dto/public-bulk.dto.js +118 -0
  297. package/dist/lib/public-api/http/dto/public-list-entries-query.dto.d.ts +106 -0
  298. package/dist/lib/public-api/http/dto/public-list-entries-query.dto.d.ts.map +1 -0
  299. package/dist/lib/public-api/http/dto/public-list-entries-query.dto.js +297 -0
  300. package/dist/lib/public-api/http/dto/public-save-entry.dto.d.ts +39 -0
  301. package/dist/lib/public-api/http/dto/public-save-entry.dto.d.ts.map +1 -0
  302. package/dist/lib/public-api/http/dto/public-save-entry.dto.js +112 -0
  303. package/dist/lib/public-api/http/guards/api-token-workspace.guard.d.ts +25 -0
  304. package/dist/lib/public-api/http/guards/api-token-workspace.guard.d.ts.map +1 -0
  305. package/dist/lib/public-api/http/guards/api-token-workspace.guard.js +58 -0
  306. package/dist/lib/public-api/http/guards/api-token.guard.d.ts +32 -0
  307. package/dist/lib/public-api/http/guards/api-token.guard.d.ts.map +1 -0
  308. package/dist/lib/public-api/http/guards/api-token.guard.js +92 -0
  309. package/dist/lib/public-api/http/guards/draft-visibility.guard.d.ts +25 -0
  310. package/dist/lib/public-api/http/guards/draft-visibility.guard.d.ts.map +1 -0
  311. package/dist/lib/public-api/http/guards/draft-visibility.guard.js +56 -0
  312. package/dist/lib/public-api/infrastructure/bulk-save-op.d.ts +55 -0
  313. package/dist/lib/public-api/infrastructure/bulk-save-op.d.ts.map +1 -0
  314. package/dist/lib/public-api/infrastructure/bulk-save-op.js +61 -0
  315. package/dist/lib/public-api/infrastructure/field-selection.d.ts +21 -0
  316. package/dist/lib/public-api/infrastructure/field-selection.d.ts.map +1 -0
  317. package/dist/lib/public-api/infrastructure/field-selection.js +72 -0
  318. package/dist/lib/public-api/infrastructure/public-entries.query.d.ts +248 -0
  319. package/dist/lib/public-api/infrastructure/public-entries.query.d.ts.map +1 -0
  320. package/dist/lib/public-api/infrastructure/public-entries.query.js +557 -0
  321. package/dist/lib/public-api/infrastructure/public-entry-row.d.ts +31 -0
  322. package/dist/lib/public-api/infrastructure/public-entry-row.d.ts.map +1 -0
  323. package/dist/lib/public-api/infrastructure/public-entry-row.js +76 -0
  324. package/dist/lib/public-api/infrastructure/public-entry-writes.service.d.ts +188 -0
  325. package/dist/lib/public-api/infrastructure/public-entry-writes.service.d.ts.map +1 -0
  326. package/dist/lib/public-api/infrastructure/public-entry-writes.service.js +321 -0
  327. package/dist/lib/public-api/infrastructure/public-expansion.query.d.ts +98 -0
  328. package/dist/lib/public-api/infrastructure/public-expansion.query.d.ts.map +1 -0
  329. package/dist/lib/public-api/infrastructure/public-expansion.query.js +384 -0
  330. package/dist/lib/public-api/types/public-bulk.d.ts +77 -0
  331. package/dist/lib/public-api/types/public-bulk.d.ts.map +1 -0
  332. package/dist/lib/public-api/types/public-bulk.js +23 -0
  333. package/dist/lib/public-api/types/public-entry.d.ts +97 -0
  334. package/dist/lib/public-api/types/public-entry.d.ts.map +1 -0
  335. package/dist/lib/public-api/types/public-entry.js +8 -0
  336. package/dist/lib/public-api/types/public-expansion.d.ts +92 -0
  337. package/dist/lib/public-api/types/public-expansion.d.ts.map +1 -0
  338. package/dist/lib/public-api/types/public-expansion.js +2 -0
  339. package/dist/lib/registry/content-type-registry.d.ts +103 -0
  340. package/dist/lib/registry/content-type-registry.d.ts.map +1 -0
  341. package/dist/lib/registry/content-type-registry.js +155 -0
  342. package/dist/lib/revisions/application/ports/revision-store.d.ts +71 -0
  343. package/dist/lib/revisions/application/ports/revision-store.d.ts.map +1 -0
  344. package/dist/lib/revisions/application/ports/revision-store.js +9 -0
  345. package/dist/lib/revisions/application/use-cases/publish-revision.use-case.d.ts +40 -0
  346. package/dist/lib/revisions/application/use-cases/publish-revision.use-case.d.ts.map +1 -0
  347. package/dist/lib/revisions/application/use-cases/publish-revision.use-case.js +66 -0
  348. package/dist/lib/revisions/application/use-cases/restore-revision.use-case.d.ts +36 -0
  349. package/dist/lib/revisions/application/use-cases/restore-revision.use-case.d.ts.map +1 -0
  350. package/dist/lib/revisions/application/use-cases/restore-revision.use-case.js +57 -0
  351. package/dist/lib/revisions/domain/revision-status.d.ts +18 -0
  352. package/dist/lib/revisions/domain/revision-status.d.ts.map +1 -0
  353. package/dist/lib/revisions/domain/revision-status.js +18 -0
  354. package/dist/lib/revisions/domain/revision.d.ts +80 -0
  355. package/dist/lib/revisions/domain/revision.d.ts.map +1 -0
  356. package/dist/lib/revisions/domain/revision.js +84 -0
  357. package/dist/lib/revisions/http/controllers/publish-revision.controller.d.ts +19 -0
  358. package/dist/lib/revisions/http/controllers/publish-revision.controller.d.ts.map +1 -0
  359. package/dist/lib/revisions/http/controllers/publish-revision.controller.js +51 -0
  360. package/dist/lib/revisions/http/controllers/restore-revision.controller.d.ts +17 -0
  361. package/dist/lib/revisions/http/controllers/restore-revision.controller.d.ts.map +1 -0
  362. package/dist/lib/revisions/http/controllers/restore-revision.controller.js +49 -0
  363. package/dist/lib/revisions/http/controllers/revisions.controller.d.ts +20 -0
  364. package/dist/lib/revisions/http/controllers/revisions.controller.d.ts.map +1 -0
  365. package/dist/lib/revisions/http/controllers/revisions.controller.js +76 -0
  366. package/dist/lib/revisions/infrastructure/persistence/drizzle-revision.store.d.ts +33 -0
  367. package/dist/lib/revisions/infrastructure/persistence/drizzle-revision.store.d.ts.map +1 -0
  368. package/dist/lib/revisions/infrastructure/persistence/drizzle-revision.store.js +174 -0
  369. package/dist/lib/revisions/infrastructure/persistence/revision-snapshot.d.ts +17 -0
  370. package/dist/lib/revisions/infrastructure/persistence/revision-snapshot.d.ts.map +1 -0
  371. package/dist/lib/revisions/infrastructure/persistence/revision-snapshot.js +20 -0
  372. package/dist/lib/revisions/infrastructure/persistence/revision-table.d.ts +228 -0
  373. package/dist/lib/revisions/infrastructure/persistence/revision-table.d.ts.map +1 -0
  374. package/dist/lib/revisions/infrastructure/persistence/revision-table.js +57 -0
  375. package/dist/lib/revisions/infrastructure/queries/revision-refs.query.d.ts +22 -0
  376. package/dist/lib/revisions/infrastructure/queries/revision-refs.query.d.ts.map +1 -0
  377. package/dist/lib/revisions/infrastructure/queries/revision-refs.query.js +66 -0
  378. package/dist/lib/revisions/revisions.constants.d.ts +10 -0
  379. package/dist/lib/revisions/revisions.constants.d.ts.map +1 -0
  380. package/dist/lib/revisions/revisions.constants.js +12 -0
  381. package/dist/lib/revisions/types/revision-view.d.ts +74 -0
  382. package/dist/lib/revisions/types/revision-view.d.ts.map +1 -0
  383. package/dist/lib/revisions/types/revision-view.js +2 -0
  384. package/dist/lib/types/content-type.d.ts +131 -0
  385. package/dist/lib/types/content-type.d.ts.map +1 -0
  386. package/dist/lib/types/content-type.js +28 -0
  387. package/dist/lib/types/fields.d.ts +303 -0
  388. package/dist/lib/types/fields.d.ts.map +1 -0
  389. package/dist/lib/types/fields.js +52 -0
  390. package/dist/lib/utils/content-plugin.d.ts +35 -0
  391. package/dist/lib/utils/content-plugin.d.ts.map +1 -0
  392. package/dist/lib/utils/content-plugin.js +35 -0
  393. package/dist/lib/validation/services/entry-validation.service.d.ts +24 -0
  394. package/dist/lib/validation/services/entry-validation.service.d.ts.map +1 -0
  395. package/dist/lib/validation/services/entry-validation.service.js +35 -0
  396. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-entry.use-case.d.ts","sourceRoot":"","sources":["../../../../../src/lib/entries/application/use-cases/publish-entry.use-case.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAC;AAE3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI/D;;;;;;;;;;;GAWG;AACH,qBACa,mBAAmB;IAExB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAHV,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,sBAAsB;IAGjD,OAAO,CACT,IAAI,EAAE,cAAc,EACpB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAC5C;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,WAAW,CAAC;IA2EvB,OAAO,CAAC,QAAQ;CAKnB"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PublishEntryUseCase = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const database_1 = require("@orthacms/database");
7
+ const entry_validation_service_1 = require("../../../validation/services/entry-validation.service");
8
+ const entry_writer_service_1 = require("../../infrastructure/persistence/entry-writer.service");
9
+ const entry_row_1 = require("../../infrastructure/persistence/entry-row");
10
+ const entry_1 = require("../../domain/entry");
11
+ const entry_publish_blocked_error_1 = require("../../domain/entry-publish-blocked.error");
12
+ /**
13
+ * Publish one entry. Runs inside a {@link UnitOfWork} so the status write and
14
+ * the `entry.published` outbox event commit atomically. Re-validates the stored
15
+ * row against the publish gate (values via the kernel + required link-managed
16
+ * relations via persistence), lets the {@link Entry} domain model apply the
17
+ * `draft → published` transition, then re-stamps `status`/`published_at`.
18
+ *
19
+ * HTTP behavior is preserved: 400 on a non-publishable type, 404 on a missing
20
+ * live row, and `422 { message, issues }` when the gate fails — the value issues
21
+ * take precedence (relations aren't even counted when the values are invalid),
22
+ * exactly as the original service ordered its checks.
23
+ */
24
+ let PublishEntryUseCase = class PublishEntryUseCase {
25
+ uow;
26
+ outbox;
27
+ writer;
28
+ validation;
29
+ constructor(uow, outbox, writer, validation) {
30
+ this.uow = uow;
31
+ this.outbox = outbox;
32
+ this.writer = writer;
33
+ this.validation = validation;
34
+ }
35
+ async execute(type, id, workspaceId,
36
+ /**
37
+ * The acting user, merged onto the outbox events so the audit log can
38
+ * name who did this. Without it every content row in the activity log
39
+ * read "System".
40
+ */
41
+ actor,
42
+ /**
43
+ * The version to mark live, when publishing a **specific** earlier one
44
+ * whose content the caller already re-applied to the live row. Omitted
45
+ * (the entry-level publish), the latest version is promoted — it is the
46
+ * row that was just published.
47
+ */
48
+ revisionNumber) {
49
+ if (!type.publishable) {
50
+ throw new common_1.BadRequestException(`Content type "${type.name}" is not publishable.`);
51
+ }
52
+ return this.uow.run(async () => {
53
+ const exec = this.uow.current();
54
+ const current = await this.writer.findLive(type, id, workspaceId, exec);
55
+ if (!current)
56
+ throw this.notFound(type, id);
57
+ const valueResult = this.validation.validate(type, (0, entry_row_1.toRecord)(type, current).values);
58
+ // Short-circuit exactly like the original: only count required links
59
+ // when the values already pass, so the 422's issue set matches.
60
+ const issues = valueResult.valid
61
+ ? await this.writer.requiredRelationIssues(exec, type, current, workspaceId)
62
+ : valueResult.issues;
63
+ const entry = entry_1.Entry.rehydrate({
64
+ id,
65
+ contentType: type.name,
66
+ status: current['status']
67
+ });
68
+ try {
69
+ entry.publish({ valid: issues.length === 0, issues });
70
+ }
71
+ catch (error) {
72
+ if (error instanceof entry_publish_blocked_error_1.EntryPublishBlockedError) {
73
+ throw new common_1.UnprocessableEntityException({
74
+ message: 'Entry validation failed',
75
+ issues: error.issues
76
+ });
77
+ }
78
+ throw error;
79
+ }
80
+ // Re-stamp unconditionally (an idempotent re-publish keeps the
81
+ // original behavior); 404 if the row vanished under us.
82
+ const updated = await this.writer.markPublished(exec, type, id, workspaceId);
83
+ if (!updated)
84
+ throw this.notFound(type, id);
85
+ // Promote the published revision to the live version so the history
86
+ // timeline reflects the publish (revisions are born drafts) — the
87
+ // caller's chosen version, else the latest.
88
+ await this.writer.markRevisionPublished(exec, id, workspaceId, revisionNumber);
89
+ await this.outbox.append(actor
90
+ ? (0, database_1.attachActor)(entry.pullEvents(), actor)
91
+ : entry.pullEvents());
92
+ return (0, entry_row_1.toRecord)(type, updated);
93
+ });
94
+ }
95
+ notFound(type, id) {
96
+ return new common_1.NotFoundException(`No entry "${id}" on content type "${type.name}".`);
97
+ }
98
+ };
99
+ exports.PublishEntryUseCase = PublishEntryUseCase;
100
+ exports.PublishEntryUseCase = PublishEntryUseCase = tslib_1.__decorate([
101
+ (0, common_1.Injectable)(),
102
+ tslib_1.__metadata("design:paramtypes", [database_1.UnitOfWork,
103
+ database_1.OutboxWriter,
104
+ entry_writer_service_1.EntryWriterService,
105
+ entry_validation_service_1.EntryValidationService])
106
+ ], PublishEntryUseCase);
@@ -0,0 +1,30 @@
1
+ import { OutboxWriter, UnitOfWork } from '@orthacms/database';
2
+ import type { AnyContentType } from '../../../types/content-type';
3
+ import { EntryWriterService } from '../../infrastructure/persistence/entry-writer.service';
4
+ import type { EntryRecord } from '../../types/entry-list-view';
5
+ /**
6
+ * Revert one entry to draft. Runs inside a {@link UnitOfWork} so the status
7
+ * write and the `entry.unpublished` outbox event commit atomically. The
8
+ * {@link Entry} domain model applies the `published → draft` transition (an
9
+ * already-draft row is an idempotent no-op that raises no event). The write is
10
+ * unconditional, preserving the original behavior; 400 on a non-publishable
11
+ * type, 404 on a missing live row.
12
+ */
13
+ export declare class UnpublishEntryUseCase {
14
+ private readonly uow;
15
+ private readonly outbox;
16
+ private readonly writer;
17
+ constructor(uow: UnitOfWork, outbox: OutboxWriter, writer: EntryWriterService);
18
+ execute(type: AnyContentType, id: string, workspaceId: string,
19
+ /**
20
+ * The acting user, merged onto the outbox events so the audit log can
21
+ * name who did this. Without it every content row in the activity log
22
+ * read "System".
23
+ */
24
+ actor?: {
25
+ id: string;
26
+ email: string | null;
27
+ }): Promise<EntryRecord>;
28
+ private notFound;
29
+ }
30
+ //# sourceMappingURL=unpublish-entry.use-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpublish-entry.use-case.d.ts","sourceRoot":"","sources":["../../../../../src/lib/entries/application/use-cases/unpublish-entry.use-case.ts"],"names":[],"mappings":"AAKA,OAAO,EAAe,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAC;AAE3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG/D;;;;;;;GAOG;AACH,qBACa,qBAAqB;IAE1B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,kBAAkB;IAGzC,OAAO,CACT,IAAI,EAAE,cAAc,EACpB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAC7C,OAAO,CAAC,WAAW,CAAC;IA0CvB,OAAO,CAAC,QAAQ;CAKnB"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnpublishEntryUseCase = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const database_1 = require("@orthacms/database");
7
+ const entry_writer_service_1 = require("../../infrastructure/persistence/entry-writer.service");
8
+ const entry_row_1 = require("../../infrastructure/persistence/entry-row");
9
+ const entry_1 = require("../../domain/entry");
10
+ /**
11
+ * Revert one entry to draft. Runs inside a {@link UnitOfWork} so the status
12
+ * write and the `entry.unpublished` outbox event commit atomically. The
13
+ * {@link Entry} domain model applies the `published → draft` transition (an
14
+ * already-draft row is an idempotent no-op that raises no event). The write is
15
+ * unconditional, preserving the original behavior; 400 on a non-publishable
16
+ * type, 404 on a missing live row.
17
+ */
18
+ let UnpublishEntryUseCase = class UnpublishEntryUseCase {
19
+ uow;
20
+ outbox;
21
+ writer;
22
+ constructor(uow, outbox, writer) {
23
+ this.uow = uow;
24
+ this.outbox = outbox;
25
+ this.writer = writer;
26
+ }
27
+ async execute(type, id, workspaceId,
28
+ /**
29
+ * The acting user, merged onto the outbox events so the audit log can
30
+ * name who did this. Without it every content row in the activity log
31
+ * read "System".
32
+ */
33
+ actor) {
34
+ if (!type.publishable) {
35
+ throw new common_1.BadRequestException(`Content type "${type.name}" is not publishable.`);
36
+ }
37
+ return this.uow.run(async () => {
38
+ const exec = this.uow.current();
39
+ const current = await this.writer.findLive(type, id, workspaceId, exec);
40
+ if (!current)
41
+ throw this.notFound(type, id);
42
+ const entry = entry_1.Entry.rehydrate({
43
+ id,
44
+ contentType: type.name,
45
+ status: current['status']
46
+ });
47
+ entry.unpublish();
48
+ const updated = await this.writer.markDraft(exec, type, id, workspaceId);
49
+ if (!updated)
50
+ throw this.notFound(type, id);
51
+ // Revert the entry's published revision back to draft so the history
52
+ // timeline no longer shows a live version.
53
+ await this.writer.markRevisionUnpublished(exec, id, workspaceId);
54
+ await this.outbox.append(actor
55
+ ? (0, database_1.attachActor)(entry.pullEvents(), actor)
56
+ : entry.pullEvents());
57
+ return (0, entry_row_1.toRecord)(type, updated);
58
+ });
59
+ }
60
+ notFound(type, id) {
61
+ return new common_1.NotFoundException(`No entry "${id}" on content type "${type.name}".`);
62
+ }
63
+ };
64
+ exports.UnpublishEntryUseCase = UnpublishEntryUseCase;
65
+ exports.UnpublishEntryUseCase = UnpublishEntryUseCase = tslib_1.__decorate([
66
+ (0, common_1.Injectable)(),
67
+ tslib_1.__metadata("design:paramtypes", [database_1.UnitOfWork,
68
+ database_1.OutboxWriter,
69
+ entry_writer_service_1.EntryWriterService])
70
+ ], UnpublishEntryUseCase);
@@ -0,0 +1,26 @@
1
+ import type { ContentTypeRegistry } from '../../registry/content-type-registry';
2
+ import { EntryWriterService } from '../services/entry-writer.service';
3
+ import { BulkIdsDto } from '../dto/bulk-ids.dto';
4
+ import type { BulkActionResult, BulkPublishPreview, BulkPublishResult } from '../types/bulk-publish';
5
+ /**
6
+ * Bulk entry actions over a set of `{ ids }`. **Registered before the
7
+ * single-item controllers** (see `content.module.ts`): the literal `bulk`
8
+ * segment sits in the same slot as those controllers' `:id`, so it must match
9
+ * first — otherwise `/bulk/publish` would resolve as `:id='bulk'` (and trip the
10
+ * single-item `ParseUUIDPipe`). `WorkspaceGuard` scopes every action to a
11
+ * workspace the caller belongs to. Per-route permissions: publish/unpublish need
12
+ * `content:publish`, delete/restore need `content:delete`.
13
+ */
14
+ export declare class BulkEntriesController {
15
+ private readonly registry;
16
+ private readonly writer;
17
+ constructor(registry: ContentTypeRegistry, writer: EntryWriterService);
18
+ /** Dry run: validate each id and report a per-entry verdict. Writes nothing. */
19
+ previewPublish(typeName: string, body: BulkIdsDto, workspaceId: string): Promise<BulkPublishPreview>;
20
+ publish(typeName: string, body: BulkIdsDto, workspaceId: string): Promise<BulkPublishResult>;
21
+ unpublish(typeName: string, body: BulkIdsDto, workspaceId: string): Promise<BulkActionResult>;
22
+ remove(typeName: string, body: BulkIdsDto, workspaceId: string): Promise<BulkActionResult>;
23
+ restore(typeName: string, body: BulkIdsDto, workspaceId: string): Promise<BulkActionResult>;
24
+ purge(typeName: string, body: BulkIdsDto, workspaceId: string): Promise<BulkActionResult>;
25
+ }
26
+ //# sourceMappingURL=bulk-entries.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-entries.controller.d.ts","sourceRoot":"","sources":["../../../../src/lib/entries/controllers/bulk-entries.controller.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EACR,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACpB,MAAM,uBAAuB,CAAC;AAG/B;;;;;;;;GAQG;AACH,qBAEa,qBAAqB;IAG1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,kBAAkB;IAG/C,gFAAgF;IAIhF,cAAc,CACS,QAAQ,EAAE,MAAM,EAC3B,IAAI,EAAE,UAAU,EACJ,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,kBAAkB,CAAC;IAQ9B,OAAO,CACgB,QAAQ,EAAE,MAAM,EAC3B,IAAI,EAAE,UAAU,EACJ,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,iBAAiB,CAAC;IAQ7B,SAAS,CACc,QAAQ,EAAE,MAAM,EAC3B,IAAI,EAAE,UAAU,EACJ,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,gBAAgB,CAAC;IAQ5B,MAAM,CACiB,QAAQ,EAAE,MAAM,EAC3B,IAAI,EAAE,UAAU,EACJ,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,gBAAgB,CAAC;IAQ5B,OAAO,CACgB,QAAQ,EAAE,MAAM,EAC3B,IAAI,EAAE,UAAU,EACJ,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,gBAAgB,CAAC;IAQ5B,KAAK,CACkB,QAAQ,EAAE,MAAM,EAC3B,IAAI,EAAE,UAAU,EACJ,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,gBAAgB,CAAC;CAI/B"}
@@ -0,0 +1,20 @@
1
+ import type { ContentTypeRegistry } from '../../registry/content-type-registry';
2
+ import { EntryWriterService } from '../services/entry-writer.service';
3
+ import { SaveEntryDto } from '../dto/save-entry.dto';
4
+ import type { EntryRecord } from '../types/entry-list-view';
5
+ /**
6
+ * `POST /api/content/:typeName` — create a draft entry from a validated values
7
+ * bag. The `:typeName` resolves via the registry (404 if unknown); the body is
8
+ * validated against the type's field specs (422 with the issue list on failure).
9
+ * `OriginGuard` defends this state-changing POST (CSRF); `WorkspaceGuard` scopes
10
+ * it to a workspace the caller belongs to; `content:create` gates it. The
11
+ * synchronous CSRF + permission guards run before `WorkspaceGuard` so a rejected
12
+ * request never incurs its membership DB probe.
13
+ */
14
+ export declare class CreateEntryController {
15
+ private readonly registry;
16
+ private readonly writer;
17
+ constructor(registry: ContentTypeRegistry, writer: EntryWriterService);
18
+ create(typeName: string, body: SaveEntryDto, workspaceId: string): Promise<EntryRecord>;
19
+ }
20
+ //# sourceMappingURL=create-entry.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-entry.controller.d.ts","sourceRoot":"","sources":["../../../../src/lib/entries/controllers/create-entry.controller.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D;;;;;;;;GAQG;AACH,qBAGa,qBAAqB;IAG1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,kBAAkB;IAI/C,MAAM,CACiB,QAAQ,EAAE,MAAM,EAC3B,IAAI,EAAE,YAAY,EACN,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,WAAW,CAAC;CAW1B"}
@@ -0,0 +1,24 @@
1
+ import type { ContentTypeRegistry } from '../../registry/content-type-registry';
2
+ import { EntryWriterService } from '../services/entry-writer.service';
3
+ import type { EntryRecord } from '../types/entry-list-view';
4
+ /**
5
+ * Single-entry removal lifecycle, all gated on `content:delete`:
6
+ * - `DELETE /api/content/:typeName/:id` — soft delete (stamp `deleted_at`) for a
7
+ * paranoid type, hard delete otherwise; 204.
8
+ * - `POST /api/content/:typeName/:id/restore` — clear the tombstone (paranoid
9
+ * only); returns the restored record.
10
+ * - `DELETE /api/content/:typeName/:id/permanent` — permanently remove a
11
+ * tombstoned row (paranoid only); 204.
12
+ *
13
+ * `OriginGuard` defends these state-changing writes; `WorkspaceGuard` scopes them
14
+ * to a workspace the caller belongs to.
15
+ */
16
+ export declare class DeleteEntryController {
17
+ private readonly registry;
18
+ private readonly writer;
19
+ constructor(registry: ContentTypeRegistry, writer: EntryWriterService);
20
+ remove(typeName: string, id: string, workspaceId: string): Promise<void>;
21
+ restore(typeName: string, id: string, workspaceId: string): Promise<EntryRecord>;
22
+ purge(typeName: string, id: string, workspaceId: string): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=delete-entry.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-entry.controller.d.ts","sourceRoot":"","sources":["../../../../src/lib/entries/controllers/delete-entry.controller.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D;;;;;;;;;;;GAWG;AACH,qBAGa,qBAAqB;IAG1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,kBAAkB;IAKzC,MAAM,CACW,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,IAAI,CAAC;IAMhB,OAAO,CACgB,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,WAAW,CAAC;IAOjB,KAAK,CACY,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,IAAI,CAAC;CAInB"}
@@ -0,0 +1,34 @@
1
+ import type { ContentTypeRegistry } from '../../registry/content-type-registry';
2
+ import { EntryWriterService } from '../services/entry-writer.service';
3
+ import type { EntryRecord, EntryRelationsView, RelationFieldView } from '../types/entry-list-view';
4
+ /**
5
+ * `GET /api/content/:typeName/:id` — one live entry by id (404 if unknown or
6
+ * soft-deleted), so the editor can open an entry by deep link without relying on
7
+ * the records-list cache. `WorkspaceGuard` scopes it to a workspace the caller
8
+ * belongs to; gated on `content:read`.
9
+ */
10
+ export declare class GetEntryController {
11
+ private readonly registry;
12
+ private readonly writer;
13
+ constructor(registry: ContentTypeRegistry, writer: EntryWriterService);
14
+ getOne(typeName: string, id: string, workspaceId: string): Promise<EntryRecord>;
15
+ /**
16
+ * `GET /api/content/:typeName/:id/relations` — one entry's relation links,
17
+ * keyed by field name. Every relation field (owning single/many **and**
18
+ * inverse back-references) resolved to display-ready refs (id + title) in a
19
+ * bounded set of queries, so the editor can render assigned relations by
20
+ * title and seed the form value with their ids without a round-trip per
21
+ * link. 404 when the entry is missing or soft-deleted in this workspace.
22
+ */
23
+ getRelations(typeName: string, id: string, workspaceId: string): Promise<EntryRelationsView>;
24
+ /**
25
+ * `GET /api/content/:typeName/:id/relations/:field` — one page of a single
26
+ * relation field's links (`{ items, total }`), ordered by position. Drives
27
+ * the editor's infinite-scroll of a many/inverse relation, so a field with
28
+ * thousands of links is paged, never loaded whole. `?page=&pageSize=`
29
+ * (1-based; clamped). 400 if `field` isn't a relation; 404 if the entry is
30
+ * missing. `content:read`.
31
+ */
32
+ getRelationField(typeName: string, id: string, field: string, workspaceId: string, page?: string, pageSize?: string): Promise<RelationFieldView>;
33
+ }
34
+ //# sourceMappingURL=get-entry.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-entry.controller.d.ts","sourceRoot":"","sources":["../../../../src/lib/entries/controllers/get-entry.controller.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EACR,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACpB,MAAM,0BAA0B,CAAC;AAIlC;;;;;GAKG;AACH,qBAGa,kBAAkB;IAGvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,kBAAkB;IAI/C,MAAM,CACiB,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,WAAW,CAAC;IAKvB;;;;;;;OAOG;IAEG,YAAY,CACK,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,kBAAkB,CAAC;IAO9B;;;;;;;OAOG;IAEH,gBAAgB,CACO,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACT,WAAW,EAAE,MAAM,EACxB,IAAI,CAAC,EAAE,MAAM,EACT,QAAQ,CAAC,EAAE,MAAM,GACrC,OAAO,CAAC,iBAAiB,CAAC;CAWhC"}
@@ -0,0 +1,20 @@
1
+ import type { ContentTypeRegistry } from '../../registry/content-type-registry';
2
+ import { EntriesService } from '../services/entries.service';
3
+ import { ListEntriesQueryDto } from '../dto/list-entries-query.dto';
4
+ import type { EntryListView } from '../types/entry-list-view';
5
+ /**
6
+ * `GET /api/content/:typeName` — one page of a collection's entries, filtered/
7
+ * searched/sorted via query params (`?search=`, `?filter=`, `?sort=`, `?page=`,
8
+ * `?pageSize=`). The `:typeName` is resolved from the registry (404 if unknown),
9
+ * so this single route serves every collection; the service runs the generic SQL
10
+ * pipeline against the type's generated table. Authentication is enforced by the
11
+ * app-wide AuthGuard; `WorkspaceGuard` scopes the request to a workspace the
12
+ * caller belongs to; read access is gated on `content:read`.
13
+ */
14
+ export declare class ListEntriesController {
15
+ private readonly registry;
16
+ private readonly entries;
17
+ constructor(registry: ContentTypeRegistry, entries: EntriesService);
18
+ list(typeName: string, query: ListEntriesQueryDto, workspaceId: string): Promise<EntryListView>;
19
+ }
20
+ //# sourceMappingURL=list-entries.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-entries.controller.d.ts","sourceRoot":"","sources":["../../../../src/lib/entries/controllers/list-entries.controller.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D;;;;;;;;GAQG;AACH,qBAGa,qBAAqB;IAG1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,cAAc;IAI5C,IAAI,CACmB,QAAQ,EAAE,MAAM,EAC1B,KAAK,EAAE,mBAAmB,EACf,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,aAAa,CAAC;CAO5B"}
@@ -0,0 +1,19 @@
1
+ import type { ContentTypeRegistry } from '../../registry/content-type-registry';
2
+ import { EntryWriterService } from '../services/entry-writer.service';
3
+ import type { EntryRecord } from '../types/entry-list-view';
4
+ /**
5
+ * `POST /api/content/:typeName/:id/publish` and `.../unpublish` — the publish
6
+ * workflow for a single entry. Publish revalidates the stored row (a 422 if the
7
+ * draft no longer passes), then stamps `status='published'` + `published_at`;
8
+ * unpublish reverts to draft. Both 400 on a non-publishable type and 404 on a
9
+ * missing live row. `OriginGuard` defends the writes; `WorkspaceGuard` scopes
10
+ * them to a workspace the caller belongs to; `content:publish` gates them.
11
+ */
12
+ export declare class PublishEntryController {
13
+ private readonly registry;
14
+ private readonly writer;
15
+ constructor(registry: ContentTypeRegistry, writer: EntryWriterService);
16
+ publish(typeName: string, id: string, workspaceId: string): Promise<EntryRecord>;
17
+ unpublish(typeName: string, id: string, workspaceId: string): Promise<EntryRecord>;
18
+ }
19
+ //# sourceMappingURL=publish-entry.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-entry.controller.d.ts","sourceRoot":"","sources":["../../../../src/lib/entries/controllers/publish-entry.controller.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D;;;;;;;GAOG;AACH,qBAGa,sBAAsB;IAG3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,kBAAkB;IAI/C,OAAO,CACgB,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,WAAW,CAAC;IAMvB,SAAS,CACc,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,WAAW,CAAC;CAI1B"}
@@ -0,0 +1,9 @@
1
+ import type { AnyContentType } from '../../types/content-type';
2
+ import type { ContentTypeRegistry } from '../../registry/content-type-registry';
3
+ /**
4
+ * Resolve a `:typeName` route param to a registered content type, or throw 404.
5
+ * Every entries controller routes one path per HTTP verb against the registry,
6
+ * so this single lookup keeps them thin and consistent.
7
+ */
8
+ export declare function resolveType(registry: ContentTypeRegistry, typeName: string): AnyContentType;
9
+ //# sourceMappingURL=resolve-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-type.d.ts","sourceRoot":"","sources":["../../../../src/lib/entries/controllers/resolve-type.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAEhF;;;;GAIG;AACH,wBAAgB,WAAW,CACvB,QAAQ,EAAE,mBAAmB,EAC7B,QAAQ,EAAE,MAAM,GACjB,cAAc,CAMhB"}
@@ -0,0 +1,18 @@
1
+ import type { ContentTypeRegistry } from '../../registry/content-type-registry';
2
+ import { EntryWriterService } from '../services/entry-writer.service';
3
+ import { SaveEntryDto } from '../dto/save-entry.dto';
4
+ import type { EntryRecord } from '../types/entry-list-view';
5
+ /**
6
+ * `PATCH /api/content/:typeName/:id` — replace a live entry's values with a
7
+ * validated bag (the editor always submits the full document). 404 if there's no
8
+ * live row; 422 with the issue list on validation failure. `OriginGuard` defends
9
+ * this state-changing write; `WorkspaceGuard` scopes it to a workspace the caller
10
+ * belongs to; `content:update` gates it.
11
+ */
12
+ export declare class UpdateEntryController {
13
+ private readonly registry;
14
+ private readonly writer;
15
+ constructor(registry: ContentTypeRegistry, writer: EntryWriterService);
16
+ update(typeName: string, id: string, body: SaveEntryDto, workspaceId: string): Promise<EntryRecord>;
17
+ }
18
+ //# sourceMappingURL=update-entry.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-entry.controller.d.ts","sourceRoot":"","sources":["../../../../src/lib/entries/controllers/update-entry.controller.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D;;;;;;GAMG;AACH,qBAGa,qBAAqB;IAG1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,kBAAkB;IAI/C,MAAM,CACiB,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAC9B,IAAI,EAAE,YAAY,EACN,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,WAAW,CAAC;CAU1B"}
@@ -0,0 +1,13 @@
1
+ import type { ValidationIssue } from '@orthacms/content-domain';
2
+ /**
3
+ * Raised by {@link Entry.publish} when the publish gate fails — the entry's
4
+ * stored values (and/or its required link-managed relations) don't yet satisfy
5
+ * the publish precondition. Transport-agnostic: it carries the {@link issues}
6
+ * so the application layer can map it to the plugin's existing `422
7
+ * { message, issues }` response without the domain knowing about HTTP.
8
+ */
9
+ export declare class EntryPublishBlockedError extends Error {
10
+ readonly issues: ValidationIssue[];
11
+ constructor(issues: ValidationIssue[]);
12
+ }
13
+ //# sourceMappingURL=entry-publish-blocked.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-publish-blocked.error.d.ts","sourceRoot":"","sources":["../../../../src/lib/entries/domain/entry-publish-blocked.error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;;;;GAMG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;aACnB,MAAM,EAAE,eAAe,EAAE;gBAAzB,MAAM,EAAE,eAAe,EAAE;CAIxD"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntryPublishBlockedError = void 0;
4
+ /**
5
+ * Raised by {@link Entry.publish} when the publish gate fails — the entry's
6
+ * stored values (and/or its required link-managed relations) don't yet satisfy
7
+ * the publish precondition. Transport-agnostic: it carries the {@link issues}
8
+ * so the application layer can map it to the plugin's existing `422
9
+ * { message, issues }` response without the domain knowing about HTTP.
10
+ */
11
+ class EntryPublishBlockedError extends Error {
12
+ issues;
13
+ constructor(issues) {
14
+ super('Entry validation failed');
15
+ this.issues = issues;
16
+ this.name = 'EntryPublishBlockedError';
17
+ }
18
+ }
19
+ exports.EntryPublishBlockedError = EntryPublishBlockedError;
@@ -0,0 +1,71 @@
1
+ import type { DomainEvent } from '@orthacms/database';
2
+ import { type EntryStatus, type ValidationIssue } from '@orthacms/content-domain';
3
+ /** State the persistence layer hands {@link Entry.rehydrate} to reconstruct one. */
4
+ export interface EntryState {
5
+ /** Entry id. */
6
+ id: string;
7
+ /** The content-type machine name — carried only for the event payload. */
8
+ contentType: string;
9
+ /** Current publish status of the stored row. */
10
+ status: EntryStatus;
11
+ }
12
+ /**
13
+ * The outcome of the publish precondition, computed by the use-case from the
14
+ * kernel's value validation plus the persistence layer's required-link check
15
+ * (which needs the DB). The model decides what to do with it.
16
+ */
17
+ export interface PublishGate {
18
+ /** Whether the entry may publish. */
19
+ valid: boolean;
20
+ /** The blocking issues when `valid` is false. */
21
+ issues: ValidationIssue[];
22
+ }
23
+ /**
24
+ * The **focused domain model** for an entry's publish lifecycle. The entries
25
+ * engine is generic and registry-driven — one service backs every content type,
26
+ * with no per-aggregate table or fixed field set — so a full row⇄aggregate
27
+ * aggregate would fight the metamodel (ADR-0003: DDD where it pays). This models
28
+ * only the part with real invariants: the `draft ↔ published` state machine and
29
+ * the publish gate. It owns no columns; the application loads its status,
30
+ * applies a transition here (raising the domain event), and the infrastructure
31
+ * persists the new status.
32
+ *
33
+ * Framework-free: imports only `@orthacms/content-domain` (the pure kernel) and
34
+ * `@orthacms/database`'s framework-free `createDomainEvent`/`DomainEvent` —
35
+ * nothing from `@nestjs/*`, `drizzle-orm`, `class-validator`, or the
36
+ * infrastructure layer (ADR-0003's one hard rule).
37
+ */
38
+ export declare class Entry {
39
+ private readonly _id;
40
+ private readonly _contentType;
41
+ private _status;
42
+ private readonly events;
43
+ private constructor();
44
+ /** Reconstructs an entry from its persisted lifecycle state. */
45
+ static rehydrate(state: EntryState): Entry;
46
+ /**
47
+ * Publish the entry. Rejects with {@link EntryPublishBlockedError} when the
48
+ * gate fails (mapped to 422 by the use-case) — checked first, so an
49
+ * already-published row whose stored values went invalid is still blocked,
50
+ * matching the original service. A `draft` transitions to `published` via
51
+ * {@link assertTransition} and raises `entry.published`; an already-published
52
+ * row is an idempotent re-publish that raises no event (the use-case still
53
+ * re-stamps `published_at`).
54
+ */
55
+ publish(gate: PublishGate): void;
56
+ /**
57
+ * Revert the entry to draft. A `published` row transitions to `draft` via
58
+ * {@link assertTransition} and raises `entry.unpublished`; an already-draft
59
+ * row is an idempotent no-op that raises no event (the use-case still
60
+ * performs the write, preserving the original unconditional behavior).
61
+ */
62
+ unpublish(): void;
63
+ /** The entry id. */
64
+ get id(): string;
65
+ /** The current publish status. */
66
+ get status(): EntryStatus;
67
+ /** Drains and returns the events raised since the last pull. */
68
+ pullEvents(): DomainEvent[];
69
+ private raise;
70
+ }
71
+ //# sourceMappingURL=entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../../../src/lib/entries/domain/entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAGH,KAAK,WAAW,EAChB,KAAK,eAAe,EACvB,MAAM,0BAA0B,CAAC;AAIlC,oFAAoF;AACpF,MAAM,WAAW,UAAU;IACvB,gBAAgB;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,MAAM,EAAE,WAAW,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IACxB,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,MAAM,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,KAAK;IAIV,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,OAAO;IALnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C,OAAO;IAMP,gEAAgE;IAChE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK;IAI1C;;;;;;;;OAQG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAchC;;;;;OAKG;IACH,SAAS,IAAI,IAAI;IAWjB,oBAAoB;IACpB,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,kCAAkC;IAClC,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,gEAAgE;IAChE,UAAU,IAAI,WAAW,EAAE;IAI3B,OAAO,CAAC,KAAK;CAGhB"}