@aotter/mantle-runtime 0.0.11-alpha.11
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 +202 -0
- package/README.md +14 -0
- package/dist/domain/index.d.ts +4 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +4 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/model/EntryRow.d.ts +59 -0
- package/dist/domain/model/EntryRow.d.ts.map +1 -0
- package/dist/domain/model/EntryRow.js +42 -0
- package/dist/domain/model/EntryRow.js.map +1 -0
- package/dist/domain/model/HandlerContext.d.ts +65 -0
- package/dist/domain/model/HandlerContext.d.ts.map +1 -0
- package/dist/domain/model/HandlerContext.js +2 -0
- package/dist/domain/model/HandlerContext.js.map +1 -0
- package/dist/domain/model/SeoMeta.d.ts +49 -0
- package/dist/domain/model/SeoMeta.d.ts.map +1 -0
- package/dist/domain/model/SeoMeta.js +2 -0
- package/dist/domain/model/SeoMeta.js.map +1 -0
- package/dist/domain/model/TemplateRegistry.d.ts +47 -0
- package/dist/domain/model/TemplateRegistry.d.ts.map +1 -0
- package/dist/domain/model/TemplateRegistry.js +17 -0
- package/dist/domain/model/TemplateRegistry.js.map +1 -0
- package/dist/domain/model/index.d.ts +7 -0
- package/dist/domain/model/index.d.ts.map +1 -0
- package/dist/domain/model/index.js +6 -0
- package/dist/domain/model/index.js.map +1 -0
- package/dist/domain/port/AssetServer.d.ts +21 -0
- package/dist/domain/port/AssetServer.d.ts.map +1 -0
- package/dist/domain/port/AssetServer.js +2 -0
- package/dist/domain/port/AssetServer.js.map +1 -0
- package/dist/domain/port/Clock.d.ts +13 -0
- package/dist/domain/port/Clock.d.ts.map +1 -0
- package/dist/domain/port/Clock.js +2 -0
- package/dist/domain/port/Clock.js.map +1 -0
- package/dist/domain/port/DatabaseDriver.d.ts +91 -0
- package/dist/domain/port/DatabaseDriver.d.ts.map +1 -0
- package/dist/domain/port/DatabaseDriver.js +2 -0
- package/dist/domain/port/DatabaseDriver.js.map +1 -0
- package/dist/domain/port/DeferredHookDispatcher.d.ts +55 -0
- package/dist/domain/port/DeferredHookDispatcher.d.ts.map +1 -0
- package/dist/domain/port/DeferredHookDispatcher.js +16 -0
- package/dist/domain/port/DeferredHookDispatcher.js.map +1 -0
- package/dist/domain/port/EmailSender.d.ts +31 -0
- package/dist/domain/port/EmailSender.d.ts.map +1 -0
- package/dist/domain/port/EmailSender.js +2 -0
- package/dist/domain/port/EmailSender.js.map +1 -0
- package/dist/domain/port/EntryRepository.d.ts +132 -0
- package/dist/domain/port/EntryRepository.d.ts.map +1 -0
- package/dist/domain/port/EntryRepository.js +2 -0
- package/dist/domain/port/EntryRepository.js.map +1 -0
- package/dist/domain/port/HandlerRegistry.d.ts +38 -0
- package/dist/domain/port/HandlerRegistry.d.ts.map +1 -0
- package/dist/domain/port/HandlerRegistry.js +27 -0
- package/dist/domain/port/HandlerRegistry.js.map +1 -0
- package/dist/domain/port/IdGenerator.d.ts +28 -0
- package/dist/domain/port/IdGenerator.d.ts.map +1 -0
- package/dist/domain/port/IdGenerator.js +5 -0
- package/dist/domain/port/IdGenerator.js.map +1 -0
- package/dist/domain/port/KvCache.d.ts +34 -0
- package/dist/domain/port/KvCache.d.ts.map +1 -0
- package/dist/domain/port/KvCache.js +2 -0
- package/dist/domain/port/KvCache.js.map +1 -0
- package/dist/domain/port/LifecycleHookRunner.d.ts +41 -0
- package/dist/domain/port/LifecycleHookRunner.d.ts.map +1 -0
- package/dist/domain/port/LifecycleHookRunner.js +2 -0
- package/dist/domain/port/LifecycleHookRunner.js.map +1 -0
- package/dist/domain/port/MediaStorage.d.ts +102 -0
- package/dist/domain/port/MediaStorage.d.ts.map +1 -0
- package/dist/domain/port/MediaStorage.js +2 -0
- package/dist/domain/port/MediaStorage.js.map +1 -0
- package/dist/domain/port/PublishOrchestrator.d.ts +25 -0
- package/dist/domain/port/PublishOrchestrator.d.ts.map +1 -0
- package/dist/domain/port/PublishOrchestrator.js +2 -0
- package/dist/domain/port/PublishOrchestrator.js.map +1 -0
- package/dist/domain/port/SiteConfigRepository.d.ts +27 -0
- package/dist/domain/port/SiteConfigRepository.d.ts.map +1 -0
- package/dist/domain/port/SiteConfigRepository.js +2 -0
- package/dist/domain/port/SiteConfigRepository.js.map +1 -0
- package/dist/domain/port/index.d.ts +30 -0
- package/dist/domain/port/index.d.ts.map +1 -0
- package/dist/domain/port/index.js +5 -0
- package/dist/domain/port/index.js.map +1 -0
- package/dist/domain/service/AbsoluteUrl.d.ts +6 -0
- package/dist/domain/service/AbsoluteUrl.d.ts.map +1 -0
- package/dist/domain/service/AbsoluteUrl.js +33 -0
- package/dist/domain/service/AbsoluteUrl.js.map +1 -0
- package/dist/domain/service/AuthPredicateEvaluator.d.ts +29 -0
- package/dist/domain/service/AuthPredicateEvaluator.d.ts.map +1 -0
- package/dist/domain/service/AuthPredicateEvaluator.js +48 -0
- package/dist/domain/service/AuthPredicateEvaluator.js.map +1 -0
- package/dist/domain/service/BuiltinProjector.d.ts +50 -0
- package/dist/domain/service/BuiltinProjector.d.ts.map +1 -0
- package/dist/domain/service/BuiltinProjector.js +61 -0
- package/dist/domain/service/BuiltinProjector.js.map +1 -0
- package/dist/domain/service/EntrySeoSupport.d.ts +27 -0
- package/dist/domain/service/EntrySeoSupport.d.ts.map +1 -0
- package/dist/domain/service/EntrySeoSupport.js +13 -0
- package/dist/domain/service/EntrySeoSupport.js.map +1 -0
- package/dist/domain/service/HtmlRenderer.d.ts +32 -0
- package/dist/domain/service/HtmlRenderer.d.ts.map +1 -0
- package/dist/domain/service/HtmlRenderer.js +38 -0
- package/dist/domain/service/HtmlRenderer.js.map +1 -0
- package/dist/domain/service/LocaleNegotiator.d.ts +29 -0
- package/dist/domain/service/LocaleNegotiator.d.ts.map +1 -0
- package/dist/domain/service/LocaleNegotiator.js +62 -0
- package/dist/domain/service/LocaleNegotiator.js.map +1 -0
- package/dist/domain/service/MarkdownSerializer.d.ts +48 -0
- package/dist/domain/service/MarkdownSerializer.d.ts.map +1 -0
- package/dist/domain/service/MarkdownSerializer.js +109 -0
- package/dist/domain/service/MarkdownSerializer.js.map +1 -0
- package/dist/domain/service/McpToolNaming.d.ts +12 -0
- package/dist/domain/service/McpToolNaming.d.ts.map +1 -0
- package/dist/domain/service/McpToolNaming.js +14 -0
- package/dist/domain/service/McpToolNaming.js.map +1 -0
- package/dist/domain/service/Pagination.d.ts +15 -0
- package/dist/domain/service/Pagination.d.ts.map +1 -0
- package/dist/domain/service/Pagination.js +29 -0
- package/dist/domain/service/Pagination.js.map +1 -0
- package/dist/domain/service/PathMatcher.d.ts +15 -0
- package/dist/domain/service/PathMatcher.d.ts.map +1 -0
- package/dist/domain/service/PathMatcher.js +54 -0
- package/dist/domain/service/PathMatcher.js.map +1 -0
- package/dist/domain/service/PreviewBanner.d.ts +10 -0
- package/dist/domain/service/PreviewBanner.d.ts.map +1 -0
- package/dist/domain/service/PreviewBanner.js +37 -0
- package/dist/domain/service/PreviewBanner.js.map +1 -0
- package/dist/domain/service/PublicPathResolver.d.ts +41 -0
- package/dist/domain/service/PublicPathResolver.d.ts.map +1 -0
- package/dist/domain/service/PublicPathResolver.js +24 -0
- package/dist/domain/service/PublicPathResolver.js.map +1 -0
- package/dist/domain/service/PublishKeys.d.ts +42 -0
- package/dist/domain/service/PublishKeys.d.ts.map +1 -0
- package/dist/domain/service/PublishKeys.js +69 -0
- package/dist/domain/service/PublishKeys.js.map +1 -0
- package/dist/domain/service/SeoMetaComposer.d.ts +47 -0
- package/dist/domain/service/SeoMetaComposer.d.ts.map +1 -0
- package/dist/domain/service/SeoMetaComposer.js +174 -0
- package/dist/domain/service/SeoMetaComposer.js.map +1 -0
- package/dist/domain/service/SitemapSerializer.d.ts +19 -0
- package/dist/domain/service/SitemapSerializer.d.ts.map +1 -0
- package/dist/domain/service/SitemapSerializer.js +27 -0
- package/dist/domain/service/SitemapSerializer.js.map +1 -0
- package/dist/domain/service/TriggerIndex.d.ts +27 -0
- package/dist/domain/service/TriggerIndex.d.ts.map +1 -0
- package/dist/domain/service/TriggerIndex.js +52 -0
- package/dist/domain/service/TriggerIndex.js.map +1 -0
- package/dist/domain/service/ViewParamCoercer.d.ts +20 -0
- package/dist/domain/service/ViewParamCoercer.d.ts.map +1 -0
- package/dist/domain/service/ViewParamCoercer.js +82 -0
- package/dist/domain/service/ViewParamCoercer.js.map +1 -0
- package/dist/domain/service/ViewSqlCompiler.d.ts +29 -0
- package/dist/domain/service/ViewSqlCompiler.d.ts.map +1 -0
- package/dist/domain/service/ViewSqlCompiler.js +147 -0
- package/dist/domain/service/ViewSqlCompiler.js.map +1 -0
- package/dist/domain/service/index.d.ts +28 -0
- package/dist/domain/service/index.d.ts.map +1 -0
- package/dist/domain/service/index.js +28 -0
- package/dist/domain/service/index.js.map +1 -0
- package/dist/domain/service/io/EntryWriteGuard.d.ts +19 -0
- package/dist/domain/service/io/EntryWriteGuard.d.ts.map +1 -0
- package/dist/domain/service/io/EntryWriteGuard.js +109 -0
- package/dist/domain/service/io/EntryWriteGuard.js.map +1 -0
- package/dist/domain/service/io/JoinedEntryReader.d.ts +33 -0
- package/dist/domain/service/io/JoinedEntryReader.d.ts.map +1 -0
- package/dist/domain/service/io/JoinedEntryReader.js +95 -0
- package/dist/domain/service/io/JoinedEntryReader.js.map +1 -0
- package/dist/domain/service/io/PublishedEntries.d.ts +69 -0
- package/dist/domain/service/io/PublishedEntries.d.ts.map +1 -0
- package/dist/domain/service/io/PublishedEntries.js +116 -0
- package/dist/domain/service/io/PublishedEntries.js.map +1 -0
- package/dist/domain/service/io/index.d.ts +9 -0
- package/dist/domain/service/io/index.d.ts.map +1 -0
- package/dist/domain/service/io/index.js +9 -0
- package/dist/domain/service/io/index.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/boot/canonicalMigrations.d.ts +9 -0
- package/dist/infrastructure/boot/canonicalMigrations.d.ts.map +1 -0
- package/dist/infrastructure/boot/canonicalMigrations.js +162 -0
- package/dist/infrastructure/boot/canonicalMigrations.js.map +1 -0
- package/dist/infrastructure/boot/index.d.ts +2 -0
- package/dist/infrastructure/boot/index.d.ts.map +1 -0
- package/dist/infrastructure/boot/index.js +2 -0
- package/dist/infrastructure/boot/index.js.map +1 -0
- package/dist/infrastructure/http/DiagnosticResponse.d.ts +12 -0
- package/dist/infrastructure/http/DiagnosticResponse.d.ts.map +1 -0
- package/dist/infrastructure/http/DiagnosticResponse.js +14 -0
- package/dist/infrastructure/http/DiagnosticResponse.js.map +1 -0
- package/dist/infrastructure/http/index.d.ts +2 -0
- package/dist/infrastructure/http/index.d.ts.map +1 -0
- package/dist/infrastructure/http/index.js +2 -0
- package/dist/infrastructure/http/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +12 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +12 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts +60 -0
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts.map +1 -0
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js +281 -0
- package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js.map +1 -0
- package/dist/infrastructure/mcp/McpResponses.d.ts +14 -0
- package/dist/infrastructure/mcp/McpResponses.d.ts.map +1 -0
- package/dist/infrastructure/mcp/McpResponses.js +49 -0
- package/dist/infrastructure/mcp/McpResponses.js.map +1 -0
- package/dist/infrastructure/mcp/McpToolCatalog.d.ts +68 -0
- package/dist/infrastructure/mcp/McpToolCatalog.d.ts.map +1 -0
- package/dist/infrastructure/mcp/McpToolCatalog.js +231 -0
- package/dist/infrastructure/mcp/McpToolCatalog.js.map +1 -0
- package/dist/infrastructure/mcp/index.d.ts +4 -0
- package/dist/infrastructure/mcp/index.d.ts.map +1 -0
- package/dist/infrastructure/mcp/index.js +4 -0
- package/dist/infrastructure/mcp/index.js.map +1 -0
- package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts +35 -0
- package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts.map +1 -0
- package/dist/infrastructure/persistence/DatabaseEntryRepository.js +228 -0
- package/dist/infrastructure/persistence/DatabaseEntryRepository.js.map +1 -0
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts +12 -0
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts.map +1 -0
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js +101 -0
- package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js.map +1 -0
- package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.d.ts +74 -0
- package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.d.ts.map +1 -0
- package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.js +208 -0
- package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.js.map +1 -0
- package/dist/infrastructure/persistence/index.d.ts +4 -0
- package/dist/infrastructure/persistence/index.d.ts.map +1 -0
- package/dist/infrastructure/persistence/index.js +4 -0
- package/dist/infrastructure/persistence/index.js.map +1 -0
- package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts +34 -0
- package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts.map +1 -0
- package/dist/infrastructure/render/HtmlPublishOrchestrator.js +116 -0
- package/dist/infrastructure/render/HtmlPublishOrchestrator.js.map +1 -0
- package/dist/infrastructure/render/index.d.ts +2 -0
- package/dist/infrastructure/render/index.d.ts.map +1 -0
- package/dist/infrastructure/render/index.js +2 -0
- package/dist/infrastructure/render/index.js.map +1 -0
- package/dist/runtime.d.ts +132 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +142 -0
- package/dist/runtime.js.map +1 -0
- package/dist/usecase/boot/ValidateBootUseCase.d.ts +57 -0
- package/dist/usecase/boot/ValidateBootUseCase.d.ts.map +1 -0
- package/dist/usecase/boot/ValidateBootUseCase.js +181 -0
- package/dist/usecase/boot/ValidateBootUseCase.js.map +1 -0
- package/dist/usecase/boot/index.d.ts +2 -0
- package/dist/usecase/boot/index.d.ts.map +1 -0
- package/dist/usecase/boot/index.js +2 -0
- package/dist/usecase/boot/index.js.map +1 -0
- package/dist/usecase/content/ArchiveUseCase.d.ts +20 -0
- package/dist/usecase/content/ArchiveUseCase.d.ts.map +1 -0
- package/dist/usecase/content/ArchiveUseCase.js +47 -0
- package/dist/usecase/content/ArchiveUseCase.js.map +1 -0
- package/dist/usecase/content/ContentPublishEffects.d.ts +11 -0
- package/dist/usecase/content/ContentPublishEffects.d.ts.map +1 -0
- package/dist/usecase/content/ContentPublishEffects.js +21 -0
- package/dist/usecase/content/ContentPublishEffects.js.map +1 -0
- package/dist/usecase/content/CreateDraftUseCase.d.ts +22 -0
- package/dist/usecase/content/CreateDraftUseCase.d.ts.map +1 -0
- package/dist/usecase/content/CreateDraftUseCase.js +61 -0
- package/dist/usecase/content/CreateDraftUseCase.js.map +1 -0
- package/dist/usecase/content/DeleteEntryUseCase.d.ts +20 -0
- package/dist/usecase/content/DeleteEntryUseCase.d.ts.map +1 -0
- package/dist/usecase/content/DeleteEntryUseCase.js +34 -0
- package/dist/usecase/content/DeleteEntryUseCase.js.map +1 -0
- package/dist/usecase/content/GetEntryUseCase.d.ts +13 -0
- package/dist/usecase/content/GetEntryUseCase.d.ts.map +1 -0
- package/dist/usecase/content/GetEntryUseCase.js +24 -0
- package/dist/usecase/content/GetEntryUseCase.js.map +1 -0
- package/dist/usecase/content/ListEntriesUseCase.d.ts +39 -0
- package/dist/usecase/content/ListEntriesUseCase.d.ts.map +1 -0
- package/dist/usecase/content/ListEntriesUseCase.js +58 -0
- package/dist/usecase/content/ListEntriesUseCase.js.map +1 -0
- package/dist/usecase/content/RequestPublishUseCase.d.ts +30 -0
- package/dist/usecase/content/RequestPublishUseCase.d.ts.map +1 -0
- package/dist/usecase/content/RequestPublishUseCase.js +111 -0
- package/dist/usecase/content/RequestPublishUseCase.js.map +1 -0
- package/dist/usecase/content/UnpublishUseCase.d.ts +19 -0
- package/dist/usecase/content/UnpublishUseCase.d.ts.map +1 -0
- package/dist/usecase/content/UnpublishUseCase.js +46 -0
- package/dist/usecase/content/UnpublishUseCase.js.map +1 -0
- package/dist/usecase/content/UpdateDraftUseCase.d.ts +20 -0
- package/dist/usecase/content/UpdateDraftUseCase.d.ts.map +1 -0
- package/dist/usecase/content/UpdateDraftUseCase.js +86 -0
- package/dist/usecase/content/UpdateDraftUseCase.js.map +1 -0
- package/dist/usecase/content/diagnostics.d.ts +26 -0
- package/dist/usecase/content/diagnostics.d.ts.map +1 -0
- package/dist/usecase/content/diagnostics.js +100 -0
- package/dist/usecase/content/diagnostics.js.map +1 -0
- package/dist/usecase/content/index.d.ts +15 -0
- package/dist/usecase/content/index.d.ts.map +1 -0
- package/dist/usecase/content/index.js +15 -0
- package/dist/usecase/content/index.js.map +1 -0
- package/dist/usecase/dto/content/index.d.ts +73 -0
- package/dist/usecase/dto/content/index.d.ts.map +1 -0
- package/dist/usecase/dto/content/index.js +2 -0
- package/dist/usecase/dto/content/index.js.map +1 -0
- package/dist/usecase/dto/index.d.ts +13 -0
- package/dist/usecase/dto/index.d.ts.map +1 -0
- package/dist/usecase/dto/index.js +13 -0
- package/dist/usecase/dto/index.js.map +1 -0
- package/dist/usecase/dto/lifecycle/index.d.ts +15 -0
- package/dist/usecase/dto/lifecycle/index.d.ts.map +1 -0
- package/dist/usecase/dto/lifecycle/index.js +2 -0
- package/dist/usecase/dto/lifecycle/index.js.map +1 -0
- package/dist/usecase/dto/media/index.d.ts +32 -0
- package/dist/usecase/dto/media/index.d.ts.map +1 -0
- package/dist/usecase/dto/media/index.js +8 -0
- package/dist/usecase/dto/media/index.js.map +1 -0
- package/dist/usecase/dto/procedure/index.d.ts +37 -0
- package/dist/usecase/dto/procedure/index.d.ts.map +1 -0
- package/dist/usecase/dto/procedure/index.js +2 -0
- package/dist/usecase/dto/procedure/index.js.map +1 -0
- package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.d.ts +14 -0
- package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.d.ts.map +1 -0
- package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.js +2 -0
- package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.js.map +1 -0
- package/dist/usecase/dto/render/ComposeLlmsTxtRequest.d.ts +8 -0
- package/dist/usecase/dto/render/ComposeLlmsTxtRequest.d.ts.map +1 -0
- package/dist/usecase/dto/render/ComposeLlmsTxtRequest.js +2 -0
- package/dist/usecase/dto/render/ComposeLlmsTxtRequest.js.map +1 -0
- package/dist/usecase/dto/render/ComposeSitemapRequest.d.ts +11 -0
- package/dist/usecase/dto/render/ComposeSitemapRequest.d.ts.map +1 -0
- package/dist/usecase/dto/render/ComposeSitemapRequest.js +2 -0
- package/dist/usecase/dto/render/ComposeSitemapRequest.js.map +1 -0
- package/dist/usecase/dto/render/PreviewEntryRequest.d.ts +27 -0
- package/dist/usecase/dto/render/PreviewEntryRequest.d.ts.map +1 -0
- package/dist/usecase/dto/render/PreviewEntryRequest.js +2 -0
- package/dist/usecase/dto/render/PreviewEntryRequest.js.map +1 -0
- package/dist/usecase/dto/render/RenderEntryLiveRequest.d.ts +17 -0
- package/dist/usecase/dto/render/RenderEntryLiveRequest.d.ts.map +1 -0
- package/dist/usecase/dto/render/RenderEntryLiveRequest.js +2 -0
- package/dist/usecase/dto/render/RenderEntryLiveRequest.js.map +1 -0
- package/dist/usecase/dto/render/RenderListLiveRequest.d.ts +11 -0
- package/dist/usecase/dto/render/RenderListLiveRequest.d.ts.map +1 -0
- package/dist/usecase/dto/render/RenderListLiveRequest.js +2 -0
- package/dist/usecase/dto/render/RenderListLiveRequest.js.map +1 -0
- package/dist/usecase/dto/render/index.d.ts +7 -0
- package/dist/usecase/dto/render/index.d.ts.map +1 -0
- package/dist/usecase/dto/render/index.js +7 -0
- package/dist/usecase/dto/render/index.js.map +1 -0
- package/dist/usecase/dto/view/ExecuteViewRequest.d.ts +16 -0
- package/dist/usecase/dto/view/ExecuteViewRequest.d.ts.map +1 -0
- package/dist/usecase/dto/view/ExecuteViewRequest.js +2 -0
- package/dist/usecase/dto/view/ExecuteViewRequest.js.map +1 -0
- package/dist/usecase/dto/view/index.d.ts +2 -0
- package/dist/usecase/dto/view/index.d.ts.map +1 -0
- package/dist/usecase/dto/view/index.js +2 -0
- package/dist/usecase/dto/view/index.js.map +1 -0
- package/dist/usecase/index.d.ts +16 -0
- package/dist/usecase/index.d.ts.map +1 -0
- package/dist/usecase/index.js +16 -0
- package/dist/usecase/index.js.map +1 -0
- package/dist/usecase/lifecycle/RunDeferredHookUseCase.d.ts +26 -0
- package/dist/usecase/lifecycle/RunDeferredHookUseCase.d.ts.map +1 -0
- package/dist/usecase/lifecycle/RunDeferredHookUseCase.js +44 -0
- package/dist/usecase/lifecycle/RunDeferredHookUseCase.js.map +1 -0
- package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.d.ts +38 -0
- package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.d.ts.map +1 -0
- package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.js +67 -0
- package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.js.map +1 -0
- package/dist/usecase/lifecycle/index.d.ts +3 -0
- package/dist/usecase/lifecycle/index.d.ts.map +1 -0
- package/dist/usecase/lifecycle/index.js +3 -0
- package/dist/usecase/lifecycle/index.js.map +1 -0
- package/dist/usecase/media/CommitMediaUploadUseCase.d.ts +15 -0
- package/dist/usecase/media/CommitMediaUploadUseCase.d.ts.map +1 -0
- package/dist/usecase/media/CommitMediaUploadUseCase.js +43 -0
- package/dist/usecase/media/CommitMediaUploadUseCase.js.map +1 -0
- package/dist/usecase/media/CreateMediaUploadUseCase.d.ts +18 -0
- package/dist/usecase/media/CreateMediaUploadUseCase.d.ts.map +1 -0
- package/dist/usecase/media/CreateMediaUploadUseCase.js +71 -0
- package/dist/usecase/media/CreateMediaUploadUseCase.js.map +1 -0
- package/dist/usecase/media/PendingUploadRecord.d.ts +17 -0
- package/dist/usecase/media/PendingUploadRecord.d.ts.map +1 -0
- package/dist/usecase/media/PendingUploadRecord.js +2 -0
- package/dist/usecase/media/PendingUploadRecord.js.map +1 -0
- package/dist/usecase/media/diagnostics.d.ts +15 -0
- package/dist/usecase/media/diagnostics.d.ts.map +1 -0
- package/dist/usecase/media/diagnostics.js +88 -0
- package/dist/usecase/media/diagnostics.js.map +1 -0
- package/dist/usecase/media/index.d.ts +4 -0
- package/dist/usecase/media/index.d.ts.map +1 -0
- package/dist/usecase/media/index.js +4 -0
- package/dist/usecase/media/index.js.map +1 -0
- package/dist/usecase/media/mediaAllowlist.d.ts +30 -0
- package/dist/usecase/media/mediaAllowlist.d.ts.map +1 -0
- package/dist/usecase/media/mediaAllowlist.js +53 -0
- package/dist/usecase/media/mediaAllowlist.js.map +1 -0
- package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts +43 -0
- package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts.map +1 -0
- package/dist/usecase/procedure/InvokeBuiltinUseCase.js +202 -0
- package/dist/usecase/procedure/InvokeBuiltinUseCase.js.map +1 -0
- package/dist/usecase/procedure/InvokeProcedureUseCase.d.ts +50 -0
- package/dist/usecase/procedure/InvokeProcedureUseCase.d.ts.map +1 -0
- package/dist/usecase/procedure/InvokeProcedureUseCase.js +191 -0
- package/dist/usecase/procedure/InvokeProcedureUseCase.js.map +1 -0
- package/dist/usecase/procedure/index.d.ts +3 -0
- package/dist/usecase/procedure/index.d.ts.map +1 -0
- package/dist/usecase/procedure/index.js +3 -0
- package/dist/usecase/procedure/index.js.map +1 -0
- package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts +25 -0
- package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts.map +1 -0
- package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js +55 -0
- package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js.map +1 -0
- package/dist/usecase/render/ComposeLlmsTxtUseCase.d.ts +19 -0
- package/dist/usecase/render/ComposeLlmsTxtUseCase.d.ts.map +1 -0
- package/dist/usecase/render/ComposeLlmsTxtUseCase.js +40 -0
- package/dist/usecase/render/ComposeLlmsTxtUseCase.js.map +1 -0
- package/dist/usecase/render/ComposeSitemapUseCase.d.ts +15 -0
- package/dist/usecase/render/ComposeSitemapUseCase.d.ts.map +1 -0
- package/dist/usecase/render/ComposeSitemapUseCase.js +29 -0
- package/dist/usecase/render/ComposeSitemapUseCase.js.map +1 -0
- package/dist/usecase/render/PreviewEntryUseCase.d.ts +26 -0
- package/dist/usecase/render/PreviewEntryUseCase.d.ts.map +1 -0
- package/dist/usecase/render/PreviewEntryUseCase.js +69 -0
- package/dist/usecase/render/PreviewEntryUseCase.js.map +1 -0
- package/dist/usecase/render/RenderEntryLiveUseCase.d.ts +35 -0
- package/dist/usecase/render/RenderEntryLiveUseCase.d.ts.map +1 -0
- package/dist/usecase/render/RenderEntryLiveUseCase.js +59 -0
- package/dist/usecase/render/RenderEntryLiveUseCase.js.map +1 -0
- package/dist/usecase/render/RenderListLiveUseCase.d.ts +23 -0
- package/dist/usecase/render/RenderListLiveUseCase.d.ts.map +1 -0
- package/dist/usecase/render/RenderListLiveUseCase.js +41 -0
- package/dist/usecase/render/RenderListLiveUseCase.js.map +1 -0
- package/dist/usecase/render/index.d.ts +7 -0
- package/dist/usecase/render/index.d.ts.map +1 -0
- package/dist/usecase/render/index.js +10 -0
- package/dist/usecase/render/index.js.map +1 -0
- package/dist/usecase/view/ExecuteViewUseCase.d.ts +31 -0
- package/dist/usecase/view/ExecuteViewUseCase.d.ts.map +1 -0
- package/dist/usecase/view/ExecuteViewUseCase.js +78 -0
- package/dist/usecase/view/ExecuteViewUseCase.js.map +1 -0
- package/dist/usecase/view/index.d.ts +2 -0
- package/dist/usecase/view/index.d.ts.map +1 -0
- package/dist/usecase/view/index.js +2 -0
- package/dist/usecase/view/index.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewEntryRequest.d.ts","sourceRoot":"","sources":["../../../../src/usecase/dto/render/PreviewEntryRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B;;sBAEkB;IAClB,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACnD;;;;;;;iDAO6C;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewEntryRequest.js","sourceRoot":"","sources":["../../../../src/usecase/dto/render/PreviewEntryRequest.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ContentState, SiteConfig } from "@aotter/mantle-spec";
|
|
2
|
+
/**
|
|
3
|
+
* Request DTO for `RenderEntryLiveUseCase` — renders a single entry
|
|
4
|
+
* from current DB state on demand (no KV read), returning either the
|
|
5
|
+
* full HTML doc or `null` if no matching entry / no registered
|
|
6
|
+
* template.
|
|
7
|
+
*/
|
|
8
|
+
export interface RenderEntryLiveRequest {
|
|
9
|
+
readonly collection: string;
|
|
10
|
+
readonly slug: string;
|
|
11
|
+
readonly locale: string;
|
|
12
|
+
readonly site: SiteConfig;
|
|
13
|
+
/** Defaults to `"published"`. Pass other states for preview /
|
|
14
|
+
* archived rendering. */
|
|
15
|
+
readonly status?: ContentState;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=RenderEntryLiveRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderEntryLiveRequest.d.ts","sourceRoot":"","sources":["../../../../src/usecase/dto/render/RenderEntryLiveRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B;8BAC0B;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderEntryLiveRequest.js","sourceRoot":"","sources":["../../../../src/usecase/dto/render/RenderEntryLiveRequest.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SiteConfig } from "@aotter/mantle-spec";
|
|
2
|
+
/**
|
|
3
|
+
* Request DTO for `RenderListLiveUseCase` — renders a collection's
|
|
4
|
+
* list page from current DB state on demand (no KV read).
|
|
5
|
+
*/
|
|
6
|
+
export interface RenderListLiveRequest {
|
|
7
|
+
readonly collection: string;
|
|
8
|
+
readonly locale: string;
|
|
9
|
+
readonly site: SiteConfig;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=RenderListLiveRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderListLiveRequest.d.ts","sourceRoot":"","sources":["../../../../src/usecase/dto/render/RenderListLiveRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderListLiveRequest.js","sourceRoot":"","sources":["../../../../src/usecase/dto/render/RenderListLiveRequest.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./ComposeLlmsTxtRequest.js";
|
|
2
|
+
export * from "./ComposeSitemapRequest.js";
|
|
3
|
+
export * from "./RenderEntryLiveRequest.js";
|
|
4
|
+
export * from "./RenderListLiveRequest.js";
|
|
5
|
+
export * from "./PreviewEntryRequest.js";
|
|
6
|
+
export * from "./ComposeEntrySeoMetaRequest.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/usecase/dto/render/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./ComposeLlmsTxtRequest.js";
|
|
2
|
+
export * from "./ComposeSitemapRequest.js";
|
|
3
|
+
export * from "./RenderEntryLiveRequest.js";
|
|
4
|
+
export * from "./RenderListLiveRequest.js";
|
|
5
|
+
export * from "./PreviewEntryRequest.js";
|
|
6
|
+
export * from "./ComposeEntrySeoMetaRequest.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/usecase/dto/render/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ViewManifest } from "@aotter/mantle-spec";
|
|
2
|
+
import type { HandlerContext } from "../../../domain/model/HandlerContext.js";
|
|
3
|
+
import type { CompileViewOptions } from "../../../domain/service/ViewSqlCompiler.js";
|
|
4
|
+
export interface ExecuteViewRequest {
|
|
5
|
+
readonly view: ViewManifest;
|
|
6
|
+
readonly pathPrefix?: string;
|
|
7
|
+
readonly options?: CompileViewOptions;
|
|
8
|
+
/** Caller identity for `requires.auth.all` evaluation. Required when
|
|
9
|
+
* `view.spec.requires` is present; the use case returns
|
|
10
|
+
* `UNAUTHENTICATED` if missing. Adapters constructing public
|
|
11
|
+
* (unauthenticated) Views may pass a guest context
|
|
12
|
+
* (`{ user: null, staff: null, ... }`) — predicate evaluation will
|
|
13
|
+
* fail closed on any `ctx.user` / `ctx.staff` requirement. */
|
|
14
|
+
readonly ctx?: HandlerContext;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ExecuteViewRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecuteViewRequest.d.ts","sourceRoot":"","sources":["../../../../src/usecase/dto/view/ExecuteViewRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAErF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IACtC;;;;;mEAK+D;IAC/D,QAAQ,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecuteViewRequest.js","sourceRoot":"","sources":["../../../../src/usecase/dto/view/ExecuteViewRequest.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/usecase/dto/view/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/usecase/dto/view/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `usecase/` — application services orchestrating domain logic. Each
|
|
3
|
+
* use case is a class with constructor-injected ports + clock + idgen,
|
|
4
|
+
* accepts a request DTO, returns a response DTO. No infrastructure
|
|
5
|
+
* dependencies (no I/O, no DB driver, no FS) — those live in
|
|
6
|
+
* `infrastructure/`.
|
|
7
|
+
*/
|
|
8
|
+
export * from "./dto/index.js";
|
|
9
|
+
export * from "./content/index.js";
|
|
10
|
+
export * from "./procedure/index.js";
|
|
11
|
+
export * from "./view/index.js";
|
|
12
|
+
export * from "./boot/index.js";
|
|
13
|
+
export * from "./lifecycle/index.js";
|
|
14
|
+
export * from "./render/index.js";
|
|
15
|
+
export * from "./media/index.js";
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/usecase/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `usecase/` — application services orchestrating domain logic. Each
|
|
3
|
+
* use case is a class with constructor-injected ports + clock + idgen,
|
|
4
|
+
* accepts a request DTO, returns a response DTO. No infrastructure
|
|
5
|
+
* dependencies (no I/O, no DB driver, no FS) — those live in
|
|
6
|
+
* `infrastructure/`.
|
|
7
|
+
*/
|
|
8
|
+
export * from "./dto/index.js";
|
|
9
|
+
export * from "./content/index.js";
|
|
10
|
+
export * from "./procedure/index.js";
|
|
11
|
+
export * from "./view/index.js";
|
|
12
|
+
export * from "./boot/index.js";
|
|
13
|
+
export * from "./lifecycle/index.js";
|
|
14
|
+
export * from "./render/index.js";
|
|
15
|
+
export * from "./media/index.js";
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/usecase/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { LifecycleHookRunner } from "../../domain/port/LifecycleHookRunner.js";
|
|
2
|
+
import type { RunDeferredHookRequest } from "../dto/lifecycle/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Consume side of the deferred after-hook path. Adapter queue
|
|
5
|
+
* consumers (CF Workers `queue(batch, env)` for Workers Queues, etc.)
|
|
6
|
+
* deserialize each `DeferredHookEnvelope` and call this use case with
|
|
7
|
+
* a fresh per-invocation `env` binding bag.
|
|
8
|
+
*
|
|
9
|
+
* Reconstructs a `HandlerContext` mirroring the original firing
|
|
10
|
+
* context's identity (user / staff snapshot from the envelope), with
|
|
11
|
+
* `env` filled by the consume invocation. `waitUntil` is intentionally
|
|
12
|
+
* absent — the consume invocation owns its own request lifetime, and
|
|
13
|
+
* chaining another fire-and-forget here would just reintroduce the
|
|
14
|
+
* durability gap the deferred path closes.
|
|
15
|
+
*
|
|
16
|
+
* Errors from the underlying hook surface per the Trigger's
|
|
17
|
+
* `errorPolicy`. The adapter is expected to translate a throw into
|
|
18
|
+
* the platform's retry signal (e.g. `message.retry()` on CF Queues)
|
|
19
|
+
* so the hook eventually succeeds or hits the dead-letter queue.
|
|
20
|
+
*/
|
|
21
|
+
export declare class RunDeferredHookUseCase {
|
|
22
|
+
private readonly hooks;
|
|
23
|
+
constructor(hooks: LifecycleHookRunner);
|
|
24
|
+
execute(request: RunDeferredHookRequest): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=RunDeferredHookUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunDeferredHookUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/lifecycle/RunDeferredHookUseCase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,sBAAsB;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,mBAAmB;IAEjD,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;CAoB9D"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consume side of the deferred after-hook path. Adapter queue
|
|
3
|
+
* consumers (CF Workers `queue(batch, env)` for Workers Queues, etc.)
|
|
4
|
+
* deserialize each `DeferredHookEnvelope` and call this use case with
|
|
5
|
+
* a fresh per-invocation `env` binding bag.
|
|
6
|
+
*
|
|
7
|
+
* Reconstructs a `HandlerContext` mirroring the original firing
|
|
8
|
+
* context's identity (user / staff snapshot from the envelope), with
|
|
9
|
+
* `env` filled by the consume invocation. `waitUntil` is intentionally
|
|
10
|
+
* absent — the consume invocation owns its own request lifetime, and
|
|
11
|
+
* chaining another fire-and-forget here would just reintroduce the
|
|
12
|
+
* durability gap the deferred path closes.
|
|
13
|
+
*
|
|
14
|
+
* Errors from the underlying hook surface per the Trigger's
|
|
15
|
+
* `errorPolicy`. The adapter is expected to translate a throw into
|
|
16
|
+
* the platform's retry signal (e.g. `message.retry()` on CF Queues)
|
|
17
|
+
* so the hook eventually succeeds or hits the dead-letter queue.
|
|
18
|
+
*/
|
|
19
|
+
export class RunDeferredHookUseCase {
|
|
20
|
+
hooks;
|
|
21
|
+
constructor(hooks) {
|
|
22
|
+
this.hooks = hooks;
|
|
23
|
+
}
|
|
24
|
+
async execute(request) {
|
|
25
|
+
const { envelope, env } = request;
|
|
26
|
+
const ctx = {
|
|
27
|
+
user: envelope.ctxSnapshot?.userId
|
|
28
|
+
? { id: envelope.ctxSnapshot.userId }
|
|
29
|
+
: null,
|
|
30
|
+
staff: envelope.ctxSnapshot?.staffId && envelope.ctxSnapshot.staffRole
|
|
31
|
+
? { id: envelope.ctxSnapshot.staffId, role: envelope.ctxSnapshot.staffRole }
|
|
32
|
+
: null,
|
|
33
|
+
env,
|
|
34
|
+
};
|
|
35
|
+
await this.hooks.run({
|
|
36
|
+
hook: envelope.hook,
|
|
37
|
+
schema: envelope.schema,
|
|
38
|
+
entry: envelope.entry,
|
|
39
|
+
ctx,
|
|
40
|
+
originalInput: envelope.originalInput,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=RunDeferredHookUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunDeferredHookUseCase.js","sourceRoot":"","sources":["../../../src/usecase/lifecycle/RunDeferredHookUseCase.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,sBAAsB;IACJ;IAA7B,YAA6B,KAA0B;QAA1B,UAAK,GAAL,KAAK,CAAqB;IAAG,CAAC;IAE3D,KAAK,CAAC,OAAO,CAAC,OAA+B;QAC3C,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QAClC,MAAM,GAAG,GAAmB;YAC1B,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE,MAAM;gBAChC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE;gBACrC,CAAC,CAAC,IAAI;YACR,KAAK,EACH,QAAQ,CAAC,WAAW,EAAE,OAAO,IAAI,QAAQ,CAAC,WAAW,CAAC,SAAS;gBAC7D,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE;gBAC5E,CAAC,CAAC,IAAI;YACV,GAAG;SACJ,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,GAAG;YACH,aAAa,EAAE,QAAQ,CAAC,aAAa;SACtC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type ProcedureManifest } from "@aotter/mantle-spec";
|
|
2
|
+
import type { LifecycleHookRunner, RunLifecycleHookRequest } from "../../domain/port/LifecycleHookRunner.js";
|
|
3
|
+
import type { TriggerIndex } from "../../domain/service/TriggerIndex.js";
|
|
4
|
+
import type { InvokeProcedureRequest, InvokeProcedureResponse } from "../dto/procedure/index.js";
|
|
5
|
+
/**
|
|
6
|
+
* `RunLifecycleHooksUseCase` — implements the `LifecycleHookRunner`
|
|
7
|
+
* port. Resolves matching Triggers via `TriggerIndex`, dispatches each
|
|
8
|
+
* to its target Procedure through the injected invoker (so input
|
|
9
|
+
* validation, auth, output validation all reuse the shared pipeline),
|
|
10
|
+
* and applies per-Trigger `errorPolicy`.
|
|
11
|
+
*
|
|
12
|
+
* The invoker is taken as a function rather than a concrete class so
|
|
13
|
+
* this use case does NOT import from a sibling under `usecase/` —
|
|
14
|
+
* `usecase → usecase` coupling would bypass the port boundary.
|
|
15
|
+
* Assembly root passes `(req) => invokeProcedure.execute(req)`.
|
|
16
|
+
*
|
|
17
|
+
* Defaults from the parser-locked grammar (POC ADR-0014):
|
|
18
|
+
* - before_*: errorPolicy default `abort` — handler failure throws
|
|
19
|
+
* a `DiagnosticError` and the chokepoint decorator cancels the
|
|
20
|
+
* mutation.
|
|
21
|
+
* - after_*: errorPolicy default `continue` — handler failure is
|
|
22
|
+
* logged via `console.error` and swallowed; the mutation already
|
|
23
|
+
* succeeded. Author override (`errorPolicy: continue` on a
|
|
24
|
+
* before_* hook) is honored.
|
|
25
|
+
*
|
|
26
|
+
* `Trigger.errorPolicy: 'abort'` on after_* is parser-rejected, so the
|
|
27
|
+
* use case never has to reconcile that combination.
|
|
28
|
+
*/
|
|
29
|
+
export type InvokeProcedureFn = (request: InvokeProcedureRequest) => Promise<InvokeProcedureResponse>;
|
|
30
|
+
export declare class RunLifecycleHooksUseCase implements LifecycleHookRunner {
|
|
31
|
+
private readonly triggers;
|
|
32
|
+
private readonly proceduresByName;
|
|
33
|
+
private readonly invoke;
|
|
34
|
+
constructor(triggers: TriggerIndex, proceduresByName: ReadonlyMap<string, ProcedureManifest>, invoke: InvokeProcedureFn);
|
|
35
|
+
run(request: RunLifecycleHookRequest): Promise<void>;
|
|
36
|
+
private runOne;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=RunLifecycleHooksUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunLifecycleHooksUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/lifecycle/RunLifecycleHooksUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,2BAA2B,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,OAAO,EAAE,sBAAsB,KAC5B,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAEtC,qBAAa,wBAAyB,YAAW,mBAAmB;IAEhE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,QAAQ,EAAE,YAAY,EACtB,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACxD,MAAM,EAAE,iBAAiB;IAGtC,GAAG,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;YAU5C,MAAM;CAuDrB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { DiagnosticError, runtimeDiagnostic, } from "@aotter/mantle-spec";
|
|
2
|
+
export class RunLifecycleHooksUseCase {
|
|
3
|
+
triggers;
|
|
4
|
+
proceduresByName;
|
|
5
|
+
invoke;
|
|
6
|
+
constructor(triggers, proceduresByName, invoke) {
|
|
7
|
+
this.triggers = triggers;
|
|
8
|
+
this.proceduresByName = proceduresByName;
|
|
9
|
+
this.invoke = invoke;
|
|
10
|
+
}
|
|
11
|
+
async run(request) {
|
|
12
|
+
const matching = this.triggers.forHook(request.schema, request.hook);
|
|
13
|
+
if (matching.length === 0)
|
|
14
|
+
return;
|
|
15
|
+
const isBefore = request.hook.startsWith("before_");
|
|
16
|
+
for (const trigger of matching) {
|
|
17
|
+
await this.runOne(trigger, request, isBefore);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async runOne(trigger, request, isBefore) {
|
|
21
|
+
const procedure = this.proceduresByName.get(trigger.spec.target.procedure);
|
|
22
|
+
if (!procedure) {
|
|
23
|
+
// Boot validator should have caught this; defense-in-depth.
|
|
24
|
+
throw new DiagnosticError(runtimeDiagnostic({
|
|
25
|
+
code: "TRIGGER_TARGET_PROCEDURE_UNKNOWN",
|
|
26
|
+
severity: "error",
|
|
27
|
+
path: `manifest:Trigger/${trigger.metadata.name}#/spec/target/procedure`,
|
|
28
|
+
value: trigger.spec.target.procedure,
|
|
29
|
+
expected: "name of a declared Procedure",
|
|
30
|
+
message: `Lifecycle Trigger '${trigger.metadata.name}' targets unknown Procedure '${trigger.spec.target.procedure}'.`,
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
const event = {
|
|
34
|
+
hook: request.hook,
|
|
35
|
+
schema: request.schema,
|
|
36
|
+
entry: request.entry,
|
|
37
|
+
};
|
|
38
|
+
const ctxWithEvent = { ...request.ctx, event };
|
|
39
|
+
const declared = trigger.spec.source.kind === "lifecycle"
|
|
40
|
+
? trigger.spec.source.errorPolicy
|
|
41
|
+
: undefined;
|
|
42
|
+
const policy = declared ?? (isBefore ? "abort" : "continue");
|
|
43
|
+
const input = request.originalInput ?? request.entry?.data ?? {};
|
|
44
|
+
let result;
|
|
45
|
+
try {
|
|
46
|
+
result = await this.invoke({
|
|
47
|
+
procedure,
|
|
48
|
+
input,
|
|
49
|
+
ctx: ctxWithEvent,
|
|
50
|
+
pathPrefix: `lifecycle:Trigger/${trigger.metadata.name}->${procedure.metadata.name}`,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
if (policy === "abort")
|
|
55
|
+
throw err;
|
|
56
|
+
console.error(`[lifecycle] after_* hook ${trigger.metadata.name} threw`, err);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (result.ok)
|
|
60
|
+
return;
|
|
61
|
+
if (policy === "abort") {
|
|
62
|
+
throw new DiagnosticError(result.diagnostic);
|
|
63
|
+
}
|
|
64
|
+
console.error(`[lifecycle] hook ${trigger.metadata.name} returned diagnostic`, result.diagnostic);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=RunLifecycleHooksUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunLifecycleHooksUseCase.js","sourceRoot":"","sources":["../../../src/usecase/lifecycle/RunLifecycleHooksUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,iBAAiB,GAGlB,MAAM,qBAAqB,CAAC;AAwC7B,MAAM,OAAO,wBAAwB;IAEhB;IACA;IACA;IAHnB,YACmB,QAAsB,EACtB,gBAAwD,EACxD,MAAyB;QAFzB,aAAQ,GAAR,QAAQ,CAAc;QACtB,qBAAgB,GAAhB,gBAAgB,CAAwC;QACxD,WAAM,GAAN,MAAM,CAAmB;IACzC,CAAC;IAEJ,KAAK,CAAC,GAAG,CAAC,OAAgC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAElC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,MAAM,CAClB,OAAwB,EACxB,OAAgC,EAChC,QAAiB;QAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,4DAA4D;YAC5D,MAAM,IAAI,eAAe,CACvB,iBAAiB,CAAC;gBAChB,IAAI,EAAE,kCAAkC;gBACxC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,oBAAoB,OAAO,CAAC,QAAQ,CAAC,IAAI,yBAAyB;gBACxE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;gBACpC,QAAQ,EAAE,8BAA8B;gBACxC,OAAO,EAAE,sBAAsB,OAAO,CAAC,QAAQ,CAAC,IAAI,gCAAgC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI;aACtH,CAAC,CACH,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAA0B;YACnC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;QACF,MAAM,YAAY,GAAmB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;QAE/D,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW;YACvD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW;YACjC,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAE7D,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;QACjE,IAAI,MAA+B,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;gBACzB,SAAS;gBACT,KAAK;gBACL,GAAG,EAAE,YAAY;gBACjB,UAAU,EAAE,qBAAqB,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE;aACrF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,MAAM,KAAK,OAAO;gBAAE,MAAM,GAAG,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,4BAA4B,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC9E,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,EAAE;YAAE,OAAO;QACtB,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,CAAC,KAAK,CACX,oBAAoB,OAAO,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAC/D,MAAM,CAAC,UAAU,CAClB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/usecase/lifecycle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,KAAK,iBAAiB,GACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/usecase/lifecycle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,GAEzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Clock } from "../../domain/port/Clock.js";
|
|
2
|
+
import type { KvCache } from "../../domain/port/KvCache.js";
|
|
3
|
+
import type { MediaAsset, MediaStorage } from "../../domain/port/MediaStorage.js";
|
|
4
|
+
import type { CommitMediaUploadRequest } from "../dto/media/index.js";
|
|
5
|
+
export declare class CommitMediaUploadUseCase {
|
|
6
|
+
private readonly storage;
|
|
7
|
+
private readonly kv;
|
|
8
|
+
private readonly clock;
|
|
9
|
+
private readonly opts;
|
|
10
|
+
constructor(storage: MediaStorage, kv: KvCache, clock: Clock, opts?: {
|
|
11
|
+
readonly maxBytes?: number;
|
|
12
|
+
});
|
|
13
|
+
execute(request: CommitMediaUploadRequest): Promise<MediaAsset>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=CommitMediaUploadUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommitMediaUploadUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/media/CommitMediaUploadUseCase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAUtE,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAHJ,OAAO,EAAE,YAAY,EACrB,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO;IAGtD,OAAO,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,UAAU,CAAC;CA8BtE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { DiagnosticError } from "@aotter/mantle-spec";
|
|
2
|
+
import { mediaUploadExpiredDiagnostic, } from "./diagnostics.js";
|
|
3
|
+
import { DEFAULT_MAX_BYTES, PENDING_UPLOAD_KV_PREFIX, } from "./mediaAllowlist.js";
|
|
4
|
+
export class CommitMediaUploadUseCase {
|
|
5
|
+
storage;
|
|
6
|
+
kv;
|
|
7
|
+
clock;
|
|
8
|
+
opts;
|
|
9
|
+
constructor(storage, kv, clock, opts = {}) {
|
|
10
|
+
this.storage = storage;
|
|
11
|
+
this.kv = kv;
|
|
12
|
+
this.clock = clock;
|
|
13
|
+
this.opts = opts;
|
|
14
|
+
}
|
|
15
|
+
async execute(request) {
|
|
16
|
+
const opPath = "usecase/CommitMediaUpload";
|
|
17
|
+
const kvKey = `${PENDING_UPLOAD_KV_PREFIX}${request.uploadId}`;
|
|
18
|
+
const raw = await this.kv.get(kvKey);
|
|
19
|
+
if (!raw) {
|
|
20
|
+
throw new DiagnosticError(mediaUploadExpiredDiagnostic(opPath, request.uploadId));
|
|
21
|
+
}
|
|
22
|
+
const record = JSON.parse(raw);
|
|
23
|
+
const adapterCap = this.opts.maxBytes ?? DEFAULT_MAX_BYTES;
|
|
24
|
+
// Per-upload ceiling: tighter of (caller-declared at create) vs
|
|
25
|
+
// (adapter-wide cap). Defends against an adapter that accepted a
|
|
26
|
+
// larger PUT than the use case minted the URL for.
|
|
27
|
+
const maxBytes = Math.min(adapterCap, record.expectedSize);
|
|
28
|
+
const asset = await this.storage.commitUpload({
|
|
29
|
+
uploadId: request.uploadId,
|
|
30
|
+
storageKey: record.storageKey,
|
|
31
|
+
expectedMimeType: record.expectedMimeType,
|
|
32
|
+
maxBytes,
|
|
33
|
+
alt: request.alt,
|
|
34
|
+
caption: request.caption,
|
|
35
|
+
checksum: request.checksum,
|
|
36
|
+
now: this.clock.now(),
|
|
37
|
+
});
|
|
38
|
+
// Best-effort cleanup. KV TTL covers us if delete fails.
|
|
39
|
+
await this.kv.delete(kvKey).catch(() => undefined);
|
|
40
|
+
return asset;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=CommitMediaUploadUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommitMediaUploadUseCase.js","sourceRoot":"","sources":["../../../src/usecase/media/CommitMediaUploadUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKtD,OAAO,EACL,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,OAAO,wBAAwB;IAEhB;IACA;IACA;IACA;IAJnB,YACmB,OAAqB,EACrB,EAAW,EACX,KAAY,EACZ,OAAuC,EAAE;QAHzC,YAAO,GAAP,OAAO,CAAc;QACrB,OAAE,GAAF,EAAE,CAAS;QACX,UAAK,GAAL,KAAK,CAAO;QACZ,SAAI,GAAJ,IAAI,CAAqC;IACzD,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAAiC;QAC7C,MAAM,MAAM,GAAG,2BAA2B,CAAC;QAC3C,MAAM,KAAK,GAAG,GAAG,wBAAwB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC/D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,eAAe,CAAC,4BAA4B,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,iBAAiB,CAAC;QAC3D,gEAAgE;QAChE,iEAAiE;QACjE,mDAAmD;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAE3D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC5C,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,QAAQ;YACR,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QAEH,yDAAyD;QACzD,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAEnD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Clock } from "../../domain/port/Clock.js";
|
|
2
|
+
import type { KvCache } from "../../domain/port/KvCache.js";
|
|
3
|
+
import type { MediaStorage } from "../../domain/port/MediaStorage.js";
|
|
4
|
+
import type { SiteConfigRepository } from "../../domain/port/SiteConfigRepository.js";
|
|
5
|
+
import type { CreateMediaUploadRequest, CreateMediaUploadResponse } from "../dto/media/index.js";
|
|
6
|
+
export declare class CreateMediaUploadUseCase {
|
|
7
|
+
private readonly storage;
|
|
8
|
+
private readonly kv;
|
|
9
|
+
private readonly clock;
|
|
10
|
+
private readonly siteConfig;
|
|
11
|
+
private readonly opts;
|
|
12
|
+
constructor(storage: MediaStorage, kv: KvCache, clock: Clock, siteConfig: SiteConfigRepository, opts?: {
|
|
13
|
+
readonly allowSvg: boolean;
|
|
14
|
+
readonly maxBytes?: number;
|
|
15
|
+
});
|
|
16
|
+
execute(request: CreateMediaUploadRequest): Promise<CreateMediaUploadResponse>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=CreateMediaUploadUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateMediaUploadUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/media/CreateMediaUploadUseCase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,uBAAuB,CAAC;AAiB/B,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAJJ,OAAO,EAAE,YAAY,EACrB,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,oBAAoB,EAChC,IAAI,GAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAE9E;IAGG,OAAO,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAkErF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { DiagnosticError } from "@aotter/mantle-spec";
|
|
2
|
+
import { mediaMimeRejectedDiagnostic, mediaPurposeRejectedDiagnostic, mediaSizeExceededDiagnostic, mediaSvgRejectedDiagnostic, } from "./diagnostics.js";
|
|
3
|
+
import { DEFAULT_MAX_BYTES, MEDIA_SVG_MIME, PENDING_UPLOAD_KV_PREFIX, PENDING_UPLOAD_KV_TTL_SECONDS, UPLOAD_URL_TTL_SECONDS, isAllowedMime, } from "./mediaAllowlist.js";
|
|
4
|
+
export class CreateMediaUploadUseCase {
|
|
5
|
+
storage;
|
|
6
|
+
kv;
|
|
7
|
+
clock;
|
|
8
|
+
siteConfig;
|
|
9
|
+
opts;
|
|
10
|
+
constructor(storage, kv, clock, siteConfig, opts = {
|
|
11
|
+
allowSvg: false,
|
|
12
|
+
}) {
|
|
13
|
+
this.storage = storage;
|
|
14
|
+
this.kv = kv;
|
|
15
|
+
this.clock = clock;
|
|
16
|
+
this.siteConfig = siteConfig;
|
|
17
|
+
this.opts = opts;
|
|
18
|
+
}
|
|
19
|
+
async execute(request) {
|
|
20
|
+
const opPath = "usecase/CreateMediaUpload";
|
|
21
|
+
const maxBytes = this.opts.maxBytes ?? DEFAULT_MAX_BYTES;
|
|
22
|
+
// Fail-closed purpose enforcement (#262). Empty `media.purposes` —
|
|
23
|
+
// either undeclared or operator-cleared — disables uploads entirely
|
|
24
|
+
// at this layer; the MCP tool catalog + admin endpoint also gate on
|
|
25
|
+
// the same condition for cleaner UX. Reading per request rather
|
|
26
|
+
// than snapshotting at boot lets operator edits via the admin
|
|
27
|
+
// Settings page take effect without a redeploy.
|
|
28
|
+
const declared = await this.siteConfig.readMediaPurposes();
|
|
29
|
+
if (declared.length === 0 || !request.purpose || !declared.includes(request.purpose)) {
|
|
30
|
+
throw new DiagnosticError(mediaPurposeRejectedDiagnostic(opPath, request.purpose, declared));
|
|
31
|
+
}
|
|
32
|
+
if (request.mimeType === MEDIA_SVG_MIME && !this.opts.allowSvg) {
|
|
33
|
+
throw new DiagnosticError(mediaSvgRejectedDiagnostic(opPath));
|
|
34
|
+
}
|
|
35
|
+
if (!isAllowedMime(request.mimeType, this.opts.allowSvg)) {
|
|
36
|
+
throw new DiagnosticError(mediaMimeRejectedDiagnostic(opPath, request.mimeType));
|
|
37
|
+
}
|
|
38
|
+
// Enforce the ceiling before minting a presigned URL — see
|
|
39
|
+
// CreateMediaUploadRequest.byteSize for the WHY.
|
|
40
|
+
if (request.byteSize > maxBytes) {
|
|
41
|
+
throw new DiagnosticError(mediaSizeExceededDiagnostic(opPath, request.byteSize, maxBytes));
|
|
42
|
+
}
|
|
43
|
+
const now = this.clock.now();
|
|
44
|
+
const expiresAt = now + UPLOAD_URL_TTL_SECONDS * 1000;
|
|
45
|
+
const capability = await this.storage.createUpload({
|
|
46
|
+
filename: request.filename,
|
|
47
|
+
mimeType: request.mimeType,
|
|
48
|
+
byteSize: request.byteSize,
|
|
49
|
+
maxBytes,
|
|
50
|
+
purpose: request.purpose,
|
|
51
|
+
now,
|
|
52
|
+
expiresAt,
|
|
53
|
+
});
|
|
54
|
+
const record = {
|
|
55
|
+
storageKey: capability.storageKey,
|
|
56
|
+
expectedMimeType: request.mimeType,
|
|
57
|
+
expectedSize: request.byteSize,
|
|
58
|
+
expiresAt: capability.expiresAt,
|
|
59
|
+
createdAt: now,
|
|
60
|
+
};
|
|
61
|
+
await this.kv.put(`${PENDING_UPLOAD_KV_PREFIX}${capability.uploadId}`, JSON.stringify(record), { expirationTtl: PENDING_UPLOAD_KV_TTL_SECONDS });
|
|
62
|
+
return {
|
|
63
|
+
uploadId: capability.uploadId,
|
|
64
|
+
uploadUrl: capability.uploadUrl,
|
|
65
|
+
method: capability.method,
|
|
66
|
+
requiredHeaders: capability.requiredHeaders,
|
|
67
|
+
expiresAt: capability.expiresAt,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=CreateMediaUploadUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateMediaUploadUseCase.js","sourceRoot":"","sources":["../../../src/usecase/media/CreateMediaUploadUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** KV record persisted by `CreateMediaUploadUseCase` and read by
|
|
2
|
+
* `CommitMediaUploadUseCase`. Stored under
|
|
3
|
+
* `${PENDING_UPLOAD_KV_PREFIX}${uploadId}` with a TTL set to
|
|
4
|
+
* `PENDING_UPLOAD_KV_TTL_SECONDS`. */
|
|
5
|
+
export interface PendingUploadRecord {
|
|
6
|
+
readonly storageKey: string;
|
|
7
|
+
readonly expectedMimeType: string;
|
|
8
|
+
/** Caller-declared byte size, persisted at create time so commit can
|
|
9
|
+
* enforce a tight per-upload ceiling instead of just the adapter-
|
|
10
|
+
* wide `maxBytes`. Adapter ultimately verifies actual stored bytes
|
|
11
|
+
* ≤ commit-supplied maxBytes — `CommitMediaUploadUseCase` passes
|
|
12
|
+
* `min(adapterCap, record.expectedSize)`. */
|
|
13
|
+
readonly expectedSize: number;
|
|
14
|
+
readonly expiresAt: number;
|
|
15
|
+
readonly createdAt: number;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=PendingUploadRecord.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PendingUploadRecord.d.ts","sourceRoot":"","sources":["../../../src/usecase/media/PendingUploadRecord.ts"],"names":[],"mappings":"AAAA;;;uCAGuC;AACvC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC;;;;kDAI8C;IAC9C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PendingUploadRecord.js","sourceRoot":"","sources":["../../../src/usecase/media/PendingUploadRecord.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Diagnostic } from "@aotter/mantle-spec";
|
|
2
|
+
export declare function mediaNotConfiguredDiagnostic(opPath: string): Diagnostic;
|
|
3
|
+
export declare function mediaMimeRejectedDiagnostic(opPath: string, mime: string): Diagnostic;
|
|
4
|
+
export declare function mediaSvgRejectedDiagnostic(opPath: string): Diagnostic;
|
|
5
|
+
export declare function mediaSizeExceededDiagnostic(opPath: string, byteSize: number, maxBytes: number): Diagnostic;
|
|
6
|
+
export declare function mediaUploadExpiredDiagnostic(opPath: string, uploadId: string): Diagnostic;
|
|
7
|
+
export declare function mediaObjectNotFoundDiagnostic(opPath: string, uploadId: string): Diagnostic;
|
|
8
|
+
/** Caller supplied a `purpose` that this deployment did not declare in
|
|
9
|
+
* `siteDefaults.media.purposes`. Fail-closed per #262: alpha has no
|
|
10
|
+
* production consumers, so there is no warn-and-allow compatibility
|
|
11
|
+
* mode — undeclared purposes are always rejected. The `expected`
|
|
12
|
+
* field carries the declared set so agents can self-correct without
|
|
13
|
+
* another round trip. */
|
|
14
|
+
export declare function mediaPurposeRejectedDiagnostic(opPath: string, purpose: string | undefined, declared: readonly string[]): Diagnostic;
|
|
15
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|