@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":"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"}