@aotter/mantle-runtime 0.0.11-alpha.46 → 0.0.11-alpha.48

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 (172) hide show
  1. package/dist/domain/model/HandlerContext.d.ts +12 -0
  2. package/dist/domain/model/HandlerContext.d.ts.map +1 -1
  3. package/dist/domain/model/SeoMeta.d.ts +0 -2
  4. package/dist/domain/model/SeoMeta.d.ts.map +1 -1
  5. package/dist/domain/port/DatabaseDriver.d.ts +0 -1
  6. package/dist/domain/port/DatabaseDriver.d.ts.map +1 -1
  7. package/dist/domain/port/DeferredHookDispatcher.d.ts +4 -1
  8. package/dist/domain/port/DeferredHookDispatcher.d.ts.map +1 -1
  9. package/dist/domain/port/DeferredHookDispatcher.js +2 -1
  10. package/dist/domain/port/DeferredHookDispatcher.js.map +1 -1
  11. package/dist/domain/port/EntryRepository.d.ts +0 -8
  12. package/dist/domain/port/EntryRepository.d.ts.map +1 -1
  13. package/dist/domain/port/PublishOrchestrator.d.ts +0 -1
  14. package/dist/domain/port/PublishOrchestrator.d.ts.map +1 -1
  15. package/dist/domain/port/index.d.ts +1 -2
  16. package/dist/domain/port/index.d.ts.map +1 -1
  17. package/dist/domain/port/index.js.map +1 -1
  18. package/dist/domain/service/AuthPredicateEvaluator.d.ts +4 -4
  19. package/dist/domain/service/AuthPredicateEvaluator.d.ts.map +1 -1
  20. package/dist/domain/service/AuthPredicateEvaluator.js +13 -2
  21. package/dist/domain/service/AuthPredicateEvaluator.js.map +1 -1
  22. package/dist/domain/service/HtmlEscaping.d.ts +2 -0
  23. package/dist/domain/service/HtmlEscaping.d.ts.map +1 -0
  24. package/dist/domain/service/HtmlEscaping.js +9 -0
  25. package/dist/domain/service/HtmlEscaping.js.map +1 -0
  26. package/dist/domain/service/PreviewBanner.js +1 -8
  27. package/dist/domain/service/PreviewBanner.js.map +1 -1
  28. package/dist/domain/service/SeoMetaComposer.d.ts.map +1 -1
  29. package/dist/domain/service/SeoMetaComposer.js +1 -11
  30. package/dist/domain/service/SeoMetaComposer.js.map +1 -1
  31. package/dist/domain/service/index.d.ts +0 -1
  32. package/dist/domain/service/index.d.ts.map +1 -1
  33. package/dist/domain/service/index.js +0 -1
  34. package/dist/domain/service/index.js.map +1 -1
  35. package/dist/infrastructure/index.d.ts +0 -1
  36. package/dist/infrastructure/index.d.ts.map +1 -1
  37. package/dist/infrastructure/index.js +0 -1
  38. package/dist/infrastructure/index.js.map +1 -1
  39. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts +6 -0
  40. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts.map +1 -1
  41. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js +33 -29
  42. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js.map +1 -1
  43. package/dist/infrastructure/mcp/McpResponses.d.ts +0 -10
  44. package/dist/infrastructure/mcp/McpResponses.d.ts.map +1 -1
  45. package/dist/infrastructure/mcp/McpResponses.js +0 -29
  46. package/dist/infrastructure/mcp/McpResponses.js.map +1 -1
  47. package/dist/infrastructure/mcp/McpToolCatalog.d.ts +0 -2
  48. package/dist/infrastructure/mcp/McpToolCatalog.d.ts.map +1 -1
  49. package/dist/infrastructure/mcp/McpToolCatalog.js +23 -9
  50. package/dist/infrastructure/mcp/McpToolCatalog.js.map +1 -1
  51. package/dist/infrastructure/mcp/index.d.ts +2 -2
  52. package/dist/infrastructure/mcp/index.d.ts.map +1 -1
  53. package/dist/infrastructure/mcp/index.js +2 -2
  54. package/dist/infrastructure/mcp/index.js.map +1 -1
  55. package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts +1 -2
  56. package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts.map +1 -1
  57. package/dist/infrastructure/persistence/DatabaseEntryRepository.js +1 -37
  58. package/dist/infrastructure/persistence/DatabaseEntryRepository.js.map +1 -1
  59. package/dist/infrastructure/persistence/DatabaseMediaAssetRepository.d.ts.map +1 -1
  60. package/dist/infrastructure/persistence/DatabaseMediaAssetRepository.js +1 -22
  61. package/dist/infrastructure/persistence/DatabaseMediaAssetRepository.js.map +1 -1
  62. package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.d.ts +3 -6
  63. package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.d.ts.map +1 -1
  64. package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.js +0 -21
  65. package/dist/infrastructure/persistence/LifecycleHookingEntryRepository.js.map +1 -1
  66. package/dist/infrastructure/persistence/Pagination.d.ts +4 -0
  67. package/dist/infrastructure/persistence/Pagination.d.ts.map +1 -0
  68. package/dist/infrastructure/persistence/Pagination.js +15 -0
  69. package/dist/infrastructure/persistence/Pagination.js.map +1 -0
  70. package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts +2 -2
  71. package/dist/infrastructure/render/HtmlPublishOrchestrator.d.ts.map +1 -1
  72. package/dist/infrastructure/render/HtmlPublishOrchestrator.js +19 -28
  73. package/dist/infrastructure/render/HtmlPublishOrchestrator.js.map +1 -1
  74. package/dist/runtime.d.ts.map +1 -1
  75. package/dist/runtime.js +24 -5
  76. package/dist/runtime.js.map +1 -1
  77. package/dist/usecase/boot/ValidateBootUseCase.d.ts.map +1 -1
  78. package/dist/usecase/boot/ValidateBootUseCase.js +53 -0
  79. package/dist/usecase/boot/ValidateBootUseCase.js.map +1 -1
  80. package/dist/usecase/content/ArchiveUseCase.d.ts.map +1 -1
  81. package/dist/usecase/content/ArchiveUseCase.js +4 -6
  82. package/dist/usecase/content/ArchiveUseCase.js.map +1 -1
  83. package/dist/usecase/content/AuthoringContext.d.ts +3 -0
  84. package/dist/usecase/content/AuthoringContext.d.ts.map +1 -0
  85. package/dist/usecase/content/AuthoringContext.js +8 -0
  86. package/dist/usecase/content/AuthoringContext.js.map +1 -0
  87. package/dist/usecase/content/CreateDraftUseCase.d.ts.map +1 -1
  88. package/dist/usecase/content/CreateDraftUseCase.js +1 -9
  89. package/dist/usecase/content/CreateDraftUseCase.js.map +1 -1
  90. package/dist/usecase/content/ListEntriesUseCase.d.ts +4 -3
  91. package/dist/usecase/content/ListEntriesUseCase.d.ts.map +1 -1
  92. package/dist/usecase/content/ListEntriesUseCase.js +1 -4
  93. package/dist/usecase/content/ListEntriesUseCase.js.map +1 -1
  94. package/dist/usecase/content/UpdateDraftUseCase.d.ts.map +1 -1
  95. package/dist/usecase/content/UpdateDraftUseCase.js +1 -9
  96. package/dist/usecase/content/UpdateDraftUseCase.js.map +1 -1
  97. package/dist/usecase/content/diagnostics.d.ts +0 -13
  98. package/dist/usecase/content/diagnostics.d.ts.map +1 -1
  99. package/dist/usecase/content/diagnostics.js +0 -31
  100. package/dist/usecase/content/diagnostics.js.map +1 -1
  101. package/dist/usecase/dto/content/index.d.ts +1 -11
  102. package/dist/usecase/dto/content/index.d.ts.map +1 -1
  103. package/dist/usecase/dto/procedure/index.d.ts +1 -3
  104. package/dist/usecase/dto/procedure/index.d.ts.map +1 -1
  105. package/dist/usecase/dto/render/PreviewEntryRequest.d.ts +2 -16
  106. package/dist/usecase/dto/render/PreviewEntryRequest.d.ts.map +1 -1
  107. package/dist/usecase/dto/render/RenderEntryLiveRequest.d.ts +1 -4
  108. package/dist/usecase/dto/render/RenderEntryLiveRequest.d.ts.map +1 -1
  109. package/dist/usecase/dto/view/ExecuteViewRequest.d.ts +4 -6
  110. package/dist/usecase/dto/view/ExecuteViewRequest.d.ts.map +1 -1
  111. package/dist/usecase/lifecycle/RunDeferredHookUseCase.d.ts +2 -2
  112. package/dist/usecase/lifecycle/RunDeferredHookUseCase.d.ts.map +1 -1
  113. package/dist/usecase/lifecycle/RunDeferredHookUseCase.js +1 -0
  114. package/dist/usecase/lifecycle/RunDeferredHookUseCase.js.map +1 -1
  115. package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.d.ts +15 -5
  116. package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.d.ts.map +1 -1
  117. package/dist/usecase/lifecycle/RunLifecycleHooksUseCase.js.map +1 -1
  118. package/dist/usecase/lifecycle/index.d.ts +1 -1
  119. package/dist/usecase/lifecycle/index.d.ts.map +1 -1
  120. package/dist/usecase/lifecycle/index.js.map +1 -1
  121. package/dist/usecase/media/index.d.ts +1 -1
  122. package/dist/usecase/media/index.d.ts.map +1 -1
  123. package/dist/usecase/media/index.js +1 -1
  124. package/dist/usecase/media/index.js.map +1 -1
  125. package/dist/usecase/media/mediaAllowlist.d.ts +0 -5
  126. package/dist/usecase/media/mediaAllowlist.d.ts.map +1 -1
  127. package/dist/usecase/media/mediaAllowlist.js +0 -5
  128. package/dist/usecase/media/mediaAllowlist.js.map +1 -1
  129. package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts.map +1 -1
  130. package/dist/usecase/procedure/InvokeBuiltinUseCase.js +2 -1
  131. package/dist/usecase/procedure/InvokeBuiltinUseCase.js.map +1 -1
  132. package/dist/usecase/procedure/InvokeProcedureUseCase.d.ts +9 -8
  133. package/dist/usecase/procedure/InvokeProcedureUseCase.d.ts.map +1 -1
  134. package/dist/usecase/procedure/InvokeProcedureUseCase.js +82 -13
  135. package/dist/usecase/procedure/InvokeProcedureUseCase.js.map +1 -1
  136. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts +3 -0
  137. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.d.ts.map +1 -1
  138. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js +5 -0
  139. package/dist/usecase/render/ComposeEntrySeoMetaUseCase.js.map +1 -1
  140. package/dist/usecase/render/PreviewEntryUseCase.d.ts +3 -3
  141. package/dist/usecase/render/PreviewEntryUseCase.d.ts.map +1 -1
  142. package/dist/usecase/render/PreviewEntryUseCase.js +4 -5
  143. package/dist/usecase/render/PreviewEntryUseCase.js.map +1 -1
  144. package/dist/usecase/render/RenderEntryLiveUseCase.d.ts +2 -2
  145. package/dist/usecase/render/RenderEntryLiveUseCase.d.ts.map +1 -1
  146. package/dist/usecase/render/RenderEntryLiveUseCase.js +2 -2
  147. package/dist/usecase/render/RenderEntryLiveUseCase.js.map +1 -1
  148. package/dist/usecase/render/index.d.ts +1 -1
  149. package/dist/usecase/render/index.d.ts.map +1 -1
  150. package/dist/usecase/render/index.js +1 -4
  151. package/dist/usecase/render/index.js.map +1 -1
  152. package/dist/usecase/view/ExecuteViewUseCase.d.ts +14 -4
  153. package/dist/usecase/view/ExecuteViewUseCase.d.ts.map +1 -1
  154. package/dist/usecase/view/ExecuteViewUseCase.js +73 -3
  155. package/dist/usecase/view/ExecuteViewUseCase.js.map +1 -1
  156. package/package.json +2 -2
  157. package/dist/domain/port/LifecycleHookRunner.d.ts +0 -41
  158. package/dist/domain/port/LifecycleHookRunner.d.ts.map +0 -1
  159. package/dist/domain/port/LifecycleHookRunner.js +0 -2
  160. package/dist/domain/port/LifecycleHookRunner.js.map +0 -1
  161. package/dist/domain/service/EntrySeoSupport.d.ts +0 -27
  162. package/dist/domain/service/EntrySeoSupport.d.ts.map +0 -1
  163. package/dist/domain/service/EntrySeoSupport.js +0 -13
  164. package/dist/domain/service/EntrySeoSupport.js.map +0 -1
  165. package/dist/infrastructure/http/DiagnosticResponse.d.ts +0 -12
  166. package/dist/infrastructure/http/DiagnosticResponse.d.ts.map +0 -1
  167. package/dist/infrastructure/http/DiagnosticResponse.js +0 -14
  168. package/dist/infrastructure/http/DiagnosticResponse.js.map +0 -1
  169. package/dist/infrastructure/http/index.d.ts +0 -2
  170. package/dist/infrastructure/http/index.d.ts.map +0 -1
  171. package/dist/infrastructure/http/index.js +0 -2
  172. package/dist/infrastructure/http/index.js.map +0 -1
