@wildo-ai/saas-technical-doc 1.1.2 → 1.1.4

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 (130) hide show
  1. package/dist/esm/build/csp-emit.d.ts.map +1 -1
  2. package/dist/esm/build/load-materialized-frontend-providers.d.ts.map +1 -1
  3. package/dist/esm/companion/application-documentation/application-administration-documentation.d.ts.map +1 -1
  4. package/dist/esm/companion/application-documentation/application-administration-documentation.js.map +1 -1
  5. package/dist/esm/companion/application-documentation/application-authentication-documentation.d.ts.map +1 -1
  6. package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts +25 -1
  7. package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts.map +1 -1
  8. package/dist/esm/companion/application-documentation/application-connection-documentation.js +28 -1
  9. package/dist/esm/companion/application-documentation/application-connection-documentation.js.map +1 -1
  10. package/dist/esm/companion/application-documentation/application-domain-documentation.d.ts +133 -0
  11. package/dist/esm/companion/application-documentation/application-domain-documentation.d.ts.map +1 -0
  12. package/dist/esm/companion/application-documentation/application-domain-documentation.js +243 -0
  13. package/dist/esm/companion/application-documentation/application-domain-documentation.js.map +1 -0
  14. package/dist/esm/companion/application-documentation/application-integration-documentation.d.ts.map +1 -1
  15. package/dist/esm/companion/application-documentation/application-integration-documentation.js +23 -0
  16. package/dist/esm/companion/application-documentation/application-integration-documentation.js.map +1 -1
  17. package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts +30 -0
  18. package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts.map +1 -1
  19. package/dist/esm/companion/application-documentation/application-organization-role-documentation.js +38 -0
  20. package/dist/esm/companion/application-documentation/application-organization-role-documentation.js.map +1 -1
  21. package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.d.ts.map +1 -1
  22. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts +61 -1
  23. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts.map +1 -1
  24. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js +255 -218
  25. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js.map +1 -1
  26. package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.d.ts.map +1 -1
  27. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts +2 -0
  28. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts.map +1 -1
  29. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js +1 -0
  30. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js.map +1 -1
  31. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.d.ts.map +1 -1
  32. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js +1 -1
  33. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js.map +1 -1
  34. package/dist/esm/companion/content/application-consumer-documentation-content-loader.d.ts.map +1 -1
  35. package/dist/esm/companion/index.d.ts +2 -1
  36. package/dist/esm/companion/index.d.ts.map +1 -1
  37. package/dist/esm/companion/index.js +2 -1
  38. package/dist/esm/companion/index.js.map +1 -1
  39. package/dist/esm/companion/manual-controller-route-projection.d.ts +112 -0
  40. package/dist/esm/companion/manual-controller-route-projection.d.ts.map +1 -0
  41. package/dist/esm/companion/manual-controller-route-projection.js +249 -0
  42. package/dist/esm/companion/manual-controller-route-projection.js.map +1 -0
  43. package/dist/esm/companion/openapi-generator.d.ts +16 -0
  44. package/dist/esm/companion/openapi-generator.d.ts.map +1 -1
  45. package/dist/esm/companion/openapi-generator.js +493 -26
  46. package/dist/esm/companion/openapi-generator.js.map +1 -1
  47. package/dist/esm/companion/operation-projection.schemas.d.ts +44 -0
  48. package/dist/esm/companion/operation-projection.schemas.d.ts.map +1 -1
  49. package/dist/esm/companion/operation-projection.schemas.js +37 -0
  50. package/dist/esm/companion/operation-projection.schemas.js.map +1 -1
  51. package/dist/esm/companion/publish-result.types.d.ts +37 -4
  52. package/dist/esm/companion/publish-result.types.d.ts.map +1 -1
  53. package/dist/esm/companion/publish-result.types.js.map +1 -1
  54. package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.d.ts.map +1 -1
  55. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts +7 -1
  56. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts.map +1 -1
  57. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js +34 -18
  58. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js.map +1 -1
  59. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.d.ts.map +1 -1
  60. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js +8 -1
  61. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js.map +1 -1
  62. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts.map +1 -1
  63. package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts.map +1 -1
  64. package/dist/esm/companion/rendering/technical-documentation-render-model.js +30 -13
  65. package/dist/esm/companion/rendering/technical-documentation-render-model.js.map +1 -1
  66. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts +10 -0
  67. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts.map +1 -1
  68. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js +10 -15
  69. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js.map +1 -1
  70. package/dist/esm/companion/technical-documentation-asset-path.d.ts.map +1 -1
  71. package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts +27 -1
  72. package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts.map +1 -1
  73. package/dist/esm/companion/technical-documentation-capture-execution-port.js.map +1 -1
  74. package/dist/esm/companion/technical-documentation-diagram-definitions.d.ts +33 -0
  75. package/dist/esm/companion/technical-documentation-diagram-definitions.d.ts.map +1 -0
  76. package/dist/esm/companion/technical-documentation-diagram-definitions.js +54 -0
  77. package/dist/esm/companion/technical-documentation-diagram-definitions.js.map +1 -0
  78. package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts +10 -18
  79. package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts.map +1 -1
  80. package/dist/esm/companion/technical-documentation-diagram-materializer.js +9 -39
  81. package/dist/esm/companion/technical-documentation-diagram-materializer.js.map +1 -1
  82. package/dist/esm/companion/technical-documentation-placeholder-materializer.d.ts.map +1 -1
  83. package/dist/esm/companion/zod-to-openapi.d.ts.map +1 -1
  84. package/dist/esm/companion-exports.d.ts.map +1 -1
  85. package/dist/esm/config/define-tech-doc-config.d.ts.map +1 -1
  86. package/dist/esm/config/index.d.ts.map +1 -1
  87. package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts +8 -4
  88. package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts.map +1 -1
  89. package/dist/esm/config/wildo-tech-doc-config.schemas.js +8 -4
  90. package/dist/esm/config/wildo-tech-doc-config.schemas.js.map +1 -1
  91. package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.d.ts.map +1 -1
  92. package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts +42 -64
  93. package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts.map +1 -1
  94. package/dist/esm/content/application-consumer-documentation-content.techdoc.js +164 -925
  95. package/dist/esm/content/application-consumer-documentation-content.techdoc.js.map +1 -1
  96. package/dist/esm/content.exports.d.ts.map +1 -1
  97. package/dist/esm/index.d.ts.map +1 -1
  98. package/dist/esm/openapi/api-reference-link-index.d.ts.map +1 -1
  99. package/dist/esm/openapi/index.d.ts.map +1 -1
  100. package/dist/esm/openapi/openapi-generation-output.schemas.d.ts.map +1 -1
  101. package/dist/esm/openapi-reference-model.exports.d.ts.map +1 -1
  102. package/dist/esm/runtime/AuthExchangePage.d.ts.map +1 -1
  103. package/dist/esm/runtime/DocsAuthContext.d.ts +16 -1
  104. package/dist/esm/runtime/DocsAuthContext.d.ts.map +1 -1
  105. package/dist/esm/runtime/DocsAuthContext.js +18 -2
  106. package/dist/esm/runtime/DocsAuthContext.js.map +1 -1
  107. package/dist/esm/runtime/decode-jwt-claims.d.ts.map +1 -1
  108. package/dist/esm/runtime/docs-auth-client.d.ts.map +1 -1
  109. package/dist/esm/runtime/docs-auth-session.schemas.d.ts.map +1 -1
  110. package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts +35 -13
  111. package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts.map +1 -1
  112. package/dist/esm/runtime/frontend-provider-registry.techdoc.js +28 -19
  113. package/dist/esm/runtime/frontend-provider-registry.techdoc.js.map +1 -1
  114. package/dist/esm/runtime/index.d.ts +1 -0
  115. package/dist/esm/runtime/index.d.ts.map +1 -1
  116. package/dist/esm/runtime/index.js +1 -0
  117. package/dist/esm/runtime/index.js.map +1 -1
  118. package/dist/esm/runtime/openapi-reference-conservation.d.ts.map +1 -1
  119. package/dist/esm/runtime/use-docs-auth-session.d.ts.map +1 -1
  120. package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts.map +1 -1
  121. package/dist/esm/runtime/use-docs-provider-sdks.d.ts +21 -0
  122. package/dist/esm/runtime/use-docs-provider-sdks.d.ts.map +1 -0
  123. package/dist/esm/runtime/use-docs-provider-sdks.js +49 -0
  124. package/dist/esm/runtime/use-docs-provider-sdks.js.map +1 -0
  125. package/dist/tsconfig.build.tsbuildinfo +1 -1
  126. package/package.json +6 -5
  127. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts +0 -9
  128. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts.map +0 -1
  129. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js +0 -111
  130. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"technical-documentation-operational-evidence.d.ts","sourceRoot":"","sources":["../../../../../src/companion/application-documentation/technical-documentation-operational-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iDAAiD,EAEjD,KAAK,gDAAgD,EACrD,KAAK,mDAAmD,EAEzD,MAAM,uDAAuD,CAAC;AAE/D,oBAAY,8CAA8C;IACxD,mBAAmB,wBAAwB;IAC3C,mBAAmB,wBAAwB;CAC5C;AAED,MAAM,WAAW,0CAA0C;IACzD,QAAQ,CAAC,WAAW,EAAE,gDAAgD,CAAC;IACvE,QAAQ,CAAC,WAAW,EAAE,8CAA8C,CAAC;IACrE,QAAQ,CAAC,cAAc,EAAE,iDAAiD,GAAG,IAAI,CAAC;CACnF;AAED,MAAM,WAAW,6CAA6C;IAC5D,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,0CAA0C,EAAE,CAAC;CAC1E;AAMD;;;;;GAKG;AACH,wBAAgB,2CAA2C,CACzD,YAAY,EAAE,SAAS,gDAAgD,EAAE,EACzE,aAAa,EAAE,mDAAmD,GACjE,6CAA6C,CAgB/C"}
