@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":"diagnostics.d.ts","sourceRoot":"","sources":["../../../src/usecase/media/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAUvE;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CASpF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAUrE;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,UAAU,CASZ;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAUzF;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAU1F;AAED;;;;;0BAK0B;AAC1B,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,UAAU,CAiBZ"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { makeDiagnostic } from "@aotter/mantle-spec";
|
|
2
|
+
const PHASE = "runtime";
|
|
3
|
+
export function mediaNotConfiguredDiagnostic(opPath) {
|
|
4
|
+
return makeDiagnostic({
|
|
5
|
+
code: "MEDIA_NOT_CONFIGURED",
|
|
6
|
+
phase: PHASE,
|
|
7
|
+
severity: "error",
|
|
8
|
+
path: opPath,
|
|
9
|
+
expected: "media storage adapter bound at runtime",
|
|
10
|
+
message: "Media uploads are not enabled on this deployment. Bind a `mediaStorage` adapter in `createCmsRuntime` to enable.",
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export function mediaMimeRejectedDiagnostic(opPath, mime) {
|
|
14
|
+
return makeDiagnostic({
|
|
15
|
+
code: "MEDIA_MIME_REJECTED",
|
|
16
|
+
phase: PHASE,
|
|
17
|
+
severity: "error",
|
|
18
|
+
path: opPath,
|
|
19
|
+
value: mime,
|
|
20
|
+
expected: "one of: image/png, image/jpeg, image/webp, image/gif",
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function mediaSvgRejectedDiagnostic(opPath) {
|
|
24
|
+
return makeDiagnostic({
|
|
25
|
+
code: "MEDIA_SVG_REJECTED",
|
|
26
|
+
phase: PHASE,
|
|
27
|
+
severity: "error",
|
|
28
|
+
path: opPath,
|
|
29
|
+
value: "image/svg+xml",
|
|
30
|
+
expected: "non-SVG image (object storage does not sanitize SVG payloads)",
|
|
31
|
+
suggestion: "set MEDIA_ALLOW_SVG=1 on the adapter if SVG is required",
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export function mediaSizeExceededDiagnostic(opPath, byteSize, maxBytes) {
|
|
35
|
+
return makeDiagnostic({
|
|
36
|
+
code: "MEDIA_SIZE_EXCEEDED",
|
|
37
|
+
phase: PHASE,
|
|
38
|
+
severity: "error",
|
|
39
|
+
path: opPath,
|
|
40
|
+
value: byteSize,
|
|
41
|
+
expected: `byteSize <= ${maxBytes}`,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
export function mediaUploadExpiredDiagnostic(opPath, uploadId) {
|
|
45
|
+
return makeDiagnostic({
|
|
46
|
+
code: "MEDIA_UPLOAD_EXPIRED",
|
|
47
|
+
phase: PHASE,
|
|
48
|
+
severity: "error",
|
|
49
|
+
path: opPath,
|
|
50
|
+
value: uploadId,
|
|
51
|
+
expected: "an active upload capability (TTL elapsed or never created)",
|
|
52
|
+
suggestion: "call create_media_upload again to get a fresh capability",
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
export function mediaObjectNotFoundDiagnostic(opPath, uploadId) {
|
|
56
|
+
return makeDiagnostic({
|
|
57
|
+
code: "MEDIA_OBJECT_NOT_FOUND",
|
|
58
|
+
phase: PHASE,
|
|
59
|
+
severity: "error",
|
|
60
|
+
path: opPath,
|
|
61
|
+
value: uploadId,
|
|
62
|
+
expected: "an object PUT to the storage backend before commit",
|
|
63
|
+
suggestion: "PUT the file to the upload URL before calling commit_media_upload",
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/** Caller supplied a `purpose` that this deployment did not declare in
|
|
67
|
+
* `siteDefaults.media.purposes`. Fail-closed per #262: alpha has no
|
|
68
|
+
* production consumers, so there is no warn-and-allow compatibility
|
|
69
|
+
* mode — undeclared purposes are always rejected. The `expected`
|
|
70
|
+
* field carries the declared set so agents can self-correct without
|
|
71
|
+
* another round trip. */
|
|
72
|
+
export function mediaPurposeRejectedDiagnostic(opPath, purpose, declared) {
|
|
73
|
+
const expected = declared.length > 0
|
|
74
|
+
? `purpose ∈ {${declared.map((p) => `'${p}'`).join(", ")}}`
|
|
75
|
+
: "media uploads are not enabled on this deployment (no `media.purposes` declared in siteDefaults)";
|
|
76
|
+
return makeDiagnostic({
|
|
77
|
+
code: "MEDIA_PURPOSE_REJECTED",
|
|
78
|
+
phase: PHASE,
|
|
79
|
+
severity: "error",
|
|
80
|
+
path: opPath,
|
|
81
|
+
value: purpose ?? "(missing)",
|
|
82
|
+
expected,
|
|
83
|
+
suggestion: declared.length > 0
|
|
84
|
+
? "pass one of the declared purposes; starters own the taxonomy"
|
|
85
|
+
: "add `media.purposes` to `siteDefaults` in clam.config.ts to enable uploads",
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/usecase/media/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAmB,MAAM,qBAAqB,CAAC;AAEtE,MAAM,KAAK,GAAG,SAAkB,CAAC;AAEjC,MAAM,UAAU,4BAA4B,CAAC,MAAc;IACzD,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,wCAAwC;QAClD,OAAO,EACL,kHAAkH;KACrH,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAc,EAAE,IAAY;IACtE,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,sDAAsD;KACjE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAc;IACvD,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,+DAA+D;QACzE,UAAU,EAAE,yDAAyD;KACtE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,MAAc,EACd,QAAgB,EAChB,QAAgB;IAEhB,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,eAAe,QAAQ,EAAE;KACpC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAc,EAAE,QAAgB;IAC3E,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,4DAA4D;QACtE,UAAU,EAAE,0DAA0D;KACvE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAAc,EAAE,QAAgB;IAC5E,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,oDAAoD;QAC9D,UAAU,EAAE,mEAAmE;KAChF,CAAC,CAAC;AACL,CAAC;AAED;;;;;0BAK0B;AAC1B,MAAM,UAAU,8BAA8B,CAC5C,MAAc,EACd,OAA2B,EAC3B,QAA2B;IAE3B,MAAM,QAAQ,GACZ,QAAQ,CAAC,MAAM,GAAG,CAAC;QACjB,CAAC,CAAC,cAAc,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAC3D,CAAC,CAAC,iGAAiG,CAAC;IACxG,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,OAAO,IAAI,WAAW;QAC7B,QAAQ;QACR,UAAU,EACR,QAAQ,CAAC,MAAM,GAAG,CAAC;YACjB,CAAC,CAAC,8DAA8D;YAChE,CAAC,CAAC,4EAA4E;KACnF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { CreateMediaUploadUseCase } from "./CreateMediaUploadUseCase.js";
|
|
2
|
+
export { CommitMediaUploadUseCase } from "./CommitMediaUploadUseCase.js";
|
|
3
|
+
export { DEFAULT_MAX_BYTES, MEDIA_MIME_ALLOWLIST, MEDIA_SVG_MIME, PENDING_UPLOAD_KV_PREFIX, PENDING_UPLOAD_KV_TTL_SECONDS, UPLOAD_URL_TTL_SECONDS, extensionForMime, isAllowedMime, type MediaMimeType, } from "./mediaAllowlist.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/usecase/media/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { CreateMediaUploadUseCase } from "./CreateMediaUploadUseCase.js";
|
|
2
|
+
export { CommitMediaUploadUseCase } from "./CommitMediaUploadUseCase.js";
|
|
3
|
+
export { DEFAULT_MAX_BYTES, MEDIA_MIME_ALLOWLIST, MEDIA_SVG_MIME, PENDING_UPLOAD_KV_PREFIX, PENDING_UPLOAD_KV_TTL_SECONDS, UPLOAD_URL_TTL_SECONDS, extensionForMime, isAllowedMime, } from "./mediaAllowlist.js";
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/usecase/media/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,GAEd,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Closed mime allowlist for v0.1.x media uploads. Adapter authors
|
|
3
|
+
* cannot extend this without a grammar-revise round.
|
|
4
|
+
*
|
|
5
|
+
* SVG is intentionally absent from the always-on set — object stores
|
|
6
|
+
* don't sanitize and a passthrough SVG can carry inline scripts. SVG
|
|
7
|
+
* uploads are only accepted when the adapter wires the use case with
|
|
8
|
+
* `allowSvg: true`, typically from a `MEDIA_ALLOW_SVG=1` env opt-in.
|
|
9
|
+
*/
|
|
10
|
+
export declare const MEDIA_MIME_ALLOWLIST: readonly ["image/png", "image/jpeg", "image/webp", "image/gif"];
|
|
11
|
+
export declare const MEDIA_SVG_MIME: "image/svg+xml";
|
|
12
|
+
export type MediaMimeType = (typeof MEDIA_MIME_ALLOWLIST)[number] | typeof MEDIA_SVG_MIME;
|
|
13
|
+
export declare function isAllowedMime(mime: string, allowSvg: boolean): boolean;
|
|
14
|
+
/** Default upload byte ceiling: 25 MB. Large enough for most cover
|
|
15
|
+
* images and short-form social posts; small enough to keep R2 free
|
|
16
|
+
* tier viable. Adapters may pass a different value via the use-case
|
|
17
|
+
* ctor when they have stricter / looser policies. */
|
|
18
|
+
export declare const DEFAULT_MAX_BYTES: number;
|
|
19
|
+
/** Upload-capability TTL: 15 minutes. Bearer URL is short-lived. */
|
|
20
|
+
export declare const UPLOAD_URL_TTL_SECONDS: number;
|
|
21
|
+
/** KV record TTL: 1 hour. Outlives the upload URL so slow commits
|
|
22
|
+
* don't lose the mapping; orphan sweep cleans uncommitted objects
|
|
23
|
+
* separately. */
|
|
24
|
+
export declare const PENDING_UPLOAD_KV_TTL_SECONDS: number;
|
|
25
|
+
export declare const PENDING_UPLOAD_KV_PREFIX = "media:pending:";
|
|
26
|
+
/** Map a mime type to a conventional file extension for object key
|
|
27
|
+
* construction. Extension is purely cosmetic in R2 — server-side
|
|
28
|
+
* serving never infers content-type from the key. */
|
|
29
|
+
export declare function extensionForMime(mime: string): string;
|
|
30
|
+
//# sourceMappingURL=mediaAllowlist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaAllowlist.d.ts","sourceRoot":"","sources":["../../../src/usecase/media/mediaAllowlist.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,iEAKvB,CAAC;AAEX,eAAO,MAAM,cAAc,EAAG,eAAwB,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,cAAc,CAAC;AAE1F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAGtE;AAED;;;sDAGsD;AACtD,eAAO,MAAM,iBAAiB,QAAmB,CAAC;AAElD,oEAAoE;AACpE,eAAO,MAAM,sBAAsB,QAAU,CAAC;AAE9C;;kBAEkB;AAClB,eAAO,MAAM,6BAA6B,QAAU,CAAC;AAErD,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AAEzD;;sDAEsD;AACtD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAerD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Closed mime allowlist for v0.1.x media uploads. Adapter authors
|
|
3
|
+
* cannot extend this without a grammar-revise round.
|
|
4
|
+
*
|
|
5
|
+
* SVG is intentionally absent from the always-on set — object stores
|
|
6
|
+
* don't sanitize and a passthrough SVG can carry inline scripts. SVG
|
|
7
|
+
* uploads are only accepted when the adapter wires the use case with
|
|
8
|
+
* `allowSvg: true`, typically from a `MEDIA_ALLOW_SVG=1` env opt-in.
|
|
9
|
+
*/
|
|
10
|
+
export const MEDIA_MIME_ALLOWLIST = [
|
|
11
|
+
"image/png",
|
|
12
|
+
"image/jpeg",
|
|
13
|
+
"image/webp",
|
|
14
|
+
"image/gif",
|
|
15
|
+
];
|
|
16
|
+
export const MEDIA_SVG_MIME = "image/svg+xml";
|
|
17
|
+
export function isAllowedMime(mime, allowSvg) {
|
|
18
|
+
if (mime === MEDIA_SVG_MIME)
|
|
19
|
+
return allowSvg;
|
|
20
|
+
return MEDIA_MIME_ALLOWLIST.includes(mime);
|
|
21
|
+
}
|
|
22
|
+
/** Default upload byte ceiling: 25 MB. Large enough for most cover
|
|
23
|
+
* images and short-form social posts; small enough to keep R2 free
|
|
24
|
+
* tier viable. Adapters may pass a different value via the use-case
|
|
25
|
+
* ctor when they have stricter / looser policies. */
|
|
26
|
+
export const DEFAULT_MAX_BYTES = 25 * 1024 * 1024;
|
|
27
|
+
/** Upload-capability TTL: 15 minutes. Bearer URL is short-lived. */
|
|
28
|
+
export const UPLOAD_URL_TTL_SECONDS = 15 * 60;
|
|
29
|
+
/** KV record TTL: 1 hour. Outlives the upload URL so slow commits
|
|
30
|
+
* don't lose the mapping; orphan sweep cleans uncommitted objects
|
|
31
|
+
* separately. */
|
|
32
|
+
export const PENDING_UPLOAD_KV_TTL_SECONDS = 60 * 60;
|
|
33
|
+
export const PENDING_UPLOAD_KV_PREFIX = "media:pending:";
|
|
34
|
+
/** Map a mime type to a conventional file extension for object key
|
|
35
|
+
* construction. Extension is purely cosmetic in R2 — server-side
|
|
36
|
+
* serving never infers content-type from the key. */
|
|
37
|
+
export function extensionForMime(mime) {
|
|
38
|
+
switch (mime) {
|
|
39
|
+
case "image/png":
|
|
40
|
+
return "png";
|
|
41
|
+
case "image/jpeg":
|
|
42
|
+
return "jpg";
|
|
43
|
+
case "image/webp":
|
|
44
|
+
return "webp";
|
|
45
|
+
case "image/gif":
|
|
46
|
+
return "gif";
|
|
47
|
+
case MEDIA_SVG_MIME:
|
|
48
|
+
return "svg";
|
|
49
|
+
default:
|
|
50
|
+
return "bin";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=mediaAllowlist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaAllowlist.js","sourceRoot":"","sources":["../../../src/usecase/media/mediaAllowlist.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,WAAW;CACH,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG,eAAwB,CAAC;AAIvD,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAiB;IAC3D,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,QAAQ,CAAC;IAC7C,OAAQ,oBAA0C,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAED;;;sDAGsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,oEAAoE;AACpE,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,CAAC;AAE9C;;kBAEkB;AAClB,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,GAAG,EAAE,CAAC;AAErD,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AAEzD;;sDAEsD;AACtD,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW;YACd,OAAO,KAAK,CAAC;QACf,KAAK,YAAY;YACf,OAAO,KAAK,CAAC;QACf,KAAK,YAAY;YACf,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,KAAK,CAAC;QACf,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC;QACf;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type SchemaManifest } from "@aotter/mantle-spec";
|
|
2
|
+
import type { Clock } from "../../domain/port/Clock.js";
|
|
3
|
+
import type { EntryRepository } from "../../domain/port/EntryRepository.js";
|
|
4
|
+
import type { IdGenerator } from "../../domain/port/IdGenerator.js";
|
|
5
|
+
import type { SiteConfigRepository } from "../../domain/port/SiteConfigRepository.js";
|
|
6
|
+
import type { InvokeBuiltinRequest } from "../dto/procedure/index.js";
|
|
7
|
+
/**
|
|
8
|
+
* `InvokeBuiltinUseCase` — executes the `handler.kind: builtin` op
|
|
9
|
+
* (POC ADR-0014). The four ops map 1:1 to the entry-writer chokepoint:
|
|
10
|
+
*
|
|
11
|
+
* - `create` → `entries.create({ ..., status: 'draft' })` with a
|
|
12
|
+
* generated id. Input is projected through
|
|
13
|
+
* `domain/service/BuiltinProjector.projectAndStamp` so only
|
|
14
|
+
* Schema-declared keys land in `data` and `x-clam-bind` fields are
|
|
15
|
+
* server-stamped from `ctx`.
|
|
16
|
+
* - `update` → `entries.update`. Caller supplies `id` +
|
|
17
|
+
* `expectedVersion` in the input; OCC enforced at the chokepoint.
|
|
18
|
+
* - `upsert` → `update` if `input.id` resolves, else `create`.
|
|
19
|
+
* - `delete` → `entries.delete({ id })`.
|
|
20
|
+
*
|
|
21
|
+
* Pre-projection original input is forwarded to the chokepoint via
|
|
22
|
+
* `originalInput`, so lifecycle hook handlers can read side-channel
|
|
23
|
+
* fields (CAPTCHA tokens, etc.) declared on the Procedure input but
|
|
24
|
+
* not on the Schema.
|
|
25
|
+
*
|
|
26
|
+
* Auth + input/output validation happen upstream in
|
|
27
|
+
* `InvokeProcedureUseCase`. This use case trusts its `validatedInput`.
|
|
28
|
+
*/
|
|
29
|
+
export declare class InvokeBuiltinUseCase {
|
|
30
|
+
private readonly entries;
|
|
31
|
+
private readonly schemasByName;
|
|
32
|
+
private readonly clock;
|
|
33
|
+
private readonly idgen;
|
|
34
|
+
private readonly siteConfig?;
|
|
35
|
+
constructor(entries: EntryRepository, schemasByName: ReadonlyMap<string, SchemaManifest>, clock: Clock, idgen: IdGenerator, siteConfig?: SiteConfigRepository | undefined);
|
|
36
|
+
run(request: InvokeBuiltinRequest): Promise<unknown>;
|
|
37
|
+
private opCreate;
|
|
38
|
+
private opUpdate;
|
|
39
|
+
private opUpsert;
|
|
40
|
+
private opDelete;
|
|
41
|
+
private opArchive;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=InvokeBuiltinUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvokeBuiltinUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/procedure/InvokeBuiltinUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAGtF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAJX,OAAO,EAAE,eAAe,EACxB,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAClD,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,WAAW,EAClB,UAAU,CAAC,EAAE,oBAAoB,YAAA;IAG9C,GAAG,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;YA4D5C,QAAQ;YA2BR,QAAQ;YA6BR,QAAQ;YAcR,QAAQ;YAcR,SAAS;CA4CxB"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { canTransition, DiagnosticError, runtimeDiagnostic, } from "@aotter/mantle-spec";
|
|
2
|
+
import { projectAndStamp } from "../../domain/service/BuiltinProjector.js";
|
|
3
|
+
import { assertEntryWritable } from "../../domain/service/io/EntryWriteGuard.js";
|
|
4
|
+
/**
|
|
5
|
+
* `InvokeBuiltinUseCase` — executes the `handler.kind: builtin` op
|
|
6
|
+
* (POC ADR-0014). The four ops map 1:1 to the entry-writer chokepoint:
|
|
7
|
+
*
|
|
8
|
+
* - `create` → `entries.create({ ..., status: 'draft' })` with a
|
|
9
|
+
* generated id. Input is projected through
|
|
10
|
+
* `domain/service/BuiltinProjector.projectAndStamp` so only
|
|
11
|
+
* Schema-declared keys land in `data` and `x-clam-bind` fields are
|
|
12
|
+
* server-stamped from `ctx`.
|
|
13
|
+
* - `update` → `entries.update`. Caller supplies `id` +
|
|
14
|
+
* `expectedVersion` in the input; OCC enforced at the chokepoint.
|
|
15
|
+
* - `upsert` → `update` if `input.id` resolves, else `create`.
|
|
16
|
+
* - `delete` → `entries.delete({ id })`.
|
|
17
|
+
*
|
|
18
|
+
* Pre-projection original input is forwarded to the chokepoint via
|
|
19
|
+
* `originalInput`, so lifecycle hook handlers can read side-channel
|
|
20
|
+
* fields (CAPTCHA tokens, etc.) declared on the Procedure input but
|
|
21
|
+
* not on the Schema.
|
|
22
|
+
*
|
|
23
|
+
* Auth + input/output validation happen upstream in
|
|
24
|
+
* `InvokeProcedureUseCase`. This use case trusts its `validatedInput`.
|
|
25
|
+
*/
|
|
26
|
+
export class InvokeBuiltinUseCase {
|
|
27
|
+
entries;
|
|
28
|
+
schemasByName;
|
|
29
|
+
clock;
|
|
30
|
+
idgen;
|
|
31
|
+
siteConfig;
|
|
32
|
+
constructor(entries, schemasByName, clock, idgen, siteConfig) {
|
|
33
|
+
this.entries = entries;
|
|
34
|
+
this.schemasByName = schemasByName;
|
|
35
|
+
this.clock = clock;
|
|
36
|
+
this.idgen = idgen;
|
|
37
|
+
this.siteConfig = siteConfig;
|
|
38
|
+
}
|
|
39
|
+
async run(request) {
|
|
40
|
+
const handler = request.procedure.spec.handler;
|
|
41
|
+
if (handler.kind !== "builtin") {
|
|
42
|
+
throw new DiagnosticError(runtimeDiagnostic({
|
|
43
|
+
code: "INTERNAL_ERROR",
|
|
44
|
+
severity: "error",
|
|
45
|
+
path: `usecase/InvokeBuiltin/${request.procedure.metadata.name}`,
|
|
46
|
+
value: handler.kind,
|
|
47
|
+
expected: "handler.kind: 'builtin' (router should have filtered ref)",
|
|
48
|
+
message: `InvokeBuiltinUseCase received handler.kind '${handler.kind}'. The router in InvokeProcedureUseCase should have filtered ref handlers — this is a wiring bug.`,
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
const schema = this.schemasByName.get(handler.schema);
|
|
52
|
+
if (!schema) {
|
|
53
|
+
throw new DiagnosticError(runtimeDiagnostic({
|
|
54
|
+
code: "BUILTIN_HANDLER_SCHEMA_UNKNOWN",
|
|
55
|
+
severity: "error",
|
|
56
|
+
path: `usecase/InvokeBuiltin/${request.procedure.metadata.name}#/handler/schema`,
|
|
57
|
+
value: handler.schema,
|
|
58
|
+
expected: "name of a declared Schema",
|
|
59
|
+
candidates: [...this.schemasByName.keys()],
|
|
60
|
+
message: `Procedure '${request.procedure.metadata.name}' (handler.kind: builtin) targets unknown Schema '${handler.schema}'. (Boot validator should have caught this.)`,
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
const now = this.clock.now();
|
|
64
|
+
const input = request.validatedInput;
|
|
65
|
+
switch (handler.op) {
|
|
66
|
+
case "create":
|
|
67
|
+
return this.opCreate(schema, input, request.ctx, now);
|
|
68
|
+
case "update":
|
|
69
|
+
return this.opUpdate(schema, input, request.ctx, now);
|
|
70
|
+
case "upsert":
|
|
71
|
+
return this.opUpsert(schema, input, request.ctx, now);
|
|
72
|
+
case "delete":
|
|
73
|
+
return this.opDelete(schema, input, request.ctx);
|
|
74
|
+
case "archive":
|
|
75
|
+
return this.opArchive(schema, input, request.ctx, now);
|
|
76
|
+
default: {
|
|
77
|
+
const _exhaustive = handler.op;
|
|
78
|
+
throw new DiagnosticError(runtimeDiagnostic({
|
|
79
|
+
code: "INTERNAL_ERROR",
|
|
80
|
+
severity: "error",
|
|
81
|
+
path: `usecase/InvokeBuiltin/${request.procedure.metadata.name}#/handler/op`,
|
|
82
|
+
value: _exhaustive,
|
|
83
|
+
expected: "one of BUILTIN_OPS",
|
|
84
|
+
message: `Builtin op '${String(_exhaustive)}' is in BUILTIN_OPS but not handled by InvokeBuiltinUseCase. Add a case branch.`,
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async opCreate(schema, input, ctx, now) {
|
|
90
|
+
const opPath = `usecase/InvokeBuiltin/${schema.metadata.name}/create`;
|
|
91
|
+
const data = projectAndStamp({ schema, input, ctx, clockNow: now });
|
|
92
|
+
await assertEntryWritable({
|
|
93
|
+
opPath,
|
|
94
|
+
entries: this.entries,
|
|
95
|
+
schema,
|
|
96
|
+
data,
|
|
97
|
+
siteConfig: this.siteConfig,
|
|
98
|
+
});
|
|
99
|
+
return this.entries.create({
|
|
100
|
+
id: this.idgen.next(),
|
|
101
|
+
collection: schema.metadata.name,
|
|
102
|
+
status: "draft",
|
|
103
|
+
data,
|
|
104
|
+
authorId: ctx.user?.id ?? null,
|
|
105
|
+
now,
|
|
106
|
+
hookContext: ctx,
|
|
107
|
+
originalInput: input,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
async opUpdate(schema, input, ctx, now) {
|
|
111
|
+
const opPath = `usecase/InvokeBuiltin/${schema.metadata.name}/update`;
|
|
112
|
+
const id = requireField(input, "id", "string");
|
|
113
|
+
const expectedVersion = requireField(input, "expectedVersion", "number");
|
|
114
|
+
const data = projectAndStamp({ schema, input, ctx, clockNow: now });
|
|
115
|
+
await assertEntryWritable({
|
|
116
|
+
opPath,
|
|
117
|
+
entries: this.entries,
|
|
118
|
+
schema,
|
|
119
|
+
data,
|
|
120
|
+
excludeId: id,
|
|
121
|
+
siteConfig: this.siteConfig,
|
|
122
|
+
});
|
|
123
|
+
return this.entries.update({
|
|
124
|
+
id,
|
|
125
|
+
collection: schema.metadata.name,
|
|
126
|
+
expectedVersion,
|
|
127
|
+
data,
|
|
128
|
+
now,
|
|
129
|
+
hookContext: ctx,
|
|
130
|
+
originalInput: input,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
async opUpsert(schema, input, ctx, now) {
|
|
134
|
+
const id = typeof input["id"] === "string" ? input["id"] : undefined;
|
|
135
|
+
if (id) {
|
|
136
|
+
const existing = await this.entries.get(id);
|
|
137
|
+
if (existing)
|
|
138
|
+
return this.opUpdate(schema, input, ctx, now);
|
|
139
|
+
}
|
|
140
|
+
return this.opCreate(schema, input, ctx, now);
|
|
141
|
+
}
|
|
142
|
+
async opDelete(schema, input, ctx) {
|
|
143
|
+
const id = requireField(input, "id", "string");
|
|
144
|
+
return this.entries.delete({
|
|
145
|
+
id,
|
|
146
|
+
collection: schema.metadata.name,
|
|
147
|
+
hookContext: ctx,
|
|
148
|
+
originalInput: input,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
async opArchive(schema, input, ctx, now) {
|
|
152
|
+
const id = requireField(input, "id", "string");
|
|
153
|
+
const existing = await this.entries.get(id);
|
|
154
|
+
if (!existing) {
|
|
155
|
+
throw new DiagnosticError(runtimeDiagnostic({
|
|
156
|
+
code: "NOT_FOUND",
|
|
157
|
+
severity: "error",
|
|
158
|
+
path: `builtin:archive/${schema.metadata.name}/${id}`,
|
|
159
|
+
value: id,
|
|
160
|
+
expected: "id of an existing entry",
|
|
161
|
+
message: `Entry not found: ${id}.`,
|
|
162
|
+
}));
|
|
163
|
+
}
|
|
164
|
+
// Mirror ArchiveUseCase: state-machine guard + OCC pinned to the
|
|
165
|
+
// version we just read so guard and chokepoint check the same
|
|
166
|
+
// snapshot.
|
|
167
|
+
if (!canTransition(schema, existing.status, "archived")) {
|
|
168
|
+
throw new DiagnosticError(runtimeDiagnostic({
|
|
169
|
+
code: "CONFLICT",
|
|
170
|
+
severity: "error",
|
|
171
|
+
path: `builtin:archive/${schema.metadata.name}/${id}`,
|
|
172
|
+
value: existing.status,
|
|
173
|
+
expected: "row in a state that allows transition to 'archived'",
|
|
174
|
+
message: `Illegal transition from '${existing.status}' to 'archived'.`,
|
|
175
|
+
}));
|
|
176
|
+
}
|
|
177
|
+
return this.entries.archive({
|
|
178
|
+
id,
|
|
179
|
+
collection: schema.metadata.name,
|
|
180
|
+
expectedVersion: existing.version,
|
|
181
|
+
now,
|
|
182
|
+
hookContext: ctx,
|
|
183
|
+
originalInput: input,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function requireField(input, key, expected) {
|
|
188
|
+
const v = input[key];
|
|
189
|
+
const ok = expected === "string" ? typeof v === "string" : typeof v === "number" && Number.isFinite(v);
|
|
190
|
+
if (!ok) {
|
|
191
|
+
throw new DiagnosticError(runtimeDiagnostic({
|
|
192
|
+
code: "INPUT_VALIDATION_FAILED",
|
|
193
|
+
severity: "error",
|
|
194
|
+
path: `builtin-input/${key}`,
|
|
195
|
+
value: v,
|
|
196
|
+
expected: `${expected} field '${key}' (declare it in Procedure.input.properties so zod validation rejects upstream)`,
|
|
197
|
+
message: `Builtin op requires '${key}' as a ${expected}. Add it to the Procedure's input schema.`,
|
|
198
|
+
}));
|
|
199
|
+
}
|
|
200
|
+
return v;
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=InvokeBuiltinUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvokeBuiltinUseCase.js","sourceRoot":"","sources":["../../../src/usecase/procedure/InvokeBuiltinUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type Diagnostic } from "@aotter/mantle-spec";
|
|
2
|
+
import type { HandlerRegistry } from "../../domain/port/HandlerRegistry.js";
|
|
3
|
+
import type { InvokeProcedureRequest, InvokeProcedureResponse } from "../dto/procedure/index.js";
|
|
4
|
+
import type { InvokeBuiltinUseCase } from "./InvokeBuiltinUseCase.js";
|
|
5
|
+
/**
|
|
6
|
+
* `InvokeProcedureUseCase` — in-process invocation of a Procedure.
|
|
7
|
+
* HTTP-agnostic — the adapter's mount layer wraps this to map to/from
|
|
8
|
+
* `Request` / `Response`. The test harness exercises the same entry
|
|
9
|
+
* point.
|
|
10
|
+
*
|
|
11
|
+
* Order of operations:
|
|
12
|
+
* 1. Evaluate `requires.auth.all` predicates against `ctx`. Deny ⇒
|
|
13
|
+
* `AUTH_DENIED`.
|
|
14
|
+
* 2. Validate `input` against the Procedure's `input` JSON Schema.
|
|
15
|
+
* Fail ⇒ `INPUT_VALIDATION_FAILED` (first zod issue).
|
|
16
|
+
* 3. Dispatch by `handler.kind`:
|
|
17
|
+
* - `ref`: resolve in registry, call (`InvokeFailure` → unwrap;
|
|
18
|
+
* other throws → `INTERNAL_ERROR`).
|
|
19
|
+
* - `builtin`: delegate to `InvokeBuiltinUseCase` (project +
|
|
20
|
+
* stamp + chokepoint write per POC ADR-0014). When no builtin
|
|
21
|
+
* collaborator was injected (test paths, ref-only runtimes) the
|
|
22
|
+
* use case returns `HANDLER_BUILTIN_NOT_IN_V010`.
|
|
23
|
+
* 4. Validate the result against the `output` schema. Fail ⇒
|
|
24
|
+
* `OUTPUT_VALIDATION_FAILED` (handler / builtin bug).
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Throwable carrier for handlers that want to surface a structured
|
|
28
|
+
* Diagnostic without going through the generic `INTERNAL_ERROR`
|
|
29
|
+
* envelope. The use case catches it and converts to an
|
|
30
|
+
* `{ ok: false, diagnostic }` return. Lives here (not in
|
|
31
|
+
* `usecase/dto/`) because it's a runtime value, not a DTO type.
|
|
32
|
+
*/
|
|
33
|
+
export declare class InvokeFailure extends Error {
|
|
34
|
+
readonly diagnostic: Diagnostic;
|
|
35
|
+
constructor(diagnostic: Diagnostic);
|
|
36
|
+
}
|
|
37
|
+
export declare class InvokeProcedureUseCase {
|
|
38
|
+
private readonly registry;
|
|
39
|
+
private readonly builtin?;
|
|
40
|
+
private readonly inputCache;
|
|
41
|
+
private readonly outputCache;
|
|
42
|
+
constructor(registry: HandlerRegistry, builtin?: InvokeBuiltinUseCase | undefined);
|
|
43
|
+
execute<O = unknown>(request: InvokeProcedureRequest): Promise<InvokeProcedureResponse<O>>;
|
|
44
|
+
/** Test seam — clear validator caches between tests when manifests
|
|
45
|
+
* change between runs. Production paths never call this. */
|
|
46
|
+
_clearValidatorCaches(): void;
|
|
47
|
+
private compileInput;
|
|
48
|
+
private compileOutput;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=InvokeProcedureUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvokeProcedureUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/procedure/InvokeProcedureUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,UAAU,EAGhB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,KAAK;aACV,UAAU,EAAE,UAAU;gBAAtB,UAAU,EAAE,UAAU;CAInD;AAED,qBAAa,sBAAsB;IAW/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAL3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAGvC,QAAQ,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,oBAAoB,YAAA;IAG3C,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAoHhG;iEAC6D;IAC7D,qBAAqB,IAAI,IAAI;IAK7B,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,aAAa;CAStB"}
|