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

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 (64) hide show
  1. package/dist/esm/companion/application-documentation/application-administration-documentation.d.ts +52 -0
  2. package/dist/esm/companion/application-documentation/application-administration-documentation.d.ts.map +1 -0
  3. package/dist/esm/companion/application-documentation/application-administration-documentation.js +58 -0
  4. package/dist/esm/companion/application-documentation/application-administration-documentation.js.map +1 -0
  5. package/dist/esm/companion/application-documentation/application-authentication-documentation.d.ts +76 -0
  6. package/dist/esm/companion/application-documentation/application-authentication-documentation.d.ts.map +1 -0
  7. package/dist/esm/companion/application-documentation/application-authentication-documentation.js +116 -0
  8. package/dist/esm/companion/application-documentation/application-authentication-documentation.js.map +1 -0
  9. package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts +87 -0
  10. package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts.map +1 -0
  11. package/dist/esm/companion/application-documentation/application-connection-documentation.js +138 -0
  12. package/dist/esm/companion/application-documentation/application-connection-documentation.js.map +1 -0
  13. package/dist/esm/companion/application-documentation/application-integration-documentation.d.ts +48 -0
  14. package/dist/esm/companion/application-documentation/application-integration-documentation.d.ts.map +1 -0
  15. package/dist/esm/companion/application-documentation/application-integration-documentation.js +63 -0
  16. package/dist/esm/companion/application-documentation/application-integration-documentation.js.map +1 -0
  17. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts +21 -3
  18. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts.map +1 -1
  19. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js +166 -10
  20. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js.map +1 -1
  21. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts +8 -0
  22. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts.map +1 -1
  23. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js +8 -1
  24. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js.map +1 -1
  25. package/dist/esm/companion/index.d.ts +4 -0
  26. package/dist/esm/companion/index.d.ts.map +1 -1
  27. package/dist/esm/companion/index.js +4 -0
  28. package/dist/esm/companion/index.js.map +1 -1
  29. package/dist/esm/companion/openapi-generator.d.ts.map +1 -1
  30. package/dist/esm/companion/openapi-generator.js +9 -7
  31. package/dist/esm/companion/openapi-generator.js.map +1 -1
  32. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts.map +1 -1
  33. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js +10 -2
  34. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js.map +1 -1
  35. package/dist/esm/companion/rendering/technical-documentation-markdown-links.d.ts +28 -0
  36. package/dist/esm/companion/rendering/technical-documentation-markdown-links.d.ts.map +1 -0
  37. package/dist/esm/companion/rendering/technical-documentation-markdown-links.js +52 -0
  38. package/dist/esm/companion/rendering/technical-documentation-markdown-links.js.map +1 -0
  39. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts.map +1 -1
  40. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js +7 -2
  41. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js.map +1 -1
  42. package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts +1 -0
  43. package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts.map +1 -1
  44. package/dist/esm/companion/rendering/technical-documentation-render-model.js +91 -84
  45. package/dist/esm/companion/rendering/technical-documentation-render-model.js.map +1 -1
  46. package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts +74 -69
  47. package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts.map +1 -1
  48. package/dist/esm/content/application-consumer-documentation-content.techdoc.js +654 -1120
  49. package/dist/esm/content/application-consumer-documentation-content.techdoc.js.map +1 -1
  50. package/dist/esm/runtime/decode-jwt-claims.d.ts +7 -4
  51. package/dist/esm/runtime/decode-jwt-claims.d.ts.map +1 -1
  52. package/dist/esm/runtime/decode-jwt-claims.js +7 -4
  53. package/dist/esm/runtime/decode-jwt-claims.js.map +1 -1
  54. package/dist/esm/runtime/docs-auth-session.schemas.d.ts +16 -5
  55. package/dist/esm/runtime/docs-auth-session.schemas.d.ts.map +1 -1
  56. package/dist/esm/runtime/docs-auth-session.schemas.js +16 -5
  57. package/dist/esm/runtime/docs-auth-session.schemas.js.map +1 -1
  58. package/dist/esm/runtime/use-docs-auth-session.d.ts +9 -7
  59. package/dist/esm/runtime/use-docs-auth-session.d.ts.map +1 -1
  60. package/dist/esm/runtime/use-docs-auth-session.js +9 -7
  61. package/dist/esm/runtime/use-docs-auth-session.js.map +1 -1
  62. package/dist/tsconfig.build.tsbuildinfo +1 -1
  63. package/package.json +5 -5
  64. package/dist/esm/.builder.pid +0 -9
@@ -30,6 +30,96 @@ function slugForUnit(unit) {
30
30
  throw new Error(`technical-documentation unit ${unit.unitRef} cannot produce a stable path`);
31
31
  return slug;
32
32
  }