@@ -8,17 +8,19 @@ import { evaluateAuthAll } from "../../domain/service/AuthPredicateEvaluator.js"
8
8
  *
9
9
  * Order of operations:
10
10
  * 1. Evaluate `requires.auth.all` predicates against `ctx`. Deny ⇒
11
- * `AUTH_DENIED`.
11
+ * `UNAUTHENTICATED` or `AUTH_DENIED`.
12
12
  * 2. Validate `input` against the Procedure's `input` JSON Schema.
13
13
  * Fail ⇒ `INPUT_VALIDATION_FAILED` (first zod issue).
14
- * 3. Dispatch by `handler.kind`:
14
+ * 3. Invoke an optional guard Procedure with validated input and the
15
+ * same caller context. Any failure denies the target.
16
+ * 4. Dispatch by `handler.kind`:
15
17
  * - `ref`: resolve in registry, call (`InvokeFailure` → unwrap;
16
18
  * other throws → `INTERNAL_ERROR`).
17
19
  * - `builtin`: delegate to `InvokeBuiltinUseCase` (project +
18
20
  * stamp + chokepoint write per POC ADR-0014). When no builtin
19
21
  * collaborator was injected (test paths, ref-only runtimes) the
20
22
  * use case returns `HANDLER_BUILTIN_NOT_IN_V010`.
