@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.
- package/dist/esm/build/csp-emit.d.ts.map +1 -1
- package/dist/esm/build/load-materialized-frontend-providers.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-administration-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-administration-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-authentication-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts +25 -1
- package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-connection-documentation.js +28 -1
- package/dist/esm/companion/application-documentation/application-connection-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-domain-documentation.d.ts +133 -0
- package/dist/esm/companion/application-documentation/application-domain-documentation.d.ts.map +1 -0
- package/dist/esm/companion/application-documentation/application-domain-documentation.js +243 -0
- package/dist/esm/companion/application-documentation/application-domain-documentation.js.map +1 -0
- package/dist/esm/companion/application-documentation/application-integration-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-integration-documentation.js +23 -0
- package/dist/esm/companion/application-documentation/application-integration-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts +30 -0
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.js +38 -0
- package/dist/esm/companion/application-documentation/application-organization-role-documentation.js.map +1 -1
- package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts +61 -1
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js +255 -218
- package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts +2 -0
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js +1 -0
- package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.d.ts.map +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js +1 -1
- package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js.map +1 -1
- package/dist/esm/companion/content/application-consumer-documentation-content-loader.d.ts.map +1 -1
- package/dist/esm/companion/index.d.ts +2 -1
- package/dist/esm/companion/index.d.ts.map +1 -1
- package/dist/esm/companion/index.js +2 -1
- package/dist/esm/companion/index.js.map +1 -1
- package/dist/esm/companion/manual-controller-route-projection.d.ts +112 -0
- package/dist/esm/companion/manual-controller-route-projection.d.ts.map +1 -0
- package/dist/esm/companion/manual-controller-route-projection.js +249 -0
- package/dist/esm/companion/manual-controller-route-projection.js.map +1 -0
- package/dist/esm/companion/openapi-generator.d.ts +16 -0
- package/dist/esm/companion/openapi-generator.d.ts.map +1 -1
- package/dist/esm/companion/openapi-generator.js +493 -26
- package/dist/esm/companion/openapi-generator.js.map +1 -1
- package/dist/esm/companion/operation-projection.schemas.d.ts +44 -0
- package/dist/esm/companion/operation-projection.schemas.d.ts.map +1 -1
- package/dist/esm/companion/operation-projection.schemas.js +37 -0
- package/dist/esm/companion/operation-projection.schemas.js.map +1 -1
- package/dist/esm/companion/publish-result.types.d.ts +37 -4
- package/dist/esm/companion/publish-result.types.d.ts.map +1 -1
- package/dist/esm/companion/publish-result.types.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts +7 -1
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js +34 -18
- package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js +8 -1
- package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-render-model.js +30 -13
- package/dist/esm/companion/rendering/technical-documentation-render-model.js.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts +10 -0
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts.map +1 -1
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js +10 -15
- package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js.map +1 -1
- package/dist/esm/companion/technical-documentation-asset-path.d.ts.map +1 -1
- package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts +27 -1
- package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts.map +1 -1
- package/dist/esm/companion/technical-documentation-capture-execution-port.js.map +1 -1
- package/dist/esm/companion/technical-documentation-diagram-definitions.d.ts +33 -0
- package/dist/esm/companion/technical-documentation-diagram-definitions.d.ts.map +1 -0
- package/dist/esm/companion/technical-documentation-diagram-definitions.js +54 -0
- package/dist/esm/companion/technical-documentation-diagram-definitions.js.map +1 -0
- package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts +10 -18
- package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts.map +1 -1
- package/dist/esm/companion/technical-documentation-diagram-materializer.js +9 -39
- package/dist/esm/companion/technical-documentation-diagram-materializer.js.map +1 -1
- package/dist/esm/companion/technical-documentation-placeholder-materializer.d.ts.map +1 -1
- package/dist/esm/companion/zod-to-openapi.d.ts.map +1 -1
- package/dist/esm/companion-exports.d.ts.map +1 -1
- package/dist/esm/config/define-tech-doc-config.d.ts.map +1 -1
- package/dist/esm/config/index.d.ts.map +1 -1
- package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts +8 -4
- package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts.map +1 -1
- package/dist/esm/config/wildo-tech-doc-config.schemas.js +8 -4
- package/dist/esm/config/wildo-tech-doc-config.schemas.js.map +1 -1
- package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.d.ts.map +1 -1
- package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts +42 -64
- package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts.map +1 -1
- package/dist/esm/content/application-consumer-documentation-content.techdoc.js +164 -925
- package/dist/esm/content/application-consumer-documentation-content.techdoc.js.map +1 -1
- package/dist/esm/content.exports.d.ts.map +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/openapi/api-reference-link-index.d.ts.map +1 -1
- package/dist/esm/openapi/index.d.ts.map +1 -1
- package/dist/esm/openapi/openapi-generation-output.schemas.d.ts.map +1 -1
- package/dist/esm/openapi-reference-model.exports.d.ts.map +1 -1
- package/dist/esm/runtime/AuthExchangePage.d.ts.map +1 -1
- package/dist/esm/runtime/DocsAuthContext.d.ts +16 -1
- package/dist/esm/runtime/DocsAuthContext.d.ts.map +1 -1
- package/dist/esm/runtime/DocsAuthContext.js +18 -2
- package/dist/esm/runtime/DocsAuthContext.js.map +1 -1
- package/dist/esm/runtime/decode-jwt-claims.d.ts.map +1 -1
- package/dist/esm/runtime/docs-auth-client.d.ts.map +1 -1
- package/dist/esm/runtime/docs-auth-session.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts +35 -13
- package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts.map +1 -1
- package/dist/esm/runtime/frontend-provider-registry.techdoc.js +28 -19
- package/dist/esm/runtime/frontend-provider-registry.techdoc.js.map +1 -1
- package/dist/esm/runtime/index.d.ts +1 -0
- package/dist/esm/runtime/index.d.ts.map +1 -1
- package/dist/esm/runtime/index.js +1 -0
- package/dist/esm/runtime/index.js.map +1 -1
- package/dist/esm/runtime/openapi-reference-conservation.d.ts.map +1 -1
- package/dist/esm/runtime/use-docs-auth-session.d.ts.map +1 -1
- package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts.map +1 -1
- package/dist/esm/runtime/use-docs-provider-sdks.d.ts +21 -0
- package/dist/esm/runtime/use-docs-provider-sdks.d.ts.map +1 -0
- package/dist/esm/runtime/use-docs-provider-sdks.js +49 -0
- package/dist/esm/runtime/use-docs-provider-sdks.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +6 -5
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts +0 -9
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts.map +0 -1
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js +0 -111
- package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js.map +0 -1
|
@@ -2,10 +2,14 @@ import { IMPLICIT_LEAD_SECTION_HEADING } from '../rendering/technical-documentat
|
|
|
2
2
|
import { APPLICATION_CONNECTION_DOCUMENTATION_SOURCE_REF, } from './application-connection-documentation.js';
|
|
3
3
|
import { APPLICATION_AUTHENTICATION_DOCUMENTATION_SOURCE_REF, } from './application-authentication-documentation.js';
|
|
4
4
|
import { APPLICATION_INTEGRATION_DOCUMENTATION_SOURCE_REF, } from './application-integration-documentation.js';
|
|
5
|
+
import { APPLICATION_DOMAIN_DOCUMENTATION_SOURCE_REF, } from './application-domain-documentation.js';
|
|
5
6
|
import { APPLICATION_ADMINISTRATION_DOCUMENTATION_SOURCE_REF, } from './application-administration-documentation.js';
|
|
6
7
|
import { canonicalizeTechnicalDocumentationJson, TechnicalDocumentationAccessClass, TechnicalDocumentationApiReferenceSection, TechnicalDocumentationApiReferenceTargetKind, TechnicalDocumentationApplicabilityEvidenceAxis, TechnicalDocumentationApplicabilityEvidenceStatus, TechnicalDocumentationEditorialStatus, TechnicalDocumentationEvidenceSubjectRef, TechnicalDocumentationLinkKind, TechnicalDocumentationReaderAudience, TechnicalDocumentationSourceClassification, TechnicalDocumentationSourceOwnership, TechnicalDocumentationUnitKind, createTechnicalDocumentationUnitV1, } from '@wildo-ai/saas-specifications/technical-documentation';
|
|
7
8
|
import { EngineDocumentationSpecificationFamilyRef, } from '@wildo-ai/saas-specifications/companion';
|
|
8
9
|
import { APPLICATION_CONSUMER_DOCUMENTATION_CONSUMER_FACT_SOURCE_PREFIX, APPLICATION_CONSUMER_DOCUMENTATION_ENGINE_CONTENT_SOURCE_PREFIX, } from '../../content/application-consumer-documentation-content-manifest.schemas.js';
|
|
10
|
+
// From the DECLARATIONS module, never the materializer: the materializer imports the render model,
|
|
11
|
+
// which imports this file, and naming a diagram here at module load closes that cycle (#474).
|
|
12
|
+
import { createTechnicalDocumentationApplicationRequestDiagramAssetRequest } from '../technical-documentation-diagram-definitions.js';
|
|
9
13
|
import { APPLICATION_ORGANIZATION_ROLES_DOCUMENTATION_SOURCE_REF } from './application-organization-role-documentation.js';
|
|
10
14
|
import { APPLICATION_ORGANIZATION_UNIT_RESOURCES_DOCUMENTATION_SOURCE_REF, } from './application-organization-unit-resource-documentation.js';
|
|
11
15
|
const PROVEN = [TechnicalDocumentationApplicabilityEvidenceStatus.PROVEN];
|
|
@@ -36,12 +40,6 @@ const ORGANIZATION_SIEM_RECOVERY_APPLICABILITY_REQUIREMENTS = [{
|
|
|
36
40
|
subjectRef: TechnicalDocumentationEvidenceSubjectRef.ORGANIZATION_SIEM_DELIVERY_RECOVERY,
|
|
37
41
|
acceptableStatuses: [...PROVEN],
|
|
38
42
|
}];
|
|
39
|
-
/** Billing is one operational journey; every page requires the admitted account and subscription surfaces. */
|
|
40
|
-
const ORGANIZATION_BILLING_APPLICABILITY_REQUIREMENTS = [{
|
|
41
|
-
axis: TechnicalDocumentationApplicabilityEvidenceAxis.EXPOSED_API_SURFACE,
|
|
42
|
-
subjectRef: TechnicalDocumentationEvidenceSubjectRef.ORGANIZATION_BILLING_ADMINISTRATION,
|
|
43
|
-
acceptableStatuses: [...PROVEN],
|
|
44
|
-
}];
|
|
45
43
|
const MCP_INTEGRATION_APPLICABILITY_REQUIREMENTS = [{
|
|
46
44
|
axis: TechnicalDocumentationApplicabilityEvidenceAxis.CONFIGURED_ACTIVATION,
|
|
47
45
|
subjectRef: TechnicalDocumentationEvidenceSubjectRef.APPLICATION_MCP_TOOL_SURFACE,
|
|
@@ -69,6 +67,7 @@ const APPLICATION_AUTHENTICATION_TOKEN_PATTERN = /\{\{APPLICATION_AUTHENTICATION
|
|
|
69
67
|
const APPLICATION_ADMINISTRATION_TOKEN_PATTERN = /\{\{APPLICATION_ADMINISTRATION:([A-Za-z0-9]+)\}\}/g;
|
|
70
68
|
/** Same shape again for the tools and events this application publishes. */
|
|
71
69
|
const APPLICATION_INTEGRATION_TOKEN_PATTERN = /\{\{APPLICATION_INTEGRATION:([A-Za-z0-9]+)\}\}/g;
|
|
70
|
+
const APPLICATION_DOMAIN_TOKEN_PATTERN = /\{\{APPLICATION_DOMAIN:([A-Za-z0-9]+)\}\}/g;
|
|
72
71
|
/**
|
|
73
72
|
* Build one semantic guide-to-reference link without embedding a Docusaurus
|
|
74
73
|
* route. The verified OpenAPI link index resolves the resource only when the
|
|
@@ -112,7 +111,6 @@ const scimProvisioningConfigApiReferenceTarget = () => resourceApiReferenceTarge
|
|
|
112
111
|
const auditLogsApiReferenceTarget = () => resourceApiReferenceTarget('Audit records API reference', 'auditLogs');
|
|
113
112
|
const organizationSiemExportConfigApiReferenceTarget = () => resourceApiReferenceTarget('Organization SIEM export configuration API reference', 'organizationSiemExportConfig');
|
|
114
113
|
const organizationSiemDeliveryDlqApiReferenceTarget = () => resourceApiReferenceTarget('Organization SIEM delivery recovery API reference', 'organizationSiemDeliveryDlq');
|
|
115
|
-
const organizationBillingAccountApiReferenceTarget = () => resourceApiReferenceTarget('Organization billing account API reference', 'organizationBillingAccounts');
|
|
116
114
|
const organizationSubscriptionsApiReferenceTarget = () => resourceApiReferenceTarget('Organization subscriptions API reference', 'organizationSubscriptions');
|
|
117
115
|
const organizationInvoiceRefsApiReferenceTarget = () => resourceApiReferenceTarget('Organization invoice summaries API reference', 'organizationInvoiceRefs');
|
|
118
116
|
const organizationUsageRecordsApiReferenceTarget = () => resourceApiReferenceTarget('Organization usage records API reference', 'organizationUsageRecords');
|
|
@@ -124,6 +122,74 @@ const organizationUsageRecordsApiReferenceTarget = () => resourceApiReferenceTar
|
|
|
124
122
|
* and title; this map owns type, audience, publication posture and navigation
|
|
125
123
|
* relationships, allowing the projector to reject a mismatched content set.
|
|
126
124
|
*/
|
|
125
|
+
/**
|
|
126
|
+
* The unit-ref namespace generated resource pages live in, and the only place its shape is written.
|
|
127
|
+
*
|
|
128
|
+
* `technical-documentation:unit/manages/<resource>` — an ENGINE ref with a reserved segment, not an
|
|
129
|
+
* application-owned one. The distinction is load-bearing: `pathForUnit` still refuses a unit an
|
|
130
|
+
* application named, and these are engine units whose subject happens to come from the application.
|
|
131
|
+
*/
|
|
132
|
+
export function applicationDomainResourcePageUnitRef(resourceIdentifier) {
|
|
133
|
+
return `technical-documentation:unit/manages/${resourceIdentifier}`;
|
|
134
|
+
}
|
|
135
|
+
/** The unit-ref prefix a renderer matches to recognise a generated resource page. */
|
|
136
|
+
export const APPLICATION_DOMAIN_RESOURCE_PAGE_UNIT_REF_PREFIX = 'technical-documentation:unit/manages/';
|
|
137
|
+
/**
|
|
138
|
+
* One definition shared by every generated resource page.
|
|
139
|
+
*
|
|
140
|
+
* A per-resource entry in `ENGINE_CONTENT_UNIT_DEFINITIONS` is impossible by construction — the
|
|
141
|
+
* resources are not known when this module is written — and it would be the wrong shape anyway:
|
|
142
|
+
* these pages differ only in subject, so a per-resource definition would be N copies of one answer
|
|
143
|
+
* with N chances to drift.
|
|
144
|
+
*/
|
|
145
|
+
const GENERATED_RESOURCE_UNIT_DEFINITION = Object.freeze({
|
|
146
|
+
kind: TechnicalDocumentationUnitKind.REFERENCE,
|
|
147
|
+
readerAudiences: [
|
|
148
|
+
TechnicalDocumentationReaderAudience.APPLICATION_OPERATIONS_STAFF,
|
|
149
|
+
TechnicalDocumentationReaderAudience.CONSUMING_INTERNAL_SERVICE,
|
|
150
|
+
TechnicalDocumentationReaderAudience.EXTERNAL_INTEGRATION_DEVELOPER,
|
|
151
|
+
TechnicalDocumentationReaderAudience.ORGANIZATION_ADMINISTRATOR,
|
|
152
|
+
TechnicalDocumentationReaderAudience.ORGANIZATION_INTEGRATION_DEVELOPER,
|
|
153
|
+
],
|
|
154
|
+
accessClass: TechnicalDocumentationAccessClass.PUBLIC,
|
|
155
|
+
/*
|
|
156
|
+
* APPROVED, explicitly. A generated per-resource page is emitted only for a resource the
|
|
157
|
+
* application actually publishes, so there is no draft state for it to be in — but the value is
|
|
158
|
+
* declared rather than defaulted because the authored tier can now say otherwise, and a reader
|
|
159
|
+
* comparing the two tiers should see the answer rather than infer it from an absence.
|
|
160
|
+
*/
|
|
161
|
+
editorialStatus: TechnicalDocumentationEditorialStatus.APPROVED,
|
|
162
|
+
/*
|
|
163
|
+
* No assets. A generated per-resource page describes ONE application resource, and there is no
|
|
164
|
+
* engine-authored picture of a resource the engine has never seen — a diagram here would depict
|
|
165
|
+
* the framework's idea of a resource rather than this one. Declared empty rather than omitted so
|
|
166
|
+
* the absence reads as a decision beside the authored tier, which does request one.
|
|
167
|
+
*/
|
|
168
|
+
assetRequests: [],
|
|
169
|
+
});
|
|
170
|
+
/**
|
|
171
|
+
* Unit kinds this catalog deliberately produces NO unit for, each with the reason.
|
|
172
|
+
*
|
|
173
|
+
* The vocabulary has eight members and, until 2026-09-09, two of them had no producer at all — a
|
|
174
|
+
* silent gap, because a kind nobody authors looks exactly like a kind nobody needed (#474). RUNBOOK
|
|
175
|
+
* now has one. CHANGE does not, and the reason is structural rather than editorial:
|
|
176
|
+
*
|
|
177
|
+
* A CHANGE unit is a record of what changed in ONE application, so only that application could
|
|
178
|
+
* author it — and an application-authored unit cannot be routed. `pathForUnit` admits engine-
|
|
179
|
+
* namespaced slugs and the reserved `unit/manages/` namespace, and refuses everything else with
|
|
180
|
+
* "has no consumer navigation category". Application material reaches the site only as an ENGINE
|
|
181
|
+
* unit carrying application-projected facts, never as an application-authored page. So the engine
|
|
182
|
+
* cannot write a changelog it has no knowledge of, and the party that could has no door.
|
|
183
|
+
*
|
|
184
|
+
* The member is therefore kept rather than retired: what is missing is a route for
|
|
185
|
+
* application-authored units, not the concept. When that route exists, this entry is removed in the
|
|
186
|
+
* same change — and `technical-documentation-engine-content-bundle.test.ts` fails until it is,
|
|
187
|
+
* because the partition below is asserted total over the enum.
|
|
188
|
+
*/
|
|
189
|
+
export const ENGINE_CONTENT_UNIT_KINDS_WITHOUT_PRODUCER = {
|
|
190
|
+
[TechnicalDocumentationUnitKind.CHANGE]: 'A change record belongs to one application, and an application-authored unit has no route — `pathForUnit` '
|
|
191
|
+
+ 'admits only engine-namespaced slugs and the reserved `unit/manages/` namespace. Blocked on routing, not on authoring.',
|
|
192
|
+
};
|
|
127
193
|
export const ENGINE_CONTENT_UNIT_DEFINITIONS = Object.freeze({
|
|
128
194
|
'technical-documentation:unit/application-orientation': {
|
|
129
195
|
kind: TechnicalDocumentationUnitKind.ORIENTATION,
|
|
@@ -142,6 +208,34 @@ export const ENGINE_CONTENT_UNIT_DEFINITIONS = Object.freeze({
|
|
|
142
208
|
'technical-documentation:unit/first-request',
|
|
143
209
|
],
|
|
144
210
|
},
|
|
211
|
+
'technical-documentation:unit/what-this-application-manages': {
|
|
212
|
+
kind: TechnicalDocumentationUnitKind.ORIENTATION,
|
|
213
|
+
/*
|
|
214
|
+
* Every audience, because this is the one page that answers "what IS this?" — the question
|
|
215
|
+
* that comes before the reason any of them opened the documentation. An operator, an
|
|
216
|
+
* integrator and an organization administrator all need it, and none of them should have to
|
|
217
|
+
* infer the product from the pages about administering it.
|
|
218
|
+
*/
|
|
219
|
+
readerAudiences: [
|
|
220
|
+
TechnicalDocumentationReaderAudience.APPLICATION_OPERATIONS_STAFF,
|
|
221
|
+
TechnicalDocumentationReaderAudience.CONSUMING_INTERNAL_SERVICE,
|
|
222
|
+
TechnicalDocumentationReaderAudience.EXTERNAL_INTEGRATION_DEVELOPER,
|
|
223
|
+
TechnicalDocumentationReaderAudience.ORGANIZATION_ADMINISTRATOR,
|
|
224
|
+
TechnicalDocumentationReaderAudience.ORGANIZATION_INTEGRATION_DEVELOPER,
|
|
225
|
+
],
|
|
226
|
+
accessClass: TechnicalDocumentationAccessClass.PUBLIC,
|
|
227
|
+
/*
|
|
228
|
+
* No applicability requirement. An application with no resources of its own still publishes
|
|
229
|
+
* this page, and the projection says so in a sentence — suppressing it would leave a reader
|
|
230
|
+
* unable to tell "manages nothing through its API" from "nobody wrote this page".
|
|
231
|
+
*/
|
|
232
|
+
applicabilityRequirements: [],
|
|
233
|
+
relatedUnitRefs: [
|
|
234
|
+
'technical-documentation:unit/first-request',
|
|
235
|
+
'technical-documentation:unit/webhooks',
|
|
236
|
+
'technical-documentation:unit/organization-roles',
|
|
237
|
+
],
|
|
238
|
+
},
|
|
145
239
|
'technical-documentation:unit/authentication': {
|
|
146
240
|
kind: TechnicalDocumentationUnitKind.ORIENTATION,
|
|
147
241
|
readerAudiences: [
|
|
@@ -1002,8 +1096,18 @@ export const ENGINE_CONTENT_UNIT_DEFINITIONS = Object.freeze({
|
|
|
1002
1096
|
],
|
|
1003
1097
|
apiReferenceTargets: [organizationSiemDeliveryDlqApiReferenceTarget()],
|
|
1004
1098
|
},
|
|
1005
|
-
|
|
1006
|
-
|
|
1099
|
+
/*
|
|
1100
|
+
* The catalog's first RUNBOOK, and the kind had no producer until 2026-09-09 (#474).
|
|
1101
|
+
*
|
|
1102
|
+
* It is not a re-labelled HOW_TO. Every other page in this section explains ONE capability;
|
|
1103
|
+
* `operate-webhook-deliveries` was checked first and is genuinely explanatory — statuses, a retry
|
|
1104
|
+
* ladder, monitoring advice — which is why re-kinding it to fill the vocabulary was rejected. A
|
|
1105
|
+
* RUNBOOK is an ORDER under time pressure, and the ordering is the content: contain before you
|
|
1106
|
+
* assess, assess before you recover, and loop back to contain when the assessment finds a change.
|
|
1107
|
+
* No existing page says what to do FIRST.
|
|
1108
|
+
*/
|
|
1109
|
+
'technical-documentation:unit/respond-to-leaked-credential': {
|
|
1110
|
+
kind: TechnicalDocumentationUnitKind.RUNBOOK,
|
|
1007
1111
|
readerAudiences: [
|
|
1008
1112
|
TechnicalDocumentationReaderAudience.APPLICATION_OPERATIONS_STAFF,
|
|
1009
1113
|
TechnicalDocumentationReaderAudience.ORGANIZATION_ADMINISTRATOR,
|
|
@@ -1011,176 +1115,29 @@ export const ENGINE_CONTENT_UNIT_DEFINITIONS = Object.freeze({
|
|
|
1011
1115
|
accessClass: TechnicalDocumentationAccessClass.PUBLIC,
|
|
1012
1116
|
applicabilityRequirements: [],
|
|
1013
1117
|
relatedUnitRefs: [
|
|
1014
|
-
'technical-documentation:unit/
|
|
1118
|
+
'technical-documentation:unit/api-keys-lifecycle',
|
|
1119
|
+
'technical-documentation:unit/oauth-operate-and-revoke',
|
|
1120
|
+
'technical-documentation:unit/suspend-or-remove-user',
|
|
1121
|
+
'technical-documentation:unit/investigate-audit-event',
|
|
1122
|
+
'technical-documentation:unit/review-privileged-and-access-changes',
|
|
1015
1123
|
'technical-documentation:unit/export-audit-records',
|
|
1016
|
-
'technical-documentation:unit/operate-and-troubleshoot-siem-delivery',
|
|
1017
|
-
],
|
|
1018
|
-
apiReferenceTargets: [auditLogsApiReferenceTarget()],
|
|
1019
|
-
},
|
|
1020
|
-
'technical-documentation:unit/billing': {
|
|
1021
|
-
kind: TechnicalDocumentationUnitKind.ORIENTATION,
|
|
1022
|
-
readerAudiences: [
|
|
1023
|
-
TechnicalDocumentationReaderAudience.APPLICATION_OPERATIONS_STAFF,
|
|
1024
|
-
TechnicalDocumentationReaderAudience.ORGANIZATION_ADMINISTRATOR,
|
|
1025
|
-
],
|
|
1026
|
-
accessClass: TechnicalDocumentationAccessClass.PUBLIC,
|
|
1027
|
-
applicabilityRequirements: ORGANIZATION_BILLING_APPLICABILITY_REQUIREMENTS,
|
|
1028
|
-
relatedUnitRefs: [
|
|
1029
|
-
'technical-documentation:unit/understand-billing-plans-and-access',
|
|
1030
|
-
'technical-documentation:unit/start-billing-subscription',
|
|
1031
|
-
'technical-documentation:unit/change-or-end-billing-subscription',
|
|
1032
|
-
'technical-documentation:unit/billing-records-and-usage',
|
|
1033
|
-
'technical-documentation:unit/reconcile-billing-and-access',
|
|
1034
|
-
'technical-documentation:unit/troubleshoot-billing-change',
|
|
1035
|
-
'technical-documentation:unit/audit-and-siem',
|
|
1036
|
-
],
|
|
1037
|
-
apiReferenceTargets: [
|
|
1038
|
-
organizationBillingAccountApiReferenceTarget(),
|
|
1039
|
-
organizationSubscriptionsApiReferenceTarget(),
|
|
1040
|
-
],
|
|
1041
|
-
},
|
|
1042
|
-
'technical-documentation:unit/understand-billing-plans-and-access': {
|
|
1043
|
-
kind: TechnicalDocumentationUnitKind.CONCEPT,
|
|
1044
|
-
readerAudiences: [
|
|
1045
|
-
TechnicalDocumentationReaderAudience.APPLICATION_OPERATIONS_STAFF,
|
|
1046
|
-
TechnicalDocumentationReaderAudience.ORGANIZATION_ADMINISTRATOR,
|
|
1047
|
-
],
|
|
1048
|
-
accessClass: TechnicalDocumentationAccessClass.PUBLIC,
|
|
1049
|
-
applicabilityRequirements: ORGANIZATION_BILLING_APPLICABILITY_REQUIREMENTS,
|
|
1050
|
-
relatedUnitRefs: [
|
|
1051
|
-
'technical-documentation:unit/billing',
|
|
1052
|
-
'technical-documentation:unit/start-billing-subscription',
|
|
1053
|
-
'technical-documentation:unit/reconcile-billing-and-access',
|
|
1054
|
-
],
|
|
1055
|
-
apiReferenceTargets: [organizationBillingAccountApiReferenceTarget()],
|
|
1056
|
-
},
|
|
1057
|
-
'technical-documentation:unit/start-billing-subscription': {
|
|
1058
|
-
kind: TechnicalDocumentationUnitKind.HOW_TO,
|
|
1059
|
-
readerAudiences: [TechnicalDocumentationReaderAudience.ORGANIZATION_ADMINISTRATOR],
|
|
1060
|
-
accessClass: TechnicalDocumentationAccessClass.PUBLIC,
|
|
1061
|
-
applicabilityRequirements: ORGANIZATION_BILLING_APPLICABILITY_REQUIREMENTS,
|
|
1062
|
-
relatedUnitRefs: [
|
|
1063
|
-
'technical-documentation:unit/billing',
|
|
1064
|
-
'technical-documentation:unit/understand-billing-plans-and-access',
|
|
1065
|
-
'technical-documentation:unit/reconcile-billing-and-access',
|
|
1066
|
-
'technical-documentation:unit/troubleshoot-billing-change',
|
|
1067
|
-
],
|
|
1068
|
-
apiReferenceTargets: [
|
|
1069
|
-
operationFamilyApiReferenceTarget('Open an organization checkout', 'organizationBillingAccounts', 'open_checkout'),
|
|
1070
|
-
],
|
|
1071
|
-
},
|
|
1072
|
-
'technical-documentation:unit/change-or-end-billing-subscription': {
|
|
1073
|
-
kind: TechnicalDocumentationUnitKind.HOW_TO,
|
|
1074
|
-
readerAudiences: [TechnicalDocumentationReaderAudience.ORGANIZATION_ADMINISTRATOR],
|
|
1075
|
-
accessClass: TechnicalDocumentationAccessClass.PUBLIC,
|
|
1076
|
-
applicabilityRequirements: ORGANIZATION_BILLING_APPLICABILITY_REQUIREMENTS,
|
|
1077
|
-
relatedUnitRefs: [
|
|
1078
|
-
'technical-documentation:unit/billing',
|
|
1079
|
-
'technical-documentation:unit/understand-billing-plans-and-access',
|
|
1080
|
-
'technical-documentation:unit/reconcile-billing-and-access',
|
|
1081
|
-
'technical-documentation:unit/troubleshoot-billing-change',
|
|
1082
|
-
],
|
|
1083
|
-
apiReferenceTargets: [
|
|
1084
|
-
operationFamilyApiReferenceTarget('Change an organization subscription plan', 'organizationSubscriptions', 'change_plan'),
|
|
1085
|
-
operationFamilyApiReferenceTarget('Cancel an organization subscription', 'organizationSubscriptions', 'cancel'),
|
|
1086
|
-
operationFamilyApiReferenceTarget('Resume an organization subscription', 'organizationSubscriptions', 'resume'),
|
|
1087
|
-
],
|
|
1088
|
-
},
|
|
1089
|
-
'technical-documentation:unit/manage-invoices-and-payments': {
|
|
1090
|
-
kind: TechnicalDocumentationUnitKind.CONCEPT,
|
|
1091
|
-
readerAudiences: [
|
|
1092
|
-
TechnicalDocumentationReaderAudience.APPLICATION_OPERATIONS_STAFF,
|
|
1093
|
-
TechnicalDocumentationReaderAudience.ORGANIZATION_ADMINISTRATOR,
|
|
1094
|
-
],
|
|
1095
|
-
accessClass: TechnicalDocumentationAccessClass.PUBLIC,
|
|
1096
|
-
applicabilityRequirements: ORGANIZATION_BILLING_APPLICABILITY_REQUIREMENTS,
|
|
1097
|
-
relatedUnitRefs: [
|
|
1098
|
-
'technical-documentation:unit/billing',
|
|
1099
|
-
'technical-documentation:unit/billing-records-and-usage',
|
|
1100
|
-
'technical-documentation:unit/reconcile-billing-and-access',
|
|
1101
|
-
'technical-documentation:unit/understand-metered-usage',
|
|
1102
1124
|
'technical-documentation:unit/protect-and-retain-audit-evidence',
|
|
1103
1125
|
],
|
|
1104
|
-
apiReferenceTargets: [
|
|
1105
|
-
organizationInvoiceRefsApiReferenceTarget(),
|
|
1106
|
-
operationFamilyApiReferenceTarget('Open the authenticated billing portal', 'organizationBillingAccounts', 'open_portal'),
|
|
1107
|
-
],
|
|
1108
|
-
},
|
|
1109
|
-
'technical-documentation:unit/billing-records-and-usage': {
|
|
1110
|
-
kind: TechnicalDocumentationUnitKind.ORIENTATION,
|
|
1111
|
-
readerAudiences: [
|
|
1112
|
-
TechnicalDocumentationReaderAudience.APPLICATION_OPERATIONS_STAFF,
|
|
1113
|
-
TechnicalDocumentationReaderAudience.ORGANIZATION_ADMINISTRATOR,
|
|
1114
|
-
],
|
|
1115
|
-
accessClass: TechnicalDocumentationAccessClass.PUBLIC,
|
|
1116
|
-
applicabilityRequirements: ORGANIZATION_BILLING_APPLICABILITY_REQUIREMENTS,
|
|
1117
|
-
relatedUnitRefs: [
|
|
1118
|
-
'technical-documentation:unit/billing',
|
|
1119
|
-
'technical-documentation:unit/manage-invoices-and-payments',
|
|
1120
|
-
'technical-documentation:unit/understand-metered-usage',
|
|
1121
|
-
'technical-documentation:unit/reconcile-billing-and-access',
|
|
1122
|
-
'technical-documentation:unit/troubleshoot-billing-change',
|
|
1123
|
-
],
|
|
1124
|
-
apiReferenceTargets: [
|
|
1125
|
-
organizationInvoiceRefsApiReferenceTarget(),
|
|
1126
|
-
organizationUsageRecordsApiReferenceTarget(),
|
|
1127
|
-
],
|
|
1128
1126
|
},
|
|
1129
|
-
'technical-documentation:unit/
|
|
1127
|
+
'technical-documentation:unit/protect-and-retain-audit-evidence': {
|
|
1130
1128
|
kind: TechnicalDocumentationUnitKind.CONCEPT,
|
|
1131
1129
|
readerAudiences: [
|
|
1132
1130
|
TechnicalDocumentationReaderAudience.APPLICATION_OPERATIONS_STAFF,
|
|
1133
1131
|
TechnicalDocumentationReaderAudience.ORGANIZATION_ADMINISTRATOR,
|
|
1134
1132
|
],
|
|
1135
1133
|
accessClass: TechnicalDocumentationAccessClass.PUBLIC,
|
|
1136
|
-
applicabilityRequirements:
|
|
1137
|
-
relatedUnitRefs: [
|
|
1138
|
-
'technical-documentation:unit/billing',
|
|
1139
|
-
'technical-documentation:unit/billing-records-and-usage',
|
|
1140
|
-
'technical-documentation:unit/manage-invoices-and-payments',
|
|
1141
|
-
'technical-documentation:unit/reconcile-billing-and-access',
|
|
1142
|
-
'technical-documentation:unit/troubleshoot-billing-change',
|
|
1143
|
-
],
|
|
1144
|
-
apiReferenceTargets: [organizationUsageRecordsApiReferenceTarget()],
|
|
1145
|
-
},
|
|
1146
|
-
'technical-documentation:unit/reconcile-billing-and-access': {
|
|
1147
|
-
kind: TechnicalDocumentationUnitKind.HOW_TO,
|
|
1148
|
-
readerAudiences: [
|
|
1149
|
-
TechnicalDocumentationReaderAudience.APPLICATION_OPERATIONS_STAFF,
|
|
1150
|
-
TechnicalDocumentationReaderAudience.ORGANIZATION_ADMINISTRATOR,
|
|
1151
|
-
],
|
|
1152
|
-
accessClass: TechnicalDocumentationAccessClass.PUBLIC,
|
|
1153
|
-
applicabilityRequirements: ORGANIZATION_BILLING_APPLICABILITY_REQUIREMENTS,
|
|
1134
|
+
applicabilityRequirements: [],
|
|
1154
1135
|
relatedUnitRefs: [
|
|
1155
|
-
'technical-documentation:unit/billing',
|
|
1156
|
-
'technical-documentation:unit/manage-invoices-and-payments',
|
|
1157
|
-
'technical-documentation:unit/understand-metered-usage',
|
|
1158
|
-
'technical-documentation:unit/troubleshoot-billing-change',
|
|
1159
1136
|
'technical-documentation:unit/audit-and-siem',
|
|
1137
|
+
'technical-documentation:unit/export-audit-records',
|
|
1138
|
+
'technical-documentation:unit/operate-and-troubleshoot-siem-delivery',
|
|
1160
1139
|
],
|
|
1161
|
-
apiReferenceTargets: [
|
|
1162
|
-
operationFamilyApiReferenceTarget('Read aggregated organization billing state', 'organizationBillingAccounts', 'get_state'),
|
|
1163
|
-
organizationSubscriptionsApiReferenceTarget(),
|
|
1164
|
-
],
|
|
1165
|
-
},
|
|
1166
|
-
'technical-documentation:unit/troubleshoot-billing-change': {
|
|
1167
|
-
kind: TechnicalDocumentationUnitKind.TROUBLESHOOTING,
|
|
1168
|
-
readerAudiences: [
|
|
1169
|
-
TechnicalDocumentationReaderAudience.APPLICATION_OPERATIONS_STAFF,
|
|
1170
|
-
TechnicalDocumentationReaderAudience.ORGANIZATION_ADMINISTRATOR,
|
|
1171
|
-
],
|
|
1172
|
-
accessClass: TechnicalDocumentationAccessClass.PUBLIC,
|
|
1173
|
-
applicabilityRequirements: ORGANIZATION_BILLING_APPLICABILITY_REQUIREMENTS,
|
|
1174
|
-
relatedUnitRefs: [
|
|
1175
|
-
'technical-documentation:unit/billing',
|
|
1176
|
-
'technical-documentation:unit/reconcile-billing-and-access',
|
|
1177
|
-
'technical-documentation:unit/manage-invoices-and-payments',
|
|
1178
|
-
'technical-documentation:unit/understand-metered-usage',
|
|
1179
|
-
],
|
|
1180
|
-
apiReferenceTargets: [
|
|
1181
|
-
organizationBillingAccountApiReferenceTarget(),
|
|
1182
|
-
organizationSubscriptionsApiReferenceTarget(),
|
|
1183
|
-
],
|
|
1140
|
+
apiReferenceTargets: [auditLogsApiReferenceTarget()],
|
|
1184
1141
|
},
|
|
1185
1142
|
'technical-documentation:unit/integrations': {
|
|
1186
1143
|
kind: TechnicalDocumentationUnitKind.ORIENTATION,
|
|
@@ -1365,6 +1322,17 @@ export const ENGINE_CONTENT_UNIT_DEFINITIONS = Object.freeze({
|
|
|
1365
1322
|
'technical-documentation:unit/api-keys',
|
|
1366
1323
|
'technical-documentation:unit/common-rest-api',
|
|
1367
1324
|
],
|
|
1325
|
+
/*
|
|
1326
|
+
* The FIRST asset any engine page has ever requested (#474), and deliberately the deterministic
|
|
1327
|
+
* one rather than a screenshot: it materializes offline, from a frozen definition, with no
|
|
1328
|
+
* browser, no provisioned tenant and no live stack — so the asset path is exercised on every
|
|
1329
|
+
* publication rather than only where a capture happens to be available.
|
|
1330
|
+
*
|
|
1331
|
+
* It belongs on this page because the diagram IS this page: a client sending an authenticated
|
|
1332
|
+
* request through the application API to a documented resource is what "send your first
|
|
1333
|
+
* request" describes in prose.
|
|
1334
|
+
*/
|
|
1335
|
+
assetRequests: [createTechnicalDocumentationApplicationRequestDiagramAssetRequest()],
|
|
1368
1336
|
},
|
|
1369
1337
|
'technical-documentation:unit/common-rest-api': {
|
|
1370
1338
|
kind: TechnicalDocumentationUnitKind.CONCEPT,
|
|
@@ -1863,6 +1831,18 @@ function resolveApplicationIntegrationMarkdown(markdown, declaredSourceRefs, fac
|
|
|
1863
1831
|
presentationFor: (resolved, selector) => resolved.presentations[selector],
|
|
1864
1832
|
});
|
|
1865
1833
|
}
|
|
1834
|
+
/** What this application is FOR: its own resources, grouped as it groups them. Presentations only. */
|
|
1835
|
+
function resolveApplicationDomainMarkdown(markdown, declaredSourceRefs, fact) {
|
|
1836
|
+
return resolveSelectorProjectionMarkdown({
|
|
1837
|
+
markdown,
|
|
1838
|
+
declaredSourceRefs,
|
|
1839
|
+
sourceRef: APPLICATION_DOMAIN_DOCUMENTATION_SOURCE_REF,
|
|
1840
|
+
label: 'application-domain',
|
|
1841
|
+
fact,
|
|
1842
|
+
selectorPattern: APPLICATION_DOMAIN_TOKEN_PATTERN,
|
|
1843
|
+
presentationFor: (resolved, selector) => resolved.presentations[selector],
|
|
1844
|
+
});
|
|
1845
|
+
}
|
|
1866
1846
|
/** Who may perform each administrative action here. Presentations only. */
|
|
1867
1847
|
function resolveApplicationAdministrationMarkdown(markdown, declaredSourceRefs, fact) {
|
|
1868
1848
|
return resolveSelectorProjectionMarkdown({
|
|
@@ -1926,8 +1906,9 @@ export function projectEngineApplicationConsumerContentBundle(bundle, engineSpec
|
|
|
1926
1906
|
const resolvedApplicationAuthentication = resolveApplicationAuthenticationMarkdown(resolvedApplicationConnection.markdown, identity.sourceRefs, applicationFacts.authentication);
|
|
1927
1907
|
const resolvedApplicationAdministration = resolveApplicationAdministrationMarkdown(resolvedApplicationAuthentication.markdown, identity.sourceRefs, applicationFacts.administration);
|
|
1928
1908
|
const resolvedApplicationIntegration = resolveApplicationIntegrationMarkdown(resolvedApplicationAdministration.markdown, identity.sourceRefs, applicationFacts.integration);
|
|
1909
|
+
const resolvedApplicationDomain = resolveApplicationDomainMarkdown(resolvedApplicationIntegration.markdown, identity.sourceRefs, applicationFacts.domain);
|
|
1929
1910
|
return [identity.unitRef, {
|
|
1930
|
-
parsed: parseEngineMarkdown(
|
|
1911
|
+
parsed: parseEngineMarkdown(resolvedApplicationDomain.markdown, identity.unitRef),
|
|
1931
1912
|
resolvedConsumerFacts,
|
|
1932
1913
|
resolvedApplicationOrganizationRoles,
|
|
1933
1914
|
resolvedApplicationOrganizationUnitResources,
|
|
@@ -1935,6 +1916,7 @@ export function projectEngineApplicationConsumerContentBundle(bundle, engineSpec
|
|
|
1935
1916
|
resolvedApplicationAuthentication,
|
|
1936
1917
|
resolvedApplicationAdministration,
|
|
1937
1918
|
resolvedApplicationIntegration,
|
|
1919
|
+
resolvedApplicationDomain,
|
|
1938
1920
|
}];
|
|
1939
1921
|
}));
|
|
1940
1922
|
const relatedTargetByUnitRef = new Map(bundle.manifest.units.map((identity) => {
|
|
@@ -1956,66 +1938,121 @@ export function projectEngineApplicationConsumerContentBundle(bundle, engineSpec
|
|
|
1956
1938
|
},
|
|
1957
1939
|
}];
|
|
1958
1940
|
}));
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
: resolvedApplicationAuthentication.fact?.sourceRef === sourceRef
|
|
1978
|
-
? resolvedApplicationAuthentication.fact
|
|
1979
|
-
: resolvedApplicationAdministration.fact?.sourceRef === sourceRef
|
|
1980
|
-
? resolvedApplicationAdministration.fact
|
|
1981
|
-
: undefined;
|
|
1982
|
-
return {
|
|
1983
|
-
sourceRef,
|
|
1984
|
-
ownership: applicationProjection === undefined
|
|
1985
|
-
? TechnicalDocumentationSourceOwnership.ENGINE_GENERIC_CONTENT
|
|
1986
|
-
: TechnicalDocumentationSourceOwnership.APPLICATION_COMPANION_PROJECTION,
|
|
1987
|
-
classification: TechnicalDocumentationSourceClassification.PUBLIC,
|
|
1988
|
-
/*
|
|
1989
|
-
* A companion projection carries its own version; a curated engine fact takes the
|
|
1990
|
-
* catalog projector's; authored engine content takes the content bundle's. All three
|
|
1991
|
-
* were sha256 values until 2026-08-27 and none of them was ever compared to anything
|
|
1992
|
-
* except another copy of itself.
|
|
1993
|
-
*/
|
|
1994
|
-
sourceVersion: applicationProjection?.sourceVersion
|
|
1995
|
-
?? (fact === undefined ? bundle.identity.contentBundleVersion : engineSpecificationCatalog.identity.projectorVersion),
|
|
1996
|
-
sourceAnchorRef: null,
|
|
1997
|
-
};
|
|
1998
|
-
});
|
|
1941
|
+
/*
|
|
1942
|
+
* The generated tier.
|
|
1943
|
+
*
|
|
1944
|
+
* Every unit above is AUTHORED: a Markdown file in the content module, a definition beside it,
|
|
1945
|
+
* and a fixed route. That is the right shape for a page whose text an engine owns, and the wrong
|
|
1946
|
+
* one for a page PER RESOURCE — the resources belong to the application, and an engine that
|
|
1947
|
+
* authored a page for each possible one would be authoring the application.
|
|
1948
|
+
*
|
|
1949
|
+
* So these units are projected whole, from the same domain fact the overview page uses. They are
|
|
1950
|
+
* still ENGINE units, and deliberately: the engine owns the page's shape, its sections and its
|
|
1951
|
+
* words, while the application supplies only the subject. That is what keeps `pathForUnit`'s
|
|
1952
|
+
* refusal of application-owned units intact — nothing here asks it to route a unit an
|
|
1953
|
+
* application named.
|
|
1954
|
+
*/
|
|
1955
|
+
const generatedResourceUnits = (applicationFacts.domain?.resourcePages ?? []).map((page) => {
|
|
1956
|
+
const unitRef = applicationDomainResourcePageUnitRef(page.resourceIdentifier);
|
|
1957
|
+
const parsed = parseEngineMarkdown(page.markdown, unitRef);
|
|
1958
|
+
const unitSlug = page.resourceIdentifier;
|
|
1999
1959
|
return createTechnicalDocumentationUnitV1({
|
|
2000
1960
|
schemaVersion: 1,
|
|
2001
|
-
unitRef
|
|
1961
|
+
unitRef,
|
|
2002
1962
|
unitVersion: 1,
|
|
2003
|
-
kind:
|
|
2004
|
-
readerAudiences: [...
|
|
1963
|
+
kind: GENERATED_RESOURCE_UNIT_DEFINITION.kind,
|
|
1964
|
+
readerAudiences: [...GENERATED_RESOURCE_UNIT_DEFINITION.readerAudiences],
|
|
2005
1965
|
title: parsed.title,
|
|
2006
1966
|
summary: parsed.summary,
|
|
2007
1967
|
sections: parsed.sections.map((section, index) => ({
|
|
2008
|
-
sectionRef: `technical-documentation:section
|
|
1968
|
+
sectionRef: `technical-documentation:section/manages-${unitSlug}-${index + 1}`,
|
|
2009
1969
|
heading: section.heading,
|
|
2010
1970
|
bodyMarkdown: section.bodyMarkdown,
|
|
2011
1971
|
})),
|
|
2012
|
-
links: [
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
1972
|
+
links: [],
|
|
1973
|
+
/*
|
|
1974
|
+
* Wholly application-projected: unlike an authored page carrying a token, there is no engine
|
|
1975
|
+
* Markdown behind this one. Recording it as engine content would misattribute the only thing
|
|
1976
|
+
* a reader might want to trace — where the words about their product came from.
|
|
1977
|
+
*/
|
|
1978
|
+
provenance: [{
|
|
1979
|
+
sourceRef: APPLICATION_DOMAIN_DOCUMENTATION_SOURCE_REF,
|
|
1980
|
+
ownership: TechnicalDocumentationSourceOwnership.APPLICATION_COMPANION_PROJECTION,
|
|
1981
|
+
classification: TechnicalDocumentationSourceClassification.PUBLIC,
|
|
1982
|
+
sourceVersion: applicationFacts.domain?.sourceVersion ?? 1,
|
|
1983
|
+
sourceAnchorRef: null,
|
|
1984
|
+
}],
|
|
1985
|
+
/*
|
|
1986
|
+
* No applicability requirement, because the unit's EXISTENCE is the evidence: it is emitted
|
|
1987
|
+
* only for a resource the application actually publishes. A requirement here would be a
|
|
1988
|
+
* second, weaker statement of the same fact.
|
|
1989
|
+
*/
|
|
1990
|
+
applicabilityRequirements: [],
|
|
1991
|
+
accessClass: GENERATED_RESOURCE_UNIT_DEFINITION.accessClass,
|
|
1992
|
+
editorialStatus: GENERATED_RESOURCE_UNIT_DEFINITION.editorialStatus ?? TechnicalDocumentationEditorialStatus.APPROVED,
|
|
1993
|
+
assetRequests: [...GENERATED_RESOURCE_UNIT_DEFINITION.assetRequests ?? []],
|
|
2018
1994
|
});
|
|
2019
|
-
})
|
|
1995
|
+
});
|
|
1996
|
+
return [...bundle.manifest.units.map((identity) => {
|
|
1997
|
+
const definition = unitDefinitions[identity.unitRef];
|
|
1998
|
+
if (definition === undefined)
|
|
1999
|
+
throw new Error(`unsupported engine application-consumer content unit ${identity.unitRef}`);
|
|
2000
|
+
const content = parsedContentByUnitRef.get(identity.unitRef);
|
|
2001
|
+
if (content === undefined)
|
|
2002
|
+
throw new Error(`engine content ${identity.unitRef} has no parsed content`);
|
|
2003
|
+
const { parsed, resolvedConsumerFacts, resolvedApplicationOrganizationRoles, resolvedApplicationOrganizationUnitResources, resolvedApplicationConnection, resolvedApplicationAuthentication, resolvedApplicationAdministration, resolvedApplicationIntegration, resolvedApplicationDomain } = content;
|
|
2004
|
+
const unitSlug = identity.unitRef.slice(identity.unitRef.lastIndexOf('/') + 1);
|
|
2005
|
+
const relatedTargets = resolveRelatedUnitLinkTargets(identity.unitRef, definition.relatedUnitRefs, relatedTargetByUnitRef);
|
|
2006
|
+
const ownProvenance = identity.sourceRefs.map((sourceRef) => {
|
|
2007
|
+
const fact = resolvedConsumerFacts.entriesBySourceRef.get(sourceRef);
|
|
2008
|
+
const applicationProjection = resolvedApplicationOrganizationRoles.fact?.sourceRef === sourceRef
|
|
2009
|
+
? resolvedApplicationOrganizationRoles.fact
|
|
2010
|
+
: resolvedApplicationOrganizationUnitResources.fact?.sourceRef === sourceRef
|
|
2011
|
+
? resolvedApplicationOrganizationUnitResources.fact
|
|
2012
|
+
: resolvedApplicationConnection.fact?.sourceRef === sourceRef
|
|
2013
|
+
? resolvedApplicationConnection.fact
|
|
2014
|
+
: resolvedApplicationAuthentication.fact?.sourceRef === sourceRef
|
|
2015
|
+
? resolvedApplicationAuthentication.fact
|
|
2016
|
+
: resolvedApplicationAdministration.fact?.sourceRef === sourceRef
|
|
2017
|
+
? resolvedApplicationAdministration.fact
|
|
2018
|
+
: undefined;
|
|
2019
|
+
return {
|
|
2020
|
+
sourceRef,
|
|
2021
|
+
ownership: applicationProjection === undefined
|
|
2022
|
+
? TechnicalDocumentationSourceOwnership.ENGINE_GENERIC_CONTENT
|
|
2023
|
+
: TechnicalDocumentationSourceOwnership.APPLICATION_COMPANION_PROJECTION,
|
|
2024
|
+
classification: TechnicalDocumentationSourceClassification.PUBLIC,
|
|
2025
|
+
/*
|
|
2026
|
+
* A companion projection carries its own version; a curated engine fact takes the
|
|
2027
|
+
* catalog projector's; authored engine content takes the content bundle's. All three
|
|
2028
|
+
* were sha256 values until 2026-08-27 and none of them was ever compared to anything
|
|
2029
|
+
* except another copy of itself.
|
|
2030
|
+
*/
|
|
2031
|
+
sourceVersion: applicationProjection?.sourceVersion
|
|
2032
|
+
?? (fact === undefined ? bundle.identity.contentBundleVersion : engineSpecificationCatalog.identity.projectorVersion),
|
|
2033
|
+
sourceAnchorRef: null,
|
|
2034
|
+
};
|
|
2035
|
+
});
|
|
2036
|
+
return createTechnicalDocumentationUnitV1({
|
|
2037
|
+
schemaVersion: 1,
|
|
2038
|
+
unitRef: identity.unitRef,
|
|
2039
|
+
unitVersion: 1,
|
|
2040
|
+
kind: definition.kind,
|
|
2041
|
+
readerAudiences: [...definition.readerAudiences],
|
|
2042
|
+
title: parsed.title,
|
|
2043
|
+
summary: parsed.summary,
|
|
2044
|
+
sections: parsed.sections.map((section, index) => ({
|
|
2045
|
+
sectionRef: `technical-documentation:section/${unitSlug}-${index + 1}`,
|
|
2046
|
+
heading: section.heading,
|
|
2047
|
+
bodyMarkdown: section.bodyMarkdown,
|
|
2048
|
+
})),
|
|
2049
|
+
links: [...relatedLinks(identity.unitRef, relatedTargets), ...apiReferenceLinks(identity.unitRef, definition.apiReferenceTargets ?? [])],
|
|
2050
|
+
provenance: mergeProvenance(ownProvenance, relatedTargets),
|
|
2051
|
+
applicabilityRequirements: [...definition.applicabilityRequirements],
|
|
2052
|
+
accessClass: definition.accessClass,
|
|
2053
|
+
editorialStatus: definition.editorialStatus ?? TechnicalDocumentationEditorialStatus.APPROVED,
|
|
2054
|
+
assetRequests: [...definition.assetRequests ?? []],
|
|
2055
|
+
});
|
|
2056
|
+
}), ...generatedResourceUnits].sort((left, right) => left.unitRef.localeCompare(right.unitRef, 'en-US'));
|
|
2020
2057
|
}
|
|
2021
2058
|
//# sourceMappingURL=technical-documentation-engine-content-bundle.js.map
|