@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.
- package/LICENSE +21 -0
- package/README.md +7 -0
- package/dist/define.d.ts +17 -0
- package/dist/define.d.ts.map +1 -0
- package/dist/define.js +28 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/lib/collection/define.d.ts +35 -0
- package/dist/lib/collection/define.d.ts.map +1 -0
- package/dist/lib/collection/define.js +217 -0
- package/dist/lib/collection/table-builder.d.ts +28 -0
- package/dist/lib/collection/table-builder.d.ts.map +1 -0
- package/dist/lib/collection/table-builder.js +306 -0
- package/dist/lib/content-types/controllers/get-content-schema.controller.d.ts +24 -0
- package/dist/lib/content-types/controllers/get-content-schema.controller.d.ts.map +1 -0
- package/dist/lib/content-types/controllers/get-content-schema.controller.js +58 -0
- package/dist/lib/content-types/controllers/get-filter-fields.controller.d.ts +35 -0
- package/dist/lib/content-types/controllers/get-filter-fields.controller.d.ts.map +1 -0
- package/dist/lib/content-types/controllers/get-filter-fields.controller.js +74 -0
- package/dist/lib/content-types/controllers/list-content-schema.controller.d.ts +15 -0
- package/dist/lib/content-types/controllers/list-content-schema.controller.d.ts.map +1 -0
- package/dist/lib/content-types/controllers/list-content-schema.controller.js +38 -0
- package/dist/lib/content-types/queries/workspace-grants.query.d.ts +25 -0
- package/dist/lib/content-types/queries/workspace-grants.query.d.ts.map +1 -0
- package/dist/lib/content-types/queries/workspace-grants.query.js +45 -0
- package/dist/lib/content.module.d.ts +21 -0
- package/dist/lib/content.module.d.ts.map +1 -0
- package/dist/lib/content.module.js +264 -0
- package/dist/lib/content.tokens.d.ts +5 -0
- package/dist/lib/content.tokens.d.ts.map +1 -0
- package/dist/lib/content.tokens.js +9 -0
- package/dist/lib/copilot/content-tool.provider.d.ts +64 -0
- package/dist/lib/copilot/content-tool.provider.d.ts.map +1 -0
- package/dist/lib/copilot/content-tool.provider.js +309 -0
- package/dist/lib/copilot/diff-snapshots.d.ts +42 -0
- package/dist/lib/copilot/diff-snapshots.d.ts.map +1 -0
- package/dist/lib/copilot/diff-snapshots.js +77 -0
- package/dist/lib/copilot/entry-proposal.applier.d.ts +89 -0
- package/dist/lib/copilot/entry-proposal.applier.d.ts.map +1 -0
- package/dist/lib/copilot/entry-proposal.applier.js +245 -0
- package/dist/lib/copilot/entry-proposal.provider.d.ts +157 -0
- package/dist/lib/copilot/entry-proposal.provider.d.ts.map +1 -0
- package/dist/lib/copilot/entry-proposal.provider.js +619 -0
- package/dist/lib/copilot/filter-schema.d.ts +61 -0
- package/dist/lib/copilot/filter-schema.d.ts.map +1 -0
- package/dist/lib/copilot/filter-schema.js +139 -0
- package/dist/lib/copilot/project-entry.d.ts +23 -0
- package/dist/lib/copilot/project-entry.d.ts.map +1 -0
- package/dist/lib/copilot/project-entry.js +36 -0
- package/dist/lib/copilot/proposal-kinds.d.ts +30 -0
- package/dist/lib/copilot/proposal-kinds.d.ts.map +1 -0
- package/dist/lib/copilot/proposal-kinds.js +32 -0
- package/dist/lib/copilot/revision-tool.provider.d.ts +56 -0
- package/dist/lib/copilot/revision-tool.provider.d.ts.map +1 -0
- package/dist/lib/copilot/revision-tool.provider.js +215 -0
- package/dist/lib/docs/content-schemas.d.ts +34 -0
- package/dist/lib/docs/content-schemas.d.ts.map +1 -0
- package/dist/lib/docs/content-schemas.js +617 -0
- package/dist/lib/docs/describe-content-api.d.ts +22 -0
- package/dist/lib/docs/describe-content-api.d.ts.map +1 -0
- package/dist/lib/docs/describe-content-api.js +173 -0
- package/dist/lib/docs/field-schema.d.ts +28 -0
- package/dist/lib/docs/field-schema.d.ts.map +1 -0
- package/dist/lib/docs/field-schema.js +214 -0
- package/dist/lib/entries/application/use-cases/bulk-publish-entries.use-case.d.ts +23 -0
- package/dist/lib/entries/application/use-cases/bulk-publish-entries.use-case.d.ts.map +1 -0
- package/dist/lib/entries/application/use-cases/bulk-publish-entries.use-case.js +77 -0
- package/dist/lib/entries/application/use-cases/bulk-unpublish-entries.use-case.d.ts +23 -0
- package/dist/lib/entries/application/use-cases/bulk-unpublish-entries.use-case.d.ts.map +1 -0
- package/dist/lib/entries/application/use-cases/bulk-unpublish-entries.use-case.js +66 -0
- package/dist/lib/entries/application/use-cases/publish-entry.use-case.d.ts +43 -0
- package/dist/lib/entries/application/use-cases/publish-entry.use-case.d.ts.map +1 -0
- package/dist/lib/entries/application/use-cases/publish-entry.use-case.js +106 -0
- package/dist/lib/entries/application/use-cases/unpublish-entry.use-case.d.ts +30 -0
- package/dist/lib/entries/application/use-cases/unpublish-entry.use-case.d.ts.map +1 -0
- package/dist/lib/entries/application/use-cases/unpublish-entry.use-case.js +70 -0
- package/dist/lib/entries/controllers/bulk-entries.controller.d.ts +26 -0
- package/dist/lib/entries/controllers/bulk-entries.controller.d.ts.map +1 -0
- package/dist/lib/entries/controllers/create-entry.controller.d.ts +20 -0
- package/dist/lib/entries/controllers/create-entry.controller.d.ts.map +1 -0
- package/dist/lib/entries/controllers/delete-entry.controller.d.ts +24 -0
- package/dist/lib/entries/controllers/delete-entry.controller.d.ts.map +1 -0
- package/dist/lib/entries/controllers/get-entry.controller.d.ts +34 -0
- package/dist/lib/entries/controllers/get-entry.controller.d.ts.map +1 -0
- package/dist/lib/entries/controllers/list-entries.controller.d.ts +20 -0
- package/dist/lib/entries/controllers/list-entries.controller.d.ts.map +1 -0
- package/dist/lib/entries/controllers/publish-entry.controller.d.ts +19 -0
- package/dist/lib/entries/controllers/publish-entry.controller.d.ts.map +1 -0
- package/dist/lib/entries/controllers/resolve-type.d.ts +9 -0
- package/dist/lib/entries/controllers/resolve-type.d.ts.map +1 -0
- package/dist/lib/entries/controllers/update-entry.controller.d.ts +18 -0
- package/dist/lib/entries/controllers/update-entry.controller.d.ts.map +1 -0
- package/dist/lib/entries/domain/entry-publish-blocked.error.d.ts +13 -0
- package/dist/lib/entries/domain/entry-publish-blocked.error.d.ts.map +1 -0
- package/dist/lib/entries/domain/entry-publish-blocked.error.js +19 -0
- package/dist/lib/entries/domain/entry.d.ts +71 -0
- package/dist/lib/entries/domain/entry.d.ts.map +1 -0
- package/dist/lib/entries/domain/entry.js +90 -0
- package/dist/lib/entries/domain/events/entry-events.d.ts +67 -0
- package/dist/lib/entries/domain/events/entry-events.d.ts.map +1 -0
- package/dist/lib/entries/domain/events/entry-events.js +100 -0
- package/dist/lib/entries/dto/bulk-ids.dto.d.ts +11 -0
- package/dist/lib/entries/dto/bulk-ids.dto.d.ts.map +1 -0
- package/dist/lib/entries/dto/list-entries-query.dto.d.ts +46 -0
- package/dist/lib/entries/dto/list-entries-query.dto.d.ts.map +1 -0
- package/dist/lib/entries/dto/relation-delta-map.validator.d.ts +19 -0
- package/dist/lib/entries/dto/relation-delta-map.validator.d.ts.map +1 -0
- package/dist/lib/entries/dto/save-entry.dto.d.ts +46 -0
- package/dist/lib/entries/dto/save-entry.dto.d.ts.map +1 -0
- package/dist/lib/entries/entries.constants.d.ts +19 -0
- package/dist/lib/entries/entries.constants.d.ts.map +1 -0
- package/dist/lib/entries/entries.constants.js +21 -0
- package/dist/lib/entries/http/controllers/bulk-entries.controller.d.ts +33 -0
- package/dist/lib/entries/http/controllers/bulk-entries.controller.d.ts.map +1 -0
- package/dist/lib/entries/http/controllers/bulk-entries.controller.js +143 -0
- package/dist/lib/entries/http/controllers/create-entry.controller.d.ts +21 -0
- package/dist/lib/entries/http/controllers/create-entry.controller.d.ts.map +1 -0
- package/dist/lib/entries/http/controllers/create-entry.controller.js +52 -0
- package/dist/lib/entries/http/controllers/delete-entry.controller.d.ts +25 -0
- package/dist/lib/entries/http/controllers/delete-entry.controller.d.ts.map +1 -0
- package/dist/lib/entries/http/controllers/delete-entry.controller.js +84 -0
- package/dist/lib/entries/http/controllers/get-entry.controller.d.ts +44 -0
- package/dist/lib/entries/http/controllers/get-entry.controller.d.ts.map +1 -0
- package/dist/lib/entries/http/controllers/get-entry.controller.js +124 -0
- package/dist/lib/entries/http/controllers/list-entries.controller.d.ts +20 -0
- package/dist/lib/entries/http/controllers/list-entries.controller.d.ts.map +1 -0
- package/dist/lib/entries/http/controllers/list-entries.controller.js +52 -0
- package/dist/lib/entries/http/controllers/publish-entry.controller.d.ts +22 -0
- package/dist/lib/entries/http/controllers/publish-entry.controller.d.ts.map +1 -0
- package/dist/lib/entries/http/controllers/publish-entry.controller.js +68 -0
- package/dist/lib/entries/http/controllers/resolve-type.d.ts +9 -0
- package/dist/lib/entries/http/controllers/resolve-type.d.ts.map +1 -0
- package/dist/lib/entries/http/controllers/resolve-type.js +16 -0
- package/dist/lib/entries/http/controllers/to-actor.d.ts +13 -0
- package/dist/lib/entries/http/controllers/to-actor.d.ts.map +1 -0
- package/dist/lib/entries/http/controllers/to-actor.js +15 -0
- package/dist/lib/entries/http/controllers/update-entry.controller.d.ts +19 -0
- package/dist/lib/entries/http/controllers/update-entry.controller.d.ts.map +1 -0
- package/dist/lib/entries/http/controllers/update-entry.controller.js +51 -0
- package/dist/lib/entries/http/dto/bulk-ids.dto.d.ts +11 -0
- package/dist/lib/entries/http/dto/bulk-ids.dto.d.ts.map +1 -0
- package/dist/lib/entries/http/dto/bulk-ids.dto.js +33 -0
- package/dist/lib/entries/http/dto/list-entries-query.dto.d.ts +66 -0
- package/dist/lib/entries/http/dto/list-entries-query.dto.d.ts.map +1 -0
- package/dist/lib/entries/http/dto/list-entries-query.dto.js +192 -0
- package/dist/lib/entries/http/dto/relation-delta-map.validator.d.ts +30 -0
- package/dist/lib/entries/http/dto/relation-delta-map.validator.d.ts.map +1 -0
- package/dist/lib/entries/http/dto/relation-delta-map.validator.js +102 -0
- package/dist/lib/entries/http/dto/save-entry.dto.d.ts +48 -0
- package/dist/lib/entries/http/dto/save-entry.dto.d.ts.map +1 -0
- package/dist/lib/entries/http/dto/save-entry.dto.js +120 -0
- package/dist/lib/entries/http/guards/content-grant.guard.d.ts +37 -0
- package/dist/lib/entries/http/guards/content-grant.guard.d.ts.map +1 -0
- package/dist/lib/entries/http/guards/content-grant.guard.js +67 -0
- package/dist/lib/entries/infrastructure/persistence/bulk-publish-verdicts.d.ts +22 -0
- package/dist/lib/entries/infrastructure/persistence/bulk-publish-verdicts.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/persistence/bulk-publish-verdicts.js +81 -0
- package/dist/lib/entries/infrastructure/persistence/entry-counter.service.d.ts +42 -0
- package/dist/lib/entries/infrastructure/persistence/entry-counter.service.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/persistence/entry-counter.service.js +73 -0
- package/dist/lib/entries/infrastructure/persistence/entry-row.d.ts +56 -0
- package/dist/lib/entries/infrastructure/persistence/entry-row.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/persistence/entry-row.js +185 -0
- package/dist/lib/entries/infrastructure/persistence/entry-writer.service.d.ts +392 -0
- package/dist/lib/entries/infrastructure/persistence/entry-writer.service.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/persistence/entry-writer.service.js +1223 -0
- package/dist/lib/entries/infrastructure/persistence/field-selection.d.ts +24 -0
- package/dist/lib/entries/infrastructure/persistence/field-selection.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/persistence/media-accept.d.ts +23 -0
- package/dist/lib/entries/infrastructure/persistence/media-accept.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/persistence/media-accept.js +55 -0
- package/dist/lib/entries/infrastructure/persistence/relation-link.service.d.ts +327 -0
- package/dist/lib/entries/infrastructure/persistence/relation-link.service.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/persistence/relation-link.service.js +1008 -0
- package/dist/lib/entries/infrastructure/queries/bulk-publish-preview.query.d.ts +19 -0
- package/dist/lib/entries/infrastructure/queries/bulk-publish-preview.query.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/queries/bulk-publish-preview.query.js +39 -0
- package/dist/lib/entries/infrastructure/queries/entries.service.d.ts +64 -0
- package/dist/lib/entries/infrastructure/queries/entries.service.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/queries/entries.service.js +202 -0
- package/dist/lib/entries/infrastructure/queries/entry-filter-schema.d.ts +40 -0
- package/dist/lib/entries/infrastructure/queries/entry-filter-schema.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/queries/entry-filter-surface.d.ts +38 -0
- package/dist/lib/entries/infrastructure/queries/entry-filter-surface.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/queries/entry-filter-surface.js +310 -0
- package/dist/lib/entries/infrastructure/queries/entry-scalar-fields.d.ts +25 -0
- package/dist/lib/entries/infrastructure/queries/entry-scalar-fields.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/queries/entry-scalar-fields.js +51 -0
- package/dist/lib/entries/infrastructure/queries/entry-search.d.ts +19 -0
- package/dist/lib/entries/infrastructure/queries/entry-search.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/queries/entry-search.js +52 -0
- package/dist/lib/entries/infrastructure/queries/media-refs.query.d.ts +21 -0
- package/dist/lib/entries/infrastructure/queries/media-refs.query.d.ts.map +1 -0
- package/dist/lib/entries/infrastructure/queries/media-refs.query.js +117 -0
- package/dist/lib/entries/services/entries.service.d.ts +59 -0
- package/dist/lib/entries/services/entries.service.d.ts.map +1 -0
- package/dist/lib/entries/services/entry-counter.service.d.ts +31 -0
- package/dist/lib/entries/services/entry-counter.service.d.ts.map +1 -0
- package/dist/lib/entries/services/entry-filter-schema.d.ts +32 -0
- package/dist/lib/entries/services/entry-filter-schema.d.ts.map +1 -0
- package/dist/lib/entries/services/entry-row.d.ts +56 -0
- package/dist/lib/entries/services/entry-row.d.ts.map +1 -0
- package/dist/lib/entries/services/entry-writer.service.d.ts +193 -0
- package/dist/lib/entries/services/entry-writer.service.d.ts.map +1 -0
- package/dist/lib/entries/services/relation-link.service.d.ts +115 -0
- package/dist/lib/entries/services/relation-link.service.d.ts.map +1 -0
- package/dist/lib/entries/types/bulk-publish.d.ts +75 -0
- package/dist/lib/entries/types/bulk-publish.d.ts.map +1 -0
- package/dist/lib/entries/types/bulk-publish.js +22 -0
- package/dist/lib/entries/types/entry-list-view.d.ts +205 -0
- package/dist/lib/entries/types/entry-list-view.d.ts.map +1 -0
- package/dist/lib/entries/types/entry-list-view.js +5 -0
- package/dist/lib/entries/types/filter-surface.d.ts +35 -0
- package/dist/lib/entries/types/filter-surface.d.ts.map +1 -0
- package/dist/lib/entries/types/filter-surface.js +2 -0
- package/dist/lib/extension/entry-extension-boot-check.d.ts +16 -0
- package/dist/lib/extension/entry-extension-boot-check.d.ts.map +1 -0
- package/dist/lib/extension/entry-extension-boot-check.js +42 -0
- package/dist/lib/extension/entry-extension.d.ts +225 -0
- package/dist/lib/extension/entry-extension.d.ts.map +1 -0
- package/dist/lib/extension/entry-extension.js +27 -0
- package/dist/lib/extension/media-asset-resolver.d.ts +85 -0
- package/dist/lib/extension/media-asset-resolver.d.ts.map +1 -0
- package/dist/lib/extension/media-asset-resolver.js +26 -0
- package/dist/lib/extension/per-locale-relation.d.ts +18 -0
- package/dist/lib/extension/per-locale-relation.d.ts.map +1 -0
- package/dist/lib/extension/relation-locale-sync.d.ts +62 -0
- package/dist/lib/extension/relation-locale-sync.d.ts.map +1 -0
- package/dist/lib/extension/relation-locale-sync.js +88 -0
- package/dist/lib/fields/index.d.ts +94 -0
- package/dist/lib/fields/index.d.ts.map +1 -0
- package/dist/lib/fields/index.js +203 -0
- package/dist/lib/insights/http/controllers/content-pipeline.controller.d.ts +16 -0
- package/dist/lib/insights/http/controllers/content-pipeline.controller.d.ts.map +1 -0
- package/dist/lib/insights/http/controllers/content-pipeline.controller.js +39 -0
- package/dist/lib/insights/http/controllers/content-punchcard.controller.d.ts +18 -0
- package/dist/lib/insights/http/controllers/content-punchcard.controller.d.ts.map +1 -0
- package/dist/lib/insights/http/controllers/content-punchcard.controller.js +42 -0
- package/dist/lib/insights/http/controllers/content-stale.controller.d.ts +17 -0
- package/dist/lib/insights/http/controllers/content-stale.controller.d.ts.map +1 -0
- package/dist/lib/insights/http/controllers/content-stale.controller.js +40 -0
- package/dist/lib/insights/http/controllers/content-totals.controller.d.ts +18 -0
- package/dist/lib/insights/http/controllers/content-totals.controller.d.ts.map +1 -0
- package/dist/lib/insights/http/controllers/content-totals.controller.js +42 -0
- package/dist/lib/insights/http/controllers/content-unshipped.controller.d.ts +17 -0
- package/dist/lib/insights/http/controllers/content-unshipped.controller.d.ts.map +1 -0
- package/dist/lib/insights/http/controllers/content-unshipped.controller.js +40 -0
- package/dist/lib/insights/http/controllers/content-velocity.controller.d.ts +17 -0
- package/dist/lib/insights/http/controllers/content-velocity.controller.d.ts.map +1 -0
- package/dist/lib/insights/http/controllers/content-velocity.controller.js +41 -0
- package/dist/lib/insights/http/dto/insights-range-query.dto.d.ts +15 -0
- package/dist/lib/insights/http/dto/insights-range-query.dto.d.ts.map +1 -0
- package/dist/lib/insights/http/dto/insights-range-query.dto.js +38 -0
- package/dist/lib/insights/infrastructure/queries/content-insights.query.d.ts +77 -0
- package/dist/lib/insights/infrastructure/queries/content-insights.query.d.ts.map +1 -0
- package/dist/lib/insights/infrastructure/queries/content-insights.query.js +380 -0
- package/dist/lib/insights/types/content-insights-view.d.ts +134 -0
- package/dist/lib/insights/types/content-insights-view.d.ts.map +1 -0
- package/dist/lib/insights/types/content-insights-view.js +10 -0
- package/dist/lib/mcp/content-tools.provider.d.ts +83 -0
- package/dist/lib/mcp/content-tools.provider.d.ts.map +1 -0
- package/dist/lib/mcp/content-tools.provider.js +441 -0
- package/dist/lib/mcp/tool-input.d.ts +43 -0
- package/dist/lib/mcp/tool-input.d.ts.map +1 -0
- package/dist/lib/mcp/tool-input.js +117 -0
- package/dist/lib/mcp/tool-schemas.d.ts +34 -0
- package/dist/lib/mcp/tool-schemas.d.ts.map +1 -0
- package/dist/lib/mcp/tool-schemas.js +282 -0
- package/dist/lib/public/controllers/get-public-entry.controller.d.ts +26 -0
- package/dist/lib/public/controllers/get-public-entry.controller.d.ts.map +1 -0
- package/dist/lib/public/controllers/list-public-entries.controller.d.ts +24 -0
- package/dist/lib/public/controllers/list-public-entries.controller.d.ts.map +1 -0
- package/dist/lib/public/controllers/public-schema.controller.d.ts +18 -0
- package/dist/lib/public/controllers/public-schema.controller.d.ts.map +1 -0
- package/dist/lib/public-api/http/api-token-request.d.ts +41 -0
- package/dist/lib/public-api/http/api-token-request.d.ts.map +1 -0
- package/dist/lib/public-api/http/api-token-request.js +2 -0
- package/dist/lib/public-api/http/controllers/public-content-types.controller.d.ts +31 -0
- package/dist/lib/public-api/http/controllers/public-content-types.controller.d.ts.map +1 -0
- package/dist/lib/public-api/http/controllers/public-content-types.controller.js +93 -0
- package/dist/lib/public-api/http/controllers/public-entries.controller.d.ts +101 -0
- package/dist/lib/public-api/http/controllers/public-entries.controller.d.ts.map +1 -0
- package/dist/lib/public-api/http/controllers/public-entries.controller.js +307 -0
- package/dist/lib/public-api/http/controllers/public-entry-writes.controller.d.ts +76 -0
- package/dist/lib/public-api/http/controllers/public-entry-writes.controller.d.ts.map +1 -0
- package/dist/lib/public-api/http/controllers/public-entry-writes.controller.js +353 -0
- package/dist/lib/public-api/http/controllers/resolve-granted-type.d.ts +42 -0
- package/dist/lib/public-api/http/controllers/resolve-granted-type.d.ts.map +1 -0
- package/dist/lib/public-api/http/controllers/resolve-granted-type.js +25 -0
- package/dist/lib/public-api/http/decorators/current-api-token.decorator.d.ts +8 -0
- package/dist/lib/public-api/http/decorators/current-api-token.decorator.d.ts.map +1 -0
- package/dist/lib/public-api/http/decorators/current-api-token.decorator.js +17 -0
- package/dist/lib/public-api/http/dto/public-bulk.dto.d.ts +58 -0
- package/dist/lib/public-api/http/dto/public-bulk.dto.d.ts.map +1 -0
- package/dist/lib/public-api/http/dto/public-bulk.dto.js +118 -0
- package/dist/lib/public-api/http/dto/public-list-entries-query.dto.d.ts +106 -0
- package/dist/lib/public-api/http/dto/public-list-entries-query.dto.d.ts.map +1 -0
- package/dist/lib/public-api/http/dto/public-list-entries-query.dto.js +297 -0
- package/dist/lib/public-api/http/dto/public-save-entry.dto.d.ts +39 -0
- package/dist/lib/public-api/http/dto/public-save-entry.dto.d.ts.map +1 -0
- package/dist/lib/public-api/http/dto/public-save-entry.dto.js +112 -0
- package/dist/lib/public-api/http/guards/api-token-workspace.guard.d.ts +25 -0
- package/dist/lib/public-api/http/guards/api-token-workspace.guard.d.ts.map +1 -0
- package/dist/lib/public-api/http/guards/api-token-workspace.guard.js +58 -0
- package/dist/lib/public-api/http/guards/api-token.guard.d.ts +32 -0
- package/dist/lib/public-api/http/guards/api-token.guard.d.ts.map +1 -0
- package/dist/lib/public-api/http/guards/api-token.guard.js +92 -0
- package/dist/lib/public-api/http/guards/draft-visibility.guard.d.ts +25 -0
- package/dist/lib/public-api/http/guards/draft-visibility.guard.d.ts.map +1 -0
- package/dist/lib/public-api/http/guards/draft-visibility.guard.js +56 -0
- package/dist/lib/public-api/infrastructure/bulk-save-op.d.ts +55 -0
- package/dist/lib/public-api/infrastructure/bulk-save-op.d.ts.map +1 -0
- package/dist/lib/public-api/infrastructure/bulk-save-op.js +61 -0
- package/dist/lib/public-api/infrastructure/field-selection.d.ts +21 -0
- package/dist/lib/public-api/infrastructure/field-selection.d.ts.map +1 -0
- package/dist/lib/public-api/infrastructure/field-selection.js +72 -0
- package/dist/lib/public-api/infrastructure/public-entries.query.d.ts +248 -0
- package/dist/lib/public-api/infrastructure/public-entries.query.d.ts.map +1 -0
- package/dist/lib/public-api/infrastructure/public-entries.query.js +557 -0
- package/dist/lib/public-api/infrastructure/public-entry-row.d.ts +31 -0
- package/dist/lib/public-api/infrastructure/public-entry-row.d.ts.map +1 -0
- package/dist/lib/public-api/infrastructure/public-entry-row.js +76 -0
- package/dist/lib/public-api/infrastructure/public-entry-writes.service.d.ts +188 -0
- package/dist/lib/public-api/infrastructure/public-entry-writes.service.d.ts.map +1 -0
- package/dist/lib/public-api/infrastructure/public-entry-writes.service.js +321 -0
- package/dist/lib/public-api/infrastructure/public-expansion.query.d.ts +98 -0
- package/dist/lib/public-api/infrastructure/public-expansion.query.d.ts.map +1 -0
- package/dist/lib/public-api/infrastructure/public-expansion.query.js +384 -0
- package/dist/lib/public-api/types/public-bulk.d.ts +77 -0
- package/dist/lib/public-api/types/public-bulk.d.ts.map +1 -0
- package/dist/lib/public-api/types/public-bulk.js +23 -0
- package/dist/lib/public-api/types/public-entry.d.ts +97 -0
- package/dist/lib/public-api/types/public-entry.d.ts.map +1 -0
- package/dist/lib/public-api/types/public-entry.js +8 -0
- package/dist/lib/public-api/types/public-expansion.d.ts +92 -0
- package/dist/lib/public-api/types/public-expansion.d.ts.map +1 -0
- package/dist/lib/public-api/types/public-expansion.js +2 -0
- package/dist/lib/registry/content-type-registry.d.ts +103 -0
- package/dist/lib/registry/content-type-registry.d.ts.map +1 -0
- package/dist/lib/registry/content-type-registry.js +155 -0
- package/dist/lib/revisions/application/ports/revision-store.d.ts +71 -0
- package/dist/lib/revisions/application/ports/revision-store.d.ts.map +1 -0
- package/dist/lib/revisions/application/ports/revision-store.js +9 -0
- package/dist/lib/revisions/application/use-cases/publish-revision.use-case.d.ts +40 -0
- package/dist/lib/revisions/application/use-cases/publish-revision.use-case.d.ts.map +1 -0
- package/dist/lib/revisions/application/use-cases/publish-revision.use-case.js +66 -0
- package/dist/lib/revisions/application/use-cases/restore-revision.use-case.d.ts +36 -0
- package/dist/lib/revisions/application/use-cases/restore-revision.use-case.d.ts.map +1 -0
- package/dist/lib/revisions/application/use-cases/restore-revision.use-case.js +57 -0
- package/dist/lib/revisions/domain/revision-status.d.ts +18 -0
- package/dist/lib/revisions/domain/revision-status.d.ts.map +1 -0
- package/dist/lib/revisions/domain/revision-status.js +18 -0
- package/dist/lib/revisions/domain/revision.d.ts +80 -0
- package/dist/lib/revisions/domain/revision.d.ts.map +1 -0
- package/dist/lib/revisions/domain/revision.js +84 -0
- package/dist/lib/revisions/http/controllers/publish-revision.controller.d.ts +19 -0
- package/dist/lib/revisions/http/controllers/publish-revision.controller.d.ts.map +1 -0
- package/dist/lib/revisions/http/controllers/publish-revision.controller.js +51 -0
- package/dist/lib/revisions/http/controllers/restore-revision.controller.d.ts +17 -0
- package/dist/lib/revisions/http/controllers/restore-revision.controller.d.ts.map +1 -0
- package/dist/lib/revisions/http/controllers/restore-revision.controller.js +49 -0
- package/dist/lib/revisions/http/controllers/revisions.controller.d.ts +20 -0
- package/dist/lib/revisions/http/controllers/revisions.controller.d.ts.map +1 -0
- package/dist/lib/revisions/http/controllers/revisions.controller.js +76 -0
- package/dist/lib/revisions/infrastructure/persistence/drizzle-revision.store.d.ts +33 -0
- package/dist/lib/revisions/infrastructure/persistence/drizzle-revision.store.d.ts.map +1 -0
- package/dist/lib/revisions/infrastructure/persistence/drizzle-revision.store.js +174 -0
- package/dist/lib/revisions/infrastructure/persistence/revision-snapshot.d.ts +17 -0
- package/dist/lib/revisions/infrastructure/persistence/revision-snapshot.d.ts.map +1 -0
- package/dist/lib/revisions/infrastructure/persistence/revision-snapshot.js +20 -0
- package/dist/lib/revisions/infrastructure/persistence/revision-table.d.ts +228 -0
- package/dist/lib/revisions/infrastructure/persistence/revision-table.d.ts.map +1 -0
- package/dist/lib/revisions/infrastructure/persistence/revision-table.js +57 -0
- package/dist/lib/revisions/infrastructure/queries/revision-refs.query.d.ts +22 -0
- package/dist/lib/revisions/infrastructure/queries/revision-refs.query.d.ts.map +1 -0
- package/dist/lib/revisions/infrastructure/queries/revision-refs.query.js +66 -0
- package/dist/lib/revisions/revisions.constants.d.ts +10 -0
- package/dist/lib/revisions/revisions.constants.d.ts.map +1 -0
- package/dist/lib/revisions/revisions.constants.js +12 -0
- package/dist/lib/revisions/types/revision-view.d.ts +74 -0
- package/dist/lib/revisions/types/revision-view.d.ts.map +1 -0
- package/dist/lib/revisions/types/revision-view.js +2 -0
- package/dist/lib/types/content-type.d.ts +131 -0
- package/dist/lib/types/content-type.d.ts.map +1 -0
- package/dist/lib/types/content-type.js +28 -0
- package/dist/lib/types/fields.d.ts +303 -0
- package/dist/lib/types/fields.d.ts.map +1 -0
- package/dist/lib/types/fields.js +52 -0
- package/dist/lib/utils/content-plugin.d.ts +35 -0
- package/dist/lib/utils/content-plugin.d.ts.map +1 -0
- package/dist/lib/utils/content-plugin.js +35 -0
- package/dist/lib/validation/services/entry-validation.service.d.ts +24 -0
- package/dist/lib/validation/services/entry-validation.service.d.ts.map +1 -0
- package/dist/lib/validation/services/entry-validation.service.js +35 -0
- package/package.json +54 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type PublicUser } from '@orthacms/identity-server';
|
|
2
|
+
import type { ContentTypeRegistry } from '../../../registry/content-type-registry';
|
|
3
|
+
import { EntryWriterService } from '../../infrastructure/persistence/entry-writer.service';
|
|
4
|
+
import { SaveEntryDto } from '../dto/save-entry.dto';
|
|
5
|
+
import type { EntryRecord } from '../../types/entry-list-view';
|
|
6
|
+
/**
|
|
7
|
+
* `POST /api/content/:typeName` — create a draft entry from a validated values
|
|
8
|
+
* bag. The `:typeName` resolves via the registry (404 if unknown); the body is
|
|
9
|
+
* validated against the type's field specs (422 with the issue list on failure).
|
|
10
|
+
* `OriginGuard` defends this state-changing POST (CSRF); `WorkspaceGuard` scopes
|
|
11
|
+
* it to a workspace the caller belongs to; `content:create` gates it. The
|
|
12
|
+
* synchronous CSRF + permission guards run before `WorkspaceGuard` so a rejected
|
|
13
|
+
* request never incurs its membership DB probe.
|
|
14
|
+
*/
|
|
15
|
+
export declare class CreateEntryController {
|
|
16
|
+
private readonly registry;
|
|
17
|
+
private readonly writer;
|
|
18
|
+
constructor(registry: ContentTypeRegistry, writer: EntryWriterService);
|
|
19
|
+
create(typeName: string, body: SaveEntryDto, workspaceId: string, user?: PublicUser): Promise<EntryRecord>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=create-entry.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-entry.controller.d.ts","sourceRoot":"","sources":["../../../../../src/lib/entries/http/controllers/create-entry.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAKH,KAAK,UAAU,EAElB,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI/D;;;;;;;;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,EACxB,IAAI,CAAC,EAAE,UAAU,GACjC,OAAO,CAAC,WAAW,CAAC;CAY1B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CreateEntryController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const identity_server_1 = require("@orthacms/identity-server");
|
|
7
|
+
const workspaces_server_1 = require("@orthacms/workspaces-server");
|
|
8
|
+
const content_grant_guard_1 = require("../guards/content-grant.guard");
|
|
9
|
+
const content_tokens_1 = require("../../../content.tokens");
|
|
10
|
+
const entry_writer_service_1 = require("../../infrastructure/persistence/entry-writer.service");
|
|
11
|
+
const save_entry_dto_1 = require("../dto/save-entry.dto");
|
|
12
|
+
const resolve_type_1 = require("./resolve-type");
|
|
13
|
+
const to_actor_1 = require("./to-actor");
|
|
14
|
+
/**
|
|
15
|
+
* `POST /api/content/:typeName` — create a draft entry from a validated values
|
|
16
|
+
* bag. The `:typeName` resolves via the registry (404 if unknown); the body is
|
|
17
|
+
* validated against the type's field specs (422 with the issue list on failure).
|
|
18
|
+
* `OriginGuard` defends this state-changing POST (CSRF); `WorkspaceGuard` scopes
|
|
19
|
+
* it to a workspace the caller belongs to; `content:create` gates it. The
|
|
20
|
+
* synchronous CSRF + permission guards run before `WorkspaceGuard` so a rejected
|
|
21
|
+
* request never incurs its membership DB probe.
|
|
22
|
+
*/
|
|
23
|
+
let CreateEntryController = class CreateEntryController {
|
|
24
|
+
registry;
|
|
25
|
+
writer;
|
|
26
|
+
constructor(registry, writer) {
|
|
27
|
+
this.registry = registry;
|
|
28
|
+
this.writer = writer;
|
|
29
|
+
}
|
|
30
|
+
create(typeName, body, workspaceId, user) {
|
|
31
|
+
const type = (0, resolve_type_1.resolveType)(this.registry, typeName);
|
|
32
|
+
return this.writer.create(type, body.values, workspaceId, body.relations, body.locale, body.localeGroupId, (0, to_actor_1.toActor)(user));
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.CreateEntryController = CreateEntryController;
|
|
36
|
+
tslib_1.__decorate([
|
|
37
|
+
(0, common_1.Post)(':typeName'),
|
|
38
|
+
tslib_1.__param(0, (0, common_1.Param)('typeName')),
|
|
39
|
+
tslib_1.__param(1, (0, common_1.Body)()),
|
|
40
|
+
tslib_1.__param(2, (0, workspaces_server_1.CurrentWorkspace)()),
|
|
41
|
+
tslib_1.__param(3, (0, identity_server_1.CurrentUser)()),
|
|
42
|
+
tslib_1.__metadata("design:type", Function),
|
|
43
|
+
tslib_1.__metadata("design:paramtypes", [String, save_entry_dto_1.SaveEntryDto, String, Object]),
|
|
44
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
45
|
+
], CreateEntryController.prototype, "create", null);
|
|
46
|
+
exports.CreateEntryController = CreateEntryController = tslib_1.__decorate([
|
|
47
|
+
(0, common_1.UseGuards)(identity_server_1.OriginGuard, identity_server_1.PermissionsGuard, workspaces_server_1.WorkspaceGuard, content_grant_guard_1.ContentGrantGuard),
|
|
48
|
+
(0, identity_server_1.RequirePermissions)(identity_server_1.PERMISSIONS.CONTENT_CREATE),
|
|
49
|
+
(0, common_1.Controller)('content'),
|
|
50
|
+
tslib_1.__param(0, (0, content_tokens_1.InjectContentRegistry)()),
|
|
51
|
+
tslib_1.__metadata("design:paramtypes", [Function, entry_writer_service_1.EntryWriterService])
|
|
52
|
+
], CreateEntryController);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type PublicUser } from '@orthacms/identity-server';
|
|
2
|
+
import type { ContentTypeRegistry } from '../../../registry/content-type-registry';
|
|
3
|
+
import { EntryWriterService } from '../../infrastructure/persistence/entry-writer.service';
|
|
4
|
+
import type { EntryRecord } from '../../types/entry-list-view';
|
|
5
|
+
/**
|
|
6
|
+
* Single-entry removal lifecycle, all gated on `content:delete`:
|
|
7
|
+
* - `DELETE /api/content/:typeName/:id` — soft delete (stamp `deleted_at`) for a
|
|
8
|
+
* paranoid type, hard delete otherwise; 204.
|
|
9
|
+
* - `POST /api/content/:typeName/:id/restore` — clear the tombstone (paranoid
|
|
10
|
+
* only); returns the restored record.
|
|
11
|
+
* - `DELETE /api/content/:typeName/:id/permanent` — permanently remove a
|
|
12
|
+
* tombstoned row (paranoid only); 204.
|
|
13
|
+
*
|
|
14
|
+
* `OriginGuard` defends these state-changing writes; `WorkspaceGuard` scopes them
|
|
15
|
+
* to a workspace the caller belongs to.
|
|
16
|
+
*/
|
|
17
|
+
export declare class DeleteEntryController {
|
|
18
|
+
private readonly registry;
|
|
19
|
+
private readonly writer;
|
|
20
|
+
constructor(registry: ContentTypeRegistry, writer: EntryWriterService);
|
|
21
|
+
remove(typeName: string, id: string, workspaceId: string, user?: PublicUser): Promise<void>;
|
|
22
|
+
restore(typeName: string, id: string, workspaceId: string, user?: PublicUser): Promise<EntryRecord>;
|
|
23
|
+
purge(typeName: string, id: string, workspaceId: string, user?: PublicUser): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=delete-entry.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-entry.controller.d.ts","sourceRoot":"","sources":["../../../../../src/lib/entries/http/controllers/delete-entry.controller.ts"],"names":[],"mappings":"AAUA,OAAO,EAKH,KAAK,UAAU,EAElB,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAC;AAC3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI/D;;;;;;;;;;;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,EACxB,IAAI,CAAC,EAAE,UAAU,GACjC,OAAO,CAAC,IAAI,CAAC;IAMhB,OAAO,CACgB,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACxB,IAAI,CAAC,EAAE,UAAU,GACjC,OAAO,CAAC,WAAW,CAAC;IAOjB,KAAK,CACY,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACxB,IAAI,CAAC,EAAE,UAAU,GACjC,OAAO,CAAC,IAAI,CAAC;CAInB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeleteEntryController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const identity_server_1 = require("@orthacms/identity-server");
|
|
7
|
+
const workspaces_server_1 = require("@orthacms/workspaces-server");
|
|
8
|
+
const content_grant_guard_1 = require("../guards/content-grant.guard");
|
|
9
|
+
const content_tokens_1 = require("../../../content.tokens");
|
|
10
|
+
const entry_writer_service_1 = require("../../infrastructure/persistence/entry-writer.service");
|
|
11
|
+
const resolve_type_1 = require("./resolve-type");
|
|
12
|
+
const to_actor_1 = require("./to-actor");
|
|
13
|
+
/**
|
|
14
|
+
* Single-entry removal lifecycle, all gated on `content:delete`:
|
|
15
|
+
* - `DELETE /api/content/:typeName/:id` — soft delete (stamp `deleted_at`) for a
|
|
16
|
+
* paranoid type, hard delete otherwise; 204.
|
|
17
|
+
* - `POST /api/content/:typeName/:id/restore` — clear the tombstone (paranoid
|
|
18
|
+
* only); returns the restored record.
|
|
19
|
+
* - `DELETE /api/content/:typeName/:id/permanent` — permanently remove a
|
|
20
|
+
* tombstoned row (paranoid only); 204.
|
|
21
|
+
*
|
|
22
|
+
* `OriginGuard` defends these state-changing writes; `WorkspaceGuard` scopes them
|
|
23
|
+
* to a workspace the caller belongs to.
|
|
24
|
+
*/
|
|
25
|
+
let DeleteEntryController = class DeleteEntryController {
|
|
26
|
+
registry;
|
|
27
|
+
writer;
|
|
28
|
+
constructor(registry, writer) {
|
|
29
|
+
this.registry = registry;
|
|
30
|
+
this.writer = writer;
|
|
31
|
+
}
|
|
32
|
+
async remove(typeName, id, workspaceId, user) {
|
|
33
|
+
const type = (0, resolve_type_1.resolveType)(this.registry, typeName);
|
|
34
|
+
await this.writer.remove(type, id, workspaceId, (0, to_actor_1.toActor)(user));
|
|
35
|
+
}
|
|
36
|
+
restore(typeName, id, workspaceId, user) {
|
|
37
|
+
const type = (0, resolve_type_1.resolveType)(this.registry, typeName);
|
|
38
|
+
return this.writer.restore(type, id, workspaceId, (0, to_actor_1.toActor)(user));
|
|
39
|
+
}
|
|
40
|
+
async purge(typeName, id, workspaceId, user) {
|
|
41
|
+
const type = (0, resolve_type_1.resolveType)(this.registry, typeName);
|
|
42
|
+
await this.writer.purge(type, id, workspaceId, (0, to_actor_1.toActor)(user));
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
exports.DeleteEntryController = DeleteEntryController;
|
|
46
|
+
tslib_1.__decorate([
|
|
47
|
+
(0, common_1.Delete)(':typeName/:id'),
|
|
48
|
+
(0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT),
|
|
49
|
+
tslib_1.__param(0, (0, common_1.Param)('typeName')),
|
|
50
|
+
tslib_1.__param(1, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
|
|
51
|
+
tslib_1.__param(2, (0, workspaces_server_1.CurrentWorkspace)()),
|
|
52
|
+
tslib_1.__param(3, (0, identity_server_1.CurrentUser)()),
|
|
53
|
+
tslib_1.__metadata("design:type", Function),
|
|
54
|
+
tslib_1.__metadata("design:paramtypes", [String, String, String, Object]),
|
|
55
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
56
|
+
], DeleteEntryController.prototype, "remove", null);
|
|
57
|
+
tslib_1.__decorate([
|
|
58
|
+
(0, common_1.Post)(':typeName/:id/restore'),
|
|
59
|
+
tslib_1.__param(0, (0, common_1.Param)('typeName')),
|
|
60
|
+
tslib_1.__param(1, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
|
|
61
|
+
tslib_1.__param(2, (0, workspaces_server_1.CurrentWorkspace)()),
|
|
62
|
+
tslib_1.__param(3, (0, identity_server_1.CurrentUser)()),
|
|
63
|
+
tslib_1.__metadata("design:type", Function),
|
|
64
|
+
tslib_1.__metadata("design:paramtypes", [String, String, String, Object]),
|
|
65
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
66
|
+
], DeleteEntryController.prototype, "restore", null);
|
|
67
|
+
tslib_1.__decorate([
|
|
68
|
+
(0, common_1.Delete)(':typeName/:id/permanent'),
|
|
69
|
+
(0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT),
|
|
70
|
+
tslib_1.__param(0, (0, common_1.Param)('typeName')),
|
|
71
|
+
tslib_1.__param(1, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
|
|
72
|
+
tslib_1.__param(2, (0, workspaces_server_1.CurrentWorkspace)()),
|
|
73
|
+
tslib_1.__param(3, (0, identity_server_1.CurrentUser)()),
|
|
74
|
+
tslib_1.__metadata("design:type", Function),
|
|
75
|
+
tslib_1.__metadata("design:paramtypes", [String, String, String, Object]),
|
|
76
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
77
|
+
], DeleteEntryController.prototype, "purge", null);
|
|
78
|
+
exports.DeleteEntryController = DeleteEntryController = tslib_1.__decorate([
|
|
79
|
+
(0, common_1.UseGuards)(identity_server_1.OriginGuard, identity_server_1.PermissionsGuard, workspaces_server_1.WorkspaceGuard, content_grant_guard_1.ContentGrantGuard),
|
|
80
|
+
(0, identity_server_1.RequirePermissions)(identity_server_1.PERMISSIONS.CONTENT_DELETE),
|
|
81
|
+
(0, common_1.Controller)('content'),
|
|
82
|
+
tslib_1.__param(0, (0, content_tokens_1.InjectContentRegistry)()),
|
|
83
|
+
tslib_1.__metadata("design:paramtypes", [Function, entry_writer_service_1.EntryWriterService])
|
|
84
|
+
], DeleteEntryController);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ContentTypeRegistry } from '../../../registry/content-type-registry';
|
|
2
|
+
import { EntryWriterService } from '../../infrastructure/persistence/entry-writer.service';
|
|
3
|
+
import { MediaRefsQuery } from '../../infrastructure/queries/media-refs.query';
|
|
4
|
+
import type { EntryMediaView, EntryRecord, EntryRelationsView, RelationFieldView } from '../../types/entry-list-view';
|
|
5
|
+
/**
|
|
6
|
+
* `GET /api/content/:typeName/:id` — one live entry by id (404 if unknown or
|
|
7
|
+
* soft-deleted), so the editor can open an entry by deep link without relying on
|
|
8
|
+
* the records-list cache. `WorkspaceGuard` scopes it to a workspace the caller
|
|
9
|
+
* belongs to; gated on `content:read`.
|
|
10
|
+
*/
|
|
11
|
+
export declare class GetEntryController {
|
|
12
|
+
private readonly registry;
|
|
13
|
+
private readonly writer;
|
|
14
|
+
private readonly mediaRefs;
|
|
15
|
+
constructor(registry: ContentTypeRegistry, writer: EntryWriterService, mediaRefs: MediaRefsQuery);
|
|
16
|
+
getOne(typeName: string, id: string, workspaceId: string): Promise<EntryRecord>;
|
|
17
|
+
/**
|
|
18
|
+
* `GET /api/content/:typeName/:id/media` — one entry's media fields resolved
|
|
19
|
+
* to display refs (name / thumbnail url / kind), keyed by field name, so the
|
|
20
|
+
* editor's Media tab renders assigned assets by thumbnail without a per-id
|
|
21
|
+
* round-trip. Empty when no media resolver is bound. 404 when the entry is
|
|
22
|
+
* missing or soft-deleted in this workspace. `content:read`.
|
|
23
|
+
*/
|
|
24
|
+
getMedia(typeName: string, id: string, workspaceId: string): Promise<EntryMediaView>;
|
|
25
|
+
/**
|
|
26
|
+
* `GET /api/content/:typeName/:id/relations` — one entry's relation links,
|
|
27
|
+
* keyed by field name. Every relation field (owning single/many **and**
|
|
28
|
+
* inverse back-references) resolved to display-ready refs (id + title) in a
|
|
29
|
+
* bounded set of queries, so the editor can render assigned relations by
|
|
30
|
+
* title and seed the form value with their ids without a round-trip per
|
|
31
|
+
* link. 404 when the entry is missing or soft-deleted in this workspace.
|
|
32
|
+
*/
|
|
33
|
+
getRelations(typeName: string, id: string, workspaceId: string): Promise<EntryRelationsView>;
|
|
34
|
+
/**
|
|
35
|
+
* `GET /api/content/:typeName/:id/relations/:field` — one page of a single
|
|
36
|
+
* relation field's links (`{ items, total }`), ordered by position. Drives
|
|
37
|
+
* the editor's infinite-scroll of a many/inverse relation, so a field with
|
|
38
|
+
* thousands of links is paged, never loaded whole. `?page=&pageSize=`
|
|
39
|
+
* (1-based; clamped). 400 if `field` isn't a relation; 404 if the entry is
|
|
40
|
+
* missing. `content:read`.
|
|
41
|
+
*/
|
|
42
|
+
getRelationField(typeName: string, id: string, field: string, workspaceId: string, page?: string, pageSize?: string): Promise<RelationFieldView>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=get-entry.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-entry.controller.d.ts","sourceRoot":"","sources":["../../../../../src/lib/entries/http/controllers/get-entry.controller.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,KAAK,EACR,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACpB,MAAM,6BAA6B,CAAC;AAIrC;;;;;GAKG;AACH,qBAGa,kBAAkB;IAGvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,cAAc;IAI9C,MAAM,CACiB,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,WAAW,CAAC;IAKvB;;;;;;OAMG;IAEG,QAAQ,CACS,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GACxC,OAAO,CAAC,cAAc,CAAC;IAa1B;;;;;;;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,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GetEntryController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const identity_server_1 = require("@orthacms/identity-server");
|
|
7
|
+
const workspaces_server_1 = require("@orthacms/workspaces-server");
|
|
8
|
+
const content_grant_guard_1 = require("../guards/content-grant.guard");
|
|
9
|
+
const utils_server_1 = require("@orthacms/utils-server");
|
|
10
|
+
const entries_constants_1 = require("../../entries.constants");
|
|
11
|
+
const content_tokens_1 = require("../../../content.tokens");
|
|
12
|
+
const entry_writer_service_1 = require("../../infrastructure/persistence/entry-writer.service");
|
|
13
|
+
const media_refs_query_1 = require("../../infrastructure/queries/media-refs.query");
|
|
14
|
+
const relation_link_service_1 = require("../../infrastructure/persistence/relation-link.service");
|
|
15
|
+
const resolve_type_1 = require("./resolve-type");
|
|
16
|
+
/**
|
|
17
|
+
* `GET /api/content/:typeName/:id` — one live entry by id (404 if unknown or
|
|
18
|
+
* soft-deleted), so the editor can open an entry by deep link without relying on
|
|
19
|
+
* the records-list cache. `WorkspaceGuard` scopes it to a workspace the caller
|
|
20
|
+
* belongs to; gated on `content:read`.
|
|
21
|
+
*/
|
|
22
|
+
let GetEntryController = class GetEntryController {
|
|
23
|
+
registry;
|
|
24
|
+
writer;
|
|
25
|
+
mediaRefs;
|
|
26
|
+
constructor(registry, writer, mediaRefs) {
|
|
27
|
+
this.registry = registry;
|
|
28
|
+
this.writer = writer;
|
|
29
|
+
this.mediaRefs = mediaRefs;
|
|
30
|
+
}
|
|
31
|
+
getOne(typeName, id, workspaceId) {
|
|
32
|
+
const type = (0, resolve_type_1.resolveType)(this.registry, typeName);
|
|
33
|
+
return this.writer.getOne(type, id, workspaceId);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* `GET /api/content/:typeName/:id/media` — one entry's media fields resolved
|
|
37
|
+
* to display refs (name / thumbnail url / kind), keyed by field name, so the
|
|
38
|
+
* editor's Media tab renders assigned assets by thumbnail without a per-id
|
|
39
|
+
* round-trip. Empty when no media resolver is bound. 404 when the entry is
|
|
40
|
+
* missing or soft-deleted in this workspace. `content:read`.
|
|
41
|
+
*/
|
|
42
|
+
async getMedia(typeName, id, workspaceId) {
|
|
43
|
+
const type = (0, resolve_type_1.resolveType)(this.registry, typeName);
|
|
44
|
+
// 404s a missing/soft-deleted entry, and gives us its live values bag.
|
|
45
|
+
const entry = await this.writer.getOne(type, id, workspaceId);
|
|
46
|
+
return {
|
|
47
|
+
media: await this.mediaRefs.forValues(type, entry.values, workspaceId)
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* `GET /api/content/:typeName/:id/relations` — one entry's relation links,
|
|
52
|
+
* keyed by field name. Every relation field (owning single/many **and**
|
|
53
|
+
* inverse back-references) resolved to display-ready refs (id + title) in a
|
|
54
|
+
* bounded set of queries, so the editor can render assigned relations by
|
|
55
|
+
* title and seed the form value with their ids without a round-trip per
|
|
56
|
+
* link. 404 when the entry is missing or soft-deleted in this workspace.
|
|
57
|
+
*/
|
|
58
|
+
async getRelations(typeName, id, workspaceId) {
|
|
59
|
+
const type = (0, resolve_type_1.resolveType)(this.registry, typeName);
|
|
60
|
+
return {
|
|
61
|
+
relations: await this.writer.getRelations(type, id, workspaceId)
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* `GET /api/content/:typeName/:id/relations/:field` — one page of a single
|
|
66
|
+
* relation field's links (`{ items, total }`), ordered by position. Drives
|
|
67
|
+
* the editor's infinite-scroll of a many/inverse relation, so a field with
|
|
68
|
+
* thousands of links is paged, never loaded whole. `?page=&pageSize=`
|
|
69
|
+
* (1-based; clamped). 400 if `field` isn't a relation; 404 if the entry is
|
|
70
|
+
* missing. `content:read`.
|
|
71
|
+
*/
|
|
72
|
+
getRelationField(typeName, id, field, workspaceId, page, pageSize) {
|
|
73
|
+
const type = (0, resolve_type_1.resolveType)(this.registry, typeName);
|
|
74
|
+
return this.writer.getRelationField(type, id, field, (0, utils_server_1.clampInt)(page, 1, 1, Number.MAX_SAFE_INTEGER), (0, utils_server_1.clampInt)(pageSize, relation_link_service_1.RELATION_PAGE_SIZE, 1, entries_constants_1.MAX_PAGE_SIZE), workspaceId);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
exports.GetEntryController = GetEntryController;
|
|
78
|
+
tslib_1.__decorate([
|
|
79
|
+
(0, common_1.Get)(':typeName/:id'),
|
|
80
|
+
tslib_1.__param(0, (0, common_1.Param)('typeName')),
|
|
81
|
+
tslib_1.__param(1, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
|
|
82
|
+
tslib_1.__param(2, (0, workspaces_server_1.CurrentWorkspace)()),
|
|
83
|
+
tslib_1.__metadata("design:type", Function),
|
|
84
|
+
tslib_1.__metadata("design:paramtypes", [String, String, String]),
|
|
85
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
86
|
+
], GetEntryController.prototype, "getOne", null);
|
|
87
|
+
tslib_1.__decorate([
|
|
88
|
+
(0, common_1.Get)(':typeName/:id/media'),
|
|
89
|
+
tslib_1.__param(0, (0, common_1.Param)('typeName')),
|
|
90
|
+
tslib_1.__param(1, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
|
|
91
|
+
tslib_1.__param(2, (0, workspaces_server_1.CurrentWorkspace)()),
|
|
92
|
+
tslib_1.__metadata("design:type", Function),
|
|
93
|
+
tslib_1.__metadata("design:paramtypes", [String, String, String]),
|
|
94
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
95
|
+
], GetEntryController.prototype, "getMedia", null);
|
|
96
|
+
tslib_1.__decorate([
|
|
97
|
+
(0, common_1.Get)(':typeName/:id/relations'),
|
|
98
|
+
tslib_1.__param(0, (0, common_1.Param)('typeName')),
|
|
99
|
+
tslib_1.__param(1, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
|
|
100
|
+
tslib_1.__param(2, (0, workspaces_server_1.CurrentWorkspace)()),
|
|
101
|
+
tslib_1.__metadata("design:type", Function),
|
|
102
|
+
tslib_1.__metadata("design:paramtypes", [String, String, String]),
|
|
103
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
104
|
+
], GetEntryController.prototype, "getRelations", null);
|
|
105
|
+
tslib_1.__decorate([
|
|
106
|
+
(0, common_1.Get)(':typeName/:id/relations/:field'),
|
|
107
|
+
tslib_1.__param(0, (0, common_1.Param)('typeName')),
|
|
108
|
+
tslib_1.__param(1, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
|
|
109
|
+
tslib_1.__param(2, (0, common_1.Param)('field')),
|
|
110
|
+
tslib_1.__param(3, (0, workspaces_server_1.CurrentWorkspace)()),
|
|
111
|
+
tslib_1.__param(4, (0, common_1.Query)('page')),
|
|
112
|
+
tslib_1.__param(5, (0, common_1.Query)('pageSize')),
|
|
113
|
+
tslib_1.__metadata("design:type", Function),
|
|
114
|
+
tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, String]),
|
|
115
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
116
|
+
], GetEntryController.prototype, "getRelationField", null);
|
|
117
|
+
exports.GetEntryController = GetEntryController = tslib_1.__decorate([
|
|
118
|
+
(0, common_1.UseGuards)(identity_server_1.PermissionsGuard, workspaces_server_1.WorkspaceGuard, content_grant_guard_1.ContentGrantGuard),
|
|
119
|
+
(0, identity_server_1.RequirePermissions)(identity_server_1.PERMISSIONS.CONTENT_READ),
|
|
120
|
+
(0, common_1.Controller)('content'),
|
|
121
|
+
tslib_1.__param(0, (0, content_tokens_1.InjectContentRegistry)()),
|
|
122
|
+
tslib_1.__metadata("design:paramtypes", [Function, entry_writer_service_1.EntryWriterService,
|
|
123
|
+
media_refs_query_1.MediaRefsQuery])
|
|
124
|
+
], GetEntryController);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ContentTypeRegistry } from '../../../registry/content-type-registry';
|
|
2
|
+
import { EntriesService } from '../../infrastructure/queries/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/http/controllers/list-entries.controller.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE;;;;;;;;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,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ListEntriesController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const identity_server_1 = require("@orthacms/identity-server");
|
|
7
|
+
const workspaces_server_1 = require("@orthacms/workspaces-server");
|
|
8
|
+
const content_grant_guard_1 = require("../guards/content-grant.guard");
|
|
9
|
+
const content_tokens_1 = require("../../../content.tokens");
|
|
10
|
+
const entries_service_1 = require("../../infrastructure/queries/entries.service");
|
|
11
|
+
const list_entries_query_dto_1 = require("../dto/list-entries-query.dto");
|
|
12
|
+
/**
|
|
13
|
+
* `GET /api/content/:typeName` — one page of a collection's entries, filtered/
|
|
14
|
+
* searched/sorted via query params (`?search=`, `?filter=`, `?sort=`, `?page=`,
|
|
15
|
+
* `?pageSize=`). The `:typeName` is resolved from the registry (404 if unknown),
|
|
16
|
+
* so this single route serves every collection; the service runs the generic SQL
|
|
17
|
+
* pipeline against the type's generated table. Authentication is enforced by the
|
|
18
|
+
* app-wide AuthGuard; `WorkspaceGuard` scopes the request to a workspace the
|
|
19
|
+
* caller belongs to; read access is gated on `content:read`.
|
|
20
|
+
*/
|
|
21
|
+
let ListEntriesController = class ListEntriesController {
|
|
22
|
+
registry;
|
|
23
|
+
entries;
|
|
24
|
+
constructor(registry, entries) {
|
|
25
|
+
this.registry = registry;
|
|
26
|
+
this.entries = entries;
|
|
27
|
+
}
|
|
28
|
+
list(typeName, query, workspaceId) {
|
|
29
|
+
const type = this.registry.get(typeName);
|
|
30
|
+
if (!type) {
|
|
31
|
+
throw new common_1.NotFoundException(`Unknown content type "${typeName}".`);
|
|
32
|
+
}
|
|
33
|
+
return this.entries.list(type, query, workspaceId);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.ListEntriesController = ListEntriesController;
|
|
37
|
+
tslib_1.__decorate([
|
|
38
|
+
(0, common_1.Get)(':typeName'),
|
|
39
|
+
tslib_1.__param(0, (0, common_1.Param)('typeName')),
|
|
40
|
+
tslib_1.__param(1, (0, common_1.Query)()),
|
|
41
|
+
tslib_1.__param(2, (0, workspaces_server_1.CurrentWorkspace)()),
|
|
42
|
+
tslib_1.__metadata("design:type", Function),
|
|
43
|
+
tslib_1.__metadata("design:paramtypes", [String, list_entries_query_dto_1.ListEntriesQueryDto, String]),
|
|
44
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
45
|
+
], ListEntriesController.prototype, "list", null);
|
|
46
|
+
exports.ListEntriesController = ListEntriesController = tslib_1.__decorate([
|
|
47
|
+
(0, common_1.UseGuards)(identity_server_1.PermissionsGuard, workspaces_server_1.WorkspaceGuard, content_grant_guard_1.ContentGrantGuard),
|
|
48
|
+
(0, identity_server_1.RequirePermissions)(identity_server_1.PERMISSIONS.CONTENT_READ),
|
|
49
|
+
(0, common_1.Controller)('content'),
|
|
50
|
+
tslib_1.__param(0, (0, content_tokens_1.InjectContentRegistry)()),
|
|
51
|
+
tslib_1.__metadata("design:paramtypes", [Function, entries_service_1.EntriesService])
|
|
52
|
+
], ListEntriesController);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type PublicUser } from '@orthacms/identity-server';
|
|
2
|
+
import type { ContentTypeRegistry } from '../../../registry/content-type-registry';
|
|
3
|
+
import { PublishEntryUseCase } from '../../application/use-cases/publish-entry.use-case';
|
|
4
|
+
import { UnpublishEntryUseCase } from '../../application/use-cases/unpublish-entry.use-case';
|
|
5
|
+
import type { EntryRecord } from '../../types/entry-list-view';
|
|
6
|
+
/**
|
|
7
|
+
* `POST /api/content/:typeName/:id/publish` and `.../unpublish` — the publish
|
|
8
|
+
* workflow for a single entry. Publish revalidates the stored row (a 422 if the
|
|
9
|
+
* draft no longer passes), then stamps `status='published'` + `published_at`;
|
|
10
|
+
* unpublish reverts to draft. Both 400 on a non-publishable type and 404 on a
|
|
11
|
+
* missing live row. `OriginGuard` defends the writes; `WorkspaceGuard` scopes
|
|
12
|
+
* them to a workspace the caller belongs to; `content:publish` gates them.
|
|
13
|
+
*/
|
|
14
|
+
export declare class PublishEntryController {
|
|
15
|
+
private readonly registry;
|
|
16
|
+
private readonly publishEntry;
|
|
17
|
+
private readonly unpublishEntry;
|
|
18
|
+
constructor(registry: ContentTypeRegistry, publishEntry: PublishEntryUseCase, unpublishEntry: UnpublishEntryUseCase);
|
|
19
|
+
publish(typeName: string, id: string, workspaceId: string, user?: PublicUser): Promise<EntryRecord>;
|
|
20
|
+
unpublish(typeName: string, id: string, workspaceId: string, user?: PublicUser): Promise<EntryRecord>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=publish-entry.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-entry.controller.d.ts","sourceRoot":"","sources":["../../../../../src/lib/entries/http/controllers/publish-entry.controller.ts"],"names":[],"mappings":"AAOA,OAAO,EAKH,KAAK,UAAU,EAElB,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sDAAsD,CAAC;AAC7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI/D;;;;;;;GAOG;AACH,qBAGa,sBAAsB;IAG3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAFd,QAAQ,EAAE,mBAAmB,EAC7B,YAAY,EAAE,mBAAmB,EACjC,cAAc,EAAE,qBAAqB;IAI1D,OAAO,CACgB,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACxB,IAAI,CAAC,EAAE,UAAU,GACjC,OAAO,CAAC,WAAW,CAAC;IAMvB,SAAS,CACc,QAAQ,EAAE,MAAM,EACP,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACxB,IAAI,CAAC,EAAE,UAAU,GACjC,OAAO,CAAC,WAAW,CAAC;CAS1B"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PublishEntryController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const identity_server_1 = require("@orthacms/identity-server");
|
|
7
|
+
const workspaces_server_1 = require("@orthacms/workspaces-server");
|
|
8
|
+
const content_grant_guard_1 = require("../guards/content-grant.guard");
|
|
9
|
+
const content_tokens_1 = require("../../../content.tokens");
|
|
10
|
+
const publish_entry_use_case_1 = require("../../application/use-cases/publish-entry.use-case");
|
|
11
|
+
const unpublish_entry_use_case_1 = require("../../application/use-cases/unpublish-entry.use-case");
|
|
12
|
+
const resolve_type_1 = require("./resolve-type");
|
|
13
|
+
const to_actor_1 = require("./to-actor");
|
|
14
|
+
/**
|
|
15
|
+
* `POST /api/content/:typeName/:id/publish` and `.../unpublish` — the publish
|
|
16
|
+
* workflow for a single entry. Publish revalidates the stored row (a 422 if the
|
|
17
|
+
* draft no longer passes), then stamps `status='published'` + `published_at`;
|
|
18
|
+
* unpublish reverts to draft. Both 400 on a non-publishable type and 404 on a
|
|
19
|
+
* missing live row. `OriginGuard` defends the writes; `WorkspaceGuard` scopes
|
|
20
|
+
* them to a workspace the caller belongs to; `content:publish` gates them.
|
|
21
|
+
*/
|
|
22
|
+
let PublishEntryController = class PublishEntryController {
|
|
23
|
+
registry;
|
|
24
|
+
publishEntry;
|
|
25
|
+
unpublishEntry;
|
|
26
|
+
constructor(registry, publishEntry, unpublishEntry) {
|
|
27
|
+
this.registry = registry;
|
|
28
|
+
this.publishEntry = publishEntry;
|
|
29
|
+
this.unpublishEntry = unpublishEntry;
|
|
30
|
+
}
|
|
31
|
+
publish(typeName, id, workspaceId, user) {
|
|
32
|
+
const type = (0, resolve_type_1.resolveType)(this.registry, typeName);
|
|
33
|
+
return this.publishEntry.execute(type, id, workspaceId, (0, to_actor_1.toActor)(user));
|
|
34
|
+
}
|
|
35
|
+
unpublish(typeName, id, workspaceId, user) {
|
|
36
|
+
const type = (0, resolve_type_1.resolveType)(this.registry, typeName);
|
|
37
|
+
return this.unpublishEntry.execute(type, id, workspaceId, (0, to_actor_1.toActor)(user));
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
exports.PublishEntryController = PublishEntryController;
|
|
41
|
+
tslib_1.__decorate([
|
|
42
|
+
(0, common_1.Post)(':typeName/:id/publish'),
|
|
43
|
+
tslib_1.__param(0, (0, common_1.Param)('typeName')),
|
|
44
|
+
tslib_1.__param(1, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
|
|
45
|
+
tslib_1.__param(2, (0, workspaces_server_1.CurrentWorkspace)()),
|
|
46
|
+
tslib_1.__param(3, (0, identity_server_1.CurrentUser)()),
|
|
47
|
+
tslib_1.__metadata("design:type", Function),
|
|
48
|
+
tslib_1.__metadata("design:paramtypes", [String, String, String, Object]),
|
|
49
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
50
|
+
], PublishEntryController.prototype, "publish", null);
|
|
51
|
+
tslib_1.__decorate([
|
|
52
|
+
(0, common_1.Post)(':typeName/:id/unpublish'),
|
|
53
|
+
tslib_1.__param(0, (0, common_1.Param)('typeName')),
|
|
54
|
+
tslib_1.__param(1, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
|
|
55
|
+
tslib_1.__param(2, (0, workspaces_server_1.CurrentWorkspace)()),
|
|
56
|
+
tslib_1.__param(3, (0, identity_server_1.CurrentUser)()),
|
|
57
|
+
tslib_1.__metadata("design:type", Function),
|
|
58
|
+
tslib_1.__metadata("design:paramtypes", [String, String, String, Object]),
|
|
59
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
60
|
+
], PublishEntryController.prototype, "unpublish", null);
|
|
61
|
+
exports.PublishEntryController = PublishEntryController = tslib_1.__decorate([
|
|
62
|
+
(0, common_1.UseGuards)(identity_server_1.OriginGuard, identity_server_1.PermissionsGuard, workspaces_server_1.WorkspaceGuard, content_grant_guard_1.ContentGrantGuard),
|
|
63
|
+
(0, identity_server_1.RequirePermissions)(identity_server_1.PERMISSIONS.CONTENT_PUBLISH),
|
|
64
|
+
(0, common_1.Controller)('content'),
|
|
65
|
+
tslib_1.__param(0, (0, content_tokens_1.InjectContentRegistry)()),
|
|
66
|
+
tslib_1.__metadata("design:paramtypes", [Function, publish_entry_use_case_1.PublishEntryUseCase,
|
|
67
|
+
unpublish_entry_use_case_1.UnpublishEntryUseCase])
|
|
68
|
+
], PublishEntryController);
|
|
@@ -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/http/controllers/resolve-type.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAEnF;;;;GAIG;AACH,wBAAgB,WAAW,CACvB,QAAQ,EAAE,mBAAmB,EAC7B,QAAQ,EAAE,MAAM,GACjB,cAAc,CAMhB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveType = resolveType;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
/**
|
|
6
|
+
* Resolve a `:typeName` route param to a registered content type, or throw 404.
|
|
7
|
+
* Every entries controller routes one path per HTTP verb against the registry,
|
|
8
|
+
* so this single lookup keeps them thin and consistent.
|
|
9
|
+
*/
|
|
10
|
+
function resolveType(registry, typeName) {
|
|
11
|
+
const type = registry.get(typeName);
|
|
12
|
+
if (!type) {
|
|
13
|
+
throw new common_1.NotFoundException(`Unknown content type "${typeName}".`);
|
|
14
|
+
}
|
|
15
|
+
return type;
|
|
16
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { EventActor } from '@orthacms/database';
|
|
2
|
+
import type { PublicUser } from '@orthacms/identity-server';
|
|
3
|
+
/**
|
|
4
|
+
* The signed-in user as the {@link EventActor} an entry write stamps onto its
|
|
5
|
+
* domain events, or `undefined` when there is nobody to name.
|
|
6
|
+
*
|
|
7
|
+
* Shared by every entry write controller rather than restated per file: the
|
|
8
|
+
* audit log's whole claim is "who did what, when", and a route that quietly
|
|
9
|
+
* dropped the actor would answer the first third of that with "System" while
|
|
10
|
+
* looking identical to one that did not.
|
|
11
|
+
*/
|
|
12
|
+
export declare function toActor(user?: PublicUser): EventActor | undefined;
|
|
13
|
+
//# sourceMappingURL=to-actor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-actor.d.ts","sourceRoot":"","sources":["../../../../../src/lib/entries/http/controllers/to-actor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAEjE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toActor = toActor;
|
|
4
|
+
/**
|
|
5
|
+
* The signed-in user as the {@link EventActor} an entry write stamps onto its
|
|
6
|
+
* domain events, or `undefined` when there is nobody to name.
|
|
7
|
+
*
|
|
8
|
+
* Shared by every entry write controller rather than restated per file: the
|
|
9
|
+
* audit log's whole claim is "who did what, when", and a route that quietly
|
|
10
|
+
* dropped the actor would answer the first third of that with "System" while
|
|
11
|
+
* looking identical to one that did not.
|
|
12
|
+
*/
|
|
13
|
+
function toActor(user) {
|
|
14
|
+
return user ? { id: user.id, email: user.email ?? null } : undefined;
|
|
15
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type PublicUser } from '@orthacms/identity-server';
|
|
2
|
+
import type { ContentTypeRegistry } from '../../../registry/content-type-registry';
|
|
3
|
+
import { EntryWriterService } from '../../infrastructure/persistence/entry-writer.service';
|
|
4
|
+
import { SaveEntryDto } from '../dto/save-entry.dto';
|
|
5
|
+
import type { EntryRecord } from '../../types/entry-list-view';
|
|
6
|
+
/**
|
|
7
|
+
* `PATCH /api/content/:typeName/:id` — replace a live entry's values with a
|
|
8
|
+
* validated bag (the editor always submits the full document). 404 if there's no
|
|
9
|
+
* live row; 422 with the issue list on validation failure. `OriginGuard` defends
|
|
10
|
+
* this state-changing write; `WorkspaceGuard` scopes it to a workspace the caller
|
|
11
|
+
* belongs to; `content:update` gates it.
|
|
12
|
+
*/
|
|
13
|
+
export declare class UpdateEntryController {
|
|
14
|
+
private readonly registry;
|
|
15
|
+
private readonly writer;
|
|
16
|
+
constructor(registry: ContentTypeRegistry, writer: EntryWriterService);
|
|
17
|
+
update(typeName: string, id: string, body: SaveEntryDto, workspaceId: string, user?: PublicUser): Promise<EntryRecord>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=update-entry.controller.d.ts.map
|