21
- * 4. Validate the result against the `output` schema. Fail ⇒
23
+ * 5. Validate the result against the `output` schema. Fail ⇒
22
24
  * `OUTPUT_VALIDATION_FAILED` (handler / builtin bug).
23
25
  */
24
26
  /**
@@ -39,6 +41,7 @@ export class InvokeFailure extends Error {
39
41
  export class InvokeProcedureUseCase {
40
42
  registry;
41
43
  builtin;
44
+ proceduresByName;
42
45
  // Per-Procedure compiled zod schemas. zod composition is pure
43
46
  // object-tree assembly (no `new Function`) — Workers-CSP-safe.
44
47
  // Cached per use-case instance because `jsonSchemaToZod` walks the
@@ -47,13 +50,17 @@ export class InvokeProcedureUseCase {
47
50
  // because the runtime owns the use case instance.
48
51
  inputCache = new Map();
49
52
  outputCache = new Map();
50
- constructor(registry, builtin) {
53
+ constructor(registry, builtin, proceduresByName = new Map()) {
51
54
  this.registry = registry;
52
55
  this.builtin = builtin;
56
+ this.proceduresByName = proceduresByName;
53
57
  }
54
58
  async execute(request) {
59
+ return this.executeInternal(request, true);
60
+ }
61
+ async executeInternal(request, allowGuard) {
55
62
  const { procedure, input, ctx } = request;
56
- const phase = request.phase ?? "runtime";
63
+ const phase = "runtime";
57
64
  const procPath = request.pathPrefix ?? `manifest:Procedure/${procedure.metadata.name}`;
58
65
  // 1. Auth.
59
66
  const denial = evaluateAuthAll(procedure.spec.requires, ctx, procPath, phase);
@@ -76,7 +83,75 @@ export class InvokeProcedureUseCase {
76
83
  }),
77
84
  };
78
85
  }
79
- // 3. Dispatch by handler kind.
86
+ // 3. Dynamic guard. It receives only target input that passed the
87
+ // target schema, shares the same caller context, and runs through
88
+ // this exact auth/input/handler/output pipeline. Boot rejects guard
89
+ // chains; allowGuard is defense-in-depth for boot-bypass paths.
90
+ const guardName = procedure.spec.requires?.guard?.procedure;
91
+ if (guardName) {
92
+ if (!allowGuard) {
93
+ return {
94
+ ok: false,
95
+ diagnostic: makeDiagnostic({
96
+ code: "GUARD_CHAIN_NOT_ALLOWED",
97
+ phase,
98
+ severity: "error",
99
+ path: `${procPath}#/requires/guard/procedure`,
100
+ value: guardName,
101
+ expected: "an unguarded Procedure",
102
+ }),
103
+ };
104
+ }
105
+ const guard = this.proceduresByName.get(guardName);
106
+ if (!guard) {
107
+ return {
108
+ ok: false,
109
+ diagnostic: makeDiagnostic({
110
+ code: "GUARD_PROCEDURE_UNKNOWN",
111
+ phase,
112
+ severity: "error",
113
+ path: `${procPath}#/requires/guard/procedure`,
114
+ value: guardName,
115
+ expected: "name of a declared Procedure",
116
+ }),
117
+ };
118
+ }
119
+ if (guard.metadata.name === procedure.metadata.name) {
120
+ return {
121
+ ok: false,
122
+ diagnostic: makeDiagnostic({
123
+ code: "GUARD_SELF_REFERENCE",
124
+ phase,
125
+ severity: "error",
126
+ path: `${procPath}#/requires/guard/procedure`,
127
+ value: guardName,
128
+ expected: "a different, unguarded Procedure",
129
+ }),
130
+ };
131
+ }
132
+ if (guard.spec.handler.kind !== "ref") {
133
+ return {
134
+ ok: false,
135
+ diagnostic: makeDiagnostic({
136
+ code: "GUARD_PROCEDURE_BUILTIN",
137
+ phase,
138
+ severity: "error",
139
+ path: `${procPath}#/requires/guard/procedure`,
140
+ value: guardName,
141
+ expected: "a Procedure with handler.kind: ref",
142
+ }),
143
+ };
144
+ }
145
+ const guardResult = await this.executeInternal({
146
+ procedure: guard,
147
+ input: inputResult.data,
148
+ ctx,
149
+ pathPrefix: `${procPath}#/requires/guard/${guardName}`,
150
+ }, false);
151
+ if (!guardResult.ok)
152
+ return guardResult;
153
+ }
154
+ // 4. Dispatch by handler kind.
80
155
  const handlerBinding = procedure.spec.handler;
81
156
  const handlerLabel = handlerBinding.kind === "builtin"
82
157
  ? `builtin/${handlerBinding.op}`
@@ -143,7 +218,7 @@ export class InvokeProcedureUseCase {
143
218
  }),
144
219
  };
145
220
  }
146
- // 4. Output validation.
221
+ // 5. Output validation.
147
222
  const outputValidator = this.compileOutput(procedure);
148
223
  const outputResult = outputValidator.safeParse(result);
149
224
  if (!outputResult.success) {
@@ -163,12 +238,6 @@ export class InvokeProcedureUseCase {
163
238
  }
164
239
  return { ok: true, data: result };
165
240
  }
166
- /** Test seam — clear validator caches between tests when manifests
167
- * change between runs. Production paths never call this. */
168
- _clearValidatorCaches() {
169
- this.inputCache.clear();
170
- this.outputCache.clear();
171
- }
172
241
  compileInput(p) {
173
242
  const k = p.metadata.name;
174
243
  let v = this.inputCache.get(k);
@@ -1 +1 @@
1
- {"version":3,"file":"InvokeProcedureUseCase.js","sourceRoot":"","sources":["../../../src/usecase/procedure/InvokeProcedureUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InvokeProcedureUseCase.js","sourceRoot":"","sources":["../../../src/usecase/procedure/InvokeProcedureUseCase.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
+ import type { Entry, SiteConfig } from "@aotter/mantle-spec";
1
2
  import type { DatabaseDriver } from "../../domain/port/DatabaseDriver.js";
2
3
  import { type SeoMeta } from "../../domain/service/SeoMetaComposer.js";
4
+ import type { PublicPathResolver } from "../../domain/service/PublicPathResolver.js";
3
5
  import type { ComposeEntrySeoMetaRequest } from "../dto/render/ComposeEntrySeoMetaRequest.js";
4
6
  /**
5
7
  * Compose the SEO/AEO meta block for an entry. Reads sibling
@@ -22,4 +24,5 @@ export declare class ComposeEntrySeoMetaUseCase {
22
24
  constructor(db: DatabaseDriver);
23
25
  execute(request: ComposeEntrySeoMetaRequest): Promise<SeoMeta>;
24
26
  }
27
+ export declare function composeSeoIfPathed(composer: Pick<ComposeEntrySeoMetaUseCase, "execute">, paths: PublicPathResolver | null, entry: Entry, site: SiteConfig): Promise<SeoMeta | undefined>;
25
28
  //# sourceMappingURL=ComposeEntrySeoMetaUseCase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComposeEntrySeoMetaUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/ComposeEntrySeoMetaUseCase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAEL,KAAK,OAAO,EAEb,MAAM,yCAAyC,CAAC;AAGjD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAE9F;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,0BAA0B;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,cAAc;IAEzC,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,OAAO,CAAC;CAMrE"}
1
+ {"version":3,"file":"ComposeEntrySeoMetaUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/ComposeEntrySeoMetaUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAEL,KAAK,OAAO,EAEb,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAErF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAE9F;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,0BAA0B;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,cAAc;IAEzC,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,OAAO,CAAC;CAMrE;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,IAAI,CAAC,0BAA0B,EAAE,SAAS,CAAC,EACrD,KAAK,EAAE,kBAAkB,GAAG,IAAI,EAChC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAG9B"}
@@ -28,6 +28,11 @@ export class ComposeEntrySeoMetaUseCase {
28
28
  return composeEntrySeoMeta({ entry, site, publicPath, siblings, type });
29
29
  }
30
30
  }
31
+ export async function composeSeoIfPathed(composer, paths, entry, site) {
32
+ if (!paths?.forEntry(entry))
33
+ return undefined;
34
+ return composer.execute({ entry, site, paths });
35
+ }
31
36
  async function readSiblings(db, current, site, paths) {
32
37
  const slug = current.data["slug"];
33
38
  if (typeof slug !== "string" || slug.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"ComposeEntrySeoMetaUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/ComposeEntrySeoMetaUseCase.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mBAAmB,GAGpB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAG9E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,0BAA0B;IACR;IAA7B,YAA6B,EAAkB;QAAlB,OAAE,GAAF,EAAE,CAAgB;IAAG,CAAC;IAEnD,KAAK,CAAC,OAAO,CAAC,OAAmC;QAC/C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACjE,OAAO,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;CACF;AAED,KAAK,UAAU,YAAY,CACzB,EAAkB,EAClB,OAAc,EACd,IAAgB,EAChB,KAAyB;IAEzB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;IACjD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC3B,eAAe,CAAC,EAAE,EAAE;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI;QACJ,MAAM;QACN,MAAM,EAAE,WAAW;KACpB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CACvC,CACF,CAAC;IACF,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"ComposeEntrySeoMetaUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/ComposeEntrySeoMetaUseCase.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mBAAmB,GAGpB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAG9E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,0BAA0B;IACR;IAA7B,YAA6B,EAAkB;QAAlB,OAAE,GAAF,EAAE,CAAgB;IAAG,CAAC;IAEnD,KAAK,CAAC,OAAO,CAAC,OAAmC;QAC/C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACjE,OAAO,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAqD,EACrD,KAAgC,EAChC,KAAY,EACZ,IAAgB;IAEhB,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,EAAkB,EAClB,OAAc,EACd,IAAgB,EAChB,KAAyB;IAEzB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;IACjD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC3B,eAAe,CAAC,EAAE,EAAE;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI;QACJ,MAAM;QACN,MAAM,EAAE,WAAW;KACpB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CACvC,CACF,CAAC;IACF,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -4,9 +4,9 @@ import type { MediaAssetRepository } from "../../domain/port/MediaAssetRepositor
4
4
  import type { TemplateRegistry } from "../../domain/model/TemplateRegistry.js";
5
5
  import type { PublicPathResolver } from "../../domain/service/PublicPathResolver.js";
6
6
  import type { PreviewEntryRequest } from "../dto/render/PreviewEntryRequest.js";
7
- import { type SeoComposer } from "../../domain/service/EntrySeoSupport.js";
7
+ import { type ComposeEntrySeoMetaUseCase } from "./ComposeEntrySeoMetaUseCase.js";
8
8
  /**
9
- * Render an entry with a preview banner. Walks `statusOrder` until a
9
+ * Render an entry with a preview banner. Walks the default status order until a
10
10
  * matching row is found, renders via the registered template, then
11
11
  * injects the banner just inside `<body>`. Returns `null` when no
12
12
  * matching row exists or no template is registered.
@@ -22,7 +22,7 @@ export declare class PreviewEntryUseCase {
22
22
  private readonly composeSeo;
23
23
  private readonly schemas;
24
24
  private readonly mediaAssets;
25
- constructor(db: DatabaseDriver, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: SeoComposer, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetRepository | null);
25
+ constructor(db: DatabaseDriver, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: Pick<ComposeEntrySeoMetaUseCase, "execute">, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetRepository | null);
26
26
  execute(request: PreviewEntryRequest): Promise<string | null>;
27
27
  }
28
28
  //# sourceMappingURL=PreviewEntryUseCase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewEntryUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/PreviewEntryUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAQrF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,yCAAyC,CAAC;AAWjD;;;;;;;;;GASG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBALX,EAAE,EAAE,cAAc,EAClB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,kBAAkB,GAAG,IAAI,EAChC,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,WAAW,GAAE,oBAAoB,GAAG,IAAW;IAG5D,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CA+BpE"}
1
+ {"version":3,"file":"PreviewEntryUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/PreviewEntryUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAQrF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,iCAAiC,CAAC;AAWzC;;;;;;;;;GASG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBALX,EAAE,EAAE,cAAc,EAClB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,kBAAkB,GAAG,IAAI,EAChC,UAAU,EAAE,IAAI,CAAC,0BAA0B,EAAE,SAAS,CAAC,EACvD,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,WAAW,GAAE,oBAAoB,GAAG,IAAW;IAG5D,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CA8BpE"}
@@ -2,7 +2,7 @@ import { readEntryBySlug } from "../../domain/service/io/PublishedEntries.js";
2
2
  import { joinParentIfTranslation } from "../../domain/service/io/JoinedEntryReader.js";
3
3
  import { renderEntryHtml } from "../../domain/service/HtmlRenderer.js";
4
4
  import { defaultPreviewBanner, injectPreviewBanner, } from "../../domain/service/PreviewBanner.js";
5
- import { composeSeoIfPathed, } from "../../domain/service/EntrySeoSupport.js";
5
+ import { composeSeoIfPathed, } from "./ComposeEntrySeoMetaUseCase.js";
6
6
  import { resolveMediaAssetsForEntries } from "../../domain/service/io/MediaAssetReferences.js";
7
7
  /** Default fallback: prefer drafts, fall back to published, then
8
8
  * archived. Authors typically open `?preview=1` to see WIP. */
@@ -12,7 +12,7 @@ const DEFAULT_PREVIEW_STATUS_ORDER = [
12
12
  "archived",
13
13
  ];
14
14
  /**
15
- * Render an entry with a preview banner. Walks `statusOrder` until a
15
+ * Render an entry with a preview banner. Walks the default status order until a
16
16
  * matching row is found, renders via the registered template, then
17
17
  * injects the banner just inside `<body>`. Returns `null` when no
18
18
  * matching row exists or no template is registered.
@@ -37,9 +37,8 @@ export class PreviewEntryUseCase {
37
37
  this.mediaAssets = mediaAssets;
38
38
  }
39
39
  async execute(request) {
40
- const order = request.statusOrder ?? DEFAULT_PREVIEW_STATUS_ORDER;
41
40
  let raw = null;
42
- for (const status of order) {
41
+ for (const status of DEFAULT_PREVIEW_STATUS_ORDER) {
43
42
  raw = await readEntryBySlug(this.db, {
44
43
  collection: request.collection,
45
44
  slug: request.slug,
@@ -67,7 +66,7 @@ export class PreviewEntryUseCase {
67
66
  });
68
67
  if (html === null)
69
68
  return null;
70
- const banner = request.banner ?? defaultPreviewBanner(entry.status, request.slug);
69
+ const banner = defaultPreviewBanner(entry.status, request.slug);
71
70
  return injectPreviewBanner(html, banner);
72
71
  }
73
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewEntryUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/PreviewEntryUseCase.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EACL,kBAAkB,GAEnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAE/F;gEACgE;AAChE,MAAM,4BAA4B,GAAgC;IAChE,OAAO;IACP,WAAW;IACX,UAAU;CACX,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAmB;IAEX;IACA;IACA;IACA;IACA;IACA;IANnB,YACmB,EAAkB,EAClB,SAA2B,EAC3B,KAAgC,EAChC,UAAuB,EACvB,OAA4C,EAC5C,cAA2C,IAAI;QAL/C,OAAE,GAAF,EAAE,CAAgB;QAClB,cAAS,GAAT,SAAS,CAAkB;QAC3B,UAAK,GAAL,KAAK,CAA2B;QAChC,eAAU,GAAV,UAAU,CAAa;QACvB,YAAO,GAAP,OAAO,CAAqC;QAC5C,gBAAW,GAAX,WAAW,CAAoC;IAC/D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAA4B;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,IAAI,4BAA4B,CAAC;QAClE,IAAI,GAAG,GAAiB,IAAI,CAAC;QAC7B,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;YAC3B,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE;gBACnC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM;aACP,CAAC,CAAC;YACH,IAAI,GAAG;gBAAE,MAAM;QACjB,CAAC;QACD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,oEAAoE;QACpE,8DAA8D;QAC9D,+DAA+D;QAC/D,8CAA8C;QAC9C,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACvF,MAAM,WAAW,GAAG,MAAM,4BAA4B,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,KAAK;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW;YACX,GAAG;SACJ,CAAC,CAAC;QACH,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAClF,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF"}
1
+ {"version":3,"file":"PreviewEntryUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/PreviewEntryUseCase.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EACL,kBAAkB,GAEnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAE/F;gEACgE;AAChE,MAAM,4BAA4B,GAAgC;IAChE,OAAO;IACP,WAAW;IACX,UAAU;CACX,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAmB;IAEX;IACA;IACA;IACA;IACA;IACA;IANnB,YACmB,EAAkB,EAClB,SAA2B,EAC3B,KAAgC,EAChC,UAAuD,EACvD,OAA4C,EAC5C,cAA2C,IAAI;QAL/C,OAAE,GAAF,EAAE,CAAgB;QAClB,cAAS,GAAT,SAAS,CAAkB;QAC3B,UAAK,GAAL,KAAK,CAA2B;QAChC,eAAU,GAAV,UAAU,CAA6C;QACvD,YAAO,GAAP,OAAO,CAAqC;QAC5C,gBAAW,GAAX,WAAW,CAAoC;IAC/D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAA4B;QACxC,IAAI,GAAG,GAAiB,IAAI,CAAC;QAC7B,KAAK,MAAM,MAAM,IAAI,4BAA4B,EAAE,CAAC;YAClD,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE;gBACnC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM;aACP,CAAC,CAAC;YACH,IAAI,GAAG;gBAAE,MAAM;QACjB,CAAC;QACD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,oEAAoE;QACpE,8DAA8D;QAC9D,+DAA+D;QAC/D,8CAA8C;QAC9C,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACvF,MAAM,WAAW,GAAG,MAAM,4BAA4B,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,KAAK;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW;YACX,GAAG;SACJ,CAAC,CAAC;QACH,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF"}
@@ -4,7 +4,7 @@ import type { MediaAssetRepository } from "../../domain/port/MediaAssetRepositor
4
4
  import type { TemplateRegistry } from "../../domain/model/TemplateRegistry.js";
5
5
  import type { PublicPathResolver } from "../../domain/service/PublicPathResolver.js";
6
6
  import type { RenderEntryLiveRequest } from "../dto/render/RenderEntryLiveRequest.js";
7
- import { type SeoComposer } from "../../domain/service/EntrySeoSupport.js";
7
+ import { type ComposeEntrySeoMetaUseCase } from "./ComposeEntrySeoMetaUseCase.js";
8
8
  /**
9
9
  * Render a single entry from current DB state. Used by adapter live-
10
10
  * dev routes (`MANTLE_LOCAL_DEV=1`) to bypass the KV cache and pick up
@@ -31,7 +31,7 @@ export declare class RenderEntryLiveUseCase {
31
31
  private readonly composeSeo;
32
32
  private readonly schemas;
33
33
  private readonly mediaAssets;
34
- constructor(db: DatabaseDriver, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: SeoComposer, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetRepository | null);
34
+ constructor(db: DatabaseDriver, templates: TemplateRegistry, paths: PublicPathResolver | null, composeSeo: Pick<ComposeEntrySeoMetaUseCase, "execute">, schemas: ReadonlyMap<string, SchemaManifest>, mediaAssets?: MediaAssetRepository | null);
35
35
  execute(request: RenderEntryLiveRequest): Promise<string | null>;
36
36
  }
37
37
  //# sourceMappingURL=RenderEntryLiveUseCase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RenderEntryLiveUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/RenderEntryLiveUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAIrF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,yCAAyC,CAAC;AAGjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBALX,EAAE,EAAE,cAAc,EAClB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,kBAAkB,GAAG,IAAI,EAChC,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,WAAW,GAAE,oBAAoB,GAAG,IAAW;IAG5D,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAsBvE"}
1
+ {"version":3,"file":"RenderEntryLiveUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/RenderEntryLiveUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAIrF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,iCAAiC,CAAC;AAGzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBALX,EAAE,EAAE,cAAc,EAClB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,kBAAkB,GAAG,IAAI,EAChC,UAAU,EAAE,IAAI,CAAC,0BAA0B,EAAE,SAAS,CAAC,EACvD,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,WAAW,GAAE,oBAAoB,GAAG,IAAW;IAG5D,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAsBvE"}
@@ -1,7 +1,7 @@
1
1
  import { readEntryBySlug } from "../../domain/service/io/PublishedEntries.js";
2
2
  import { joinParentIfTranslation } from "../../domain/service/io/JoinedEntryReader.js";
3
3
  import { renderEntryHtml } from "../../domain/service/HtmlRenderer.js";
4
- import { composeSeoIfPathed, } from "../../domain/service/EntrySeoSupport.js";
4
+ import { composeSeoIfPathed, } from "./ComposeEntrySeoMetaUseCase.js";
5
5
  import { resolveMediaAssetsForEntries } from "../../domain/service/io/MediaAssetReferences.js";
6
6
  /**
7
7
  * Render a single entry from current DB state. Used by adapter live-
@@ -38,7 +38,7 @@ export class RenderEntryLiveUseCase {
38
38
  this.mediaAssets = mediaAssets;
39
39
  }
40
40
  async execute(request) {
41
- const status = request.status ?? "published";
41
+ const status = "published";
42
42
  const raw = await readEntryBySlug(this.db, {
43
43
  collection: request.collection,
44
44
  slug: request.slug,
@@ -1 +1 @@
1
- {"version":3,"file":"RenderEntryLiveUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/RenderEntryLiveUseCase.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EACL,kBAAkB,GAEnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAE/F;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,sBAAsB;IAEd;IACA;IACA;IACA;IACA;IACA;IANnB,YACmB,EAAkB,EAClB,SAA2B,EAC3B,KAAgC,EAChC,UAAuB,EACvB,OAA4C,EAC5C,cAA2C,IAAI;QAL/C,OAAE,GAAF,EAAE,CAAgB;QAClB,cAAS,GAAT,SAAS,CAAkB;QAC3B,UAAK,GAAL,KAAK,CAA2B;QAChC,eAAU,GAAV,UAAU,CAAa;QACvB,YAAO,GAAP,OAAO,CAAqC;QAC5C,gBAAW,GAAX,WAAW,CAAoC;IAC/D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAA+B;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE;YACzC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM;SACP,CAAC,CAAC;QACH,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACtE,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACvF,MAAM,WAAW,GAAG,MAAM,4BAA4B,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAClF,OAAO,eAAe,CAAC;YACrB,KAAK;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW;YACX,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"RenderEntryLiveUseCase.js","sourceRoot":"","sources":["../../../src/usecase/render/RenderEntryLiveUseCase.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EACL,kBAAkB,GAEnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAE/F;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,sBAAsB;IAEd;IACA;IACA;IACA;IACA;IACA;IANnB,YACmB,EAAkB,EAClB,SAA2B,EAC3B,KAAgC,EAChC,UAAuD,EACvD,OAA4C,EAC5C,cAA2C,IAAI;QAL/C,OAAE,GAAF,EAAE,CAAgB;QAClB,cAAS,GAAT,SAAS,CAAkB;QAC3B,UAAK,GAAL,KAAK,CAA2B;QAChC,eAAU,GAAV,UAAU,CAA6C;QACvD,YAAO,GAAP,OAAO,CAAqC;QAC5C,gBAAW,GAAX,WAAW,CAAoC;IAC/D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,OAA+B;QAC3C,MAAM,MAAM,GAAG,WAAW,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE;YACzC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM;SACP,CAAC,CAAC;QACH,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACtE,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACvF,MAAM,WAAW,GAAG,MAAM,4BAA4B,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAClF,OAAO,eAAe,CAAC;YACrB,KAAK;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW;YACX,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -3,5 +3,5 @@ export { ComposeSitemapUseCase, SITEMAP_MAX_URLS_DEFAULT, } from "./ComposeSitem
3
3
  export { RenderEntryLiveUseCase } from "./RenderEntryLiveUseCase.js";
4
4
  export { RenderListLiveUseCase } from "./RenderListLiveUseCase.js";
5
5
  export { PreviewEntryUseCase } from "./PreviewEntryUseCase.js";
6
- export { ComposeEntrySeoMetaUseCase } from "./ComposeEntrySeoMetaUseCase.js";
6
+ export { ComposeEntrySeoMetaUseCase, composeSeoIfPathed, } from "./ComposeEntrySeoMetaUseCase.js";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/usecase/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,iCAAiC,CAAC"}
@@ -3,8 +3,5 @@ export { ComposeSitemapUseCase, SITEMAP_MAX_URLS_DEFAULT, } from "./ComposeSitem
3
3
  export { RenderEntryLiveUseCase } from "./RenderEntryLiveUseCase.js";
4
4
  export { RenderListLiveUseCase } from "./RenderListLiveUseCase.js";
5
5
  export { PreviewEntryUseCase } from "./PreviewEntryUseCase.js";
6
- export { ComposeEntrySeoMetaUseCase } from "./ComposeEntrySeoMetaUseCase.js";
7
- // `composeSeoIfPathed` + `SeoComposer` moved to
8
- // `domain/service/EntrySeoSupport.ts` so `HtmlPublishOrchestrator`
9
- // (infra) can import without crossing the infra→usecase boundary.
6
+ export { ComposeEntrySeoMetaUseCase, composeSeoIfPathed, } from "./ComposeEntrySeoMetaUseCase.js";
10
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/usecase/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,gDAAgD;AAChD,mEAAmE;AACnE,kEAAkE"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/usecase/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,iCAAiC,CAAC"}
@@ -1,11 +1,13 @@
1
1
  import { type Diagnostic } from "@aotter/mantle-spec";
2
2
  import type { DatabaseDriver } from "../../domain/port/DatabaseDriver.js";
3
3
  import type { ExecuteViewRequest } from "../dto/view/ExecuteViewRequest.js";
4
+ import type { InvokeProcedureResponse } from "../dto/procedure/index.js";
5
+ import type { HandlerContext } from "../../domain/model/HandlerContext.js";
4
6
  /**
5
7
  * Compile a View manifest and run it against `DatabaseDriver`. The
6
- * use case trusts a pre-coerced param map; per-request validation
7
- * against `View.spec.params` happens at the adapter (or via
8
- * `coerceViewParams`) before the request reaches here.
8
+ * REST adapters coerce query strings and MCP passes typed JSON; this use
9
+ * case validates the converged param map against `View.spec.params` after
10
+ * static auth and before an optional guard.
9
11
  */
10
12
  export interface ViewQueryResult<R = Record<string, unknown>> {
11
13
  readonly rows: readonly R[];
@@ -23,9 +25,17 @@ export type ExecuteViewResponse<R = Record<string, unknown>> = {
23
25
  readonly ok: false;
24
26
  readonly diagnostic: Diagnostic;
25
27
  };
28
+ export type InvokeViewGuard = (request: {
29
+ readonly procedure: string;
30
+ readonly input: Record<string, unknown>;
31
+ readonly ctx: HandlerContext;
32
+ readonly pathPrefix: string;
33
+ }) => Promise<InvokeProcedureResponse>;
26
34
  export declare class ExecuteViewUseCase {
27
35
  private readonly db;
28
- constructor(db: DatabaseDriver);
36
+ private readonly invokeGuard?;
37
+ private readonly paramsCache;
38
+ constructor(db: DatabaseDriver, invokeGuard?: InvokeViewGuard | undefined);
29
39
  execute<R = Record<string, unknown>>(request: ExecuteViewRequest): Promise<ExecuteViewResponse<R>>;
30
40
  }
31
41
  //# sourceMappingURL=ExecuteViewUseCase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExecuteViewUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/view/ExecuteViewUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5E;;;;;GAKG;AAEH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1D,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;4DAEwD;IACxD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACvD;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAE5D,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,cAAc;IAEzC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAoEnC"}
1
+ {"version":3,"file":"ExecuteViewUseCase.d.ts","sourceRoot":"","sources":["../../../src/usecase/view/ExecuteViewUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E;;;;;GAKG;AAEH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1D,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;4DAEwD;IACxD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACvD;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAE5D,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAEvC,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAJ/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAGvC,EAAE,EAAE,cAAc,EAClB,WAAW,CAAC,EAAE,eAAe,YAAA;IAG1C,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAwInC"}
@@ -1,10 +1,13 @@
1
- import { makeDiagnostic, runtimeDiagnostic, } from "@aotter/mantle-spec";
1
+ import { firstZodIssueAsJsonPointer, jsonSchemaToZod, makeDiagnostic, readJsonPointer, runtimeDiagnostic, } from "@aotter/mantle-spec";
2
2
  import { evaluateAuthAll } from "../../domain/service/AuthPredicateEvaluator.js";
3
3
  import { compileView } from "../../domain/service/ViewSqlCompiler.js";
4
4
  export class ExecuteViewUseCase {
5
5
  db;
6
- constructor(db) {
6
+ invokeGuard;
7
+ paramsCache = new Map();
8
+ constructor(db, invokeGuard) {
7
9
  this.db = db;
10
+ this.invokeGuard = invokeGuard;
8
11
  }
9
12
  async execute(request) {
10
13
  const viewPath = request.pathPrefix ?? `manifest:View/${request.view.metadata.name}`;
@@ -28,9 +31,76 @@ export class ExecuteViewUseCase {
28
31
  if (denial)
29
32
  return { ok: false, diagnostic: denial };
30
33
  }
34
+ // Validate the adapter-coerced map after static auth so protected
35
+ // Views do not expose parameter-schema details to unauthorized
36
+ // callers. MCP sends already-typed JSON; REST passes coerced query
37
+ // values. Both converge here before the dynamic guard.
38
+ let validatedParams = request.options?.params ?? {};
39
+ if (request.view.spec.params) {
40
+ let validator = this.paramsCache.get(request.view.metadata.name);
41
+ if (!validator) {
42
+ validator = jsonSchemaToZod(request.view.spec.params);
43
+ this.paramsCache.set(request.view.metadata.name, validator);
44
+ }
45
+ const parsed = validator.safeParse(validatedParams);
46
+ if (!parsed.success) {
47
+ const { instancePath, message } = firstZodIssueAsJsonPointer(parsed.error);
48
+ return {
49
+ ok: false,
50
+ diagnostic: makeDiagnostic({
51
+ code: "INPUT_VALIDATION_FAILED",
52
+ phase: "runtime",
53
+ severity: "error",
54
+ path: `${viewPath}#/params${instancePath}`,
55
+ value: readJsonPointer(validatedParams, instancePath),
56
+ expected: message,
57
+ }),
58
+ };
59
+ }
60
+ validatedParams = parsed.data;
61
+ }
62
+ const guardName = requires?.guard?.procedure;
63
+ if (guardName) {
64
+ if (!request.ctx) {
65
+ return {
66
+ ok: false,
67
+ diagnostic: makeDiagnostic({
68
+ code: "UNAUTHENTICATED",
69
+ phase: "runtime",
70
+ severity: "error",
71
+ path: `${viewPath}#/requires/guard`,
72
+ expected: "caller context supplied by the adapter for a guarded View",
73
+ }),
74
+ };
75
+ }
76
+ if (!this.invokeGuard) {
77
+ return {
78
+ ok: false,
79
+ diagnostic: makeDiagnostic({
80
+ code: "GUARD_PROCEDURE_UNKNOWN",
81
+ phase: "runtime",
82
+ severity: "error",
83
+ path: `${viewPath}#/requires/guard/procedure`,
84
+ value: guardName,
85
+ expected: "guard invoker wired into the runtime",
86
+ }),
87
+ };
88
+ }
89
+ const guarded = await this.invokeGuard({
90
+ procedure: guardName,
91
+ input: validatedParams,
92
+ ctx: request.ctx,
93
+ pathPrefix: `${viewPath}#/requires/guard/${guardName}`,
94
+ });
95
+ if (!guarded.ok)
96
+ return guarded;
97
+ }
31
98
  let compiled;
32
99
  try {
33
- compiled = compileView(request.view, request.options);
100
+ compiled = compileView(request.view, {
101
+ ...request.options,
102
+ params: validatedParams,
103
+ });
34
104
  }
35
105
  catch (err) {
36
106
  const msg = err instanceof Error ? err.message : String(err);
@@ -1 +1 @@
1
- {"version":3,"file":"ExecuteViewUseCase.js","sourceRoot":"","sources":["../../../src/usecase/view/ExecuteViewUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExecuteViewUseCase.js","sourceRoot":"","sources":["../../../src/usecase/view/ExecuteViewUseCase.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aotter/mantle-runtime",
3
- "version": "0.0.11-alpha.46",
3
+ "version": "0.0.11-alpha.48",
4
4
  "description": "Runtime engine for mantle: dispatcher + entry-writer + view executor + content-ops + render pipeline + auth + MCP. Defines adapter-agnostic ports. MUST NOT import D1Database / KVNamespace types.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://mantle.tools/",
@@ -29,7 +29,7 @@
29
29
  "README.md"
30
30
  ],
31
31
  "dependencies": {
32
- "@aotter/mantle-spec": "0.0.11-alpha.46"
32
+ "@aotter/mantle-spec": "0.0.11-alpha.48"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "zod": "^4.0.0"
@@ -1,41 +0,0 @@
1
- import type { LifecycleHook } from "@aotter/mantle-spec";
2
- import type { EntryRow } from "../model/EntryRow.js";
3
- import type { HandlerContext } from "../model/HandlerContext.js";
4
- /**
5
- * Fires every Trigger bound to (schema, hook) in alphabetical name
6
- * order (POC ADR-0014). Implemented by `usecase/lifecycle/
7
- * RunLifecycleHooksUseCase`; consumed by the entry-writer decorator
8
- * (`infrastructure/persistence/LifecycleHookingEntryRepository`).
9
- *
10
- * Honors per-Trigger `errorPolicy`:
11
- * - `abort` (only allowed on before_*): handler throw → `run` throws
12
- * a DiagnosticError so the surrounding mutation cancels.
13
- * - `continue`: handler throw is logged via `console.error` and
14
- * swallowed. (POC v0.1.x parity; observability table is v0.2.)
15
- *
16
- * The runner itself awaits every Trigger inline. The decorator decides
17
- * whether to ride on `ctx.waitUntil` (CF Workers fast-path) or
18
- * inline-await the result; it's not the runner's concern.
19
- *
20
- * Lives in `domain/port/` per Aotter clean-arch convention; the
21
- * implementing use case lives in `usecase/lifecycle/` and is wired at
22
- * the assembly root.
23
- */
24
- export interface LifecycleHookRunner {
25
- run(request: RunLifecycleHookRequest): Promise<void>;
26
- }
27
- export interface RunLifecycleHookRequest {
28
- readonly hook: LifecycleHook;
29
- readonly schema: string;
30
- /** Pre-mutation row for `before_*` hooks; persisted post-mutation
31
- * row for `after_*`. `null` only on `before_create` (no row exists
32
- * yet). */
33
- readonly entry: EntryRow | null;
34
- readonly ctx: HandlerContext;
35
- /** Pre-projection original input. For builtin Procedure path this is
36
- * the procedure's full input (incl. side-channel fields like a
37
- * CAPTCHA token); for non-builtin paths (admin / MCP createDraft)
38
- * it's typically the raw write payload. May be undefined. */
39
- readonly originalInput?: unknown;
40
- }
41
- //# sourceMappingURL=LifecycleHookRunner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LifecycleHookRunner.d.ts","sourceRoot":"","sources":["../../../src/domain/port/LifecycleHookRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;gBAEY;IACZ,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B;;;kEAG8D;IAC9D,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=LifecycleHookRunner.js.map