@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.
Files changed (439) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +14 -0
  3. package/dist/domain/index.d.ts +4 -0
  4. package/dist/domain/index.d.ts.map +1 -0
  5. package/dist/domain/index.js +4 -0
  6. package/dist/domain/index.js.map +1 -0
  7. package/dist/domain/model/EntryRow.d.ts +59 -0
  8. package/dist/domain/model/EntryRow.d.ts.map +1 -0
  9. package/dist/domain/model/EntryRow.js +42 -0
  10. package/dist/domain/model/EntryRow.js.map +1 -0
  11. package/dist/domain/model/HandlerContext.d.ts +65 -0
  12. package/dist/domain/model/HandlerContext.d.ts.map +1 -0
  13. package/dist/domain/model/HandlerContext.js +2 -0
  14. package/dist/domain/model/HandlerContext.js.map +1 -0
  15. package/dist/domain/model/SeoMeta.d.ts +49 -0
  16. package/dist/domain/model/SeoMeta.d.ts.map +1 -0
  17. package/dist/domain/model/SeoMeta.js +2 -0
  18. package/dist/domain/model/SeoMeta.js.map +1 -0
  19. package/dist/domain/model/TemplateRegistry.d.ts +47 -0
  20. package/dist/domain/model/TemplateRegistry.d.ts.map +1 -0
  21. package/dist/domain/model/TemplateRegistry.js +17 -0
  22. package/dist/domain/model/TemplateRegistry.js.map +1 -0
  23. package/dist/domain/model/index.d.ts +7 -0
  24. package/dist/domain/model/index.d.ts.map +1 -0
  25. package/dist/domain/model/index.js +6 -0
  26. package/dist/domain/model/index.js.map +1 -0
  27. package/dist/domain/port/AssetServer.d.ts +21 -0
  28. package/dist/domain/port/AssetServer.d.ts.map +1 -0
  29. package/dist/domain/port/AssetServer.js +2 -0
  30. package/dist/domain/port/AssetServer.js.map +1 -0
  31. package/dist/domain/port/Clock.d.ts +13 -0
  32. package/dist/domain/port/Clock.d.ts.map +1 -0
  33. package/dist/domain/port/Clock.js +2 -0
  34. package/dist/domain/port/Clock.js.map +1 -0
  35. package/dist/domain/port/DatabaseDriver.d.ts +91 -0
  36. package/dist/domain/port/DatabaseDriver.d.ts.map +1 -0
  37. package/dist/domain/port/DatabaseDriver.js +2 -0
  38. package/dist/domain/port/DatabaseDriver.js.map +1 -0
  39. package/dist/domain/port/DeferredHookDispatcher.d.ts +55 -0
  40. package/dist/domain/port/DeferredHookDispatcher.d.ts.map +1 -0
  41. package/dist/domain/port/DeferredHookDispatcher.js +16 -0
  42. package/dist/domain/port/DeferredHookDispatcher.js.map +1 -0
  43. package/dist/domain/port/EmailSender.d.ts +31 -0
  44. package/dist/domain/port/EmailSender.d.ts.map +1 -0
  45. package/dist/domain/port/EmailSender.js +2 -0
  46. package/dist/domain/port/EmailSender.js.map +1 -0
  47. package/dist/domain/port/EntryRepository.d.ts +132 -0
  48. package/dist/domain/port/EntryRepository.d.ts.map +1 -0
  49. package/dist/domain/port/EntryRepository.js +2 -0
  50. package/dist/domain/port/EntryRepository.js.map +1 -0
  51. package/dist/domain/port/HandlerRegistry.d.ts +38 -0
  52. package/dist/domain/port/HandlerRegistry.d.ts.map +1 -0
  53. package/dist/domain/port/HandlerRegistry.js +27 -0
  54. package/dist/domain/port/HandlerRegistry.js.map +1 -0
  55. package/dist/domain/port/IdGenerator.d.ts +28 -0
  56. package/dist/domain/port/IdGenerator.d.ts.map +1 -0
  57. package/dist/domain/port/IdGenerator.js +5 -0
  58. package/dist/domain/port/IdGenerator.js.map +1 -0
  59. package/dist/domain/port/KvCache.d.ts +34 -0
  60. package/dist/domain/port/KvCache.d.ts.map +1 -0
  61. package/dist/domain/port/KvCache.js +2 -0
  62. package/dist/domain/port/KvCache.js.map +1 -0
  63. package/dist/domain/port/LifecycleHookRunner.d.ts +41 -0
  64. package/dist/domain/port/LifecycleHookRunner.d.ts.map +1 -0
  65. package/dist/domain/port/LifecycleHookRunner.js +2 -0
  66. package/dist/domain/port/LifecycleHookRunner.js.map +1 -0
  67. package/dist/domain/port/MediaStorage.d.ts +102 -0
  68. package/dist/domain/port/MediaStorage.d.ts.map +1 -0
  69. package/dist/domain/port/MediaStorage.js +2 -0
  70. package/dist/domain/port/MediaStorage.js.map +1 -0
  71. package/dist/domain/port/PublishOrchestrator.d.ts +25 -0
  72. package/dist/domain/port/PublishOrchestrator.d.ts.map +1 -0
  73. package/dist/domain/port/PublishOrchestrator.js +2 -0
  74. package/dist/domain/port/PublishOrchestrator.js.map +1 -0
  75. package/dist/domain/port/SiteConfigRepository.d.ts +27 -0
  76. package/dist/domain/port/SiteConfigRepository.d.ts.map +1 -0
  77. package/dist/domain/port/SiteConfigRepository.js +2 -0
  78. package/dist/domain/port/SiteConfigRepository.js.map +1 -0
  79. package/dist/domain/port/index.d.ts +30 -0
  80. package/dist/domain/port/index.d.ts.map +1 -0
  81. package/dist/domain/port/index.js +5 -0
  82. package/dist/domain/port/index.js.map +1 -0
  83. package/dist/domain/service/AbsoluteUrl.d.ts +6 -0
  84. package/dist/domain/service/AbsoluteUrl.d.ts.map +1 -0
  85. package/dist/domain/service/AbsoluteUrl.js +33 -0
  86. package/dist/domain/service/AbsoluteUrl.js.map +1 -0
  87. package/dist/domain/service/AuthPredicateEvaluator.d.ts +29 -0
  88. package/dist/domain/service/AuthPredicateEvaluator.d.ts.map +1 -0
  89. package/dist/domain/service/AuthPredicateEvaluator.js +48 -0
  90. package/dist/domain/service/AuthPredicateEvaluator.js.map +1 -0
  91. package/dist/domain/service/BuiltinProjector.d.ts +50 -0
  92. package/dist/domain/service/BuiltinProjector.d.ts.map +1 -0
  93. package/dist/domain/service/BuiltinProjector.js +61 -0
  94. package/dist/domain/service/BuiltinProjector.js.map +1 -0
  95. package/dist/domain/service/EntrySeoSupport.d.ts +27 -0
  96. package/dist/domain/service/EntrySeoSupport.d.ts.map +1 -0
  97. package/dist/domain/service/EntrySeoSupport.js +13 -0
  98. package/dist/domain/service/EntrySeoSupport.js.map +1 -0
  99. package/dist/domain/service/HtmlRenderer.d.ts +32 -0
  100. package/dist/domain/service/HtmlRenderer.d.ts.map +1 -0
  101. package/dist/domain/service/HtmlRenderer.js +38 -0
  102. package/dist/domain/service/HtmlRenderer.js.map +1 -0
  103. package/dist/domain/service/LocaleNegotiator.d.ts +29 -0
  104. package/dist/domain/service/LocaleNegotiator.d.ts.map +1 -0
  105. package/dist/domain/service/LocaleNegotiator.js +62 -0
  106. package/dist/domain/service/LocaleNegotiator.js.map +1 -0
  107. package/dist/domain/service/MarkdownSerializer.d.ts +48 -0
  108. package/dist/domain/service/MarkdownSerializer.d.ts.map +1 -0
  109. package/dist/domain/service/MarkdownSerializer.js +109 -0
  110. package/dist/domain/service/MarkdownSerializer.js.map +1 -0
  111. package/dist/domain/service/McpToolNaming.d.ts +12 -0
  112. package/dist/domain/service/McpToolNaming.d.ts.map +1 -0
  113. package/dist/domain/service/McpToolNaming.js +14 -0
  114. package/dist/domain/service/McpToolNaming.js.map +1 -0
  115. package/dist/domain/service/Pagination.d.ts +15 -0
  116. package/dist/domain/service/Pagination.d.ts.map +1 -0
  117. package/dist/domain/service/Pagination.js +29 -0
  118. package/dist/domain/service/Pagination.js.map +1 -0
  119. package/dist/domain/service/PathMatcher.d.ts +15 -0
  120. package/dist/domain/service/PathMatcher.d.ts.map +1 -0
  121. package/dist/domain/service/PathMatcher.js +54 -0
  122. package/dist/domain/service/PathMatcher.js.map +1 -0
  123. package/dist/domain/service/PreviewBanner.d.ts +10 -0
  124. package/dist/domain/service/PreviewBanner.d.ts.map +1 -0
  125. package/dist/domain/service/PreviewBanner.js +37 -0
  126. package/dist/domain/service/PreviewBanner.js.map +1 -0
  127. package/dist/domain/service/PublicPathResolver.d.ts +41 -0
  128. package/dist/domain/service/PublicPathResolver.d.ts.map +1 -0
  129. package/dist/domain/service/PublicPathResolver.js +24 -0
  130. package/dist/domain/service/PublicPathResolver.js.map +1 -0
  131. package/dist/domain/service/PublishKeys.d.ts +42 -0
  132. package/dist/domain/service/PublishKeys.d.ts.map +1 -0
  133. package/dist/domain/service/PublishKeys.js +69 -0
  134. package/dist/domain/service/PublishKeys.js.map +1 -0
  135. package/dist/domain/service/SeoMetaComposer.d.ts +47 -0
  136. package/dist/domain/service/SeoMetaComposer.d.ts.map +1 -0
  137. package/dist/domain/service/SeoMetaComposer.js +174 -0
  138. package/dist/domain/service/SeoMetaComposer.js.map +1 -0
  139. package/dist/domain/service/SitemapSerializer.d.ts +19 -0
  140. package/dist/domain/service/SitemapSerializer.d.ts.map +1 -0
  141. package/dist/domain/service/SitemapSerializer.js +27 -0
  142. package/dist/domain/service/SitemapSerializer.js.map +1 -0
  143. package/dist/domain/service/TriggerIndex.d.ts +27 -0
  144. package/dist/domain/service/TriggerIndex.d.ts.map +1 -0
  145. package/dist/domain/service/TriggerIndex.js +52 -0
  146. package/dist/domain/service/TriggerIndex.js.map +1 -0
  147. package/dist/domain/service/ViewParamCoercer.d.ts +20 -0
  148. package/dist/domain/service/ViewParamCoercer.d.ts.map +1 -0
  149. package/dist/domain/service/ViewParamCoercer.js +82 -0
  150. package/dist/domain/service/ViewParamCoercer.js.map +1 -0
  151. package/dist/domain/service/ViewSqlCompiler.d.ts +29 -0
  152. package/dist/domain/service/ViewSqlCompiler.d.ts.map +1 -0
  153. package/dist/domain/service/ViewSqlCompiler.js +147 -0
  154. package/dist/domain/service/ViewSqlCompiler.js.map +1 -0
  155. package/dist/domain/service/index.d.ts +28 -0
  156. package/dist/domain/service/index.d.ts.map +1 -0
  157. package/dist/domain/service/index.js +28 -0
  158. package/dist/domain/service/index.js.map +1 -0
  159. package/dist/domain/service/io/EntryWriteGuard.d.ts +19 -0
  160. package/dist/domain/service/io/EntryWriteGuard.d.ts.map +1 -0
  161. package/dist/domain/service/io/EntryWriteGuard.js +109 -0
  162. package/dist/domain/service/io/EntryWriteGuard.js.map +1 -0
  163. package/dist/domain/service/io/JoinedEntryReader.d.ts +33 -0
  164. package/dist/domain/service/io/JoinedEntryReader.d.ts.map +1 -0
  165. package/dist/domain/service/io/JoinedEntryReader.js +95 -0
  166. package/dist/domain/service/io/JoinedEntryReader.js.map +1 -0
  167. package/dist/domain/service/io/PublishedEntries.d.ts +69 -0
  168. package/dist/domain/service/io/PublishedEntries.d.ts.map +1 -0
  169. package/dist/domain/service/io/PublishedEntries.js +116 -0
  170. package/dist/domain/service/io/PublishedEntries.js.map +1 -0
  171. package/dist/domain/service/io/index.d.ts +9 -0
  172. package/dist/domain/service/io/index.d.ts.map +1 -0
  173. package/dist/domain/service/io/index.js +9 -0
  174. package/dist/domain/service/io/index.js.map +1 -0
  175. package/dist/index.d.ts +41 -0
  176. package/dist/index.d.ts.map +1 -0
  177. package/dist/index.js +45 -0
  178. package/dist/index.js.map +1 -0
  179. package/dist/infrastructure/boot/canonicalMigrations.d.ts +9 -0
  180. package/dist/infrastructure/boot/canonicalMigrations.d.ts.map +1 -0
  181. package/dist/infrastructure/boot/canonicalMigrations.js +162 -0
  182. package/dist/infrastructure/boot/canonicalMigrations.js.map +1 -0
  183. package/dist/infrastructure/boot/index.d.ts +2 -0
  184. package/dist/infrastructure/boot/index.d.ts.map +1 -0
  185. package/dist/infrastructure/boot/index.js +2 -0
  186. package/dist/infrastructure/boot/index.js.map +1 -0
  187. package/dist/infrastructure/http/DiagnosticResponse.d.ts +12 -0
  188. package/dist/infrastructure/http/DiagnosticResponse.d.ts.map +1 -0
  189. package/dist/infrastructure/http/DiagnosticResponse.js +14 -0
  190. package/dist/infrastructure/http/DiagnosticResponse.js.map +1 -0
  191. package/dist/infrastructure/http/index.d.ts +2 -0
  192. package/dist/infrastructure/http/index.d.ts.map +1 -0
  193. package/dist/infrastructure/http/index.js +2 -0
  194. package/dist/infrastructure/http/index.js.map +1 -0
  195. package/dist/infrastructure/index.d.ts +12 -0
  196. package/dist/infrastructure/index.d.ts.map +1 -0
  197. package/dist/infrastructure/index.js +12 -0
  198. package/dist/infrastructure/index.js.map +1 -0
  199. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts +60 -0
  200. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts.map +1 -0
  201. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js +281 -0
  202. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js.map +1 -0
  203. package/dist/infrastructure/mcp/McpResponses.d.ts +14 -0
  204. package/dist/infrastructure/mcp/McpResponses.d.ts.map +1 -0
  205. package/dist/infrastructure/mcp/McpResponses.js +49 -0
  206. package/dist/infrastructure/mcp/McpResponses.js.map +1 -0
  207. package/dist/infrastructure/mcp/McpToolCatalog.d.ts +68 -0
  208. package/dist/infrastructure/mcp/McpToolCatalog.d.ts.map +1 -0
  209. package/dist/infrastructure/mcp/McpToolCatalog.js +231 -0
  210. package/dist/infrastructure/mcp/McpToolCatalog.js.map +1 -0
  211. package/dist/infrastructure/mcp/index.d.ts +4 -0
  212. package/dist/infrastructure/mcp/index.d.ts.map +1 -0
  213. package/dist/infrastructure/mcp/index.js +4 -0
  214. package/dist/infrastructure/mcp/index.js.map +1 -0
  215. package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts +35 -0
  216. package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts.map +1 -0
  217. package/dist/infrastructure/persistence/DatabaseEntryRepository.js +228 -0
  218. package/dist/infrastructure/persistence/DatabaseEntryRepository.js.map +1 -0
  219. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts +12 -0
  220. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts.map +1 -0
  221. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js +101 -0
  222. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js.map +1 -0
  223. package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.d.ts +74 -0
  224. package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.d.ts.map +1 -0
  225. package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.js +208 -0
  226. package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.js.map +1 -0
  227. package/dist/infrastructure/persistence/index.d.ts +4 -0
  228. package/dist/infrastructure/persistence/index.d.ts.map +1 -0
  229. package/dist/infrastructure/persistence/index.js +4 -0
  230. package/dist/infrastructure/persistence/index.js.map +1 -0
  231. package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts +34 -0
  232. package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts.map +1 -0
  233. package/dist/infrastructure/render/HtmlPublishOrchestrator.js +116 -0
  234. package/dist/infrastructure/render/HtmlPublishOrchestrator.js.map +1 -0
  235. package/dist/infrastructure/render/index.d.ts +2 -0
  236. package/dist/infrastructure/render/index.d.ts.map +1 -0
  237. package/dist/infrastructure/render/index.js +2 -0
  238. package/dist/infrastructure/render/index.js.map +1 -0
  239. package/dist/runtime.d.ts +132 -0
  240. package/dist/runtime.d.ts.map +1 -0
  241. package/dist/runtime.js +142 -0
  242. package/dist/runtime.js.map +1 -0
  243. package/dist/usecase/boot/ValidateBootUseCase.d.ts +57 -0
  244. package/dist/usecase/boot/ValidateBootUseCase.d.ts.map +1 -0
  245. package/dist/usecase/boot/ValidateBootUseCase.js +181 -0
  246. package/dist/usecase/boot/ValidateBootUseCase.js.map +1 -0
  247. package/dist/usecase/boot/index.d.ts +2 -0
  248. package/dist/usecase/boot/index.d.ts.map +1 -0
  249. package/dist/usecase/boot/index.js +2 -0
  250. package/dist/usecase/boot/index.js.map +1 -0
  251. package/dist/usecase/content/ArchiveUseCase.d.ts +20 -0
  252. package/dist/usecase/content/ArchiveUseCase.d.ts.map +1 -0
  253. package/dist/usecase/content/ArchiveUseCase.js +47 -0
  254. package/dist/usecase/content/ArchiveUseCase.js.map +1 -0
  255. package/dist/usecase/content/ContentPublishEffects.d.ts +11 -0
  256. package/dist/usecase/content/ContentPublishEffects.d.ts.map +1 -0
  257. package/dist/usecase/content/ContentPublishEffects.js +21 -0
  258. package/dist/usecase/content/ContentPublishEffects.js.map +1 -0
  259. package/dist/usecase/content/CreateDraftUseCase.d.ts +22 -0
  260. package/dist/usecase/content/CreateDraftUseCase.d.ts.map +1 -0
  261. package/dist/usecase/content/CreateDraftUseCase.js +61 -0
  262. package/dist/usecase/content/CreateDraftUseCase.js.map +1 -0
  263. package/dist/usecase/content/DeleteEntryUseCase.d.ts +20 -0
  264. package/dist/usecase/content/DeleteEntryUseCase.d.ts.map +1 -0
  265. package/dist/usecase/content/DeleteEntryUseCase.js +34 -0
  266. package/dist/usecase/content/DeleteEntryUseCase.js.map +1 -0
  267. package/dist/usecase/content/GetEntryUseCase.d.ts +13 -0
  268. package/dist/usecase/content/GetEntryUseCase.d.ts.map +1 -0
  269. package/dist/usecase/content/GetEntryUseCase.js +24 -0
  270. package/dist/usecase/content/GetEntryUseCase.js.map +1 -0
  271. package/dist/usecase/content/ListEntriesUseCase.d.ts +39 -0
  272. package/dist/usecase/content/ListEntriesUseCase.d.ts.map +1 -0
  273. package/dist/usecase/content/ListEntriesUseCase.js +58 -0
  274. package/dist/usecase/content/ListEntriesUseCase.js.map +1 -0
  275. package/dist/usecase/content/RequestPublishUseCase.d.ts +30 -0
  276. package/dist/usecase/content/RequestPublishUseCase.d.ts.map +1 -0
  277. package/dist/usecase/content/RequestPublishUseCase.js +111 -0
  278. package/dist/usecase/content/RequestPublishUseCase.js.map +1 -0
  279. package/dist/usecase/content/UnpublishUseCase.d.ts +19 -0
  280. package/dist/usecase/content/UnpublishUseCase.d.ts.map +1 -0
  281. package/dist/usecase/content/UnpublishUseCase.js +46 -0
  282. package/dist/usecase/content/UnpublishUseCase.js.map +1 -0
  283. package/dist/usecase/content/UpdateDraftUseCase.d.ts +20 -0
  284. package/dist/usecase/content/UpdateDraftUseCase.d.ts.map +1 -0
  285. package/dist/usecase/content/UpdateDraftUseCase.js +86 -0
  286. package/dist/usecase/content/UpdateDraftUseCase.js.map +1 -0
  287. package/dist/usecase/content/diagnostics.d.ts +26 -0
  288. package/dist/usecase/content/diagnostics.d.ts.map +1 -0
  289. package/dist/usecase/content/diagnostics.js +100 -0
  290. package/dist/usecase/content/diagnostics.js.map +1 -0
  291. package/dist/usecase/content/index.d.ts +15 -0
  292. package/dist/usecase/content/index.d.ts.map +1 -0
  293. package/dist/usecase/content/index.js +15 -0
  294. package/dist/usecase/content/index.js.map +1 -0
  295. package/dist/usecase/dto/content/index.d.ts +73 -0
  296. package/dist/usecase/dto/content/index.d.ts.map +1 -0
  297. package/dist/usecase/dto/content/index.js +2 -0
  298. package/dist/usecase/dto/content/index.js.map +1 -0
  299. package/dist/usecase/dto/index.d.ts +13 -0
  300. package/dist/usecase/dto/index.d.ts.map +1 -0
  301. package/dist/usecase/dto/index.js +13 -0
  302. package/dist/usecase/dto/index.js.map +1 -0
  303. package/dist/usecase/dto/lifecycle/index.d.ts +15 -0
  304. package/dist/usecase/dto/lifecycle/index.d.ts.map +1 -0
  305. package/dist/usecase/dto/lifecycle/index.js +2 -0
  306. package/dist/usecase/dto/lifecycle/index.js.map +1 -0
  307. package/dist/usecase/dto/media/index.d.ts +32 -0
  308. package/dist/usecase/dto/media/index.d.ts.map +1 -0
  309. package/dist/usecase/dto/media/index.js +8 -0
  310. package/dist/usecase/dto/media/index.js.map +1 -0
  311. package/dist/usecase/dto/procedure/index.d.ts +37 -0
  312. package/dist/usecase/dto/procedure/index.d.ts.map +1 -0
  313. package/dist/usecase/dto/procedure/index.js +2 -0
  314. package/dist/usecase/dto/procedure/index.js.map +1 -0
  315. package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.d.ts +14 -0
  316. package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.d.ts.map +1 -0
  317. package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.js +2 -0
  318. package/dist/usecase/dto/render/ComposeEntrySeoMetaRequest.js.map +1 -0
  319. package/dist/usecase/dto/render/ComposeLlmsTxtRequest.d.ts +8 -0
  320. package/dist/usecase/dto/render/ComposeLlmsTxtRequest.d.ts.map +1 -0
  321. package/dist/usecase/dto/render/ComposeLlmsTxtRequest.js +2 -0
  322. package/dist/usecase/dto/render/ComposeLlmsTxtRequest.js.map +1 -0
  323. package/dist/usecase/dto/render/ComposeSitemapRequest.d.ts +11 -0
  324. package/dist/usecase/dto/render/ComposeSitemapRequest.d.ts.map +1 -0
  325. package/dist/usecase/dto/render/ComposeSitemapRequest.js +2 -0
  326. package/dist/usecase/dto/render/ComposeSitemapRequest.js.map +1 -0
  327. package/dist/usecase/dto/render/PreviewEntryRequest.d.ts +27 -0
  328. package/dist/usecase/dto/render/PreviewEntryRequest.d.ts.map +1 -0
  329. package/dist/usecase/dto/render/PreviewEntryRequest.js +2 -0
  330. package/dist/usecase/dto/render/PreviewEntryRequest.js.map +1 -0
  331. package/dist/usecase/dto/render/RenderEntryLiveRequest.d.ts +17 -0
  332. package/dist/usecase/dto/render/RenderEntryLiveRequest.d.ts.map +1 -0
  333. package/dist/usecase/dto/render/RenderEntryLiveRequest.js +2 -0
  334. package/dist/usecase/dto/render/RenderEntryLiveRequest.js.map +1 -0
  335. package/dist/usecase/dto/render/RenderListLiveRequest.d.ts +11 -0
  336. package/dist/usecase/dto/render/RenderListLiveRequest.d.ts.map +1 -0
  337. package/dist/usecase/dto/render/RenderListLiveRequest.js +2 -0
  338. package/dist/usecase/dto/render/RenderListLiveRequest.js.map +1 -0
  339. package/dist/usecase/dto/render/index.d.ts +7 -0
  340. package/dist/usecase/dto/render/index.d.ts.map +1 -0
  341. package/dist/usecase/dto/render/index.js +7 -0
  342. package/dist/usecase/dto/render/index.js.map +1 -0
  343. package/dist/usecase/dto/view/ExecuteViewRequest.d.ts +16 -0
  344. package/dist/usecase/dto/view/ExecuteViewRequest.d.ts.map +1 -0
  345. package/dist/usecase/dto/view/ExecuteViewRequest.js +2 -0
  346. package/dist/usecase/dto/view/ExecuteViewRequest.js.map +1 -0
  347. package/dist/usecase/dto/view/index.d.ts +2 -0
  348. package/dist/usecase/dto/view/index.d.ts.map +1 -0
  349. package/dist/usecase/dto/view/index.js +2 -0
  350. package/dist/usecase/dto/view/index.js.map +1 -0
  351. package/dist/usecase/index.d.ts +16 -0
  352. package/dist/usecase/index.d.ts.map +1 -0
  353. package/dist/usecase/index.js +16 -0
  354. package/dist/usecase/index.js.map +1 -0
  355. package/dist/usecase/lifecycle/RunDeferredHookUseCase.d.ts +26 -0
  356. package/dist/usecase/lifecycle/RunDeferredHookUseCase.d.ts.map +1 -0
  357. package/dist/usecase/lifecycle/RunDeferredHookUseCase.js +44 -0
  358. package/dist/usecase/lifecycle/RunDeferredHookUseCase.js.map +1 -0
  359. package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.d.ts +38 -0
  360. package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.d.ts.map +1 -0
  361. package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.js +67 -0
  362. package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.js.map +1 -0
  363. package/dist/usecase/lifecycle/index.d.ts +3 -0
  364. package/dist/usecase/lifecycle/index.d.ts.map +1 -0
  365. package/dist/usecase/lifecycle/index.js +3 -0
  366. package/dist/usecase/lifecycle/index.js.map +1 -0
  367. package/dist/usecase/media/CommitMediaUploadUseCase.d.ts +15 -0
  368. package/dist/usecase/media/CommitMediaUploadUseCase.d.ts.map +1 -0
  369. package/dist/usecase/media/CommitMediaUploadUseCase.js +43 -0
  370. package/dist/usecase/media/CommitMediaUploadUseCase.js.map +1 -0
  371. package/dist/usecase/media/CreateMediaUploadUseCase.d.ts +18 -0
  372. package/dist/usecase/media/CreateMediaUploadUseCase.d.ts.map +1 -0
  373. package/dist/usecase/media/CreateMediaUploadUseCase.js +71 -0
  374. package/dist/usecase/media/CreateMediaUploadUseCase.js.map +1 -0
  375. package/dist/usecase/media/PendingUploadRecord.d.ts +17 -0
  376. package/dist/usecase/media/PendingUploadRecord.d.ts.map +1 -0
  377. package/dist/usecase/media/PendingUploadRecord.js +2 -0
  378. package/dist/usecase/media/PendingUploadRecord.js.map +1 -0
  379. package/dist/usecase/media/diagnostics.d.ts +15 -0
  380. package/dist/usecase/media/diagnostics.d.ts.map +1 -0
  381. package/dist/usecase/media/diagnostics.js +88 -0
  382. package/dist/usecase/media/diagnostics.js.map +1 -0
  383. package/dist/usecase/media/index.d.ts +4 -0
  384. package/dist/usecase/media/index.d.ts.map +1 -0
  385. package/dist/usecase/media/index.js +4 -0
  386. package/dist/usecase/media/index.js.map +1 -0
  387. package/dist/usecase/media/mediaAllowlist.d.ts +30 -0
  388. package/dist/usecase/media/mediaAllowlist.d.ts.map +1 -0
  389. package/dist/usecase/media/mediaAllowlist.js +53 -0
  390. package/dist/usecase/media/mediaAllowlist.js.map +1 -0
  391. package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts +43 -0
  392. package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts.map +1 -0
  393. package/dist/usecase/procedure/InvokeBuiltinUseCase.js +202 -0
  394. package/dist/usecase/procedure/InvokeBuiltinUseCase.js.map +1 -0
  395. package/dist/usecase/procedure/InvokeProcedureUseCase.d.ts +50 -0
  396. package/dist/usecase/procedure/InvokeProcedureUseCase.d.ts.map +1 -0
  397. package/dist/usecase/procedure/InvokeProcedureUseCase.js +191 -0
  398. package/dist/usecase/procedure/InvokeProcedureUseCase.js.map +1 -0
  399. package/dist/usecase/procedure/index.d.ts +3 -0
  400. package/dist/usecase/procedure/index.d.ts.map +1 -0
  401. package/dist/usecase/procedure/index.js +3 -0
  402. package/dist/usecase/procedure/index.js.map +1 -0
  403. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts +25 -0
  404. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts.map +1 -0
  405. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js +55 -0
  406. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js.map +1 -0
  407. package/dist/usecase/render/ComposeLlmsTxtUseCase.d.ts +19 -0
  408. package/dist/usecase/render/ComposeLlmsTxtUseCase.d.ts.map +1 -0
  409. package/dist/usecase/render/ComposeLlmsTxtUseCase.js +40 -0
  410. package/dist/usecase/render/ComposeLlmsTxtUseCase.js.map +1 -0
  411. package/dist/usecase/render/ComposeSitemapUseCase.d.ts +15 -0
  412. package/dist/usecase/render/ComposeSitemapUseCase.d.ts.map +1 -0
  413. package/dist/usecase/render/ComposeSitemapUseCase.js +29 -0
  414. package/dist/usecase/render/ComposeSitemapUseCase.js.map +1 -0
  415. package/dist/usecase/render/PreviewEntryUseCase.d.ts +26 -0
  416. package/dist/usecase/render/PreviewEntryUseCase.d.ts.map +1 -0
  417. package/dist/usecase/render/PreviewEntryUseCase.js +69 -0
  418. package/dist/usecase/render/PreviewEntryUseCase.js.map +1 -0
  419. package/dist/usecase/render/RenderEntryLiveUseCase.d.ts +35 -0
  420. package/dist/usecase/render/RenderEntryLiveUseCase.d.ts.map +1 -0
  421. package/dist/usecase/render/RenderEntryLiveUseCase.js +59 -0
  422. package/dist/usecase/render/RenderEntryLiveUseCase.js.map +1 -0
  423. package/dist/usecase/render/RenderListLiveUseCase.d.ts +23 -0
  424. package/dist/usecase/render/RenderListLiveUseCase.d.ts.map +1 -0
  425. package/dist/usecase/render/RenderListLiveUseCase.js +41 -0
  426. package/dist/usecase/render/RenderListLiveUseCase.js.map +1 -0
  427. package/dist/usecase/render/index.d.ts +7 -0
  428. package/dist/usecase/render/index.d.ts.map +1 -0
  429. package/dist/usecase/render/index.js +10 -0
  430. package/dist/usecase/render/index.js.map +1 -0
  431. package/dist/usecase/view/ExecuteViewUseCase.d.ts +31 -0
  432. package/dist/usecase/view/ExecuteViewUseCase.d.ts.map +1 -0
  433. package/dist/usecase/view/ExecuteViewUseCase.js +78 -0
  434. package/dist/usecase/view/ExecuteViewUseCase.js.map +1 -0
  435. package/dist/usecase/view/index.d.ts +2 -0
  436. package/dist/usecase/view/index.d.ts.map +1 -0
  437. package/dist/usecase/view/index.js +2 -0
  438. package/dist/usecase/view/index.js.map +1 -0
  439. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PreviewEntryRequest.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RenderEntryLiveRequest.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RenderListLiveRequest.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ExecuteViewRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecuteViewRequest.js","sourceRoot":"","sources":["../../../../src/usecase/dto/view/ExecuteViewRequest.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from "./ExecuteViewRequest.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export * from "./ExecuteViewRequest.js";
