@wildo-ai/saas-technical-doc 1.1.1

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 (216) hide show
  1. package/LICENSE +34 -0
  2. package/dist/esm/.builder.pid +9 -0
  3. package/dist/esm/build/csp-emit.d.ts +9 -0
  4. package/dist/esm/build/csp-emit.d.ts.map +1 -0
  5. package/dist/esm/build/csp-emit.js +8 -0
  6. package/dist/esm/build/csp-emit.js.map +1 -0
  7. package/dist/esm/build/load-materialized-frontend-providers.d.ts +9 -0
  8. package/dist/esm/build/load-materialized-frontend-providers.d.ts.map +1 -0
  9. package/dist/esm/build/load-materialized-frontend-providers.js +9 -0
  10. package/dist/esm/build/load-materialized-frontend-providers.js.map +1 -0
  11. package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts +66 -0
  12. package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts.map +1 -0
  13. package/dist/esm/companion/application-documentation/application-organization-role-documentation.js +195 -0
  14. package/dist/esm/companion/application-documentation/application-organization-role-documentation.js.map +1 -0
  15. package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.d.ts +36 -0
  16. package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.d.ts.map +1 -0
  17. package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.js +71 -0
  18. package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.js.map +1 -0
  19. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts +37 -0
  20. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts.map +1 -0
  21. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js +1865 -0
  22. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js.map +1 -0
  23. package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.d.ts +22 -0
  24. package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.d.ts.map +1 -0
  25. package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.js +31 -0
  26. package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.js.map +1 -0
  27. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts +31 -0
  28. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts.map +1 -0
  29. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js +33 -0
  30. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js.map +1 -0
  31. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.d.ts +13 -0
  32. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.d.ts.map +1 -0
  33. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js +93 -0
  34. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js.map +1 -0
  35. package/dist/esm/companion/content/application-consumer-documentation-content-loader.d.ts +52 -0
  36. package/dist/esm/companion/content/application-consumer-documentation-content-loader.d.ts.map +1 -0
  37. package/dist/esm/companion/content/application-consumer-documentation-content-loader.js +191 -0
  38. package/dist/esm/companion/content/application-consumer-documentation-content-loader.js.map +1 -0
  39. package/dist/esm/companion/index.d.ts +39 -0
  40. package/dist/esm/companion/index.d.ts.map +1 -0
  41. package/dist/esm/companion/index.js +39 -0
  42. package/dist/esm/companion/index.js.map +1 -0
  43. package/dist/esm/companion/openapi-generator.d.ts +94 -0
  44. package/dist/esm/companion/openapi-generator.d.ts.map +1 -0
  45. package/dist/esm/companion/openapi-generator.js +1562 -0
  46. package/dist/esm/companion/openapi-generator.js.map +1 -0
  47. package/dist/esm/companion/operation-projection.schemas.d.ts +797 -0
  48. package/dist/esm/companion/operation-projection.schemas.d.ts.map +1 -0
  49. package/dist/esm/companion/operation-projection.schemas.js +610 -0
  50. package/dist/esm/companion/operation-projection.schemas.js.map +1 -0
  51. package/dist/esm/companion/publish-result.types.d.ts +124 -0
  52. package/dist/esm/companion/publish-result.types.d.ts.map +1 -0
  53. package/dist/esm/companion/publish-result.types.js +28 -0
  54. package/dist/esm/companion/publish-result.types.js.map +1 -0
  55. package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.d.ts +26 -0
  56. package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.d.ts.map +1 -0
  57. package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.js +63 -0
  58. package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.js.map +1 -0
  59. package/dist/esm/companion/rendering/technical-documentation-build-measurement.d.ts +23 -0
  60. package/dist/esm/companion/rendering/technical-documentation-build-measurement.d.ts.map +1 -0
  61. package/dist/esm/companion/rendering/technical-documentation-build-measurement.js +104 -0
  62. package/dist/esm/companion/rendering/technical-documentation-build-measurement.js.map +1 -0
  63. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts +9 -0
  64. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts.map +1 -0
  65. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js +421 -0
  66. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js.map +1 -0
  67. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.d.ts +72 -0
  68. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.d.ts.map +1 -0
  69. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js +204 -0
  70. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js.map +1 -0
  71. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts +9 -0
  72. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts.map +1 -0
  73. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js +106 -0
  74. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js.map +1 -0
  75. package/dist/esm/companion/rendering/technical-documentation-mdx-escaping.d.ts +43 -0
  76. package/dist/esm/companion/rendering/technical-documentation-mdx-escaping.d.ts.map +1 -0
  77. package/dist/esm/companion/rendering/technical-documentation-mdx-escaping.js +88 -0
  78. package/dist/esm/companion/rendering/technical-documentation-mdx-escaping.js.map +1 -0
  79. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts +7 -0
  80. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts.map +1 -0
  81. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.js +51 -0
  82. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.js.map +1 -0
  83. package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts +45 -0
  84. package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts.map +1 -0
  85. package/dist/esm/companion/rendering/technical-documentation-render-model.js +178 -0
  86. package/dist/esm/companion/rendering/technical-documentation-render-model.js.map +1 -0
  87. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts +3 -0
  88. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts.map +1 -0
  89. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js +49 -0
  90. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js.map +1 -0
  91. package/dist/esm/companion/spec-to-operation-doc.d.ts +176 -0
  92. package/dist/esm/companion/spec-to-operation-doc.d.ts.map +1 -0
  93. package/dist/esm/companion/spec-to-operation-doc.js +326 -0
  94. package/dist/esm/companion/spec-to-operation-doc.js.map +1 -0
  95. package/dist/esm/companion/technical-documentation-asset-path.d.ts +16 -0
  96. package/dist/esm/companion/technical-documentation-asset-path.d.ts.map +1 -0
  97. package/dist/esm/companion/technical-documentation-asset-path.js +19 -0
  98. package/dist/esm/companion/technical-documentation-asset-path.js.map +1 -0
  99. package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts +14 -0
  100. package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts.map +1 -0
  101. package/dist/esm/companion/technical-documentation-capture-execution-port.js +1 -0
  102. package/dist/esm/companion/technical-documentation-capture-execution-port.js.map +1 -0
  103. package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts +25 -0
  104. package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts.map +1 -0
  105. package/dist/esm/companion/technical-documentation-diagram-materializer.js +86 -0
  106. package/dist/esm/companion/technical-documentation-diagram-materializer.js.map +1 -0
  107. package/dist/esm/companion/technical-documentation-placeholder-materializer.d.ts +17 -0
  108. package/dist/esm/companion/technical-documentation-placeholder-materializer.d.ts.map +1 -0
  109. package/dist/esm/companion/technical-documentation-placeholder-materializer.js +63 -0
  110. package/dist/esm/companion/technical-documentation-placeholder-materializer.js.map +1 -0
  111. package/dist/esm/companion/zod-to-openapi.d.ts +67 -0
  112. package/dist/esm/companion/zod-to-openapi.d.ts.map +1 -0
  113. package/dist/esm/companion/zod-to-openapi.js +211 -0
  114. package/dist/esm/companion/zod-to-openapi.js.map +1 -0
  115. package/dist/esm/companion-exports.d.ts +32 -0
  116. package/dist/esm/companion-exports.d.ts.map +1 -0
  117. package/dist/esm/companion-exports.js +32 -0
  118. package/dist/esm/companion-exports.js.map +1 -0
  119. package/dist/esm/config/define-tech-doc-config.d.ts +38 -0
  120. package/dist/esm/config/define-tech-doc-config.d.ts.map +1 -0
  121. package/dist/esm/config/define-tech-doc-config.js +40 -0
  122. package/dist/esm/config/define-tech-doc-config.js.map +1 -0
  123. package/dist/esm/config/index.d.ts +22 -0
  124. package/dist/esm/config/index.d.ts.map +1 -0
  125. package/dist/esm/config/index.js +22 -0
  126. package/dist/esm/config/index.js.map +1 -0
  127. package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts +204 -0
  128. package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts.map +1 -0
  129. package/dist/esm/config/wildo-tech-doc-config.schemas.js +192 -0
  130. package/dist/esm/config/wildo-tech-doc-config.schemas.js.map +1 -0
  131. package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.d.ts +82 -0
  132. package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.d.ts.map +1 -0
  133. package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.js +114 -0
  134. package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.js.map +1 -0
  135. package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts +420 -0
  136. package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts.map +1 -0
  137. package/dist/esm/content/application-consumer-documentation-content.techdoc.js +9619 -0
  138. package/dist/esm/content/application-consumer-documentation-content.techdoc.js.map +1 -0
  139. package/dist/esm/content.exports.d.ts +9 -0
  140. package/dist/esm/content.exports.d.ts.map +1 -0
  141. package/dist/esm/content.exports.js +9 -0
  142. package/dist/esm/content.exports.js.map +1 -0
  143. package/dist/esm/index.d.ts +26 -0
  144. package/dist/esm/index.d.ts.map +1 -0
  145. package/dist/esm/index.js +26 -0
  146. package/dist/esm/index.js.map +1 -0
  147. package/dist/esm/openapi/api-reference-link-index.d.ts +98 -0
  148. package/dist/esm/openapi/api-reference-link-index.d.ts.map +1 -0
  149. package/dist/esm/openapi/api-reference-link-index.js +301 -0
  150. package/dist/esm/openapi/api-reference-link-index.js.map +1 -0
  151. package/dist/esm/openapi/api-reference-targets.d.ts +71 -0
  152. package/dist/esm/openapi/api-reference-targets.d.ts.map +1 -0
  153. package/dist/esm/openapi/api-reference-targets.js +114 -0
  154. package/dist/esm/openapi/api-reference-targets.js.map +1 -0
  155. package/dist/esm/openapi/index.d.ts +20 -0
  156. package/dist/esm/openapi/index.d.ts.map +1 -0
  157. package/dist/esm/openapi/index.js +20 -0
  158. package/dist/esm/openapi/index.js.map +1 -0
  159. package/dist/esm/openapi/openapi-generation-output.schemas.d.ts +80 -0
  160. package/dist/esm/openapi/openapi-generation-output.schemas.d.ts.map +1 -0
  161. package/dist/esm/openapi/openapi-generation-output.schemas.js +76 -0
  162. package/dist/esm/openapi/openapi-generation-output.schemas.js.map +1 -0
  163. package/dist/esm/openapi-reference-model.exports.d.ts +10 -0
  164. package/dist/esm/openapi-reference-model.exports.d.ts.map +1 -0
  165. package/dist/esm/openapi-reference-model.exports.js +10 -0
  166. package/dist/esm/openapi-reference-model.exports.js.map +1 -0
  167. package/dist/esm/runtime/AuthExchangePage.d.ts +84 -0
  168. package/dist/esm/runtime/AuthExchangePage.d.ts.map +1 -0
  169. package/dist/esm/runtime/AuthExchangePage.js +188 -0
  170. package/dist/esm/runtime/AuthExchangePage.js.map +1 -0
  171. package/dist/esm/runtime/DocsAuthContext.d.ts +119 -0
  172. package/dist/esm/runtime/DocsAuthContext.d.ts.map +1 -0
  173. package/dist/esm/runtime/DocsAuthContext.js +171 -0
  174. package/dist/esm/runtime/DocsAuthContext.js.map +1 -0
  175. package/dist/esm/runtime/decode-jwt-claims.d.ts +39 -0
  176. package/dist/esm/runtime/decode-jwt-claims.d.ts.map +1 -0
  177. package/dist/esm/runtime/decode-jwt-claims.js +86 -0
  178. package/dist/esm/runtime/decode-jwt-claims.js.map +1 -0
  179. package/dist/esm/runtime/docs-auth-client.d.ts +193 -0
  180. package/dist/esm/runtime/docs-auth-client.d.ts.map +1 -0
  181. package/dist/esm/runtime/docs-auth-client.js +211 -0
  182. package/dist/esm/runtime/docs-auth-client.js.map +1 -0
  183. package/dist/esm/runtime/docs-auth-session.schemas.d.ts +77 -0
  184. package/dist/esm/runtime/docs-auth-session.schemas.d.ts.map +1 -0
  185. package/dist/esm/runtime/docs-auth-session.schemas.js +50 -0
  186. package/dist/esm/runtime/docs-auth-session.schemas.js.map +1 -0
  187. package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts +17 -0
  188. package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts.map +1 -0
  189. package/dist/esm/runtime/frontend-provider-registry.techdoc.js +23 -0
  190. package/dist/esm/runtime/frontend-provider-registry.techdoc.js.map +1 -0
  191. package/dist/esm/runtime/index.d.ts +57 -0
  192. package/dist/esm/runtime/index.d.ts.map +1 -0
  193. package/dist/esm/runtime/index.js +76 -0
  194. package/dist/esm/runtime/index.js.map +1 -0
  195. package/dist/esm/runtime/openapi-reference-conservation.d.ts +20 -0
  196. package/dist/esm/runtime/openapi-reference-conservation.d.ts.map +1 -0
  197. package/dist/esm/runtime/openapi-reference-conservation.js +102 -0
  198. package/dist/esm/runtime/openapi-reference-conservation.js.map +1 -0
  199. package/dist/esm/runtime/openapi-reference-model.d.ts +224 -0
  200. package/dist/esm/runtime/openapi-reference-model.d.ts.map +1 -0
  201. package/dist/esm/runtime/openapi-reference-model.js +579 -0
  202. package/dist/esm/runtime/openapi-reference-model.js.map +1 -0
  203. package/dist/esm/runtime/openapi-reference-view.d.ts +13 -0
  204. package/dist/esm/runtime/openapi-reference-view.d.ts.map +1 -0
  205. package/dist/esm/runtime/openapi-reference-view.js +284 -0
  206. package/dist/esm/runtime/openapi-reference-view.js.map +1 -0
  207. package/dist/esm/runtime/use-docs-auth-session.d.ts +26 -0
  208. package/dist/esm/runtime/use-docs-auth-session.d.ts.map +1 -0
  209. package/dist/esm/runtime/use-docs-auth-session.js +34 -0
  210. package/dist/esm/runtime/use-docs-auth-session.js.map +1 -0
  211. package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts +3 -0
  212. package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts.map +1 -0
  213. package/dist/esm/runtime/use-docs-frontend-provider-registry.js +5 -0
  214. package/dist/esm/runtime/use-docs-frontend-provider-registry.js.map +1 -0
  215. package/dist/tsconfig.build.tsbuildinfo +1 -0
  216. package/package.json +117 -0