33
+ /**
34
+ * Every route the engine content module owns, keyed by unit slug. Exported as a SET so the
35
+ * renderers can tell a gated page this application does not publish (flatten the link) from a
36
+ * misspelled route (leave it for the managed-tree validator).
37
+ */
38
+ const ENGINE_UNIT_PATH_BY_SLUG = {
39
+ 'application-orientation': 'get-started',
40
+ authentication: 'access-and-identity/overview',
41
+ 'sign-in-and-mfa': 'access-and-identity/sign-in-and-mfa',
42
+ 'complete-sign-in': 'access-and-identity/complete-sign-in',
43
+ 'mfa-enrollment-and-recovery': 'access-and-identity/mfa-enrollment-and-recovery',
44
+ 'sign-in-troubleshoot': 'access-and-identity/sign-in-troubleshoot',
45
+ 'single-sign-on': 'access-and-identity/single-sign-on',
46
+ 'sso-configure': 'access-and-identity/sso-configure',
47
+ 'sso-rollout-and-recovery': 'access-and-identity/sso-rollout-and-recovery',
48
+ 'sso-troubleshoot': 'access-and-identity/sso-troubleshoot',
49
+ 'api-keys': 'access-and-identity/api-keys',
50
+ 'api-keys-create-and-store': 'access-and-identity/api-keys-create-and-store',
51
+ 'api-keys-lifecycle': 'access-and-identity/api-keys-lifecycle',
52
+ 'api-keys-troubleshoot': 'access-and-identity/api-keys-troubleshoot',
53
+ 'oauth-provider': 'access-and-identity/oauth-provider',
54
+ 'oauth-register-client': 'access-and-identity/oauth-register-client',
55
+ 'oauth-authorize-delegated-access': 'access-and-identity/oauth-authorize-delegated-access',
56
+ 'oauth-operate-and-revoke': 'access-and-identity/oauth-operate-and-revoke',
57
+ 'user-administration': 'user-administration',
58
+ 'manage-users-manually': 'user-administration/manage-users-manually',
59
+ 'invite-and-onboard-user': 'user-administration/invite-and-onboard-user',
60
+ 'organization-roles': 'user-administration/roles-and-permissions',
61
+ 'change-user-access': 'user-administration/change-user-access',
62
+ 'manage-organization-units': 'user-administration/manage-organization-units',
63
+ 'design-organization-unit-hierarchy': 'user-administration/design-organization-unit-hierarchy',
64
+ 'assign-organization-unit-access': 'user-administration/assign-organization-unit-access',
65
+ 'operate-organization-units': 'user-administration/operate-organization-units',
66
+ 'suspend-or-remove-user': 'user-administration/suspend-or-remove-user',
67
+ 'review-users-and-access': 'user-administration/review-users-and-access',
68
+ 'troubleshoot-user-access': 'user-administration/troubleshoot-user-access',
69
+ scim: 'user-administration/scim-provisioning',
70
+ 'scim-protocol-and-payloads': 'user-administration/scim-protocol-and-payloads',
71
+ 'scim-configure': 'user-administration/scim-configure',
72
+ 'scim-microsoft-entra': 'user-administration/scim-microsoft-entra',
73
+ 'scim-okta': 'user-administration/scim-okta',
74
+ 'scim-ldap-and-active-directory': 'user-administration/scim-ldap-and-active-directory',
75
+ 'scim-map-profile-and-units': 'user-administration/scim-map-profile-and-units',
76
+ 'scim-validate-and-roll-out': 'user-administration/scim-validate-and-roll-out',
77
+ 'scim-operate-and-troubleshoot': 'user-administration/scim-operate-and-troubleshoot',
78
+ 'audit-and-siem': 'security-and-audit',
79
+ 'investigate-audit-event': 'security-and-audit/investigate-event',
80
+ 'review-privileged-and-access-changes': 'security-and-audit/review-access-changes',
81
+ 'export-audit-records': 'security-and-audit/export-audit-records',
82
+ 'configure-siem-export': 'security-and-audit/configure-siem',
83
+ 'siem-splunk': 'security-and-audit/siem-splunk',
84
+ 'siem-microsoft-sentinel': 'security-and-audit/siem-microsoft-sentinel',
85
+ 'siem-elastic': 'security-and-audit/siem-elastic',
86
+ 'operate-and-troubleshoot-siem-delivery': 'security-and-audit/operate-siem',
87
+ 'protect-and-retain-audit-evidence': 'security-and-audit/protect-evidence',
88
+ billing: 'billing-and-subscriptions',
89
+ 'understand-billing-plans-and-access': 'billing-and-subscriptions/plans-and-access',
90
+ 'start-billing-subscription': 'billing-and-subscriptions/start-subscription',
91
+ 'change-or-end-billing-subscription': 'billing-and-subscriptions/change-or-end-subscription',
92
+ 'billing-records-and-usage': 'billing-and-subscriptions/billing-records',
93
+ 'manage-invoices-and-payments': 'billing-and-subscriptions/invoices-and-payments',
94
+ 'understand-metered-usage': 'billing-and-subscriptions/metered-usage',
95
+ 'reconcile-billing-and-access': 'billing-and-subscriptions/reconcile-access',
96
+ 'troubleshoot-billing-change': 'billing-and-subscriptions/troubleshoot',
97
+ integrations: 'integrations',
98
+ 'automation-platforms': 'integrations/automation-platforms',
99
+ 'connect-n8n': 'integrations/automation/n8n',
100
+ 'connect-zapier': 'integrations/automation/zapier',
101
+ 'connect-make': 'integrations/automation/make',
102
+ 'ai-coding-tools': 'integrations/ai-coding-tools',
103
+ 'connect-cursor': 'integrations/ai-tools/cursor',
104
+ 'connect-codex': 'integrations/ai-tools/codex',
105
+ 'connect-claude-code': 'integrations/ai-tools/claude-code',
106
+ 'agent-interoperability': 'integrations/agents',
107
+ 'mcp-integrations': 'integrations/mcp',
108
+ 'a2a-integrations': 'integrations/a2a',
109
+ 'first-request': 'integrations/create-your-own-integration',
110
+ 'common-rest-api': 'integrations/rest-api',
111
+ 'rest-api-conventions': 'integrations/rest/conventions',
112
+ 'send-api-request': 'integrations/rest/send-request',
113
+ 'work-with-api-collections': 'integrations/rest/read-collections',
114
+ 'write-and-reconcile-api-changes': 'integrations/rest/write-and-reconcile',
115
+ 'troubleshoot-api-request': 'integrations/rest/troubleshoot',
116
+ webhooks: 'integrations/webhooks',
117
+ 'configure-and-test-webhook-endpoint': 'integrations/webhooks/configure-and-test',
118
+ 'verify-webhook-delivery': 'integrations/webhooks/verify-delivery',
119
+ 'operate-webhook-deliveries': 'integrations/webhooks/operate-deliveries',
120
+ 'troubleshoot-webhook-deliveries': 'integrations/webhooks/troubleshoot',
121
+ };
122
+ export const ENGINE_UNIT_ROUTES = new Set(Object.values(ENGINE_UNIT_PATH_BY_SLUG));
33
123
  /**
34
124
  * Maps a published semantic unit to its consumer navigation home.
35
125
  *
@@ -45,90 +135,7 @@ function slugForUnit(unit) {
45
135
  function pathForUnit(unit) {
46
136
  const slug = slugForUnit(unit);
47
137
  if (unit.unitRef.startsWith('technical-documentation:unit/')) {
48
- const enginePaths = {
49
- 'application-orientation': 'get-started',
50
- authentication: 'access-and-identity/overview',
51
- 'sign-in-and-mfa': 'access-and-identity/sign-in-and-mfa',
52
- 'complete-sign-in': 'access-and-identity/complete-sign-in',
53
- 'mfa-enrollment-and-recovery': 'access-and-identity/mfa-enrollment-and-recovery',
54
- 'sign-in-troubleshoot': 'access-and-identity/sign-in-troubleshoot',
55
- 'single-sign-on': 'access-and-identity/single-sign-on',
56
- 'sso-configure': 'access-and-identity/sso-configure',
57
- 'sso-rollout-and-recovery': 'access-and-identity/sso-rollout-and-recovery',
58
- 'sso-troubleshoot': 'access-and-identity/sso-troubleshoot',
59
- 'api-keys': 'access-and-identity/api-keys',
60
- 'api-keys-create-and-store': 'access-and-identity/api-keys-create-and-store',
61
- 'api-keys-lifecycle': 'access-and-identity/api-keys-lifecycle',
62
- 'api-keys-troubleshoot': 'access-and-identity/api-keys-troubleshoot',
63
- 'oauth-provider': 'access-and-identity/oauth-provider',
64
- 'oauth-register-client': 'access-and-identity/oauth-register-client',
65
- 'oauth-authorize-delegated-access': 'access-and-identity/oauth-authorize-delegated-access',
66
- 'oauth-operate-and-revoke': 'access-and-identity/oauth-operate-and-revoke',
67
- 'user-administration': 'user-administration',
68
- 'manage-users-manually': 'user-administration/manage-users-manually',
69
- 'invite-and-onboard-user': 'user-administration/invite-and-onboard-user',
70
- 'organization-roles': 'user-administration/roles-and-permissions',
71
- 'change-user-access': 'user-administration/change-user-access',
72
- 'manage-organization-units': 'user-administration/manage-organization-units',
73
- 'design-organization-unit-hierarchy': 'user-administration/design-organization-unit-hierarchy',
74
- 'assign-organization-unit-access': 'user-administration/assign-organization-unit-access',
75
- 'operate-organization-units': 'user-administration/operate-organization-units',
76
- 'suspend-or-remove-user': 'user-administration/suspend-or-remove-user',
77
- 'review-users-and-access': 'user-administration/review-users-and-access',
78
- 'troubleshoot-user-access': 'user-administration/troubleshoot-user-access',
79
- scim: 'user-administration/scim-provisioning',
80
- 'scim-protocol-and-payloads': 'user-administration/scim-protocol-and-payloads',
81
- 'scim-configure': 'user-administration/scim-configure',
82
- 'scim-microsoft-entra': 'user-administration/scim-microsoft-entra',
83
- 'scim-okta': 'user-administration/scim-okta',
84
- 'scim-ldap-and-active-directory': 'user-administration/scim-ldap-and-active-directory',
85
- 'scim-map-profile-and-units': 'user-administration/scim-map-profile-and-units',
86
- 'scim-validate-and-roll-out': 'user-administration/scim-validate-and-roll-out',
87
- 'scim-operate-and-troubleshoot': 'user-administration/scim-operate-and-troubleshoot',
88
- 'audit-and-siem': 'security-and-audit',
89
- 'investigate-audit-event': 'security-and-audit/investigate-event',
90
- 'review-privileged-and-access-changes': 'security-and-audit/review-access-changes',
91
- 'export-audit-records': 'security-and-audit/export-audit-records',
92
- 'configure-siem-export': 'security-and-audit/configure-siem',
93
- 'siem-splunk': 'security-and-audit/siem-splunk',
94
- 'siem-microsoft-sentinel': 'security-and-audit/siem-microsoft-sentinel',
95
- 'siem-elastic': 'security-and-audit/siem-elastic',
96
- 'operate-and-troubleshoot-siem-delivery': 'security-and-audit/operate-siem',
97
- 'protect-and-retain-audit-evidence': 'security-and-audit/protect-evidence',
98
- billing: 'billing-and-subscriptions',
99
- 'understand-billing-plans-and-access': 'billing-and-subscriptions/plans-and-access',
100
- 'start-billing-subscription': 'billing-and-subscriptions/start-subscription',
101
- 'change-or-end-billing-subscription': 'billing-and-subscriptions/change-or-end-subscription',
102
- 'billing-records-and-usage': 'billing-and-subscriptions/billing-records',
103
- 'manage-invoices-and-payments': 'billing-and-subscriptions/invoices-and-payments',
104
- 'understand-metered-usage': 'billing-and-subscriptions/metered-usage',
105
- 'reconcile-billing-and-access': 'billing-and-subscriptions/reconcile-access',
106
- 'troubleshoot-billing-change': 'billing-and-subscriptions/troubleshoot',
107
- integrations: 'integrations',
108
- 'automation-platforms': 'integrations/automation-platforms',
109
- 'connect-n8n': 'integrations/automation/n8n',
110
- 'connect-zapier': 'integrations/automation/zapier',
111
- 'connect-make': 'integrations/automation/make',
112
- 'ai-coding-tools': 'integrations/ai-coding-tools',
113
- 'connect-cursor': 'integrations/ai-tools/cursor',
114
- 'connect-codex': 'integrations/ai-tools/codex',
115
- 'connect-claude-code': 'integrations/ai-tools/claude-code',
116
- 'agent-interoperability': 'integrations/agents',
117
- 'mcp-integrations': 'integrations/mcp',
118
- 'a2a-integrations': 'integrations/a2a',
119
- 'first-request': 'integrations/create-your-own-integration',
120
- 'common-rest-api': 'integrations/rest-api',
121
- 'send-api-request': 'integrations/rest/send-request',
122
- 'work-with-api-collections': 'integrations/rest/read-collections',
123
- 'write-and-reconcile-api-changes': 'integrations/rest/write-and-reconcile',
124
- 'troubleshoot-api-request': 'integrations/rest/troubleshoot',
125
- webhooks: 'integrations/webhooks',
126
- 'configure-and-test-webhook-endpoint': 'integrations/webhooks/configure-and-test',
127
- 'verify-webhook-delivery': 'integrations/webhooks/verify-delivery',
128
- 'operate-webhook-deliveries': 'integrations/webhooks/operate-deliveries',
129
- 'troubleshoot-webhook-deliveries': 'integrations/webhooks/troubleshoot',
130
- };
131
- const path = enginePaths[slug];
138
+ const path = ENGINE_UNIT_PATH_BY_SLUG[slug];
132
139
  if (path !== undefined)
133
140
  return path;
134
141
  throw new Error(`technical-documentation framework unit ${unit.unitRef} has no consumer navigation path`);
@@ -1 +1 @@
1
- {"version":3,"file":"technical-documentation-render-model.js","sourceRoot":"","sources":["../../../../../src/companion/rendering/technical-documentation-render-model.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\n\nimport {\n createTechnicalDocumentationRenderOutputManifestV1,\n canonicalizeTechnicalDocumentationJson,\n TechnicalDocumentationOutputKind,\n TechnicalDocumentationNormalizedRelativePathSchema,\n TechnicalDocumentationRendererKind,\n type TechnicalDocumentationAuthorizedBundleManifestV1,\n type TechnicalDocumentationRenderOutputManifestV1,\n type TechnicalDocumentationRendererExecutionV1,\n type TechnicalDocumentationVersionedIdentityV1,\n type TechnicalDocumentationResolvedAssetBundleManifestV1,\n type TechnicalDocumentationSupportedApiVersion,\n type TechnicalDocumentationUnitV1,\n} from '@wildo-ai/saas-specifications/technical-documentation';\n\n/**\n * Names opaque emitted bytes, and detects their corruption when a reader compares this against the\n * bytes it actually loaded. That two-sided check is why it survived the 2026-08-27 digest\n * demolition; its string-hashing sibling did not, because every caller of that one was recording\n * agreement between two parts of the repository rather than naming content.\n */\nexport function technicalDocumentationSha256Bytes(bytes: Uint8Array): string {\n return `sha256:${createHash('sha256').update(bytes).digest('hex')}`;\n}\n\nexport interface TechnicalDocumentationRenderModel {\n readonly authorizedBundleIdentity: TechnicalDocumentationVersionedIdentityV1;\n readonly channel: TechnicalDocumentationAuthorizedBundleManifestV1['channel'];\n readonly units: readonly TechnicalDocumentationUnitV1[];\n readonly unitPathByRef: ReadonlyMap<string, string>;\n}\n\nexport interface TechnicalDocumentationRenderedFile {\n readonly outputRef: string;\n readonly rendererRef: string;\n readonly outputKind: TechnicalDocumentationOutputKind;\n readonly sourceUnitRefs: readonly string[];\n readonly normalizedRelativePath: string;\n readonly mediaType: string;\n readonly bytes: Uint8Array;\n}\n\nexport interface TechnicalDocumentationRendererResult {\n readonly execution: TechnicalDocumentationRendererExecutionV1;\n readonly files: readonly TechnicalDocumentationRenderedFile[];\n}\n\nexport function createTechnicalDocumentationRendererExecution(input: {\n readonly rendererKind: TechnicalDocumentationRendererKind;\n readonly rendererRef: string;\n readonly rendererVersion: number;\n /** Names the renderer's configuration. `rendererRef@rendererVersion` names the implementation. */\n readonly configurationRef: string;\n}): TechnicalDocumentationRendererExecutionV1 {\n /*\n * This built two sha256 fields until 2026-08-27: one over the renderer's own function bodies\n * (`Function.prototype.toString()`), one over its configuration object. Neither was ever compared\n * to anything — they rode into the manifest beside the `rendererRef` and `rendererVersion` that\n * already say which renderer ran, in a form a reader can act on.\n */\n return {\n rendererKind: input.rendererKind,\n rendererRef: input.rendererRef,\n rendererVersion: input.rendererVersion,\n configurationRef: input.configurationRef,\n };\n}\n\nfunction slugForUnit(unit: TechnicalDocumentationUnitV1): string {\n const source = unit.unitRef.split('/').at(-1) ?? unit.unitRef;\n const slug = source.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n if (slug.length === 0) throw new Error(`technical-documentation unit ${unit.unitRef} cannot produce a stable path`);\n return slug;\n}\n\n/**\n * Maps a published semantic unit to its consumer navigation home.\n *\n * This is deliberately renderer-owned rather than inferred from Markdown file\n * names: the semantic unit is the stable composition input, while a renderer\n * owns audience-facing URLs. The route table is deliberately organized by a\n * customer's product responsibility—not the internal framework that implements\n * it—so readers can find access, organization, security, billing and\n * integration material without learning Wildo vocabulary. Application-domain\n * use cases remain deferred to the app-creator flow, so an application-owned\n * unit fails closed instead of acquiring an implicit route.\n */\nfunction pathForUnit(unit: TechnicalDocumentationUnitV1): string {\n const slug = slugForUnit(unit);\n if (unit.unitRef.startsWith('technical-documentation:unit/')) {\n const enginePaths: Readonly<Record<string, string>> = {\n 'application-orientation': 'get-started',\n authentication: 'access-and-identity/overview',\n 'sign-in-and-mfa': 'access-and-identity/sign-in-and-mfa',\n 'complete-sign-in': 'access-and-identity/complete-sign-in',\n 'mfa-enrollment-and-recovery': 'access-and-identity/mfa-enrollment-and-recovery',\n 'sign-in-troubleshoot': 'access-and-identity/sign-in-troubleshoot',\n 'single-sign-on': 'access-and-identity/single-sign-on',\n 'sso-configure': 'access-and-identity/sso-configure',\n 'sso-rollout-and-recovery': 'access-and-identity/sso-rollout-and-recovery',\n 'sso-troubleshoot': 'access-and-identity/sso-troubleshoot',\n 'api-keys': 'access-and-identity/api-keys',\n 'api-keys-create-and-store': 'access-and-identity/api-keys-create-and-store',\n 'api-keys-lifecycle': 'access-and-identity/api-keys-lifecycle',\n 'api-keys-troubleshoot': 'access-and-identity/api-keys-troubleshoot',\n 'oauth-provider': 'access-and-identity/oauth-provider',\n 'oauth-register-client': 'access-and-identity/oauth-register-client',\n 'oauth-authorize-delegated-access': 'access-and-identity/oauth-authorize-delegated-access',\n 'oauth-operate-and-revoke': 'access-and-identity/oauth-operate-and-revoke',\n 'user-administration': 'user-administration',\n 'manage-users-manually': 'user-administration/manage-users-manually',\n 'invite-and-onboard-user': 'user-administration/invite-and-onboard-user',\n 'organization-roles': 'user-administration/roles-and-permissions',\n 'change-user-access': 'user-administration/change-user-access',\n 'manage-organization-units': 'user-administration/manage-organization-units',\n 'design-organization-unit-hierarchy': 'user-administration/design-organization-unit-hierarchy',\n 'assign-organization-unit-access': 'user-administration/assign-organization-unit-access',\n 'operate-organization-units': 'user-administration/operate-organization-units',\n 'suspend-or-remove-user': 'user-administration/suspend-or-remove-user',\n 'review-users-and-access': 'user-administration/review-users-and-access',\n 'troubleshoot-user-access': 'user-administration/troubleshoot-user-access',\n scim: 'user-administration/scim-provisioning',\n 'scim-protocol-and-payloads': 'user-administration/scim-protocol-and-payloads',\n 'scim-configure': 'user-administration/scim-configure',\n 'scim-microsoft-entra': 'user-administration/scim-microsoft-entra',\n 'scim-okta': 'user-administration/scim-okta',\n 'scim-ldap-and-active-directory': 'user-administration/scim-ldap-and-active-directory',\n 'scim-map-profile-and-units': 'user-administration/scim-map-profile-and-units',\n 'scim-validate-and-roll-out': 'user-administration/scim-validate-and-roll-out',\n 'scim-operate-and-troubleshoot': 'user-administration/scim-operate-and-troubleshoot',\n 'audit-and-siem': 'security-and-audit',\n 'investigate-audit-event': 'security-and-audit/investigate-event',\n 'review-privileged-and-access-changes': 'security-and-audit/review-access-changes',\n 'export-audit-records': 'security-and-audit/export-audit-records',\n 'configure-siem-export': 'security-and-audit/configure-siem',\n 'siem-splunk': 'security-and-audit/siem-splunk',\n 'siem-microsoft-sentinel': 'security-and-audit/siem-microsoft-sentinel',\n 'siem-elastic': 'security-and-audit/siem-elastic',\n 'operate-and-troubleshoot-siem-delivery': 'security-and-audit/operate-siem',\n 'protect-and-retain-audit-evidence': 'security-and-audit/protect-evidence',\n billing: 'billing-and-subscriptions',\n 'understand-billing-plans-and-access': 'billing-and-subscriptions/plans-and-access',\n 'start-billing-subscription': 'billing-and-subscriptions/start-subscription',\n 'change-or-end-billing-subscription': 'billing-and-subscriptions/change-or-end-subscription',\n 'billing-records-and-usage': 'billing-and-subscriptions/billing-records',\n 'manage-invoices-and-payments': 'billing-and-subscriptions/invoices-and-payments',\n 'understand-metered-usage': 'billing-and-subscriptions/metered-usage',\n 'reconcile-billing-and-access': 'billing-and-subscriptions/reconcile-access',\n 'troubleshoot-billing-change': 'billing-and-subscriptions/troubleshoot',\n integrations: 'integrations',\n 'automation-platforms': 'integrations/automation-platforms',\n 'connect-n8n': 'integrations/automation/n8n',\n 'connect-zapier': 'integrations/automation/zapier',\n 'connect-make': 'integrations/automation/make',\n 'ai-coding-tools': 'integrations/ai-coding-tools',\n 'connect-cursor': 'integrations/ai-tools/cursor',\n 'connect-codex': 'integrations/ai-tools/codex',\n 'connect-claude-code': 'integrations/ai-tools/claude-code',\n 'agent-interoperability': 'integrations/agents',\n 'mcp-integrations': 'integrations/mcp',\n 'a2a-integrations': 'integrations/a2a',\n 'first-request': 'integrations/create-your-own-integration',\n 'common-rest-api': 'integrations/rest-api',\n 'send-api-request': 'integrations/rest/send-request',\n 'work-with-api-collections': 'integrations/rest/read-collections',\n 'write-and-reconcile-api-changes': 'integrations/rest/write-and-reconcile',\n 'troubleshoot-api-request': 'integrations/rest/troubleshoot',\n webhooks: 'integrations/webhooks',\n 'configure-and-test-webhook-endpoint': 'integrations/webhooks/configure-and-test',\n 'verify-webhook-delivery': 'integrations/webhooks/verify-delivery',\n 'operate-webhook-deliveries': 'integrations/webhooks/operate-deliveries',\n 'troubleshoot-webhook-deliveries': 'integrations/webhooks/troubleshoot',\n };\n const path = enginePaths[slug];\n if (path !== undefined) return path;\n throw new Error(`technical-documentation framework unit ${unit.unitRef} has no consumer navigation path`);\n }\n throw new Error(`technical-documentation unit ${unit.unitRef} has no consumer navigation category`);\n}\n\nexport function createTechnicalDocumentationRenderModel(\n authorizedBundle: TechnicalDocumentationAuthorizedBundleManifestV1,\n): TechnicalDocumentationRenderModel {\n const unitPathByRef = new Map<string, string>();\n const occupiedPaths = new Set<string>();\n for (const unit of authorizedBundle.units) {\n const path = pathForUnit(unit);\n if (occupiedPaths.has(path)) throw new Error(`technical-documentation units collide on renderer path ${path}`);\n occupiedPaths.add(path);\n unitPathByRef.set(unit.unitRef, path);\n }\n return Object.freeze({\n authorizedBundleIdentity: Object.freeze({ ref: authorizedBundle.bundleRef, version: authorizedBundle.bundleVersion }),\n channel: authorizedBundle.channel,\n units: Object.freeze([...authorizedBundle.units]),\n unitPathByRef,\n });\n}\n\nexport function createTechnicalDocumentationAggregateRenderManifest(input: {\n readonly authorizedBundle: TechnicalDocumentationAuthorizedBundleManifestV1;\n readonly resolvedAssetBundle: TechnicalDocumentationResolvedAssetBundleManifestV1;\n readonly supportedApiVersion: TechnicalDocumentationSupportedApiVersion;\n readonly rendererResults: readonly TechnicalDocumentationRendererResult[];\n /** This render's own identity; the publication pointer selects a render by it. */\n readonly renderRef: string;\n readonly renderVersion: number;\n}): TechnicalDocumentationRenderOutputManifestV1 {\n const rendererExecutions = input.rendererResults.map((result) => result.execution);\n const outputs = input.rendererResults.flatMap((result) => result.files.map((file) => ({\n outputRef: file.outputRef,\n rendererRef: file.rendererRef,\n outputKind: file.outputKind,\n sourceUnitRefs: [...file.sourceUnitRefs],\n normalizedRelativePath: TechnicalDocumentationNormalizedRelativePathSchema.parse(file.normalizedRelativePath),\n mediaType: file.mediaType,\n byteLength: file.bytes.byteLength,\n byteDigest: technicalDocumentationSha256Bytes(file.bytes),\n })));\n return createTechnicalDocumentationRenderOutputManifestV1({\n schemaVersion: 1,\n renderRef: input.renderRef,\n renderVersion: input.renderVersion,\n authorizedBundleIdentity: { ref: input.authorizedBundle.bundleRef, version: input.authorizedBundle.bundleVersion },\n resolvedAssetBundleIdentity: { ref: input.resolvedAssetBundle.assetBundleRef, version: input.resolvedAssetBundle.assetBundleVersion },\n supportedApiVersion: input.supportedApiVersion,\n rendererExecutions,\n outputs,\n });\n}\n"]}
1
+ {"version":3,"file":"technical-documentation-render-model.js","sourceRoot":"","sources":["../../../../../src/companion/rendering/technical-documentation-render-model.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\n\nimport {\n createTechnicalDocumentationRenderOutputManifestV1,\n canonicalizeTechnicalDocumentationJson,\n TechnicalDocumentationOutputKind,\n TechnicalDocumentationNormalizedRelativePathSchema,\n TechnicalDocumentationRendererKind,\n type TechnicalDocumentationAuthorizedBundleManifestV1,\n type TechnicalDocumentationRenderOutputManifestV1,\n type TechnicalDocumentationRendererExecutionV1,\n type TechnicalDocumentationVersionedIdentityV1,\n type TechnicalDocumentationResolvedAssetBundleManifestV1,\n type TechnicalDocumentationSupportedApiVersion,\n type TechnicalDocumentationUnitV1,\n} from '@wildo-ai/saas-specifications/technical-documentation';\n\n/**\n * Names opaque emitted bytes, and detects their corruption when a reader compares this against the\n * bytes it actually loaded. That two-sided check is why it survived the 2026-08-27 digest\n * demolition; its string-hashing sibling did not, because every caller of that one was recording\n * agreement between two parts of the repository rather than naming content.\n */\nexport function technicalDocumentationSha256Bytes(bytes: Uint8Array): string {\n return `sha256:${createHash('sha256').update(bytes).digest('hex')}`;\n}\n\nexport interface TechnicalDocumentationRenderModel {\n readonly authorizedBundleIdentity: TechnicalDocumentationVersionedIdentityV1;\n readonly channel: TechnicalDocumentationAuthorizedBundleManifestV1['channel'];\n readonly units: readonly TechnicalDocumentationUnitV1[];\n readonly unitPathByRef: ReadonlyMap<string, string>;\n}\n\nexport interface TechnicalDocumentationRenderedFile {\n readonly outputRef: string;\n readonly rendererRef: string;\n readonly outputKind: TechnicalDocumentationOutputKind;\n readonly sourceUnitRefs: readonly string[];\n readonly normalizedRelativePath: string;\n readonly mediaType: string;\n readonly bytes: Uint8Array;\n}\n\nexport interface TechnicalDocumentationRendererResult {\n readonly execution: TechnicalDocumentationRendererExecutionV1;\n readonly files: readonly TechnicalDocumentationRenderedFile[];\n}\n\nexport function createTechnicalDocumentationRendererExecution(input: {\n readonly rendererKind: TechnicalDocumentationRendererKind;\n readonly rendererRef: string;\n readonly rendererVersion: number;\n /** Names the renderer's configuration. `rendererRef@rendererVersion` names the implementation. */\n readonly configurationRef: string;\n}): TechnicalDocumentationRendererExecutionV1 {\n /*\n * This built two sha256 fields until 2026-08-27: one over the renderer's own function bodies\n * (`Function.prototype.toString()`), one over its configuration object. Neither was ever compared\n * to anything — they rode into the manifest beside the `rendererRef` and `rendererVersion` that\n * already say which renderer ran, in a form a reader can act on.\n */\n return {\n rendererKind: input.rendererKind,\n rendererRef: input.rendererRef,\n rendererVersion: input.rendererVersion,\n configurationRef: input.configurationRef,\n };\n}\n\nfunction slugForUnit(unit: TechnicalDocumentationUnitV1): string {\n const source = unit.unitRef.split('/').at(-1) ?? unit.unitRef;\n const slug = source.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n if (slug.length === 0) throw new Error(`technical-documentation unit ${unit.unitRef} cannot produce a stable path`);\n return slug;\n}\n\n/**\n * Every route the engine content module owns, keyed by unit slug. Exported as a SET so the\n * renderers can tell a gated page this application does not publish (flatten the link) from a\n * misspelled route (leave it for the managed-tree validator).\n */\nconst ENGINE_UNIT_PATH_BY_SLUG: Readonly<Record<string, string>> = {\n 'application-orientation': 'get-started',\n authentication: 'access-and-identity/overview',\n 'sign-in-and-mfa': 'access-and-identity/sign-in-and-mfa',\n 'complete-sign-in': 'access-and-identity/complete-sign-in',\n 'mfa-enrollment-and-recovery': 'access-and-identity/mfa-enrollment-and-recovery',\n 'sign-in-troubleshoot': 'access-and-identity/sign-in-troubleshoot',\n 'single-sign-on': 'access-and-identity/single-sign-on',\n 'sso-configure': 'access-and-identity/sso-configure',\n 'sso-rollout-and-recovery': 'access-and-identity/sso-rollout-and-recovery',\n 'sso-troubleshoot': 'access-and-identity/sso-troubleshoot',\n 'api-keys': 'access-and-identity/api-keys',\n 'api-keys-create-and-store': 'access-and-identity/api-keys-create-and-store',\n 'api-keys-lifecycle': 'access-and-identity/api-keys-lifecycle',\n 'api-keys-troubleshoot': 'access-and-identity/api-keys-troubleshoot',\n 'oauth-provider': 'access-and-identity/oauth-provider',\n 'oauth-register-client': 'access-and-identity/oauth-register-client',\n 'oauth-authorize-delegated-access': 'access-and-identity/oauth-authorize-delegated-access',\n 'oauth-operate-and-revoke': 'access-and-identity/oauth-operate-and-revoke',\n 'user-administration': 'user-administration',\n 'manage-users-manually': 'user-administration/manage-users-manually',\n 'invite-and-onboard-user': 'user-administration/invite-and-onboard-user',\n 'organization-roles': 'user-administration/roles-and-permissions',\n 'change-user-access': 'user-administration/change-user-access',\n 'manage-organization-units': 'user-administration/manage-organization-units',\n 'design-organization-unit-hierarchy': 'user-administration/design-organization-unit-hierarchy',\n 'assign-organization-unit-access': 'user-administration/assign-organization-unit-access',\n 'operate-organization-units': 'user-administration/operate-organization-units',\n 'suspend-or-remove-user': 'user-administration/suspend-or-remove-user',\n 'review-users-and-access': 'user-administration/review-users-and-access',\n 'troubleshoot-user-access': 'user-administration/troubleshoot-user-access',\n scim: 'user-administration/scim-provisioning',\n 'scim-protocol-and-payloads': 'user-administration/scim-protocol-and-payloads',\n 'scim-configure': 'user-administration/scim-configure',\n 'scim-microsoft-entra': 'user-administration/scim-microsoft-entra',\n 'scim-okta': 'user-administration/scim-okta',\n 'scim-ldap-and-active-directory': 'user-administration/scim-ldap-and-active-directory',\n 'scim-map-profile-and-units': 'user-administration/scim-map-profile-and-units',\n 'scim-validate-and-roll-out': 'user-administration/scim-validate-and-roll-out',\n 'scim-operate-and-troubleshoot': 'user-administration/scim-operate-and-troubleshoot',\n 'audit-and-siem': 'security-and-audit',\n 'investigate-audit-event': 'security-and-audit/investigate-event',\n 'review-privileged-and-access-changes': 'security-and-audit/review-access-changes',\n 'export-audit-records': 'security-and-audit/export-audit-records',\n 'configure-siem-export': 'security-and-audit/configure-siem',\n 'siem-splunk': 'security-and-audit/siem-splunk',\n 'siem-microsoft-sentinel': 'security-and-audit/siem-microsoft-sentinel',\n 'siem-elastic': 'security-and-audit/siem-elastic',\n 'operate-and-troubleshoot-siem-delivery': 'security-and-audit/operate-siem',\n 'protect-and-retain-audit-evidence': 'security-and-audit/protect-evidence',\n billing: 'billing-and-subscriptions',\n 'understand-billing-plans-and-access': 'billing-and-subscriptions/plans-and-access',\n 'start-billing-subscription': 'billing-and-subscriptions/start-subscription',\n 'change-or-end-billing-subscription': 'billing-and-subscriptions/change-or-end-subscription',\n 'billing-records-and-usage': 'billing-and-subscriptions/billing-records',\n 'manage-invoices-and-payments': 'billing-and-subscriptions/invoices-and-payments',\n 'understand-metered-usage': 'billing-and-subscriptions/metered-usage',\n 'reconcile-billing-and-access': 'billing-and-subscriptions/reconcile-access',\n 'troubleshoot-billing-change': 'billing-and-subscriptions/troubleshoot',\n integrations: 'integrations',\n 'automation-platforms': 'integrations/automation-platforms',\n 'connect-n8n': 'integrations/automation/n8n',\n 'connect-zapier': 'integrations/automation/zapier',\n 'connect-make': 'integrations/automation/make',\n 'ai-coding-tools': 'integrations/ai-coding-tools',\n 'connect-cursor': 'integrations/ai-tools/cursor',\n 'connect-codex': 'integrations/ai-tools/codex',\n 'connect-claude-code': 'integrations/ai-tools/claude-code',\n 'agent-interoperability': 'integrations/agents',\n 'mcp-integrations': 'integrations/mcp',\n 'a2a-integrations': 'integrations/a2a',\n 'first-request': 'integrations/create-your-own-integration',\n 'common-rest-api': 'integrations/rest-api',\n 'rest-api-conventions': 'integrations/rest/conventions',\n 'send-api-request': 'integrations/rest/send-request',\n 'work-with-api-collections': 'integrations/rest/read-collections',\n 'write-and-reconcile-api-changes': 'integrations/rest/write-and-reconcile',\n 'troubleshoot-api-request': 'integrations/rest/troubleshoot',\n webhooks: 'integrations/webhooks',\n 'configure-and-test-webhook-endpoint': 'integrations/webhooks/configure-and-test',\n 'verify-webhook-delivery': 'integrations/webhooks/verify-delivery',\n 'operate-webhook-deliveries': 'integrations/webhooks/operate-deliveries',\n 'troubleshoot-webhook-deliveries': 'integrations/webhooks/troubleshoot',\n};\n\nexport const ENGINE_UNIT_ROUTES: ReadonlySet<string> = new Set(Object.values(ENGINE_UNIT_PATH_BY_SLUG));\n\n/**\n * Maps a published semantic unit to its consumer navigation home.\n *\n * This is deliberately renderer-owned rather than inferred from Markdown file\n * names: the semantic unit is the stable composition input, while a renderer\n * owns audience-facing URLs. The route table is deliberately organized by a\n * customer's product responsibility—not the internal framework that implements\n * it—so readers can find access, organization, security, billing and\n * integration material without learning Wildo vocabulary. Application-domain\n * use cases remain deferred to the app-creator flow, so an application-owned\n * unit fails closed instead of acquiring an implicit route.\n */\nfunction pathForUnit(unit: TechnicalDocumentationUnitV1): string {\n const slug = slugForUnit(unit);\n if (unit.unitRef.startsWith('technical-documentation:unit/')) {\n const path = ENGINE_UNIT_PATH_BY_SLUG[slug];\n if (path !== undefined) return path;\n throw new Error(`technical-documentation framework unit ${unit.unitRef} has no consumer navigation path`);\n }\n throw new Error(`technical-documentation unit ${unit.unitRef} has no consumer navigation category`);\n}\n\nexport function createTechnicalDocumentationRenderModel(\n authorizedBundle: TechnicalDocumentationAuthorizedBundleManifestV1,\n): TechnicalDocumentationRenderModel {\n const unitPathByRef = new Map<string, string>();\n const occupiedPaths = new Set<string>();\n for (const unit of authorizedBundle.units) {\n const path = pathForUnit(unit);\n if (occupiedPaths.has(path)) throw new Error(`technical-documentation units collide on renderer path ${path}`);\n occupiedPaths.add(path);\n unitPathByRef.set(unit.unitRef, path);\n }\n return Object.freeze({\n authorizedBundleIdentity: Object.freeze({ ref: authorizedBundle.bundleRef, version: authorizedBundle.bundleVersion }),\n channel: authorizedBundle.channel,\n units: Object.freeze([...authorizedBundle.units]),\n unitPathByRef,\n });\n}\n\nexport function createTechnicalDocumentationAggregateRenderManifest(input: {\n readonly authorizedBundle: TechnicalDocumentationAuthorizedBundleManifestV1;\n readonly resolvedAssetBundle: TechnicalDocumentationResolvedAssetBundleManifestV1;\n readonly supportedApiVersion: TechnicalDocumentationSupportedApiVersion;\n readonly rendererResults: readonly TechnicalDocumentationRendererResult[];\n /** This render's own identity; the publication pointer selects a render by it. */\n readonly renderRef: string;\n readonly renderVersion: number;\n}): TechnicalDocumentationRenderOutputManifestV1 {\n const rendererExecutions = input.rendererResults.map((result) => result.execution);\n const outputs = input.rendererResults.flatMap((result) => result.files.map((file) => ({\n outputRef: file.outputRef,\n rendererRef: file.rendererRef,\n outputKind: file.outputKind,\n sourceUnitRefs: [...file.sourceUnitRefs],\n normalizedRelativePath: TechnicalDocumentationNormalizedRelativePathSchema.parse(file.normalizedRelativePath),\n mediaType: file.mediaType,\n byteLength: file.bytes.byteLength,\n byteDigest: technicalDocumentationSha256Bytes(file.bytes),\n })));\n return createTechnicalDocumentationRenderOutputManifestV1({\n schemaVersion: 1,\n renderRef: input.renderRef,\n renderVersion: input.renderVersion,\n authorizedBundleIdentity: { ref: input.authorizedBundle.bundleRef, version: input.authorizedBundle.bundleVersion },\n resolvedAssetBundleIdentity: { ref: input.resolvedAssetBundle.assetBundleRef, version: input.resolvedAssetBundle.assetBundleVersion },\n supportedApiVersion: input.supportedApiVersion,\n rendererExecutions,\n outputs,\n });\n}\n"]}