2
+ //# sourceMappingURL=index.js.map
@@ -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":"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"}
@@ -0,0 +1,3 @@
1
+ export { RunLifecycleHooksUseCase, type InvokeProcedureFn, } from "./RunLifecycleHooksUseCase.js";
2
+ export { RunDeferredHookUseCase } from "./RunDeferredHookUseCase.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export { RunLifecycleHooksUseCase, } from "./RunLifecycleHooksUseCase.js";
2
+ export { RunDeferredHookUseCase } from "./RunDeferredHookUseCase.js";
3
+ //# sourceMappingURL=index.js.map
@@ -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":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAStD,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,EACtB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAG7B,MAAM,OAAO,wBAAwB;IAEhB;IACA;IACA;IACA;IACA;IALnB,YACmB,OAAqB,EACrB,EAAW,EACX,KAAY,EACZ,UAAgC,EAChC,OAAmE;QAClF,QAAQ,EAAE,KAAK;KAChB;QANgB,YAAO,GAAP,OAAO,CAAc;QACrB,OAAE,GAAF,EAAE,CAAS;QACX,UAAK,GAAL,KAAK,CAAO;QACZ,eAAU,GAAV,UAAU,CAAsB;QAChC,SAAI,GAAJ,IAAI,CAEpB;IACA,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAAiC;QAC7C,MAAM,MAAM,GAAG,2BAA2B,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,iBAAiB,CAAC;QAEzD,mEAAmE;QACnE,oEAAoE;QACpE,oEAAoE;QACpE,gEAAgE;QAChE,8DAA8D;QAC9D,gDAAgD;QAChD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAC3D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACrF,MAAM,IAAI,eAAe,CACvB,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAClE,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/D,MAAM,IAAI,eAAe,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,eAAe,CAAC,2BAA2B,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,2DAA2D;QAC3D,iDAAiD;QACjD,IAAI,OAAO,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,eAAe,CACvB,2BAA2B,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAChE,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,GAAG,GAAG,sBAAsB,GAAG,IAAI,CAAC;QAEtD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YACjD,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ;YACR,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,GAAG;YACH,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,MAAM,GAAwB;YAClC,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,gBAAgB,EAAE,OAAO,CAAC,QAAQ;YAClC,YAAY,EAAE,OAAO,CAAC,QAAQ;YAC9B,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CACf,GAAG,wBAAwB,GAAG,UAAU,CAAC,QAAQ,EAAE,EACnD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EACtB,EAAE,aAAa,EAAE,6BAA6B,EAAE,CACjD,CAAC;QAEF,OAAO;YACL,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,eAAe,EAAE,UAAU,CAAC,eAAe;YAC3C,SAAS,EAAE,UAAU,CAAC,SAAS;SAChC,CAAC;IACJ,CAAC;CACF"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PendingUploadRecord.js.map
@@ -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