1
+ {"version":3,"file":"technical-documentation-operational-evidence.d.ts","sourceRoot":"","sources":["../../../../src/companion/application-documentation/technical-documentation-operational-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iDAAiD,EAEjD,KAAK,gDAAgD,EACrD,KAAK,mDAAmD,EAEzD,MAAM,uDAAuD,CAAC;AAE/D,oBAAY,8CAA8C;IACxD,mBAAmB,wBAAwB;IAC3C,mBAAmB,wBAAwB;CAC5C;AAED,MAAM,WAAW,0CAA0C;IACzD,QAAQ,CAAC,WAAW,EAAE,gDAAgD,CAAC;IACvE,QAAQ,CAAC,WAAW,EAAE,8CAA8C,CAAC;IACrE,QAAQ,CAAC,cAAc,EAAE,iDAAiD,GAAG,IAAI,CAAC;CACnF;AAED,MAAM,WAAW,6CAA6C;IAC5D,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,0CAA0C,EAAE,CAAC;CAC1E;AAMD;;;;;GAKG;AACH,wBAAgB,2CAA2C,CACzD,YAAY,EAAE,SAAS,gDAAgD,EAAE,EACzE,aAAa,EAAE,mDAAmD,GACjE,6CAA6C,CAgB/C"}
@@ -7,6 +7,7 @@ import type { ApplicationConnectionDocumentationFact } from './application-conne
7
7
  import type { ApplicationAuthenticationDocumentationFact } from './application-authentication-documentation';
8
8
  import type { ApplicationAdministrationDocumentationFact } from './application-administration-documentation';
9
9
  import type { ApplicationIntegrationDocumentationFact } from './application-integration-documentation';
10
+ import type { ApplicationDomainDocumentationFact } from './application-domain-documentation';
10
11
  export declare const TECHNICAL_DOCUMENTATION_PRIVATE_DERIVATION_PROJECTOR_REF = "technical-documentation:projector/private-derivation-v1";
11
12
  export declare const TECHNICAL_DOCUMENTATION_PRIVATE_DERIVATION_PROJECTOR_VERSION = 1;
12
13
  export interface CreateTechnicalDocumentationPrivateDerivationInput {
@@ -23,6 +24,7 @@ export interface CreateTechnicalDocumentationPrivateDerivationInput {
23
24
  readonly applicationAuthenticationFact: ApplicationAuthenticationDocumentationFact;
24
25
  readonly applicationAdministrationFact: ApplicationAdministrationDocumentationFact;
25
26
  readonly applicationIntegrationFact: ApplicationIntegrationDocumentationFact;
27
+ readonly applicationDomainFact: ApplicationDomainDocumentationFact;
26
28
  /** This derivation's own identity; the authorized bundle names it. */
27
29
  readonly derivationRef: string;
28
30
  readonly derivationVersion: number;
@@ -1 +1 @@
1
- {"version":3,"file":"technical-documentation-private-derivation.d.ts","sourceRoot":"","sources":["../../../../../src/companion/application-documentation/technical-documentation-private-derivation.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iDAAiD,EACtD,KAAK,mDAAmD,EACxD,KAAK,iDAAiD,EAEvD,MAAM,uDAAuD,CAAC;AAC/D,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,yCAAyC,CAAC;AAEzG,OAAO,KAAK,EAAE,qDAAqD,EAAE,MAAM,8DAA8D,CAAC;AAC1I,OAAO,EAEL,KAAK,6CAA6C,EACnD,MAAM,iDAAiD,CAAC;AACzD,OAAO,KAAK,EAAE,qDAAqD,EAAE,MAAM,wDAAwD,CAAC;AACpI,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,wCAAwC,CAAC;AACrG,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,4CAA4C,CAAC;AAC7G,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,4CAA4C,CAAC;AAC7G,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,yCAAyC,CAAC;AAEvG,eAAO,MAAM,wDAAwD,4DAA4D,CAAC;AAClI,eAAO,MAAM,4DAA4D,IAAI,CAAC;AAE9E,MAAM,WAAW,kDAAkD;IACjE,QAAQ,CAAC,mBAAmB,EAAE,qDAAqD,CAAC;IACpF,QAAQ,CAAC,2BAA2B,EAAE,mDAAmD,CAAC;IAC1F,wEAAwE;IACxE,QAAQ,CAAC,0BAA0B,EAAE,yCAAyC,CAAC;IAC/E,QAAQ,CAAC,kCAAkC,EAAE,iDAAiD,CAAC;IAC/F,0FAA0F;IAC1F,QAAQ,CAAC,gCAAgC,EAAE,6CAA6C,CAAC;IACzF,+FAA+F;IAC/F,QAAQ,CAAC,wCAAwC,EAAE,qDAAqD,CAAC;IACzG,QAAQ,CAAC,yBAAyB,EAAE,sCAAsC,CAAC;IAC3E,QAAQ,CAAC,6BAA6B,EAAE,0CAA0C,CAAC;IACnF,QAAQ,CAAC,6BAA6B,EAAE,0CAA0C,CAAC;IACnF,QAAQ,CAAC,0BAA0B,EAAE,uCAAuC,CAAC;IAC7E,sEAAsE;IACtE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,6CAA6C,CAC3D,KAAK,EAAE,kDAAkD,GACxD,iDAAiD,CAgCnD"}
1
+ {"version":3,"file":"technical-documentation-private-derivation.d.ts","sourceRoot":"","sources":["../../../../src/companion/application-documentation/technical-documentation-private-derivation.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iDAAiD,EACtD,KAAK,mDAAmD,EACxD,KAAK,iDAAiD,EAEvD,MAAM,uDAAuD,CAAC;AAC/D,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,yCAAyC,CAAC;AAEzG,OAAO,KAAK,EAAE,qDAAqD,EAAE,MAAM,8DAA8D,CAAC;AAC1I,OAAO,EAEL,KAAK,6CAA6C,EACnD,MAAM,iDAAiD,CAAC;AACzD,OAAO,KAAK,EAAE,qDAAqD,EAAE,MAAM,wDAAwD,CAAC;AACpI,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,wCAAwC,CAAC;AACrG,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,4CAA4C,CAAC;AAC7G,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,4CAA4C,CAAC;AAC7G,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,yCAAyC,CAAC;AACvG,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,oCAAoC,CAAC;AAE7F,eAAO,MAAM,wDAAwD,4DAA4D,CAAC;AAClI,eAAO,MAAM,4DAA4D,IAAI,CAAC;AAE9E,MAAM,WAAW,kDAAkD;IACjE,QAAQ,CAAC,mBAAmB,EAAE,qDAAqD,CAAC;IACpF,QAAQ,CAAC,2BAA2B,EAAE,mDAAmD,CAAC;IAC1F,wEAAwE;IACxE,QAAQ,CAAC,0BAA0B,EAAE,yCAAyC,CAAC;IAC/E,QAAQ,CAAC,kCAAkC,EAAE,iDAAiD,CAAC;IAC/F,0FAA0F;IAC1F,QAAQ,CAAC,gCAAgC,EAAE,6CAA6C,CAAC;IACzF,+FAA+F;IAC/F,QAAQ,CAAC,wCAAwC,EAAE,qDAAqD,CAAC;IACzG,QAAQ,CAAC,yBAAyB,EAAE,sCAAsC,CAAC;IAC3E,QAAQ,CAAC,6BAA6B,EAAE,0CAA0C,CAAC;IACnF,QAAQ,CAAC,6BAA6B,EAAE,0CAA0C,CAAC;IACnF,QAAQ,CAAC,0BAA0B,EAAE,uCAAuC,CAAC;IAC7E,QAAQ,CAAC,qBAAqB,EAAE,kCAAkC,CAAC;IACnE,sEAAsE;IACtE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,6CAA6C,CAC3D,KAAK,EAAE,kDAAkD,GACxD,iDAAiD,CAiCnD"}
@@ -17,6 +17,7 @@ export function createTechnicalDocumentationPrivateDerivation(input) {
17
17
  authentication: input.applicationAuthenticationFact,
18
18
  administration: input.applicationAdministrationFact,
19
19
  integration: input.applicationIntegrationFact,
20
+ domain: input.applicationDomainFact,
20
21
  });
21
22
  const unitsByRef = new Map();
22
23
  for (const unit of engineUnits) {
@@ -1 +1 @@
1
- {"version":3,"file":"technical-documentation-private-derivation.js","sourceRoot":"","sources":["../../../../../src/companion/application-documentation/technical-documentation-private-derivation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uDAAuD,GAKxD,MAAM,uDAAuD,CAAC;AAI/D,OAAO,EACL,6CAA6C,GAE9C,MAAM,iDAAiD,CAAC;AAOzD,MAAM,CAAC,MAAM,wDAAwD,GAAG,yDAAyD,CAAC;AAClI,MAAM,CAAC,MAAM,4DAA4D,GAAG,CAAC,CAAC;AAsB9E;;;;;;GAMG;AACH,MAAM,UAAU,6CAA6C,CAC3D,KAAyD;IAEzD,MAAM,WAAW,GAAG,6CAA6C,CAC/D,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,0BAA0B,EAChC,SAAS,EACT;QACE,iBAAiB,EAAE,KAAK,CAAC,gCAAgC;QACzD,yBAAyB,EAAE,KAAK,CAAC,wCAAwC;QACzE,UAAU,EAAE,KAAK,CAAC,yBAAyB;QAC3C,cAAc,EAAE,KAAK,CAAC,6BAA6B;QACnD,cAAc,EAAE,KAAK,CAAC,6BAA6B;QACnD,WAAW,EAAE,KAAK,CAAC,0BAA0B;KAC9C,CACF,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAwC,CAAC;IACnE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACvH,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,uDAAuD,CAAC;QAC7D,aAAa,EAAE,CAAC;QAChB,2BAA2B,EAAE,KAAK,CAAC,mBAAmB,CAAC,QAAQ;QAC/D,2BAA2B,EAAE,KAAK,CAAC,2BAA2B;QAC9D,kCAAkC,EAAE,KAAK,CAAC,kCAAkC;QAC5E,YAAY,EAAE,wDAAwD;QACtE,gBAAgB,EAAE,4DAA4D;QAC9E,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;QAC/B,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {\n createTechnicalDocumentationPrivateDerivationManifestV1,\n type EngineDocumentationSpecificationCatalogIdentityV1,\n type TechnicalDocumentationEnvironmentEvidenceSnapshotV1,\n type TechnicalDocumentationPrivateDerivationManifestV1,\n type TechnicalDocumentationUnitV1,\n} from '@wildo-ai/saas-specifications/technical-documentation';\nimport type { EngineDocumentationSpecificationCatalogV1 } from '@wildo-ai/saas-specifications/companion';\n\nimport type { LoadedApplicationConsumerDocumentationContentBundleV1 } from '../content/application-consumer-documentation-content-loader';\nimport {\n projectEngineApplicationConsumerContentBundle,\n type ApplicationOrganizationRolesDocumentationFact,\n} from './technical-documentation-engine-content-bundle';\nimport type { ApplicationOrganizationUnitResourcesDocumentationFact } from './application-organization-unit-resource-documentation';\nimport type { ApplicationConnectionDocumentationFact } from './application-connection-documentation';\nimport type { ApplicationAuthenticationDocumentationFact } from './application-authentication-documentation';\nimport type { ApplicationAdministrationDocumentationFact } from './application-administration-documentation';\nimport type { ApplicationIntegrationDocumentationFact } from './application-integration-documentation';\n\nexport const TECHNICAL_DOCUMENTATION_PRIVATE_DERIVATION_PROJECTOR_REF = 'technical-documentation:projector/private-derivation-v1';\nexport const TECHNICAL_DOCUMENTATION_PRIVATE_DERIVATION_PROJECTOR_VERSION = 1;\n\nexport interface CreateTechnicalDocumentationPrivateDerivationInput {\n readonly engineContentBundle: LoadedApplicationConsumerDocumentationContentBundleV1;\n readonly environmentEvidenceSnapshot: TechnicalDocumentationEnvironmentEvidenceSnapshotV1;\n /** Exact safe fact catalog used to compose the engine-content units. */\n readonly engineSpecificationCatalog: EngineDocumentationSpecificationCatalogV1;\n readonly engineSpecificationCatalogIdentity: EngineDocumentationSpecificationCatalogIdentityV1;\n /** Resolved organization roles and their application-authored semantic specifications. */\n readonly applicationOrganizationRolesFact: ApplicationOrganizationRolesDocumentationFact;\n /** Exact resources opted into organization-unit narrowing by backend startup configuration. */\n readonly applicationOrganizationUnitResourcesFact: ApplicationOrganizationUnitResourcesDocumentationFact;\n readonly applicationConnectionFact: ApplicationConnectionDocumentationFact;\n readonly applicationAuthenticationFact: ApplicationAuthenticationDocumentationFact;\n readonly applicationAdministrationFact: ApplicationAdministrationDocumentationFact;\n readonly applicationIntegrationFact: ApplicationIntegrationDocumentationFact;\n /** This derivation's own identity; the authorized bundle names it. */\n readonly derivationRef: string;\n readonly derivationVersion: number;\n readonly derivedAt: string;\n}\n\n/**\n * Joins exact framework and environment identities into the private semantic artifact.\n *\n * This reusable function performs no application-design discovery and chooses\n * no output path. Application content remains absent until the app-creator\n * owns an accepted authoring artifact for that later join.\n */\nexport function createTechnicalDocumentationPrivateDerivation(\n input: CreateTechnicalDocumentationPrivateDerivationInput,\n): TechnicalDocumentationPrivateDerivationManifestV1 {\n const engineUnits = projectEngineApplicationConsumerContentBundle(\n input.engineContentBundle,\n input.engineSpecificationCatalog,\n undefined,\n {\n organizationRoles: input.applicationOrganizationRolesFact,\n organizationUnitResources: input.applicationOrganizationUnitResourcesFact,\n connection: input.applicationConnectionFact,\n authentication: input.applicationAuthenticationFact,\n administration: input.applicationAdministrationFact,\n integration: input.applicationIntegrationFact,\n },\n );\n const unitsByRef = new Map<string, TechnicalDocumentationUnitV1>();\n for (const unit of engineUnits) {\n if (unitsByRef.has(unit.unitRef)) throw new Error(`duplicate engine technical-documentation unitRef: ${unit.unitRef}`);\n unitsByRef.set(unit.unitRef, unit);\n }\n\n return createTechnicalDocumentationPrivateDerivationManifestV1({\n schemaVersion: 1,\n engineContentBundleIdentity: input.engineContentBundle.identity,\n environmentEvidenceSnapshot: input.environmentEvidenceSnapshot,\n engineSpecificationCatalogIdentity: input.engineSpecificationCatalogIdentity,\n projectorRef: TECHNICAL_DOCUMENTATION_PRIVATE_DERIVATION_PROJECTOR_REF,\n projectorVersion: TECHNICAL_DOCUMENTATION_PRIVATE_DERIVATION_PROJECTOR_VERSION,\n derivationRef: input.derivationRef,\n derivationVersion: input.derivationVersion,\n units: [...unitsByRef.values()],\n derivedAt: input.derivedAt,\n });\n}\n"]}
1
+ {"version":3,"file":"technical-documentation-private-derivation.js","sourceRoot":"","sources":["../../../../src/companion/application-documentation/technical-documentation-private-derivation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uDAAuD,GAKxD,MAAM,uDAAuD,CAAC;AAI/D,OAAO,EACL,6CAA6C,GAE9C,MAAM,iDAAiD,CAAC;AAQzD,MAAM,CAAC,MAAM,wDAAwD,GAAG,yDAAyD,CAAC;AAClI,MAAM,CAAC,MAAM,4DAA4D,GAAG,CAAC,CAAC;AAuB9E;;;;;;GAMG;AACH,MAAM,UAAU,6CAA6C,CAC3D,KAAyD;IAEzD,MAAM,WAAW,GAAG,6CAA6C,CAC/D,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,0BAA0B,EAChC,SAAS,EACT;QACE,iBAAiB,EAAE,KAAK,CAAC,gCAAgC;QACzD,yBAAyB,EAAE,KAAK,CAAC,wCAAwC;QACzE,UAAU,EAAE,KAAK,CAAC,yBAAyB;QAC3C,cAAc,EAAE,KAAK,CAAC,6BAA6B;QACnD,cAAc,EAAE,KAAK,CAAC,6BAA6B;QACnD,WAAW,EAAE,KAAK,CAAC,0BAA0B;QAC7C,MAAM,EAAE,KAAK,CAAC,qBAAqB;KACpC,CACF,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAwC,CAAC;IACnE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACvH,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,uDAAuD,CAAC;QAC7D,aAAa,EAAE,CAAC;QAChB,2BAA2B,EAAE,KAAK,CAAC,mBAAmB,CAAC,QAAQ;QAC/D,2BAA2B,EAAE,KAAK,CAAC,2BAA2B;QAC9D,kCAAkC,EAAE,KAAK,CAAC,kCAAkC;QAC5E,YAAY,EAAE,wDAAwD;QACtE,gBAAgB,EAAE,4DAA4D;QAC9E,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;QAC/B,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {\n createTechnicalDocumentationPrivateDerivationManifestV1,\n type EngineDocumentationSpecificationCatalogIdentityV1,\n type TechnicalDocumentationEnvironmentEvidenceSnapshotV1,\n type TechnicalDocumentationPrivateDerivationManifestV1,\n type TechnicalDocumentationUnitV1,\n} from '@wildo-ai/saas-specifications/technical-documentation';\nimport type { EngineDocumentationSpecificationCatalogV1 } from '@wildo-ai/saas-specifications/companion';\n\nimport type { LoadedApplicationConsumerDocumentationContentBundleV1 } from '../content/application-consumer-documentation-content-loader';\nimport {\n projectEngineApplicationConsumerContentBundle,\n type ApplicationOrganizationRolesDocumentationFact,\n} from './technical-documentation-engine-content-bundle';\nimport type { ApplicationOrganizationUnitResourcesDocumentationFact } from './application-organization-unit-resource-documentation';\nimport type { ApplicationConnectionDocumentationFact } from './application-connection-documentation';\nimport type { ApplicationAuthenticationDocumentationFact } from './application-authentication-documentation';\nimport type { ApplicationAdministrationDocumentationFact } from './application-administration-documentation';\nimport type { ApplicationIntegrationDocumentationFact } from './application-integration-documentation';\nimport type { ApplicationDomainDocumentationFact } from './application-domain-documentation';\n\nexport const TECHNICAL_DOCUMENTATION_PRIVATE_DERIVATION_PROJECTOR_REF = 'technical-documentation:projector/private-derivation-v1';\nexport const TECHNICAL_DOCUMENTATION_PRIVATE_DERIVATION_PROJECTOR_VERSION = 1;\n\nexport interface CreateTechnicalDocumentationPrivateDerivationInput {\n readonly engineContentBundle: LoadedApplicationConsumerDocumentationContentBundleV1;\n readonly environmentEvidenceSnapshot: TechnicalDocumentationEnvironmentEvidenceSnapshotV1;\n /** Exact safe fact catalog used to compose the engine-content units. */\n readonly engineSpecificationCatalog: EngineDocumentationSpecificationCatalogV1;\n readonly engineSpecificationCatalogIdentity: EngineDocumentationSpecificationCatalogIdentityV1;\n /** Resolved organization roles and their application-authored semantic specifications. */\n readonly applicationOrganizationRolesFact: ApplicationOrganizationRolesDocumentationFact;\n /** Exact resources opted into organization-unit narrowing by backend startup configuration. */\n readonly applicationOrganizationUnitResourcesFact: ApplicationOrganizationUnitResourcesDocumentationFact;\n readonly applicationConnectionFact: ApplicationConnectionDocumentationFact;\n readonly applicationAuthenticationFact: ApplicationAuthenticationDocumentationFact;\n readonly applicationAdministrationFact: ApplicationAdministrationDocumentationFact;\n readonly applicationIntegrationFact: ApplicationIntegrationDocumentationFact;\n readonly applicationDomainFact: ApplicationDomainDocumentationFact;\n /** This derivation's own identity; the authorized bundle names it. */\n readonly derivationRef: string;\n readonly derivationVersion: number;\n readonly derivedAt: string;\n}\n\n/**\n * Joins exact framework and environment identities into the private semantic artifact.\n *\n * This reusable function performs no application-design discovery and chooses\n * no output path. Application content remains absent until the app-creator\n * owns an accepted authoring artifact for that later join.\n */\nexport function createTechnicalDocumentationPrivateDerivation(\n input: CreateTechnicalDocumentationPrivateDerivationInput,\n): TechnicalDocumentationPrivateDerivationManifestV1 {\n const engineUnits = projectEngineApplicationConsumerContentBundle(\n input.engineContentBundle,\n input.engineSpecificationCatalog,\n undefined,\n {\n organizationRoles: input.applicationOrganizationRolesFact,\n organizationUnitResources: input.applicationOrganizationUnitResourcesFact,\n connection: input.applicationConnectionFact,\n authentication: input.applicationAuthenticationFact,\n administration: input.applicationAdministrationFact,\n integration: input.applicationIntegrationFact,\n domain: input.applicationDomainFact,\n },\n );\n const unitsByRef = new Map<string, TechnicalDocumentationUnitV1>();\n for (const unit of engineUnits) {\n if (unitsByRef.has(unit.unitRef)) throw new Error(`duplicate engine technical-documentation unitRef: ${unit.unitRef}`);\n unitsByRef.set(unit.unitRef, unit);\n }\n\n return createTechnicalDocumentationPrivateDerivationManifestV1({\n schemaVersion: 1,\n engineContentBundleIdentity: input.engineContentBundle.identity,\n environmentEvidenceSnapshot: input.environmentEvidenceSnapshot,\n engineSpecificationCatalogIdentity: input.engineSpecificationCatalogIdentity,\n projectorRef: TECHNICAL_DOCUMENTATION_PRIVATE_DERIVATION_PROJECTOR_REF,\n projectorVersion: TECHNICAL_DOCUMENTATION_PRIVATE_DERIVATION_PROJECTOR_VERSION,\n derivationRef: input.derivationRef,\n derivationVersion: input.derivationVersion,\n units: [...unitsByRef.values()],\n derivedAt: input.derivedAt,\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"technical-documentation-publication-policy.d.ts","sourceRoot":"","sources":["../../../../../src/companion/application-documentation/technical-documentation-publication-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,6BAA6B,EAO7B,KAAK,gDAAgD,EACrD,KAAK,iDAAiD,EAGvD,MAAM,uDAAuD,CAAC;AAgE/D,MAAM,WAAW,kDAAkD;IACjE,QAAQ,CAAC,iBAAiB,EAAE,iDAAiD,CAAC;IAC9E,QAAQ,CAAC,OAAO,EAAE,6BAA6B,CAAC,aAAa,CAAC;IAC9D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,2FAA2F;IAC3F,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,2EAA2E;AAC3E,wBAAgB,6CAA6C,CAC3D,KAAK,EAAE,kDAAkD,GACxD,gDAAgD,CA2ClD"}
1
+ {"version":3,"file":"technical-documentation-publication-policy.d.ts","sourceRoot":"","sources":["../../../../src/companion/application-documentation/technical-documentation-publication-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,6BAA6B,EAO7B,KAAK,gDAAgD,EACrD,KAAK,iDAAiD,EAGvD,MAAM,uDAAuD,CAAC;AAgE/D,MAAM,WAAW,kDAAkD;IACjE,QAAQ,CAAC,iBAAiB,EAAE,iDAAiD,CAAC;IAC9E,QAAQ,CAAC,OAAO,EAAE,6BAA6B,CAAC,aAAa,CAAC;IAC9D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,2FAA2F;IAC3F,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,2EAA2E;AAC3E,wBAAgB,6CAA6C,CAC3D,KAAK,EAAE,kDAAkD,GACxD,gDAAgD,CA2ClD"}
@@ -41,7 +41,7 @@ function projectPublicUnit(sourceUnit, manifest) {
41
41
  sourceUnit,
42
42
  publishedUnit: recreateUnit(sourceUnit, { assetRequests }),
43
43
  decision: redacted ? TechnicalDocumentationPublicationDecision.REDACT : TechnicalDocumentationPublicationDecision.INCLUDE,
44
- reason: redacted ? TechnicalDocumentationPublicationReason.RESTRICTED_SOURCE : TechnicalDocumentationPublicationReason.INCLUDED_BY_POLICY,
44
+ reason: redacted ? TechnicalDocumentationPublicationReason.RESTRICTED_ASSET_REDACTED : TechnicalDocumentationPublicationReason.INCLUDED_BY_POLICY,
45
45
  };
46
46
  }
47
47
  /** Projects and minimizes the public framework bundle before rendering. */
@@ -1 +1 @@
1
- {"version":3,"file":"technical-documentation-publication-policy.js","sourceRoot":"","sources":["../../../../../src/companion/application-documentation/technical-documentation-publication-policy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n TechnicalDocumentationAssetAccessClass,\n TechnicalDocumentationChannel,\n TechnicalDocumentationEditorialStatus,\n TechnicalDocumentationPublicationDecision,\n TechnicalDocumentationPublicationReason,\n TechnicalDocumentationSourceClassification,\n createTechnicalDocumentationAuthorizedBundleManifestV1,\n createTechnicalDocumentationUnitV1,\n type TechnicalDocumentationAuthorizedBundleManifestV1,\n type TechnicalDocumentationPrivateDerivationManifestV1,\n type TechnicalDocumentationUnitPublicationDecisionV1,\n type TechnicalDocumentationUnitV1,\n} from '@wildo-ai/saas-specifications/technical-documentation';\n\nimport { evaluateTechnicalDocumentationApplicability } from './technical-documentation-operational-evidence';\n\ninterface PolicyProjectionCandidate {\n readonly sourceUnit: TechnicalDocumentationUnitV1;\n readonly publishedUnit: TechnicalDocumentationUnitV1 | null;\n readonly decision: TechnicalDocumentationPublicationDecision;\n readonly reason: TechnicalDocumentationPublicationReason;\n}\n\nfunction recreateUnit(\n unit: TechnicalDocumentationUnitV1,\n overrides: Partial<TechnicalDocumentationUnitV1>,\n): TechnicalDocumentationUnitV1 {\n return createTechnicalDocumentationUnitV1({ ...unit, ...overrides });\n}\n\n/**\n * Authorizes one framework unit for the public consumer portal.\n *\n * Application editorial overlays and authenticated/internal publication lanes\n * are intentionally absent. Application-specific authoring will re-enter later\n * through the app-creator acceptance flow, not through this framework policy.\n */\nfunction projectPublicUnit(\n sourceUnit: TechnicalDocumentationUnitV1,\n manifest: TechnicalDocumentationPrivateDerivationManifestV1,\n): PolicyProjectionCandidate {\n if (sourceUnit.editorialStatus !== TechnicalDocumentationEditorialStatus.APPROVED) {\n return {\n sourceUnit,\n publishedUnit: null,\n decision: TechnicalDocumentationPublicationDecision.SUPPRESS,\n reason: TechnicalDocumentationPublicationReason.EDITORIAL_NOT_APPROVED,\n };\n }\n if (!evaluateTechnicalDocumentationApplicability(sourceUnit.applicabilityRequirements, manifest.environmentEvidenceSnapshot).applicable) {\n return {\n sourceUnit,\n publishedUnit: null,\n decision: TechnicalDocumentationPublicationDecision.SUPPRESS,\n reason: TechnicalDocumentationPublicationReason.APPLICABILITY_NOT_PROVEN,\n };\n }\n if (sourceUnit.provenance.some((source) => source.classification !== TechnicalDocumentationSourceClassification.PUBLIC)) {\n return {\n sourceUnit,\n publishedUnit: null,\n decision: TechnicalDocumentationPublicationDecision.SUPPRESS,\n reason: TechnicalDocumentationPublicationReason.RESTRICTED_SOURCE,\n };\n }\n\n const assetRequests = sourceUnit.assetRequests.filter((asset) => asset.accessClass === TechnicalDocumentationAssetAccessClass.PUBLIC);\n const redacted = assetRequests.length !== sourceUnit.assetRequests.length;\n return {\n sourceUnit,\n publishedUnit: recreateUnit(sourceUnit, { assetRequests }),\n decision: redacted ? TechnicalDocumentationPublicationDecision.REDACT : TechnicalDocumentationPublicationDecision.INCLUDE,\n reason: redacted ? TechnicalDocumentationPublicationReason.RESTRICTED_SOURCE : TechnicalDocumentationPublicationReason.INCLUDED_BY_POLICY,\n };\n}\n\nexport interface ProjectTechnicalDocumentationAuthorizedBundleInput {\n readonly privateDerivation: TechnicalDocumentationPrivateDerivationManifestV1;\n readonly channel: TechnicalDocumentationChannel.PUBLIC_PORTAL;\n readonly policyRef: string;\n readonly policyVersion: number;\n /** This bundle's own identity; the render manifest and the publication pointer name it. */\n readonly bundleRef: string;\n readonly bundleVersion: number;\n}\n\n/** Projects and minimizes the public framework bundle before rendering. */\nexport function projectTechnicalDocumentationAuthorizedBundle(\n input: ProjectTechnicalDocumentationAuthorizedBundleInput,\n): TechnicalDocumentationAuthorizedBundleManifestV1 {\n const initial = input.privateDerivation.units.map((unit) => projectPublicUnit(unit, input.privateDerivation));\n const emittedUnitRefs = new Set(initial.flatMap((candidate) => candidate.publishedUnit === null ? [] : [candidate.publishedUnit.unitRef]));\n const finalized = initial.map((candidate) => {\n if (candidate.publishedUnit === null) return candidate;\n const links = candidate.publishedUnit.links.filter((link) => link.targetUnitRef === null || emittedUnitRefs.has(link.targetUnitRef));\n if (links.length === candidate.publishedUnit.links.length) return candidate;\n return {\n ...candidate,\n publishedUnit: recreateUnit(candidate.publishedUnit, { links }),\n decision: TechnicalDocumentationPublicationDecision.REDACT,\n reason: TechnicalDocumentationPublicationReason.ACCESS_CLASS_MISMATCH,\n };\n });\n const units = finalized.flatMap((candidate) => candidate.publishedUnit === null ? [] : [candidate.publishedUnit]);\n const decisions: TechnicalDocumentationUnitPublicationDecisionV1[] = finalized.map((candidate) => ({\n unitRef: candidate.sourceUnit.unitRef,\n decision: candidate.decision,\n reason: candidate.reason,\n /*\n * Both versions name the SAME unit version, and that is correct: a redaction narrows a unit's\n * content without minting a new authored version. `decision` is what distinguishes INCLUDE\n * from REDACT — it always was; the digest pair merely made the difference visible as two hex\n * strings nobody could read.\n */\n sourceUnitVersion: candidate.sourceUnit.unitVersion,\n publishedUnitVersion: candidate.publishedUnit?.unitVersion ?? null,\n }));\n\n return createTechnicalDocumentationAuthorizedBundleManifestV1({\n schemaVersion: 1,\n channel: TechnicalDocumentationChannel.PUBLIC_PORTAL,\n policyRef: input.policyRef,\n policyVersion: input.policyVersion,\n bundleRef: input.bundleRef,\n bundleVersion: input.bundleVersion,\n derivationIdentity: {\n ref: input.privateDerivation.derivationRef,\n version: input.privateDerivation.derivationVersion,\n },\n units,\n decisions,\n });\n}\n"]}
1
+ {"version":3,"file":"technical-documentation-publication-policy.js","sourceRoot":"","sources":["../../../../src/companion/application-documentation/technical-documentation-publication-policy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n TechnicalDocumentationAssetAccessClass,\n TechnicalDocumentationChannel,\n TechnicalDocumentationEditorialStatus,\n TechnicalDocumentationPublicationDecision,\n TechnicalDocumentationPublicationReason,\n TechnicalDocumentationSourceClassification,\n createTechnicalDocumentationAuthorizedBundleManifestV1,\n createTechnicalDocumentationUnitV1,\n type TechnicalDocumentationAuthorizedBundleManifestV1,\n type TechnicalDocumentationPrivateDerivationManifestV1,\n type TechnicalDocumentationUnitPublicationDecisionV1,\n type TechnicalDocumentationUnitV1,\n} from '@wildo-ai/saas-specifications/technical-documentation';\n\nimport { evaluateTechnicalDocumentationApplicability } from './technical-documentation-operational-evidence';\n\ninterface PolicyProjectionCandidate {\n readonly sourceUnit: TechnicalDocumentationUnitV1;\n readonly publishedUnit: TechnicalDocumentationUnitV1 | null;\n readonly decision: TechnicalDocumentationPublicationDecision;\n readonly reason: TechnicalDocumentationPublicationReason;\n}\n\nfunction recreateUnit(\n unit: TechnicalDocumentationUnitV1,\n overrides: Partial<TechnicalDocumentationUnitV1>,\n): TechnicalDocumentationUnitV1 {\n return createTechnicalDocumentationUnitV1({ ...unit, ...overrides });\n}\n\n/**\n * Authorizes one framework unit for the public consumer portal.\n *\n * Application editorial overlays and authenticated/internal publication lanes\n * are intentionally absent. Application-specific authoring will re-enter later\n * through the app-creator acceptance flow, not through this framework policy.\n */\nfunction projectPublicUnit(\n sourceUnit: TechnicalDocumentationUnitV1,\n manifest: TechnicalDocumentationPrivateDerivationManifestV1,\n): PolicyProjectionCandidate {\n if (sourceUnit.editorialStatus !== TechnicalDocumentationEditorialStatus.APPROVED) {\n return {\n sourceUnit,\n publishedUnit: null,\n decision: TechnicalDocumentationPublicationDecision.SUPPRESS,\n reason: TechnicalDocumentationPublicationReason.EDITORIAL_NOT_APPROVED,\n };\n }\n if (!evaluateTechnicalDocumentationApplicability(sourceUnit.applicabilityRequirements, manifest.environmentEvidenceSnapshot).applicable) {\n return {\n sourceUnit,\n publishedUnit: null,\n decision: TechnicalDocumentationPublicationDecision.SUPPRESS,\n reason: TechnicalDocumentationPublicationReason.APPLICABILITY_NOT_PROVEN,\n };\n }\n if (sourceUnit.provenance.some((source) => source.classification !== TechnicalDocumentationSourceClassification.PUBLIC)) {\n return {\n sourceUnit,\n publishedUnit: null,\n decision: TechnicalDocumentationPublicationDecision.SUPPRESS,\n reason: TechnicalDocumentationPublicationReason.RESTRICTED_SOURCE,\n };\n }\n\n const assetRequests = sourceUnit.assetRequests.filter((asset) => asset.accessClass === TechnicalDocumentationAssetAccessClass.PUBLIC);\n const redacted = assetRequests.length !== sourceUnit.assetRequests.length;\n return {\n sourceUnit,\n publishedUnit: recreateUnit(sourceUnit, { assetRequests }),\n decision: redacted ? TechnicalDocumentationPublicationDecision.REDACT : TechnicalDocumentationPublicationDecision.INCLUDE,\n reason: redacted ? TechnicalDocumentationPublicationReason.RESTRICTED_ASSET_REDACTED : TechnicalDocumentationPublicationReason.INCLUDED_BY_POLICY,\n };\n}\n\nexport interface ProjectTechnicalDocumentationAuthorizedBundleInput {\n readonly privateDerivation: TechnicalDocumentationPrivateDerivationManifestV1;\n readonly channel: TechnicalDocumentationChannel.PUBLIC_PORTAL;\n readonly policyRef: string;\n readonly policyVersion: number;\n /** This bundle's own identity; the render manifest and the publication pointer name it. */\n readonly bundleRef: string;\n readonly bundleVersion: number;\n}\n\n/** Projects and minimizes the public framework bundle before rendering. */\nexport function projectTechnicalDocumentationAuthorizedBundle(\n input: ProjectTechnicalDocumentationAuthorizedBundleInput,\n): TechnicalDocumentationAuthorizedBundleManifestV1 {\n const initial = input.privateDerivation.units.map((unit) => projectPublicUnit(unit, input.privateDerivation));\n const emittedUnitRefs = new Set(initial.flatMap((candidate) => candidate.publishedUnit === null ? [] : [candidate.publishedUnit.unitRef]));\n const finalized = initial.map((candidate) => {\n if (candidate.publishedUnit === null) return candidate;\n const links = candidate.publishedUnit.links.filter((link) => link.targetUnitRef === null || emittedUnitRefs.has(link.targetUnitRef));\n if (links.length === candidate.publishedUnit.links.length) return candidate;\n return {\n ...candidate,\n publishedUnit: recreateUnit(candidate.publishedUnit, { links }),\n decision: TechnicalDocumentationPublicationDecision.REDACT,\n reason: TechnicalDocumentationPublicationReason.ACCESS_CLASS_MISMATCH,\n };\n });\n const units = finalized.flatMap((candidate) => candidate.publishedUnit === null ? [] : [candidate.publishedUnit]);\n const decisions: TechnicalDocumentationUnitPublicationDecisionV1[] = finalized.map((candidate) => ({\n unitRef: candidate.sourceUnit.unitRef,\n decision: candidate.decision,\n reason: candidate.reason,\n /*\n * Both versions name the SAME unit version, and that is correct: a redaction narrows a unit's\n * content without minting a new authored version. `decision` is what distinguishes INCLUDE\n * from REDACT — it always was; the digest pair merely made the difference visible as two hex\n * strings nobody could read.\n */\n sourceUnitVersion: candidate.sourceUnit.unitVersion,\n publishedUnitVersion: candidate.publishedUnit?.unitVersion ?? null,\n }));\n\n return createTechnicalDocumentationAuthorizedBundleManifestV1({\n schemaVersion: 1,\n channel: TechnicalDocumentationChannel.PUBLIC_PORTAL,\n policyRef: input.policyRef,\n policyVersion: input.policyVersion,\n bundleRef: input.bundleRef,\n bundleVersion: input.bundleVersion,\n derivationIdentity: {\n ref: input.privateDerivation.derivationRef,\n version: input.privateDerivation.derivationVersion,\n },\n units,\n decisions,\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"application-consumer-documentation-content-loader.d.ts","sourceRoot":"","sources":["../../../../../src/companion/content/application-consumer-documentation-content-loader.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,mDAAmD,EACxD,KAAK,4CAA4C,EACjD,KAAK,yBAAyB,EAC/B,MAAM,uDAAuD,CAAC;AAG/D,OAAO,EAKL,KAAK,iDAAiD,EACtD,KAAK,qDAAqD,EAE1D,gDAAgD,EAChD,KAAK,iDAAiD,EACtD,KAAK,qDAAqD,EAC3D,MAAM,2EAA2E,CAAC;AAoEnF,iGAAiG;AACjG,wBAAgB,uDAAuD,CACrE,eAAe,EAAE,SAAS,iDAAiD,EAAE,EAC7E,WAAW,EAAE,MAAM,EACnB,oBAAoB,SAAI,GACvB,iDAAiD,CA2CnD;AAED;;;;;GAKG;AACH,eAAO,MAAM,sDAAsD;;;;;;;;;;;;;;;;;;CAGlE,CAAC;AAEF,MAAM,WAAW,mDAAmD;IAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,gDAAgD,CAAC;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,qDAAqD;IACpE,QAAQ,CAAC,QAAQ,EAAE,mDAAmD,CAAC;IACvE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,iDAAiD,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG;QACxG,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,CAAC,qDAAqD,CAAC,EAAE,CAAC;QAC3F,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,qDAAqD,EAAE,YAAY,GAAG,cAAc,CAAC,CAAC,GAAG;YAC/H,QAAQ,CAAC,UAAU,EAAE,SAAS,yBAAyB,EAAE,CAAC;YAC1D,QAAQ,CAAC,YAAY,EAAE,SAAS,4CAA4C,EAAE,CAAC;SAChF,CAAC,EAAE,CAAC;KACN,CAAC;IACF,QAAQ,CAAC,KAAK,EAAE,SAAS,mDAAmD,EAAE,CAAC;IAC/E,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC;CACnD;AA4BD,kFAAkF;AAClF,wBAAgB,mDAAmD,CACjE,aAAa,GAAE,OAAgE,EAC/E,oBAAoB,GAAE,SAAS,iDAAiD,EAA2D,GAC1I,qDAAqD,CA0CvD"}
1
+ {"version":3,"file":"application-consumer-documentation-content-loader.d.ts","sourceRoot":"","sources":["../../../../src/companion/content/application-consumer-documentation-content-loader.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,mDAAmD,EACxD,KAAK,4CAA4C,EACjD,KAAK,yBAAyB,EAC/B,MAAM,uDAAuD,CAAC;AAG/D,OAAO,EAKL,KAAK,iDAAiD,EACtD,KAAK,qDAAqD,EAE1D,gDAAgD,EAChD,KAAK,iDAAiD,EACtD,KAAK,qDAAqD,EAC3D,MAAM,2EAA2E,CAAC;AAoEnF,iGAAiG;AACjG,wBAAgB,uDAAuD,CACrE,eAAe,EAAE,SAAS,iDAAiD,EAAE,EAC7E,WAAW,EAAE,MAAM,EACnB,oBAAoB,SAAI,GACvB,iDAAiD,CA2CnD;AAED;;;;;GAKG;AACH,eAAO,MAAM,sDAAsD;;;;;;;;;;;;;;;;;;CAGlE,CAAC;AAEF,MAAM,WAAW,mDAAmD;IAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,gDAAgD,CAAC;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,qDAAqD;IACpE,QAAQ,CAAC,QAAQ,EAAE,mDAAmD,CAAC;IACvE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,iDAAiD,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG;QACxG,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,CAAC,qDAAqD,CAAC,EAAE,CAAC;QAC3F,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,qDAAqD,EAAE,YAAY,GAAG,cAAc,CAAC,CAAC,GAAG;YAC/H,QAAQ,CAAC,UAAU,EAAE,SAAS,yBAAyB,EAAE,CAAC;YAC1D,QAAQ,CAAC,YAAY,EAAE,SAAS,4CAA4C,EAAE,CAAC;SAChF,CAAC,EAAE,CAAC;KACN,CAAC;IACF,QAAQ,CAAC,KAAK,EAAE,SAAS,mDAAmD,EAAE,CAAC;IAC/E,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC;CACnD;AA4BD,kFAAkF;AAClF,wBAAgB,mDAAmD,CACjE,aAAa,GAAE,OAAgE,EAC/E,oBAAoB,GAAE,SAAS,iDAAiD,EAA2D,GAC1I,qDAAqD,CA0CvD"}
@@ -14,6 +14,7 @@
14
14
  */
15
15
  export * from './operation-projection.schemas';
16
16
  export * from './openapi-generator';
17
+ export * from './manual-controller-route-projection';
17
18
  export * from './publish-result.types';
18
19
  export * from './zod-to-openapi';
19
20
  export * from './spec-to-operation-doc';
@@ -26,11 +27,11 @@ export * from './rendering/technical-documentation-authorized-bundle-reader';
26
27
  export * from './rendering/technical-documentation-docusaurus-renderer';
27
28
  export * from './rendering/technical-documentation-build-measurement';
28
29
  export * from './rendering/technical-documentation-managed-tree-validator';
29
- export * from './rendering/technical-documentation-markdown-renderer';
30
30
  export * from './rendering/technical-documentation-openapi-renderer';
31
31
  export * from './rendering/technical-documentation-render-model';
32
32
  export * from './rendering/technical-documentation-search-index-renderer';
33
33
  export * from './application-documentation/technical-documentation-engine-content-bundle';
34
+ export * from './application-documentation/application-domain-documentation';
34
35
  export * from './application-documentation/application-integration-documentation';
35
36
  export * from './application-documentation/application-administration-documentation';
36
37
  export * from './application-documentation/application-authentication-documentation';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/companion/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6DAA6D,CAAC;AAC5E,cAAc,kDAAkD,CAAC;AACjE,cAAc,sCAAsC,CAAC;AACrD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AACnE,cAAc,8DAA8D,CAAC;AAC7E,cAAc,yDAAyD,CAAC;AACxE,cAAc,uDAAuD,CAAC;AACtE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,uDAAuD,CAAC;AACtE,cAAc,sDAAsD,CAAC;AACrE,cAAc,kDAAkD,CAAC;AACjE,cAAc,2DAA2D,CAAC;AAC1E,cAAc,2EAA2E,CAAC;AAC1F,cAAc,mEAAmE,CAAC;AAClF,cAAc,sEAAsE,CAAC;AACrF,cAAc,sEAAsE,CAAC;AACrF,cAAc,kEAAkE,CAAC;AACjF,cAAc,yEAAyE,CAAC;AACxF,cAAc,kFAAkF,CAAC;AACjG,cAAc,0EAA0E,CAAC;AACzF,cAAc,wEAAwE,CAAC;AACvF,cAAc,wEAAwE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/companion/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sCAAsC,CAAC;AACrD,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6DAA6D,CAAC;AAC5E,cAAc,kDAAkD,CAAC;AACjE,cAAc,sCAAsC,CAAC;AACrD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AACnE,cAAc,8DAA8D,CAAC;AAC7E,cAAc,yDAAyD,CAAC;AACxE,cAAc,uDAAuD,CAAC;AACtE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,sDAAsD,CAAC;AACrE,cAAc,kDAAkD,CAAC;AACjE,cAAc,2DAA2D,CAAC;AAC1E,cAAc,2EAA2E,CAAC;AAC1F,cAAc,8DAA8D,CAAC;AAC7E,cAAc,mEAAmE,CAAC;AAClF,cAAc,sEAAsE,CAAC;AACrF,cAAc,sEAAsE,CAAC;AACrF,cAAc,kEAAkE,CAAC;AACjF,cAAc,yEAAyE,CAAC;AACxF,cAAc,kFAAkF,CAAC;AACjG,cAAc,0EAA0E,CAAC;AACzF,cAAc,wEAAwE,CAAC;AACvF,cAAc,wEAAwE,CAAC"}
@@ -14,6 +14,7 @@
14
14
  */
15
15
  export * from './operation-projection.schemas.js';
16
16
  export * from './openapi-generator.js';
17
+ export * from './manual-controller-route-projection.js';
17
18
  export * from './publish-result.types.js';
18
19
  export * from './zod-to-openapi.js';
19
20
  export * from './spec-to-operation-doc.js';
@@ -26,11 +27,11 @@ export * from './rendering/technical-documentation-authorized-bundle-reader.js';
26
27
  export * from './rendering/technical-documentation-docusaurus-renderer.js';
27
28
  export * from './rendering/technical-documentation-build-measurement.js';
28
29
  export * from './rendering/technical-documentation-managed-tree-validator.js';
29
- export * from './rendering/technical-documentation-markdown-renderer.js';
30
30
  export * from './rendering/technical-documentation-openapi-renderer.js';
31
31
  export * from './rendering/technical-documentation-render-model.js';
32
32
  export * from './rendering/technical-documentation-search-index-renderer.js';
33
33
  export * from './application-documentation/technical-documentation-engine-content-bundle.js';
34
+ export * from './application-documentation/application-domain-documentation.js';
34
35
  export * from './application-documentation/application-integration-documentation.js';
35
36
  export * from './application-documentation/application-administration-documentation.js';
36
37
  export * from './application-documentation/application-authentication-documentation.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/companion/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6DAA6D,CAAC;AAC5E,cAAc,kDAAkD,CAAC;AACjE,cAAc,sCAAsC,CAAC;AACrD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AACnE,cAAc,8DAA8D,CAAC;AAC7E,cAAc,yDAAyD,CAAC;AACxE,cAAc,uDAAuD,CAAC;AACtE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,uDAAuD,CAAC;AACtE,cAAc,sDAAsD,CAAC;AACrE,cAAc,kDAAkD,CAAC;AACjE,cAAc,2DAA2D,CAAC;AAC1E,cAAc,2EAA2E,CAAC;AAC1F,cAAc,mEAAmE,CAAC;AAClF,cAAc,sEAAsE,CAAC;AACrF,cAAc,sEAAsE,CAAC;AACrF,cAAc,kEAAkE,CAAC;AACjF,cAAc,yEAAyE,CAAC;AACxF,cAAc,kFAAkF,CAAC;AACjG,cAAc,0EAA0E,CAAC;AACzF,cAAc,wEAAwE,CAAC;AACvF,cAAc,wEAAwE,CAAC","sourcesContent":["/**\n * `@wildo-ai/saas-technical-doc/companion` — implementation surface.\n *\n * Pure-function OpenAPI projection, its input contract, and Node-side verification/materialization utilities for an exact engine-owned\n * application-consumer documentation content bundle. Consumed by:\n * - `examples/<app>/.wildo-saas/wildo-dev-companion/` controllers\n * that call `generateOpenApiDocuments(input)` to produce\n * the normal and application-administration YAML/JSON OpenAPI documents.\n *\n * @wildo-boundary\n * Re-exports only companion-side OpenAPI and application-consumer content projection surfaces. All are React-free; the content loader is Node-only and\n * never enters the browser runtime closure. Reusable authored content and portable identities are owned by the separate `./content`\n * entry point.\n */\n\nexport * from './operation-projection.schemas';\nexport * from './openapi-generator';\nexport * from './publish-result.types';\nexport * from './zod-to-openapi';\nexport * from './spec-to-operation-doc';\nexport * from './content/application-consumer-documentation-content-loader';\nexport * from './technical-documentation-capture-execution-port';\nexport * from './technical-documentation-asset-path';\nexport * from './technical-documentation-diagram-materializer';\nexport * from './technical-documentation-placeholder-materializer';\nexport * from './rendering/technical-documentation-authorized-bundle-reader';\nexport * from './rendering/technical-documentation-docusaurus-renderer';\nexport * from './rendering/technical-documentation-build-measurement';\nexport * from './rendering/technical-documentation-managed-tree-validator';\nexport * from './rendering/technical-documentation-markdown-renderer';\nexport * from './rendering/technical-documentation-openapi-renderer';\nexport * from './rendering/technical-documentation-render-model';\nexport * from './rendering/technical-documentation-search-index-renderer';\nexport * from './application-documentation/technical-documentation-engine-content-bundle';\nexport * from './application-documentation/application-integration-documentation';\nexport * from './application-documentation/application-administration-documentation';\nexport * from './application-documentation/application-authentication-documentation';\nexport * from './application-documentation/application-connection-documentation';\nexport * from './application-documentation/application-organization-role-documentation';\nexport * from './application-documentation/application-organization-unit-resource-documentation';\nexport * from './application-documentation/technical-documentation-operational-evidence';\nexport * from './application-documentation/technical-documentation-private-derivation';\nexport * from './application-documentation/technical-documentation-publication-policy';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/companion/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sCAAsC,CAAC;AACrD,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6DAA6D,CAAC;AAC5E,cAAc,kDAAkD,CAAC;AACjE,cAAc,sCAAsC,CAAC;AACrD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,oDAAoD,CAAC;AACnE,cAAc,8DAA8D,CAAC;AAC7E,cAAc,yDAAyD,CAAC;AACxE,cAAc,uDAAuD,CAAC;AACtE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,sDAAsD,CAAC;AACrE,cAAc,kDAAkD,CAAC;AACjE,cAAc,2DAA2D,CAAC;AAC1E,cAAc,2EAA2E,CAAC;AAC1F,cAAc,8DAA8D,CAAC;AAC7E,cAAc,mEAAmE,CAAC;AAClF,cAAc,sEAAsE,CAAC;AACrF,cAAc,sEAAsE,CAAC;AACrF,cAAc,kEAAkE,CAAC;AACjF,cAAc,yEAAyE,CAAC;AACxF,cAAc,kFAAkF,CAAC;AACjG,cAAc,0EAA0E,CAAC;AACzF,cAAc,wEAAwE,CAAC;AACvF,cAAc,wEAAwE,CAAC","sourcesContent":["/**\n * `@wildo-ai/saas-technical-doc/companion` — implementation surface.\n *\n * Pure-function OpenAPI projection, its input contract, and Node-side verification/materialization utilities for an exact engine-owned\n * application-consumer documentation content bundle. Consumed by:\n * - `examples/<app>/.wildo-saas/wildo-dev-companion/` controllers\n * that call `generateOpenApiDocuments(input)` to produce\n * the normal and application-administration YAML/JSON OpenAPI documents.\n *\n * @wildo-boundary\n * Re-exports only companion-side OpenAPI and application-consumer content projection surfaces. All are React-free; the content loader is Node-only and\n * never enters the browser runtime closure. Reusable authored content and portable identities are owned by the separate `./content`\n * entry point.\n */\n\nexport * from './operation-projection.schemas';\nexport * from './openapi-generator';\nexport * from './manual-controller-route-projection';\nexport * from './publish-result.types';\nexport * from './zod-to-openapi';\nexport * from './spec-to-operation-doc';\nexport * from './content/application-consumer-documentation-content-loader';\nexport * from './technical-documentation-capture-execution-port';\nexport * from './technical-documentation-asset-path';\nexport * from './technical-documentation-diagram-materializer';\nexport * from './technical-documentation-placeholder-materializer';\nexport * from './rendering/technical-documentation-authorized-bundle-reader';\nexport * from './rendering/technical-documentation-docusaurus-renderer';\nexport * from './rendering/technical-documentation-build-measurement';\nexport * from './rendering/technical-documentation-managed-tree-validator';\nexport * from './rendering/technical-documentation-openapi-renderer';\nexport * from './rendering/technical-documentation-render-model';\nexport * from './rendering/technical-documentation-search-index-renderer';\nexport * from './application-documentation/technical-documentation-engine-content-bundle';\nexport * from './application-documentation/application-domain-documentation';\nexport * from './application-documentation/application-integration-documentation';\nexport * from './application-documentation/application-administration-documentation';\nexport * from './application-documentation/application-authentication-documentation';\nexport * from './application-documentation/application-connection-documentation';\nexport * from './application-documentation/application-organization-role-documentation';\nexport * from './application-documentation/application-organization-unit-resource-documentation';\nexport * from './application-documentation/technical-documentation-operational-evidence';\nexport * from './application-documentation/technical-documentation-private-derivation';\nexport * from './application-documentation/technical-documentation-publication-policy';\n"]}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * The application's manually mounted controller routes, projected into the same shape the resource
3
+ * registry produces — so they reach the generated API reference through the existing generator with
4
+ * no change to it.
5
+ *
6
+ * ## The gap this closes
7
+ *
8
+ * A Wildo application serves two disjoint families of HTTP routes. The RESOURCE REGISTRY builds one
9
+ * family from the resource configurations, and every mechanism downstream projects that family and
10
+ * only that family. The other family is mounted by hand, controller by controller, from
11
+ * `MANUAL_CONTROLLER_ROUTES_URLS`: sign-in, token refresh, MFA, passkeys, SAML, the OAuth 2.0
12
+ * authorization-server endpoints, the Model Context Protocol and Agent2Agent doors, file transfer,
13
+ * i18n labels, charts.
14
+ *
15
+ * Nothing projected the second family. Measured 2026-09-09 across the four committed documents of
16
+ * the two dogfood applications — 439, 576, 146 and 160 paths — **not one contained a single path
17
+ * under `/auth`**. The reference explained the three credential formats every operation accepts and
18
+ * never published the endpoint that issues one. Worse, four operation-header descriptions in the
19
+ * same document told a reader the step-up token is "obtained from `POST /api/v1/auth/reauth`", a
20
+ * path that document does not contain: the reference already pointed at this hole and could not
21
+ * fill it.
22
+ *
23
+ * ## Why this lives HERE and not in the companion projector
24
+ *
25
+ * The companion's `openapi-generation-input` projector walks the APPLICATION's resolved registry, so
26
+ * it must run inside the introspection subprocess with the app's schema graph loaded. This
27
+ * projection needs none of that: the manual routes are the ENGINE's own contract, identical in every
28
+ * generated application, and the catalog that describes them is a static table in
29
+ * `@wildo-ai/saas-models`. Keeping it beside the generator makes it a pure function of framework
30
+ * knowledge — testable on its own, like `SECURITY_SCHEMES` and the API-conventions markdown that
31
+ * already live here — instead of one more thing the subprocess owns.
32
+ *
33
+ * ## Why the generator needed no change
34
+ *
35
+ * `generateOpenApiDocuments` is a pure function over `OpenApiGenerationInput`. It groups by
36
+ * `resourceIdentifier`, keys path items on `path` + `httpVerb`, and emits whatever identity a
37
+ * projection carries; it has no opinion about where a projected operation came from. So a manual
38
+ * route reaches the document as an ordinary `OperationProjection` whose `resourceIdentifier` is its
39
+ * documentation GROUP, accompanied by a matching `ResourceTag` — which is the join the renderer's
40
+ * conservation check makes.
41
+ *
42
+ * ## What a manual projection deliberately does NOT carry
43
+ *
44
+ * `requestBodySchema` and `responseBodySchema` stay `null`. Those bodies are Zod schemas declared
45
+ * inside backend controllers, in a package neither this one nor the introspection subprocess loads;
46
+ * hand-copying them into the catalog would create a second copy of a contract with nothing checking
47
+ * the two agree — the drift this repository refuses everywhere else. Each catalog entry authors a
48
+ * `responseStatuses` row instead (without one the generator emits a bare `204 No Content`, which is
49
+ * wrong for almost every route here) and describes its payload in prose. That is an honest account of
50
+ * what is known, and it is strictly better than a reference in which the endpoint does not exist.
51
+ * Projecting the real schemas is a later, larger change that must first move them into a shared
52
+ * module.
53
+ */
54
+ import { ManualControllerRouteGroup } from '@wildo-ai/saas-models';
55
+ import { EngineResourceSubDomain } from '@wildo-ai/saas-specifications';
56
+ import { type OperationProjection, type ResourceTag } from './operation-projection.schemas';
57
+ /**
58
+ * Express `:param` → OpenAPI `{param}`.
59
+ *
60
+ * The resource lane never needs this: its URL builder already emits brace form. The manual registry
61
+ * is the backend's own mount table, written the way Express reads it, so the conversion belongs at
62
+ * this boundary rather than in the registry — which the router consumes verbatim and must not have
63
+ * rewritten under it.
64
+ */
65
+ export declare function toOpenApiPathTemplate(expressPath: string): string;
66
+ /**
67
+ * The operation identifier for one manual route — derived, never authored.
68
+ *
69
+ * `buildOperationId` composes `<verb><Resource>` and drops the resource noun when the verb phrase
70
+ * already contains it. Starting the identifier WITH the group name is what triggers that drop, so
71
+ * `AUTH_IDENTIFY` in the `authentication` group reads `authenticationIdentify` rather than the
72
+ * stuttering `authIdentifyAuthentication`. Derived rather than authored so a route key added
73
+ * tomorrow gets a coherent, stable id without anybody having to think about it.
74
+ */
75
+ export declare function manualRouteOperationIdentifier(routeKey: string, group: ManualControllerRouteGroup): string;
76
+ /**
77
+ * The API-reference group each manual-route group belongs to — the SAME vocabulary the engine's own
78
+ * resources are classified by.
79
+ *
80
+ * ## Why these join the engine's categories instead of forming their own
81
+ *
82
+ * A tag with no category is not merely ungrouped: `applyApiReferenceResourceCategories` REFUSES the
83
+ * publication of any application that declares `apiReferenceResourceCategories` at all, naming every
84
+ * tag no category claims. So six uncategorised groups would have turned "the auth endpoints are
85
+ * missing from the reference" into "the reference does not publish", for every application with an
86
+ * authored taxonomy — a worse failure than the one this projection fixes.
87
+ *
88
+ * Categorising them as their OWN groups was the alternative and is rejected: the renderer groups by
89
+ * category, so `authentication` (54 routes) would sit as a sibling of `auth` (the SSO, SCIM, session
90
+ * and token RESOURCES), and a reader looking for authentication would find it split across two
91
+ * adjacent headings for no reason they could see. The endpoint that issues a token and the resource
92
+ * that configures how tokens are issued belong under one heading.
93
+ *
94
+ * TOTAL over {@link ManualControllerRouteGroup}: a new group is a compile error until it is placed.
95
+ * That is the same guarantee the route catalog itself carries, and for the same reason — a group
96
+ * that nobody remembered to classify is a publication failure in an application nobody has run yet.
97
+ */
98
+ export declare const MANUAL_ROUTE_GROUP_SUB_DOMAINS: Record<ManualControllerRouteGroup, EngineResourceSubDomain>;
99
+ /**
100
+ * Every PUBLISHED manual route as an `OperationProjection`, plus the `ResourceTag` for each group
101
+ * that contributed one.
102
+ *
103
+ * Pure and argument-free: the manual route table is framework knowledge, identical in every
104
+ * generated application, so there is nothing about a particular application to pass in. Withheld
105
+ * routes are skipped here and nowhere else — the catalog is the single place a publication decision
106
+ * is recorded, and it requires a written reason for each one.
107
+ */
108
+ export declare function projectManualControllerRouteOperations(): {
109
+ operations: OperationProjection[];
110
+ resourceTags: ResourceTag[];
111
+ };
112
+ //# sourceMappingURL=manual-controller-route-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual-controller-route-projection.d.ts","sourceRoot":"","sources":["../../../src/companion/manual-controller-route-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,EAOL,0BAA0B,EAG3B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAEL,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAOL,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,gCAAgC,CAAC;AA0BxC;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,0BAA0B,GAAG,MAAM,CAG1G;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,0BAA0B,EAAE,uBAAuB,CAoBtG,CAAC;AAQF;;;;;;;;GAQG;AACH,wBAAgB,sCAAsC,IAAI;IACxD,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B,CA4FA"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * The application's manually mounted controller routes, projected into the same shape the resource
3
+ * registry produces — so they reach the generated API reference through the existing generator with
4
+ * no change to it.
5
+ *
6
+ * ## The gap this closes
7
+ *
8
+ * A Wildo application serves two disjoint families of HTTP routes. The RESOURCE REGISTRY builds one
9
+ * family from the resource configurations, and every mechanism downstream projects that family and
10
+ * only that family. The other family is mounted by hand, controller by controller, from
11
+ * `MANUAL_CONTROLLER_ROUTES_URLS`: sign-in, token refresh, MFA, passkeys, SAML, the OAuth 2.0
12
+ * authorization-server endpoints, the Model Context Protocol and Agent2Agent doors, file transfer,
13
+ * i18n labels, charts.
14
+ *
15
+ * Nothing projected the second family. Measured 2026-09-09 across the four committed documents of
16
+ * the two dogfood applications — 439, 576, 146 and 160 paths — **not one contained a single path
17
+ * under `/auth`**. The reference explained the three credential formats every operation accepts and
18
+ * never published the endpoint that issues one. Worse, four operation-header descriptions in the
19
+ * same document told a reader the step-up token is "obtained from `POST /api/v1/auth/reauth`", a
20
+ * path that document does not contain: the reference already pointed at this hole and could not
21
+ * fill it.
22
+ *
23
+ * ## Why this lives HERE and not in the companion projector
24
+ *
25
+ * The companion's `openapi-generation-input` projector walks the APPLICATION's resolved registry, so
26
+ * it must run inside the introspection subprocess with the app's schema graph loaded. This
27
+ * projection needs none of that: the manual routes are the ENGINE's own contract, identical in every
28
+ * generated application, and the catalog that describes them is a static table in
29
+ * `@wildo-ai/saas-models`. Keeping it beside the generator makes it a pure function of framework
30
+ * knowledge — testable on its own, like `SECURITY_SCHEMES` and the API-conventions markdown that
31
+ * already live here — instead of one more thing the subprocess owns.
32
+ *
33
+ * ## Why the generator needed no change
34
+ *
35
+ * `generateOpenApiDocuments` is a pure function over `OpenApiGenerationInput`. It groups by
36
+ * `resourceIdentifier`, keys path items on `path` + `httpVerb`, and emits whatever identity a
37
+ * projection carries; it has no opinion about where a projected operation came from. So a manual
38
+ * route reaches the document as an ordinary `OperationProjection` whose `resourceIdentifier` is its
39
+ * documentation GROUP, accompanied by a matching `ResourceTag` — which is the join the renderer's
40
+ * conservation check makes.
41
+ *
42
+ * ## What a manual projection deliberately does NOT carry
43
+ *
44
+ * `requestBodySchema` and `responseBodySchema` stay `null`. Those bodies are Zod schemas declared
45
+ * inside backend controllers, in a package neither this one nor the introspection subprocess loads;
46
+ * hand-copying them into the catalog would create a second copy of a contract with nothing checking
47
+ * the two agree — the drift this repository refuses everywhere else. Each catalog entry authors a
48
+ * `responseStatuses` row instead (without one the generator emits a bare `204 No Content`, which is
49
+ * wrong for almost every route here) and describes its payload in prose. That is an honest account of
50
+ * what is known, and it is strictly better than a reference in which the endpoint does not exist.
51
+ * Projecting the real schemas is a later, larger change that must first move them into a shared
52
+ * module.
53
+ */
54
+ import { HttpMethod, MAIN_API_BASE_PATH, MANUAL_CONTROLLER_ROUTE_DOCUMENTATION, MANUAL_CONTROLLER_ROUTE_GROUP_DESCRIPTIONS, MANUAL_CONTROLLER_ROUTES_URLS, ManualControllerRouteAuthentication, ManualControllerRouteGroup, ManualControllerRouteKey, ManualControllerRoutePublication, } from '@wildo-ai/saas-models';
55
+ import { ENGINE_RESOURCE_SUB_DOMAIN_DOCUMENTATION, EngineResourceSubDomain, } from '@wildo-ai/saas-specifications';
56
+ import { OpenApiSection } from '../openapi/openapi-generation-output.schemas.js';
57
+ import { createOpenApiOperationIdentity, OperationProjectionAuthenticationMode, OperationProjectionHttpVerb, OperationProjectionPrimaryScope, OperationProjectionVariantType, } from './operation-projection.schemas.js';
58
+ /** Catalog vocabulary → the projection's own authentication vocabulary. Total over the source enum. */
59
+ const MANUAL_ROUTE_AUTHENTICATION_MODES = {
60
+ [ManualControllerRouteAuthentication.PUBLIC]: OperationProjectionAuthenticationMode.PUBLIC,
61
+ [ManualControllerRouteAuthentication.ANONYMOUS_SESSION]: OperationProjectionAuthenticationMode.ANONYMOUS_SESSION,
62
+ [ManualControllerRouteAuthentication.AUTHENTICATED]: OperationProjectionAuthenticationMode.AUTHENTICATED,
63
+ [ManualControllerRouteAuthentication.ANONYMOUS_OR_AUTHENTICATED]: OperationProjectionAuthenticationMode.ANONYMOUS_OR_AUTHENTICATED,
64
+ };
65
+ /**
66
+ * `HttpMethod` → the OpenAPI path-item key.
67
+ *
68
+ * `HttpMethod.OPTIONS` is deliberately excluded. OpenAPI does define an `options` path-item key, but
69
+ * no manual route mounts one — CORS preflight is answered by middleware rather than by a route — so
70
+ * admitting it here would be inventing a case. A catalog entry that named `OPTIONS` fails to compile
71
+ * against this map, which is the right moment to find out.
72
+ */
73
+ const MANUAL_ROUTE_HTTP_VERBS = {
74
+ [HttpMethod.GET]: OperationProjectionHttpVerb.GET,
75
+ [HttpMethod.POST]: OperationProjectionHttpVerb.POST,
76
+ [HttpMethod.PUT]: OperationProjectionHttpVerb.PUT,
77
+ [HttpMethod.PATCH]: OperationProjectionHttpVerb.PATCH,
78
+ [HttpMethod.DELETE]: OperationProjectionHttpVerb.DELETE,
79
+ };
80
+ /**
81
+ * Express `:param` → OpenAPI `{param}`.
82
+ *
83
+ * The resource lane never needs this: its URL builder already emits brace form. The manual registry
84
+ * is the backend's own mount table, written the way Express reads it, so the conversion belongs at
85
+ * this boundary rather than in the registry — which the router consumes verbatim and must not have
86
+ * rewritten under it.
87
+ */
88
+ export function toOpenApiPathTemplate(expressPath) {
89
+ return expressPath.replace(/:([A-Za-z0-9_]+)/gu, '{$1}');
90
+ }
91
+ /**
92
+ * The operation identifier for one manual route — derived, never authored.
93
+ *
94
+ * `buildOperationId` composes `<verb><Resource>` and drops the resource noun when the verb phrase
95
+ * already contains it. Starting the identifier WITH the group name is what triggers that drop, so
96
+ * `AUTH_IDENTIFY` in the `authentication` group reads `authenticationIdentify` rather than the
97
+ * stuttering `authIdentifyAuthentication`. Derived rather than authored so a route key added
98
+ * tomorrow gets a coherent, stable id without anybody having to think about it.
99
+ */
100
+ export function manualRouteOperationIdentifier(routeKey, group) {
101
+ const words = routeKey.toLowerCase().split('_').filter((word) => word.length > 0);
102
+ return group + words.map((word) => `${word.charAt(0).toUpperCase()}${word.slice(1)}`).join('');
103
+ }
104
+ /**
105
+ * The API-reference group each manual-route group belongs to — the SAME vocabulary the engine's own
106
+ * resources are classified by.
107
+ *
108
+ * ## Why these join the engine's categories instead of forming their own
109
+ *
110
+ * A tag with no category is not merely ungrouped: `applyApiReferenceResourceCategories` REFUSES the
111
+ * publication of any application that declares `apiReferenceResourceCategories` at all, naming every
112
+ * tag no category claims. So six uncategorised groups would have turned "the auth endpoints are
113
+ * missing from the reference" into "the reference does not publish", for every application with an
114
+ * authored taxonomy — a worse failure than the one this projection fixes.
115
+ *
116
+ * Categorising them as their OWN groups was the alternative and is rejected: the renderer groups by
117
+ * category, so `authentication` (54 routes) would sit as a sibling of `auth` (the SSO, SCIM, session
118
+ * and token RESOURCES), and a reader looking for authentication would find it split across two
119
+ * adjacent headings for no reason they could see. The endpoint that issues a token and the resource
120
+ * that configures how tokens are issued belong under one heading.
121
+ *
122
+ * TOTAL over {@link ManualControllerRouteGroup}: a new group is a compile error until it is placed.
123
+ * That is the same guarantee the route catalog itself carries, and for the same reason — a group
124
+ * that nobody remembered to classify is a publication failure in an application nobody has run yet.
125
+ */
126
+ export const MANUAL_ROUTE_GROUP_SUB_DOMAINS = {
127
+ // Sessions, MFA, SSO and consumable tokens — the sub-domain's own words.
128
+ [ManualControllerRouteGroup.AUTHENTICATION]: EngineResourceSubDomain.AUTH,
129
+ // The application acting as an OAuth 2.0 authorization server. Opposite direction from signing in,
130
+ // same subject: `auth` names OAuth explicitly, and its OAuth-client resources are the records
131
+ // these endpoints authenticate.
132
+ [ManualControllerRouteGroup.IDENTITY_PROVIDER]: EngineResourceSubDomain.AUTH,
133
+ // "…and what they may delegate" is `auth`'s own scope, and the provider-credential resources this
134
+ // group mints live there too.
135
+ [ManualControllerRouteGroup.CONNECTED_ACCOUNTS]: EngineResourceSubDomain.AUTH,
136
+ // MCP and A2A are the doors autonomous software knocks on; `flows-actors` is "work that runs:
137
+ // flows, actors, tasks, agents".
138
+ [ManualControllerRouteGroup.AGENT_INTERFACES]: EngineResourceSubDomain.FLOWS_ACTORS,
139
+ // "Uploaded bytes and the metadata that links them to a domain row" — and these routes address a
140
+ // stored file by its own id, so they belong beside the file metadata resources.
141
+ [ManualControllerRouteGroup.FILE_TRANSFER]: EngineResourceSubDomain.FILES,
142
+ // Reads a client makes about THIS APPLICATION: its resolved features, its labels, its chart data.
143
+ // `applications` is the sub-domain whose subject is the application itself; `features` is about
144
+ // the feature RECORDS, which are resources of their own.
145
+ [ManualControllerRouteGroup.APPLICATION_RUNTIME]: EngineResourceSubDomain.APPLICATIONS,
146
+ };
147
+ function manualRouteGroupCategory(group) {
148
+ const subDomain = MANUAL_ROUTE_GROUP_SUB_DOMAINS[group];
149
+ const documentation = ENGINE_RESOURCE_SUB_DOMAIN_DOCUMENTATION[subDomain];
150
+ return { id: subDomain, label: documentation.label, description: documentation.description };
151
+ }
152
+ /**
153
+ * Every PUBLISHED manual route as an `OperationProjection`, plus the `ResourceTag` for each group
154
+ * that contributed one.
155
+ *
156
+ * Pure and argument-free: the manual route table is framework knowledge, identical in every
157
+ * generated application, so there is nothing about a particular application to pass in. Withheld
158
+ * routes are skipped here and nowhere else — the catalog is the single place a publication decision
159
+ * is recorded, and it requires a written reason for each one.
160
+ */
161
+ export function projectManualControllerRouteOperations() {
162
+ const operations = [];
163
+ const usedGroups = new Set();
164
+ for (const routeKey of Object.values(ManualControllerRouteKey)) {
165
+ const documentation = MANUAL_CONTROLLER_ROUTE_DOCUMENTATION[routeKey];
166
+ if (documentation.publication !== ManualControllerRoutePublication.PUBLISHED)
167
+ continue;
168
+ usedGroups.add(documentation.group);
169
+ const path = `${MAIN_API_BASE_PATH}${toOpenApiPathTemplate(MANUAL_CONTROLLER_ROUTES_URLS[routeKey])}`;
170
+ const baseOperationIdentifier = manualRouteOperationIdentifier(routeKey, documentation.group);
171
+ const access = {
172
+ authenticationMode: MANUAL_ROUTE_AUTHENTICATION_MODES[documentation.authentication],
173
+ authenticationSummary: documentation.authenticationSummary,
174
+ /*
175
+ * Empty on purpose. A manual route is not gated by the resource role vocabulary — its
176
+ * authorization is enforced inside its own handler, and for most of them there is no role at
177
+ * all because the caller has no session yet. Inventing a role here would put a requirement in
178
+ * the reference that no role table backs, which is worse than saying nothing.
179
+ */
180
+ roleRequirements: [],
181
+ };
182
+ for (const method of documentation.methods) {
183
+ const httpVerb = MANUAL_ROUTE_HTTP_VERBS[method];
184
+ /*
185
+ * One key can mount several methods — RFC 7592 defines ONE client-configuration endpoint whose
186
+ * method selects the operation, and `/mcp` answers three. `operationId` must be unique across
187
+ * the document, so the verb becomes a qualifier exactly when there is more than one method; a
188
+ * single-method route keeps the clean name.
189
+ */
190
+ const operationKey = documentation.methods.length > 1
191
+ ? `${baseOperationIdentifier}_${method}`
192
+ : baseOperationIdentifier;
193
+ operations.push({
194
+ resourceIdentifier: documentation.group,
195
+ operationKey,
196
+ baseOperationIdentifier,
197
+ variantKey: null,
198
+ variantType: OperationProjectionVariantType.API_CALL,
199
+ httpVerb,
200
+ path,
201
+ /*
202
+ * Inert in the generator — sectioning is `consumerApiSection` and security is `access` — but
203
+ * the projection contract requires it. `APPLICATION` is the truthful answer for every manual
204
+ * route, including the two whose URL carries an organization segment: there the organization
205
+ * is an argument to the call, not the scope the caller is acting within.
206
+ */
207
+ primaryScope: OperationProjectionPrimaryScope.APPLICATION,
208
+ /*
209
+ * Never the administration section. These routes are how ANY caller authenticates, connects
210
+ * or discovers, so filing them under application administration would move sign-in out of
211
+ * the document integrators actually read.
212
+ */
213
+ consumerApiSection: OpenApiSection.API_REFERENCE,
214
+ identity: createOpenApiOperationIdentity({
215
+ resourceIdentifier: documentation.group,
216
+ baseOperationIdentifier,
217
+ variantKey: null,
218
+ variantType: OperationProjectionVariantType.API_CALL,
219
+ httpVerb,
220
+ path,
221
+ }),
222
+ roles: [],
223
+ access,
224
+ /*
225
+ * These surfaces accept an API key wherever they accept a bearer token; nothing narrows any
226
+ * of them to a bearer-only lane, so removing the API-key alternative would document a
227
+ * refusal the runtime does not make.
228
+ */
229
+ isApiKeyAccessDisabled: false,
230
+ /* Optimistic locking is a resource-repository capability. No manual route has one. */
231
+ acceptsIfMatch: false,
232
+ summary: documentation.summary,
233
+ description: documentation.description,
234
+ requestBodySchema: null,
235
+ responseBodySchema: null,
236
+ responseStatuses: [{ code: documentation.successStatus.code, meaning: documentation.successStatus.meaning }],
237
+ });
238
+ }
239
+ }
240
+ const resourceTags = [...usedGroups]
241
+ .sort((left, right) => left.localeCompare(right, 'en-US'))
242
+ .map((group) => ({
243
+ name: group,
244
+ description: MANUAL_CONTROLLER_ROUTE_GROUP_DESCRIPTIONS[group],
245
+ category: manualRouteGroupCategory(group),
246
+ }));
247
+ return { operations, resourceTags };
248
+ }
249
+ //# sourceMappingURL=manual-controller-route-projection.js.map