@@ -0,0 +1,797 @@
1
+ /**
2
+ * @wildo-package @wildo-ai/saas-technical-doc/companion (input projection)
3
+ *
4
+ * Input shape consumed by the companion-side OpenAPI generator
5
+ * (saas-technical-doc.md Step 3).
6
+ *
7
+ * Why a dedicated projection (and NOT importing `ResourcesRegistry` from
8
+ * `@wildo-ai/saas-models`):
9
+ *
10
+ * - The full `ResourceConfiguration` carries ~40 internal-only fields
11
+ * (factory metadata, repository wiring, validation hooks, frontend
12
+ * presets, lifecycle bindings, …). The OpenAPI generator does NOT need
13
+ * any of them — it needs ONLY operation-level HTTP shape data
14
+ * (method + path + request/response Zod schemas + role binding +
15
+ * primary scope + authentication-mode flags). Coupling the
16
+ * generator to the full type would (a) drag the entire schema graph
17
+ * + decorator framework into the companion bundle, defeating the
18
+ * point of `@wildo-ai/saas-models/public-runtime`; (b) couple test
19
+ * fixtures to dozens of irrelevant fields, making generator unit
20
+ * tests brittle to unrelated framework changes; (c) make the
21
+ * introspection-subprocess hop's wire format depend on the entire
22
+ * framework's type stability.
23
+ *
24
+ * - The introspection subprocess (wonder-todos backend) ALREADY has
25
+ * the resolved `ResourceConfiguration` graph — it's the natural
26
+ * place to flatten it into this minimal projection. The companion
27
+ * process then transforms the projection into YAML without ever
28
+ * needing the framework's resource-config types.
29
+ *
30
+ * - This file re-declares the small subset of enums/literals the
31
+ * projection carries (`ResourceOperationVariantTypeProjection`,
32
+ * `ResourcePrimaryScopeProjection`) rather than importing them from
33
+ * `@wildo-ai/saas-models` so that `engine/saas-technical-doc/companion`
34
+ * does NOT pull the heavy package's root barrel (which boots
35
+ * `initZodDecorators()` — see `saas-models-public-runtime.md` K-3 for
36
+ * the rationale). The projection's enum members MUST stay in
37
+ * one-to-one alignment with `ResourceOperationVariantType` and
38
+ * `ResourcePrimaryScope`; if the source enums grow a new member,
39
+ * update this file in the same commit and rerun the boundary tests.
40
+ *
41
+ * @wildo-boundary
42
+ * This file imports only Zod and the portable technical-documentation
43
+ * contract subpath — no React, no `@wildo-ai/saas-models` root, no
44
+ * decorators. The supported API version deliberately reuses the publication
45
+ * contract's named runtime schema rather than creating a parallel vocabulary.
46
+ */
47
+ import { z } from 'zod';
48
+ import { OpenApiSection } from '../openapi/openapi-generation-output.schemas';
49
+ /**
50
+ * Mirror of `@wildo-ai/saas-models` `ResourceOperationVariantType` —
51
+ * narrowed to the two variants the OpenAPI generator emits per K-5
52
+ * (`API_CALL` is the default URL-bearing operation; `API_CALL_WITH_CALLBACK`
53
+ * additionally carries an asynchronous callback URL). Other variants
54
+ * (`CRON_JOB`, `BATCH_JOB`, `INTERNAL_CALL`, `REPOSITORY_ONLY`) are
55
+ * intentionally NOT included — they have no HTTP surface to document.
56
+ *
57
+ * The introspection emitter MUST drop non-API operations BEFORE
58
+ * projecting; the generator additionally re-asserts the variant via
59
+ * Zod parse so a future bug at the projector layer cannot inject
60
+ * non-API ops into an API doc.
61
+ */
62
+ export declare enum OperationProjectionVariantType {
63
+ API_CALL = "api_call",
64
+ API_CALL_WITH_CALLBACK = "api_call_with_callback"
65
+ }
66
+ /**
67
+ * Mirror of `@wildo-ai/saas-models` `ResourcePrimaryScope` — kept
68
+ * complete (4 members) because scope remains part of the documented operation
69
+ * contract even though consumer sectioning is now an explicit separate fact.
70
+ *
71
+ * If `ResourcePrimaryScope` grows a new member upstream, update this
72
+ * enum in the same commit AND extend the audience splitter to either
73
+ * route the new scope into one of the existing buckets or fail-closed
74
+ * with a clear "unsupported scope" error — never silently drop the op.
75
+ */
76
+ export declare enum OperationProjectionPrimaryScope {
77
+ USER_SELF = "user_self",
78
+ ORGANIZATIONS = "organizations",
79
+ APPLICATION = "applications",
80
+ ANONYMOUS = "anonymous"
81
+ }
82
+ /**
83
+ * Allowed HTTP methods carried on a projected operation. Mirrors the
84
+ * `HttpMethod` enum in `@wildo-ai/saas-models` but kept local for the
85
+ * same boundary reason as the variant + scope enums above.
86
+ *
87
+ * Lowercase string values match the OpenAPI 3.1 path-item keys
88
+ * (`get`, `post`, `put`, `delete`, `patch`) — keeping the projection
89
+ * value verbatim consumable by the YAML emitter avoids one hop of
90
+ * case-translation in the hot path.
91
+ */
92
+ export declare enum OperationProjectionHttpVerb {
93
+ GET = "get",
94
+ POST = "post",
95
+ PUT = "put",
96
+ DELETE = "delete",
97
+ PATCH = "patch"
98
+ }
99
+ /**
100
+ * Authentication posture resolved from the same role binding the backend
101
+ * enforces. This is intentionally a documentation fact rather than a browser
102
+ * inference: `APP_PUBLIC` and `APP_ANONYMOUS` are access-mode sentinels, while
103
+ * every other role is an authorization requirement.
104
+ */
105
+ export declare enum OperationProjectionAuthenticationMode {
106
+ PUBLIC = "public",
107
+ ANONYMOUS_SESSION = "anonymous_session",
108
+ AUTHENTICATED = "authenticated",
109
+ ANONYMOUS_OR_AUTHENTICATED = "anonymous_or_authenticated"
110
+ }
111
+ /**
112
+ * One role requirement as it should be understood by an integrator. `role`
113
+ * remains the exact runtime token; `label` is resolved once at generation time
114
+ * and the explanatory fields come from the application role specification —
115
+ * never from a browser-side naming heuristic.
116
+ */
117
+ export declare const OperationRoleRequirementSchema: z.ZodObject<{
118
+ role: z.ZodString;
119
+ label: z.ZodString;
120
+ businessRole: z.ZodNullable<z.ZodString>;
121
+ authorityBoundary: z.ZodNullable<z.ZodString>;
122
+ }, z.core.$strict>;
123
+ export type OperationRoleRequirement = z.infer<typeof OperationRoleRequirementSchema>;
124
+ /**
125
+ * Consumer-facing access contract emitted into the operation's `x-wildo`
126
+ * metadata. Its prose is assembled in the introspection subprocess from the
127
+ * authoritative role specifications; the OpenAPI generator and browser only
128
+ * transport and render it.
129
+ */
130
+ export declare const OperationAccessDocumentationSchema: z.ZodObject<{
131
+ authenticationMode: z.ZodEnum<typeof OperationProjectionAuthenticationMode>;
132
+ authenticationSummary: z.ZodString;
133
+ roleRequirements: z.ZodArray<z.ZodObject<{
134
+ role: z.ZodString;
135
+ label: z.ZodString;
136
+ businessRole: z.ZodNullable<z.ZodString>;
137
+ authorityBoundary: z.ZodNullable<z.ZodString>;
138
+ }, z.core.$strict>>;
139
+ }, z.core.$strict>;
140
+ export type OperationAccessDocumentation = z.infer<typeof OperationAccessDocumentationSchema>;
141
+ /** Versioned identity carried from the resolved HTTP operation into OpenAPI. */
142
+ export declare const OPENAPI_OPERATION_IDENTITY_CONTRACT_VERSION = 1;
143
+ /** Versioned identity carried by each generated OpenAPI resource tag. */
144
+ export declare const OPENAPI_RESOURCE_IDENTITY_CONTRACT_VERSION = 1;
145
+ /**
146
+ * The non-editorial identity of one externally exposed HTTP operation.
147
+ *
148
+ * This deliberately excludes `operationKey`: that key exists to create a
149
+ * readable OpenAPI `operationId` and can contain a defensive positional
150
+ * fallback for unusual multi-path configurations. Conservation, generated
151
+ * routes and framework metadata must instead join this stable source tuple.
152
+ */
153
+ export declare const OpenApiOperationIdentitySchema: z.ZodObject<{
154
+ contractVersion: z.ZodLiteral<1>;
155
+ resourceRef: z.ZodString;
156
+ operationFamilyRef: z.ZodString;
157
+ operationVariantRef: z.ZodString;
158
+ variantType: z.ZodEnum<typeof OperationProjectionVariantType>;
159
+ httpVerb: z.ZodEnum<typeof OperationProjectionHttpVerb>;
160
+ path: z.ZodString;
161
+ }, z.core.$strict>;
162
+ export type OpenApiOperationIdentity = z.infer<typeof OpenApiOperationIdentitySchema>;
163
+ /**
164
+ * Derives stable semantic refs for the resolved operation tuple. This is the
165
+ * sole constructor so the subprocess projector, generator and future browser
166
+ * reader cannot gradually invent incompatible identities.
167
+ */
168
+ export declare function createOpenApiOperationIdentity(input: {
169
+ readonly resourceIdentifier: string;
170
+ readonly baseOperationIdentifier: string;
171
+ readonly variantKey: string | null;
172
+ readonly variantType: OperationProjectionVariantType;
173
+ readonly httpVerb: OperationProjectionHttpVerb;
174
+ readonly path: string;
175
+ }): OpenApiOperationIdentity;
176
+ /**
177
+ * Single projected operation — the atomic unit consumed by the URL-bearing
178
+ * operation guard and the explicit consumer-section grouping.
179
+ *
180
+ * Field decisions:
181
+ *
182
+ * - `resourceIdentifier` is a free string (NOT typed against
183
+ * `CoreResourceType`) because applications can declare custom
184
+ * resource types beyond the core enum. The generator uses this
185
+ * string as the OpenAPI tag name, so we want the wire format to
186
+ * survive any application-extended vocabulary without a schema
187
+ * bump.
188
+ *
189
+ * - `operationKey` is the framework's canonical operation identifier
190
+ * (e.g. `'CREATE'`, `'LIST'`, `'READ'`, custom-named ops); used
191
+ * verbatim as the OpenAPI `operationId` after a small
192
+ * PascalCase prefix (`<Resource><OperationKey>`). Stable across
193
+ * runs so client-codegen consumers can rely on it.
194
+ *
195
+ * - `httpVerb` and `path` carry the wire-level routing details. The
196
+ * `path` MUST be the OpenAPI-style template path (e.g.
197
+ * `/api/v1/{organizationId}/users/{userId}`), NOT an Express
198
+ * `:userId` form — the projector at the introspection side is
199
+ * responsible for the Express → OpenAPI brace conversion so the
200
+ * generator can pass the value through unchanged.
201
+ *
202
+ * - `roles` is the resolved string list (after enum → string
203
+ * flattening) so the splitter can audience-classify without
204
+ * re-importing the role enums. Empty array is rejected via Zod's
205
+ * `.min(1)` because every operation in the framework MUST declare
206
+ * at least one role binding (the framework's resource-config
207
+ * schema enforces this on the source side; the Zod check here is
208
+ * defense-in-depth).
209
+ *
210
+ * - `requestBodySchema` / `responseBodySchema` carry pre-converted
211
+ * JSON Schema fragments (from `z.toJSONSchema()` at the projector
212
+ * side). The generator does NOT see the source Zod schemas — the
213
+ * projector does the conversion so the generator stays
214
+ * decorator-framework-free (importing a Zod schema graph would
215
+ * pull `initZodDecorators()` for any `@wildo-ai/saas-models`-typed
216
+ * schema).
217
+ *
218
+ * - `summary` and `description` are optional human-readable strings;
219
+ * when omitted, the YAML emitter falls back to the canonical
220
+ * `<HTTP_VERB> <Resource>.<OperationKey>` derivation so the docs
221
+ * site never renders a literal "undefined" title.
222
+ *
223
+ * - `isApiKeyAccessDisabled` is an authentication-mode fact. The
224
+ * introspection projector forwards it verbatim; the generator keeps the
225
+ * operation and omits only its API-key security alternative.
226
+ *
227
+ * - `stepUpAuthentication` is present only when the resolved operation
228
+ * requires a fresh, single-use re-authentication proof. Both values are
229
+ * projected from the framework's named route/header constants so OpenAPI
230
+ * never invents or duplicates the protocol vocabulary.
231
+ *
232
+ * - `acceptsIfMatch` is the resolved optimistic-locking capability of this
233
+ * exact HTTP operation. It is true only for the controller's supported
234
+ * single-resource UPDATE-like lane, including custom operations borrowing
235
+ * UPDATE semantics; the generator uses it to expose the optional header and
236
+ * its framework-owned 400/409 outcomes without resource-level duplication.
237
+ *
238
+ * - `callbackPath` is OPTIONAL and MUST be present iff
239
+ * `variantType === API_CALL_WITH_CALLBACK`. The generator emits an
240
+ * OpenAPI 3.1 `callbacks:` block when set. The schema's
241
+ * `superRefine` enforces this invariant at parse time so the
242
+ * generator's hot path can assume the field is correctly populated.
243
+ */
244
+ export declare const OperationProjectionSchema: z.ZodObject<{
245
+ resourceIdentifier: z.ZodString;
246
+ operationKey: z.ZodString;
247
+ /**
248
+ * The RAW operation identifier (e.g. `CREATE`, `LIST`, `EXPORT_AUDIT_LOGS`,
249
+ * `ROTATE_TOKEN`) WITHOUT the variant / bulk / multi-path qualifiers that
250
+ * `operationKey` appends. `buildOperationId` needs this to compose a
251
+ * verb-first developer-facing operationId (`createOrganization`): the verb
252
+ * is derived from the base identifier and the resource noun from
253
+ * `resourceIdentifier`, while the qualifiers are `operationKey` with this
254
+ * prefix removed. Carried separately because a base identifier can itself
255
+ * contain `_` (e.g. `EXPORT_AUDIT_LOGS`), so the qualifier boundary cannot be
256
+ * recovered from `operationKey` alone.
257
+ */
258
+ baseOperationIdentifier: z.ZodString;
259
+ /** Exact runtime variant discriminator. `null` is the canonical default variant. */
260
+ variantKey: z.ZodNullable<z.ZodString>;
261
+ variantType: z.ZodEnum<typeof OperationProjectionVariantType>;
262
+ httpVerb: z.ZodEnum<typeof OperationProjectionHttpVerb>;
263
+ path: z.ZodString;
264
+ primaryScope: z.ZodEnum<typeof OperationProjectionPrimaryScope>;
265
+ /**
266
+ * Consumer-facing documentation section resolved at the source-authority
267
+ * boundary. The OpenAPI generator groups by this explicit fact; it must not
268
+ * reinterpret internal scopes or role strings into product navigation.
269
+ */
270
+ consumerApiSection: z.ZodEnum<typeof OpenApiSection>;
271
+ /**
272
+ * Stable source identity used for conservation and the strict `x-wildo`
273
+ * extension. It is not a human-facing operationId and never depends on
274
+ * iteration order or display prose.
275
+ */
276
+ identity: z.ZodObject<{
277
+ contractVersion: z.ZodLiteral<1>;
278
+ resourceRef: z.ZodString;
279
+ operationFamilyRef: z.ZodString;
280
+ operationVariantRef: z.ZodString;
281
+ variantType: z.ZodEnum<typeof OperationProjectionVariantType>;
282
+ httpVerb: z.ZodEnum<typeof OperationProjectionHttpVerb>;
283
+ path: z.ZodString;
284
+ }, z.core.$strict>;
285
+ roles: z.ZodArray<z.ZodString>;
286
+ /**
287
+ * Source-resolved consumer access explanation. This must remain aligned with
288
+ * `roles`: the projector is the only place allowed to interpret access-mode
289
+ * sentinels and attach the app's role-specification prose.
290
+ */
291
+ access: z.ZodObject<{
292
+ authenticationMode: z.ZodEnum<typeof OperationProjectionAuthenticationMode>;
293
+ authenticationSummary: z.ZodString;
294
+ roleRequirements: z.ZodArray<z.ZodObject<{
295
+ role: z.ZodString;
296
+ label: z.ZodString;
297
+ businessRole: z.ZodNullable<z.ZodString>;
298
+ authorityBoundary: z.ZodNullable<z.ZodString>;
299
+ }, z.core.$strict>>;
300
+ }, z.core.$strict>;
301
+ isApiKeyAccessDisabled: z.ZodBoolean;
302
+ stepUpAuthentication: z.ZodOptional<z.ZodObject<{
303
+ headerName: z.ZodString;
304
+ tokenEndpointPath: z.ZodString;
305
+ }, z.core.$strict>>;
306
+ acceptsIfMatch: z.ZodBoolean;
307
+ summary: z.ZodOptional<z.ZodString>;
308
+ description: z.ZodOptional<z.ZodString>;
309
+ /**
310
+ * JSON-Schema fragment representing the request body (or query for
311
+ * GET / DELETE if the projector chose to flatten query parameters
312
+ * into a single schema). The exact shape is whatever
313
+ * `z.toJSONSchema()` emits. For POST / PUT / PATCH style verbs the
314
+ * generator passes it through unchanged into the OpenAPI
315
+ * `requestBody.content.application/json.schema` slot. For GET /
316
+ * DELETE the generator expects an object-shaped schema and explodes
317
+ * the top-level properties into `parameters[]` entries with
318
+ * `in: 'query'`. `null` means "no request input".
319
+ */
320
+ requestBodySchema: z.ZodNullable<z.ZodUnknown>;
321
+ /**
322
+ * JSON-Schema fragment representing the 2xx response body. `null`
323
+ * means "no body" → emitted as a 204-style `responses` entry with
324
+ * description only. `unknown` to stay format-agnostic; the
325
+ * projector is responsible for emitting valid JSON Schema.
326
+ */
327
+ responseBodySchema: z.ZodNullable<z.ZodUnknown>;
328
+ /**
329
+ * Paginated-collection query contract — present iff the operation is a
330
+ * framework paginated collection operation (a `LIST` / `SEARCH` core
331
+ * operation, or a custom operation borrowing one via
332
+ * `resourceOperationLike`). Those operations universally accept the flat
333
+ * `page` / `limit` / `sort` query parameters and return the
334
+ * `{ data, pagination }` envelope (the backend controller forces
335
+ * `paginated: true` for every HTTP LIST/SEARCH dispatch), but NONE of that
336
+ * appears in the operation's request DTO — without this block the generator
337
+ * would document a paginated endpoint with no way to page it.
338
+ *
339
+ * The PROJECTOR resolves the per-operation values (it sees the resolved
340
+ * runtime operation); the GENERATOR owns the universal parameter shapes and
341
+ * the framework-constant defaults (`page` defaults to 1, `limit` to 20 —
342
+ * mirrors of the repository `_doList` defaults). Split chosen so this wire
343
+ * schema stays framework-decoupled: the projection carries FACTS, not
344
+ * OpenAPI fragments.
345
+ *
346
+ * - `maxLimit` — largest accepted `limit` value. Resolved from the
347
+ * operation's `maxPaginatedResultPerPageLimit ?? 50` (the same fallback
348
+ * the frontend HTTP client clamps with; only SEARCH-like operations can
349
+ * author a different cap today).
350
+ * - `sortableFields` — the operation's declared `sortFields` allow-list.
351
+ * Non-empty: only these fields may be named in `sort` (unrecognised
352
+ * fields are silently ignored by the backend validator) and the default
353
+ * ordering is the first entry, descending. Empty: the backend applies
354
+ * any requested field verbatim and defaults to `createdAt:desc`.
355
+ */
356
+ pagination: z.ZodOptional<z.ZodObject<{
357
+ maxLimit: z.ZodNumber;
358
+ sortableFields: z.ZodArray<z.ZodString>;
359
+ }, z.core.$strict>>;
360
+ /**
361
+ * Path of the asynchronous callback (`API_CALL_WITH_CALLBACK` only).
362
+ * The generator turns this into an OpenAPI `callbacks:` block
363
+ * referencing the same `responseBodySchema`.
364
+ */
365
+ callbackPath: z.ZodOptional<z.ZodString>;
366
+ /**
367
+ * Tier-3 authored HTTP documentation, projected from the resource
368
+ * specification's operation overlay. All optional; when present the
369
+ * generator emits real `responses` (success + error), request/response
370
+ * `examples`, an `x-idempotent` extension, and a rate-limit note instead of
371
+ * the default single `200`/`204`. `code` / `forStatus` are OpenAPI status
372
+ * keys (`'200'`, `'404'`, …).
373
+ */
374
+ responseStatuses: z.ZodOptional<z.ZodArray<z.ZodObject<{
375
+ code: z.ZodString;
376
+ meaning: z.ZodString;
377
+ }, z.core.$strict>>>;
378
+ errorScenarios: z.ZodOptional<z.ZodArray<z.ZodObject<{
379
+ code: z.ZodString;
380
+ when: z.ZodString;
381
+ errorCode: z.ZodOptional<z.ZodString>;
382
+ }, z.core.$strict>>>;
383
+ idempotent: z.ZodOptional<z.ZodBoolean>;
384
+ rateLimitNote: z.ZodOptional<z.ZodString>;
385
+ examples: z.ZodOptional<z.ZodArray<z.ZodObject<{
386
+ title: z.ZodString;
387
+ request: z.ZodOptional<z.ZodUnknown>;
388
+ response: z.ZodOptional<z.ZodUnknown>;
389
+ forStatus: z.ZodOptional<z.ZodString>;
390
+ }, z.core.$strict>>>;
391
+ }, z.core.$strict>;
392
+ export type OperationProjection = z.infer<typeof OperationProjectionSchema>;
393
+ /**
394
+ * Closed projection vocabulary mirroring the relationship cardinalities in
395
+ * `@wildo-ai/saas-models`. It deliberately lives in the narrow IPC/OpenAPI
396
+ * contract so the generator and browser never need to import the full resource
397
+ * registry just to render a resource's public relationship semantics.
398
+ */
399
+ export declare enum ResourceRelationshipDocumentationCardinality {
400
+ ONE = "one",
401
+ ZERO_OR_ONE = "zero_or_one",
402
+ ONE_OR_MANY = "one_or_many",
403
+ MANY = "many"
404
+ }
405
+ /** The three developer-authored relationship meanings projected into OpenAPI. */
406
+ export declare enum ResourceRelationshipDocumentationNature {
407
+ COMPOSITION = "composition",
408
+ REFERENCE = "reference",
409
+ ASSOCIATION = "association"
410
+ }
411
+ /** The compiled lifecycle dependency of a relationship, not a presentation hint. */
412
+ export declare enum ResourceRelationshipDocumentationLifecycleModel {
413
+ DEPENDENT = "dependent",
414
+ INDEPENDENT = "independent",
415
+ LINK_ONLY = "link_only"
416
+ }
417
+ /** Execution timing for an explicitly configured parent-delete lifecycle. */
418
+ export declare enum ResourceRelationshipDocumentationDeleteMode {
419
+ IMMEDIATE = "immediate",
420
+ LAZY = "lazy"
421
+ }
422
+ /** Effect of an explicitly configured parent-delete lifecycle. */
423
+ export declare enum ResourceRelationshipDocumentationDeleteStrategy {
424
+ DELETE = "delete",
425
+ IMPERSONALIZE_AND_RETAIN = "impersonalize_and_retain"
426
+ }
427
+ /**
428
+ * One relationship fact from the perspective of a resource OpenAPI tag.
429
+ *
430
+ * `relatedResourceName` and the two cardinalities are deliberately symmetric:
431
+ * resource configurations include both ordinary parent → child relationships
432
+ * and FK-reference declarations, so this public contract must not guess an
433
+ * ownership direction from declaration order. `lifecycleModel` and the
434
+ * optional `onParentDelete` policy carry the framework's already-resolved
435
+ * lifecycle truth without exposing registry implementation details.
436
+ */
437
+ export declare const ResourceRelationshipDocumentationSchema: z.ZodObject<{
438
+ relatedResourceName: z.ZodString;
439
+ /** Resolved FK identity when the relationship is represented by a field. */
440
+ foreignKeyField: z.ZodOptional<z.ZodString>;
441
+ resourceCardinality: z.ZodEnum<typeof ResourceRelationshipDocumentationCardinality>;
442
+ relatedResourceCardinality: z.ZodEnum<typeof ResourceRelationshipDocumentationCardinality>;
443
+ nature: z.ZodEnum<typeof ResourceRelationshipDocumentationNature>;
444
+ lifecycleModel: z.ZodEnum<typeof ResourceRelationshipDocumentationLifecycleModel>;
445
+ onParentDelete: z.ZodOptional<z.ZodObject<{
446
+ enabled: z.ZodBoolean;
447
+ mode: z.ZodEnum<typeof ResourceRelationshipDocumentationDeleteMode>;
448
+ strategy: z.ZodEnum<typeof ResourceRelationshipDocumentationDeleteStrategy>;
449
+ maxDepth: z.ZodNumber;
450
+ }, z.core.$strict>>;
451
+ }, z.core.$strict>;
452
+ export type ResourceRelationshipDocumentation = z.infer<typeof ResourceRelationshipDocumentationSchema>;
453
+ /**
454
+ * A source-declared grouping for resources in one consumer API reference.
455
+ *
456
+ * API resource categories are navigation meaning, not a renderer inference.
457
+ * An application declares the category once in `wildo.tech-doc.config.ts`; the
458
+ * companion attaches it to the corresponding resource tag and the generator
459
+ * transports the fact through strict OpenAPI metadata. The identifier is
460
+ * deliberately application-defined: different products can have genuinely
461
+ * different business domains while still using the same renderer.
462
+ */
463
+ export declare const ApiReferenceResourceCategorySchema: z.ZodObject<{
464
+ /** Stable, readable public identity used in API-reference fragments. */
465
+ id: z.ZodString;
466
+ /** Consumer-facing category label displayed by the renderer. */
467
+ label: z.ZodString;
468
+ /** Optional category orientation supplied by the application, never React. */
469
+ description: z.ZodOptional<z.ZodString>;
470
+ }, z.core.$strict>;
471
+ export type ApiReferenceResourceCategory = z.infer<typeof ApiReferenceResourceCategorySchema>;
472
+ /**
473
+ * Optional per-resource OpenAPI tag descriptor (specification + registry enrichment).
474
+ *
475
+ * The generator groups operations under a tag named after the resource
476
+ * identifier. Each emitted OpenAPI tag has a strict `x-wildo` resource identity;
477
+ * this descriptor enriches it with its specification-owned purpose/lifecycle
478
+ * prose and the compiled relationship facts from the resolved resource graph.
479
+ */
480
+ export declare const ResourceTagSchema: z.ZodObject<{
481
+ /** Must equal the `resourceIdentifier` the generator derives the tag from. */
482
+ name: z.ZodString;
483
+ /** Business-purpose prose for the resource group. */
484
+ description: z.ZodOptional<z.ZodString>;
485
+ /** Specification-owned explanation of how this resource changes over time. */
486
+ lifecycleRole: z.ZodOptional<z.ZodString>;
487
+ /** Compiled relationship facts relevant to this resource. */
488
+ relationships: z.ZodOptional<z.ZodArray<z.ZodObject<{
489
+ relatedResourceName: z.ZodString;
490
+ /** Resolved FK identity when the relationship is represented by a field. */
491
+ foreignKeyField: z.ZodOptional<z.ZodString>;
492
+ resourceCardinality: z.ZodEnum<typeof ResourceRelationshipDocumentationCardinality>;
493
+ relatedResourceCardinality: z.ZodEnum<typeof ResourceRelationshipDocumentationCardinality>;
494
+ nature: z.ZodEnum<typeof ResourceRelationshipDocumentationNature>;
495
+ lifecycleModel: z.ZodEnum<typeof ResourceRelationshipDocumentationLifecycleModel>;
496
+ onParentDelete: z.ZodOptional<z.ZodObject<{
497
+ enabled: z.ZodBoolean;
498
+ mode: z.ZodEnum<typeof ResourceRelationshipDocumentationDeleteMode>;
499
+ strategy: z.ZodEnum<typeof ResourceRelationshipDocumentationDeleteStrategy>;
500
+ maxDepth: z.ZodNumber;
501
+ }, z.core.$strict>>;
502
+ }, z.core.$strict>>>;
503
+ /** Explicit application-owned API-reference navigation grouping. */
504
+ category: z.ZodOptional<z.ZodObject<{
505
+ /** Stable, readable public identity used in API-reference fragments. */
506
+ id: z.ZodString;
507
+ /** Consumer-facing category label displayed by the renderer. */
508
+ label: z.ZodString;
509
+ /** Optional category orientation supplied by the application, never React. */
510
+ description: z.ZodOptional<z.ZodString>;
511
+ }, z.core.$strict>>;
512
+ }, z.core.$strict>;
513
+ export type ResourceTag = z.infer<typeof ResourceTagSchema>;
514
+ /**
515
+ * One OpenAPI `servers[]` entry — a base URL the API is reachable at, plus an
516
+ * optional human label. **App-enriched**: deployment URLs are an
517
+ * application/environment concern (the framework cannot know an app's prod
518
+ * domain), so they are authored on `WildoTechnicalDocConfig.apiServers` and
519
+ * threaded into `OpenApiGenerationInput.servers`. The shared shape lives here
520
+ * (the boundary-clean, zod-only module the generator consumes); the config
521
+ * schema imports it so the two never drift.
522
+ */
523
+ export declare const OpenApiServerSchema: z.ZodObject<{
524
+ /**
525
+ * Base URL — the bare ORIGIN the API is served from, e.g.
526
+ * `http://localhost:4241` or `https://api.example.com`. Do NOT append the
527
+ * `/api/v1` mount: the generated operation `paths` are already mount-prefixed
528
+ * (`/api/v1/...`), and the effective request URL is `server.url` + path — so
529
+ * including the mount here would DOUBLE it (`…/api/v1/api/v1/...`).
530
+ */
531
+ url: z.ZodString;
532
+ /** Optional human label shown in the docs server picker (e.g. "Production"). */
533
+ description: z.ZodOptional<z.ZodString>;
534
+ }, z.core.$strict>;
535
+ export type OpenApiServer = z.infer<typeof OpenApiServerSchema>;
536
+ /**
537
+ * Top-level wire format consumed by the OpenAPI generator. Wrapped
538
+ * in an object so the projector can attach metadata (app slug, build
539
+ * timestamp, framework version) without a schema-shape break later.
540
+ */
541
+ export declare const OpenApiGenerationInputSchema: z.ZodObject<{
542
+ /**
543
+ * App slug from `WildoSaasConfig.slug`. Surfaces in the generated
544
+ * `openapi.info.title` so a
545
+ * multi-app generation run can be disambiguated. Free-string
546
+ * (no validation against `WildoSaasConfigSchema.slug` regex) because
547
+ * the generator should not gate on the same constraint twice; the
548
+ * `defineSaasConfig` parser already enforced the shape at author time.
549
+ */
550
+ appSlug: z.ZodString;
551
+ /**
552
+ * App display name from `WildoSaasConfig.displayName` — used as the
553
+ * default base title in the generated `openapi.info.title`. The
554
+ * companion route concatenates it with the section name
555
+ * (`"Wonder Todos API reference"`).
556
+ */
557
+ appDisplayName: z.ZodString;
558
+ /**
559
+ * Optional public marketing title from `WildoSaasConfig.technicalDoc.publicMarketingTitle`.
560
+ * When present, replaces `appDisplayName` in the generated title so
561
+ * the OpenAPI docs match the docs site landing page.
562
+ */
563
+ publicMarketingTitle: z.ZodOptional<z.ZodString>;
564
+ /** Exact supported public API contract release surfaced in `openapi.info.version`. */
565
+ supportedApiVersion: z.ZodString;
566
+ /**
567
+ * Flat list of all URL-bearing operation projections. The projector includes
568
+ * every exposed operation and resolves its consumer section explicitly; the
569
+ * generator validates, groups and renders without eligibility inference.
570
+ */
571
+ operations: z.ZodArray<z.ZodObject<{
572
+ resourceIdentifier: z.ZodString;
573
+ operationKey: z.ZodString;
574
+ /**
575
+ * The RAW operation identifier (e.g. `CREATE`, `LIST`, `EXPORT_AUDIT_LOGS`,
576
+ * `ROTATE_TOKEN`) WITHOUT the variant / bulk / multi-path qualifiers that
577
+ * `operationKey` appends. `buildOperationId` needs this to compose a
578
+ * verb-first developer-facing operationId (`createOrganization`): the verb
579
+ * is derived from the base identifier and the resource noun from
580
+ * `resourceIdentifier`, while the qualifiers are `operationKey` with this
581
+ * prefix removed. Carried separately because a base identifier can itself
582
+ * contain `_` (e.g. `EXPORT_AUDIT_LOGS`), so the qualifier boundary cannot be
583
+ * recovered from `operationKey` alone.
584
+ */
585
+ baseOperationIdentifier: z.ZodString;
586
+ /** Exact runtime variant discriminator. `null` is the canonical default variant. */
587
+ variantKey: z.ZodNullable<z.ZodString>;
588
+ variantType: z.ZodEnum<typeof OperationProjectionVariantType>;
589
+ httpVerb: z.ZodEnum<typeof OperationProjectionHttpVerb>;
590
+ path: z.ZodString;
591
+ primaryScope: z.ZodEnum<typeof OperationProjectionPrimaryScope>;
592
+ /**
593
+ * Consumer-facing documentation section resolved at the source-authority
594
+ * boundary. The OpenAPI generator groups by this explicit fact; it must not
595
+ * reinterpret internal scopes or role strings into product navigation.
596
+ */
597
+ consumerApiSection: z.ZodEnum<typeof OpenApiSection>;
598
+ /**
599
+ * Stable source identity used for conservation and the strict `x-wildo`
600
+ * extension. It is not a human-facing operationId and never depends on
601
+ * iteration order or display prose.
602
+ */
603
+ identity: z.ZodObject<{
604
+ contractVersion: z.ZodLiteral<1>;
605
+ resourceRef: z.ZodString;
606
+ operationFamilyRef: z.ZodString;
607
+ operationVariantRef: z.ZodString;
608
+ variantType: z.ZodEnum<typeof OperationProjectionVariantType>;
609
+ httpVerb: z.ZodEnum<typeof OperationProjectionHttpVerb>;
610
+ path: z.ZodString;
611
+ }, z.core.$strict>;
612
+ roles: z.ZodArray<z.ZodString>;
613
+ /**
614
+ * Source-resolved consumer access explanation. This must remain aligned with
615
+ * `roles`: the projector is the only place allowed to interpret access-mode
616
+ * sentinels and attach the app's role-specification prose.
617
+ */
618
+ access: z.ZodObject<{
619
+ authenticationMode: z.ZodEnum<typeof OperationProjectionAuthenticationMode>;
620
+ authenticationSummary: z.ZodString;
621
+ roleRequirements: z.ZodArray<z.ZodObject<{
622
+ role: z.ZodString;
623
+ label: z.ZodString;
624
+ businessRole: z.ZodNullable<z.ZodString>;
625
+ authorityBoundary: z.ZodNullable<z.ZodString>;
626
+ }, z.core.$strict>>;
627
+ }, z.core.$strict>;
628
+ isApiKeyAccessDisabled: z.ZodBoolean;
629
+ stepUpAuthentication: z.ZodOptional<z.ZodObject<{
630
+ headerName: z.ZodString;
631
+ tokenEndpointPath: z.ZodString;
632
+ }, z.core.$strict>>;
633
+ acceptsIfMatch: z.ZodBoolean;
634
+ summary: z.ZodOptional<z.ZodString>;
635
+ description: z.ZodOptional<z.ZodString>;
636
+ /**
637
+ * JSON-Schema fragment representing the request body (or query for
638
+ * GET / DELETE if the projector chose to flatten query parameters
639
+ * into a single schema). The exact shape is whatever
640
+ * `z.toJSONSchema()` emits. For POST / PUT / PATCH style verbs the
641
+ * generator passes it through unchanged into the OpenAPI
642
+ * `requestBody.content.application/json.schema` slot. For GET /
643
+ * DELETE the generator expects an object-shaped schema and explodes
644
+ * the top-level properties into `parameters[]` entries with
645
+ * `in: 'query'`. `null` means "no request input".
646
+ */
647
+ requestBodySchema: z.ZodNullable<z.ZodUnknown>;
648
+ /**
649
+ * JSON-Schema fragment representing the 2xx response body. `null`
650
+ * means "no body" → emitted as a 204-style `responses` entry with
651
+ * description only. `unknown` to stay format-agnostic; the
652
+ * projector is responsible for emitting valid JSON Schema.
653
+ */
654
+ responseBodySchema: z.ZodNullable<z.ZodUnknown>;
655
+ /**
656
+ * Paginated-collection query contract — present iff the operation is a
657
+ * framework paginated collection operation (a `LIST` / `SEARCH` core
658
+ * operation, or a custom operation borrowing one via
659
+ * `resourceOperationLike`). Those operations universally accept the flat
660
+ * `page` / `limit` / `sort` query parameters and return the
661
+ * `{ data, pagination }` envelope (the backend controller forces
662
+ * `paginated: true` for every HTTP LIST/SEARCH dispatch), but NONE of that
663
+ * appears in the operation's request DTO — without this block the generator
664
+ * would document a paginated endpoint with no way to page it.
665
+ *
666
+ * The PROJECTOR resolves the per-operation values (it sees the resolved
667
+ * runtime operation); the GENERATOR owns the universal parameter shapes and
668
+ * the framework-constant defaults (`page` defaults to 1, `limit` to 20 —
669
+ * mirrors of the repository `_doList` defaults). Split chosen so this wire
670
+ * schema stays framework-decoupled: the projection carries FACTS, not
671
+ * OpenAPI fragments.
672
+ *
673
+ * - `maxLimit` — largest accepted `limit` value. Resolved from the
674
+ * operation's `maxPaginatedResultPerPageLimit ?? 50` (the same fallback
675
+ * the frontend HTTP client clamps with; only SEARCH-like operations can
676
+ * author a different cap today).
677
+ * - `sortableFields` — the operation's declared `sortFields` allow-list.
678
+ * Non-empty: only these fields may be named in `sort` (unrecognised
679
+ * fields are silently ignored by the backend validator) and the default
680
+ * ordering is the first entry, descending. Empty: the backend applies
681
+ * any requested field verbatim and defaults to `createdAt:desc`.
682
+ */
683
+ pagination: z.ZodOptional<z.ZodObject<{
684
+ maxLimit: z.ZodNumber;
685
+ sortableFields: z.ZodArray<z.ZodString>;
686
+ }, z.core.$strict>>;
687
+ /**
688
+ * Path of the asynchronous callback (`API_CALL_WITH_CALLBACK` only).
689
+ * The generator turns this into an OpenAPI `callbacks:` block
690
+ * referencing the same `responseBodySchema`.
691
+ */
692
+ callbackPath: z.ZodOptional<z.ZodString>;
693
+ /**
694
+ * Tier-3 authored HTTP documentation, projected from the resource
695
+ * specification's operation overlay. All optional; when present the
696
+ * generator emits real `responses` (success + error), request/response
697
+ * `examples`, an `x-idempotent` extension, and a rate-limit note instead of
698
+ * the default single `200`/`204`. `code` / `forStatus` are OpenAPI status
699
+ * keys (`'200'`, `'404'`, …).
700
+ */
701
+ responseStatuses: z.ZodOptional<z.ZodArray<z.ZodObject<{
702
+ code: z.ZodString;
703
+ meaning: z.ZodString;
704
+ }, z.core.$strict>>>;
705
+ errorScenarios: z.ZodOptional<z.ZodArray<z.ZodObject<{
706
+ code: z.ZodString;
707
+ when: z.ZodString;
708
+ errorCode: z.ZodOptional<z.ZodString>;
709
+ }, z.core.$strict>>>;
710
+ idempotent: z.ZodOptional<z.ZodBoolean>;
711
+ rateLimitNote: z.ZodOptional<z.ZodString>;
712
+ examples: z.ZodOptional<z.ZodArray<z.ZodObject<{
713
+ title: z.ZodString;
714
+ request: z.ZodOptional<z.ZodUnknown>;
715
+ response: z.ZodOptional<z.ZodUnknown>;
716
+ forStatus: z.ZodOptional<z.ZodString>;
717
+ }, z.core.$strict>>>;
718
+ }, z.core.$strict>>;
719
+ /**
720
+ * JSON Schema for the canonical framework HTTP error envelope. The
721
+ * subprocess converts the same `ErrorResponseSchema` the backend serializes;
722
+ * the generator registers it once as `components.schemas.ErrorResponse` and
723
+ * references it from every documented non-success response. Keeping this
724
+ * here makes the OpenAPI document an exact projection of the runtime wire
725
+ * contract rather than a renderer-owned approximation.
726
+ */
727
+ errorResponseSchema: z.ZodUnknown;
728
+ /**
729
+ * Optional resource → tag-description descriptors. The generator emits each
730
+ * one as an OpenAPI top-level `tags[].description` for the tags it derives
731
+ * from a section's operations; resources without a descriptor still get a
732
+ * bare `{ name }` tag. Order-independent (the generator looks up by `name`).
733
+ */
734
+ resourceTags: z.ZodOptional<z.ZodArray<z.ZodObject<{
735
+ /** Must equal the `resourceIdentifier` the generator derives the tag from. */
736
+ name: z.ZodString;
737
+ /** Business-purpose prose for the resource group. */
738
+ description: z.ZodOptional<z.ZodString>;
739
+ /** Specification-owned explanation of how this resource changes over time. */
740
+ lifecycleRole: z.ZodOptional<z.ZodString>;
741
+ /** Compiled relationship facts relevant to this resource. */
742
+ relationships: z.ZodOptional<z.ZodArray<z.ZodObject<{
743
+ relatedResourceName: z.ZodString;
744
+ /** Resolved FK identity when the relationship is represented by a field. */
745
+ foreignKeyField: z.ZodOptional<z.ZodString>;
746
+ resourceCardinality: z.ZodEnum<typeof ResourceRelationshipDocumentationCardinality>;
747
+ relatedResourceCardinality: z.ZodEnum<typeof ResourceRelationshipDocumentationCardinality>;
748
+ nature: z.ZodEnum<typeof ResourceRelationshipDocumentationNature>;
749
+ lifecycleModel: z.ZodEnum<typeof ResourceRelationshipDocumentationLifecycleModel>;
750
+ onParentDelete: z.ZodOptional<z.ZodObject<{
751
+ enabled: z.ZodBoolean;
752
+ mode: z.ZodEnum<typeof ResourceRelationshipDocumentationDeleteMode>;
753
+ strategy: z.ZodEnum<typeof ResourceRelationshipDocumentationDeleteStrategy>;
754
+ maxDepth: z.ZodNumber;
755
+ }, z.core.$strict>>;
756
+ }, z.core.$strict>>>;
757
+ /** Explicit application-owned API-reference navigation grouping. */
758
+ category: z.ZodOptional<z.ZodObject<{
759
+ /** Stable, readable public identity used in API-reference fragments. */
760
+ id: z.ZodString;
761
+ /** Consumer-facing category label displayed by the renderer. */
762
+ label: z.ZodString;
763
+ /** Optional category orientation supplied by the application, never React. */
764
+ description: z.ZodOptional<z.ZodString>;
765
+ }, z.core.$strict>>;
766
+ }, z.core.$strict>>>;
767
+ /**
768
+ * Optional OpenAPI `servers[]` — the base URLs the API is reachable at.
769
+ * App-enriched via `WildoTechnicalDocConfig.apiServers` (deployment URLs are
770
+ * application/environment knowledge, not framework knowledge). When omitted
771
+ * the generator emits no `servers` block (back-compatible with the
772
+ * pre-servers output). Each entry is `{ url, description? }`.
773
+ */
774
+ servers: z.ZodOptional<z.ZodArray<z.ZodObject<{
775
+ /**
776
+ * Base URL — the bare ORIGIN the API is served from, e.g.
777
+ * `http://localhost:4241` or `https://api.example.com`. Do NOT append the
778
+ * `/api/v1` mount: the generated operation `paths` are already mount-prefixed
779
+ * (`/api/v1/...`), and the effective request URL is `server.url` + path — so
780
+ * including the mount here would DOUBLE it (`…/api/v1/api/v1/...`).
781
+ */
782
+ url: z.ZodString;
783
+ /** Optional human label shown in the docs server picker (e.g. "Production"). */
784
+ description: z.ZodOptional<z.ZodString>;
785
+ }, z.core.$strict>>>;
786
+ /**
787
+ * Optional app-authored markdown intro for the API reference landing page,
788
+ * from `WildoTechnicalDocConfig.apiOverview`. The generator PREPENDS it to the
789
+ * framework-universal "## API conventions" block (auth / pagination /
790
+ * idempotency / errors — which it always emits) to form `info.description`.
791
+ * App enrichment: the conventions are framework knowledge; the overview is the
792
+ * app's own framing.
793
+ */
794
+ apiOverview: z.ZodOptional<z.ZodString>;
795
+ }, z.core.$strict>;
796
+ export type OpenApiGenerationInput = z.infer<typeof OpenApiGenerationInputSchema>;
797
+ //# sourceMappingURL=operation-projection.schemas.d.ts.map