@pagenary/publisher 2026.5.0

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 (147) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +337 -0
  3. package/bin/pagenary.mjs +116 -0
  4. package/build.config.json +5 -0
  5. package/package.json +66 -0
  6. package/scripts/build-site.js +87 -0
  7. package/scripts/build-tenants.js +3569 -0
  8. package/scripts/build.js +99 -0
  9. package/scripts/generate-sections.js +41 -0
  10. package/scripts/lib/seo-generator.js +558 -0
  11. package/scripts/lint-content.js +62 -0
  12. package/scripts/seo-smoke.js +94 -0
  13. package/scripts/serve.js +142 -0
  14. package/site/app.js +1 -0
  15. package/site/index.html +57 -0
  16. package/site/lib/categories.js +1 -0
  17. package/site/lib/export.js +1 -0
  18. package/site/lib/manifest-utils.js +1 -0
  19. package/site/lib/router.js +1 -0
  20. package/site/lib/search.js +1 -0
  21. package/site/llms.txt +22 -0
  22. package/site/manifest.js +132 -0
  23. package/site/mermaid-init.js +1 -0
  24. package/site/pages/api.html +339 -0
  25. package/site/pages/architecture.html +303 -0
  26. package/site/pages/deployment.html +282 -0
  27. package/site/pages/developer-guide.html +157 -0
  28. package/site/pages/extending.html +135 -0
  29. package/site/pages/quickstart.html +318 -0
  30. package/site/pages/seo-strategy.html +121 -0
  31. package/site/pages/tenant-config.html +519 -0
  32. package/site/pages/welcome.html +116 -0
  33. package/site/robots.txt +10 -0
  34. package/site/sections/api.js +3 -0
  35. package/site/sections/architecture.js +3 -0
  36. package/site/sections/deployment.js +3 -0
  37. package/site/sections/developer-guide.js +3 -0
  38. package/site/sections/extending.js +3 -0
  39. package/site/sections/quickstart.js +3 -0
  40. package/site/sections/section-templates.js +1 -0
  41. package/site/sections/seo-strategy.js +3 -0
  42. package/site/sections/tenant-config.js +3 -0
  43. package/site/sections/welcome.js +3 -0
  44. package/site/seo.js +1 -0
  45. package/site/sitemap.xml +63 -0
  46. package/site/styles.css +1982 -0
  47. package/site/syntax-highlight.js +1 -0
  48. package/src/app.js +988 -0
  49. package/src/index.html +56 -0
  50. package/src/lib/categories.js +55 -0
  51. package/src/lib/export.js +195 -0
  52. package/src/lib/manifest-utils.js +69 -0
  53. package/src/lib/router.js +44 -0
  54. package/src/lib/search.js +151 -0
  55. package/src/manifest.js +246 -0
  56. package/src/mermaid-init.js +207 -0
  57. package/src/sections/archive-future-roadmap.js +7 -0
  58. package/src/sections/archive-initiative-alpha.js +7 -0
  59. package/src/sections/archive-milestone-records.js +7 -0
  60. package/src/sections/archive-timeline-overview.js +7 -0
  61. package/src/sections/core-technology-compliance-frameworks.js +7 -0
  62. package/src/sections/core-technology-coordination-model.js +7 -0
  63. package/src/sections/core-technology-data-definitions.js +7 -0
  64. package/src/sections/core-technology-hardware-integration.js +7 -0
  65. package/src/sections/core-technology-integrity-controls.js +7 -0
  66. package/src/sections/core-technology-network-topology.js +7 -0
  67. package/src/sections/core-technology-operator-requirements.js +7 -0
  68. package/src/sections/core-technology-overview.js +7 -0
  69. package/src/sections/core-technology-service-interfaces.js +7 -0
  70. package/src/sections/core-technology-synchronization-strategy.js +7 -0
  71. package/src/sections/core-technology-system-foundation.js +7 -0
  72. package/src/sections/developers-api-credentials.js +7 -0
  73. package/src/sections/developers-api-operations.js +7 -0
  74. package/src/sections/developers-api-reference.js +7 -0
  75. package/src/sections/developers-api-websocket.js +7 -0
  76. package/src/sections/developers-automation-blueprints.js +7 -0
  77. package/src/sections/developers-automation-modules.js +7 -0
  78. package/src/sections/developers-automation-patterns.js +7 -0
  79. package/src/sections/developers-deployment-playbook.js +7 -0
  80. package/src/sections/developers-overview.js +7 -0
  81. package/src/sections/developers-scheduling-patterns.js +7 -0
  82. package/src/sections/developers-sdk-go.js +7 -0
  83. package/src/sections/developers-sdk-javascript.js +7 -0
  84. package/src/sections/developers-sdk-python.js +7 -0
  85. package/src/sections/developers-sdk-rust.js +7 -0
  86. package/src/sections/developers-sdks.js +7 -0
  87. package/src/sections/developers-solution-examples.js +7 -0
  88. package/src/sections/developers-testing-framework.js +7 -0
  89. package/src/sections/getting-started-architecture-basics.js +7 -0
  90. package/src/sections/getting-started-introduction.js +7 -0
  91. package/src/sections/getting-started-performance-overview.js +7 -0
  92. package/src/sections/governance-community-initiatives.js +7 -0
  93. package/src/sections/governance-dao-overview.js +7 -0
  94. package/src/sections/governance-multi-token.js +7 -0
  95. package/src/sections/governance-overview.js +7 -0
  96. package/src/sections/governance-proposal-process.js +7 -0
  97. package/src/sections/governance-proposals.js +7 -0
  98. package/src/sections/governance-structure.js +7 -0
  99. package/src/sections/governance-token-distribution.js +7 -0
  100. package/src/sections/governance-treasury.js +7 -0
  101. package/src/sections/operations-environment-prep.js +7 -0
  102. package/src/sections/operations-getting-started.js +7 -0
  103. package/src/sections/operations-incentives-guide.js +7 -0
  104. package/src/sections/operations-incentives-strategies.js +7 -0
  105. package/src/sections/operations-incentives.js +7 -0
  106. package/src/sections/operations-infrastructure.js +7 -0
  107. package/src/sections/operations-monitoring.js +7 -0
  108. package/src/sections/operations-overview.js +7 -0
  109. package/src/sections/operations-performance.js +7 -0
  110. package/src/sections/operations-power-infrastructure.js +7 -0
  111. package/src/sections/operations-setup-guide.js +7 -0
  112. package/src/sections/operations-sync-setup.js +7 -0
  113. package/src/sections/products-flagship-solution.js +7 -0
  114. package/src/sections/products-solution-library.js +7 -0
  115. package/src/sections/resources-brand-assets.js +7 -0
  116. package/src/sections/resources-faq.js +7 -0
  117. package/src/sections/resources-glossary.js +7 -0
  118. package/src/sections/resources-research-papers.js +7 -0
  119. package/src/sections/section-templates.js +873 -0
  120. package/src/sections/security-audits.js +7 -0
  121. package/src/sections/security-best-practices.js +7 -0
  122. package/src/sections/security-bug-bounty.js +7 -0
  123. package/src/sections/security-incident-response.js +7 -0
  124. package/src/sections/security-overview.js +7 -0
  125. package/src/sections/technical-architecture.js +7 -0
  126. package/src/sections/technical-whitepaper.js +7 -0
  127. package/src/sections/tutorial-automation-bot.js +7 -0
  128. package/src/sections/tutorial-build-first-integration.js +7 -0
  129. package/src/sections/tutorial-deploy-automation.js +7 -0
  130. package/src/sections/tutorial-event-driven-experience.js +7 -0
  131. package/src/sections/tutorial-operations-onboarding.js +7 -0
  132. package/src/sections/tutorial-systems-integration.js +7 -0
  133. package/src/sections/tutorials-overview.js +7 -0
  134. package/src/sections/use-case-connected-devices.js +7 -0
  135. package/src/sections/use-case-digital-auctions.js +7 -0
  136. package/src/sections/use-case-financial-automation.js +7 -0
  137. package/src/sections/use-case-interactive-media.js +7 -0
  138. package/src/sections/use-case-realtime-execution.js +7 -0
  139. package/src/sections/use-case-research-analytics.js +7 -0
  140. package/src/sections/use-case-supply-operations.js +7 -0
  141. package/src/sections/use-cases-overview.js +7 -0
  142. package/src/sections/welcome-overview.js +7 -0
  143. package/src/seo.js +90 -0
  144. package/src/styles.css +1982 -0
  145. package/src/syntax-highlight.js +90 -0
  146. package/tenants.json.example +68 -0
  147. package/tenants.schema.json +231 -0
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'security-audits';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'security-best-practices';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'security-bug-bounty';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'security-incident-response';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'security-overview';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'technical-architecture';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'technical-whitepaper';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'tutorial-automation-bot';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'tutorial-build-first-integration';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'tutorial-deploy-automation';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'tutorial-event-driven-experience';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'tutorial-operations-onboarding';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'tutorial-systems-integration';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'tutorials-overview';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'use-case-connected-devices';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'use-case-digital-auctions';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'use-case-financial-automation';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'use-case-interactive-media';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'use-case-realtime-execution';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'use-case-research-analytics';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'use-case-supply-operations';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'use-cases-overview';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { renderSectionTemplate } from './section-templates.js';
2
+
3
+ const SECTION_ID = 'welcome-overview';
4
+
5
+ export async function load() {
6
+ return { html: renderSectionTemplate({ id: SECTION_ID }) };
7
+ }
package/src/seo.js ADDED
@@ -0,0 +1,90 @@
1
+ const DEFAULT_TITLE = 'Docs Toolkit';
2
+ const DESCRIPTION_TAG = 'meta[name="description"]';
3
+
4
+ /**
5
+ * Ensure a meta tag exists with the given selector, creating it if needed.
6
+ * @param {string} selector - CSS selector for the meta tag
7
+ * @param {Function} creator - Function that creates the element if not found
8
+ * @returns {HTMLElement} The meta tag element
9
+ */
10
+ function ensureMeta(selector, creator) {
11
+ let el = document.querySelector(selector);
12
+ if (!el) {
13
+ el = creator();
14
+ document.head.appendChild(el);
15
+ }
16
+ return el;
17
+ }
18
+
19
+ /**
20
+ * Set or create a meta tag by property attribute (for og: and twitter: tags)
21
+ * @param {string} attr - Attribute name ('property' or 'name')
22
+ * @param {string} value - Attribute value (e.g., 'og:title')
23
+ * @param {string} content - Content value
24
+ */
25
+ function setMeta(attr, value, content) {
26
+ const el = ensureMeta(
27
+ `meta[${attr}="${value}"]`,
28
+ () => {
29
+ const meta = document.createElement('meta');
30
+ meta.setAttribute(attr, value);
31
+ return meta;
32
+ }
33
+ );
34
+ el.setAttribute('content', content);
35
+ }
36
+
37
+ /**
38
+ * Set or create a link tag by rel attribute
39
+ * @param {string} rel - Rel value (e.g., 'canonical')
40
+ * @param {string} href - Href value
41
+ */
42
+ function setLink(rel, href) {
43
+ const el = ensureMeta(
44
+ `link[rel="${rel}"]`,
45
+ () => {
46
+ const link = document.createElement('link');
47
+ link.setAttribute('rel', rel);
48
+ return link;
49
+ }
50
+ );
51
+ el.setAttribute('href', href);
52
+ }
53
+
54
+ /**
55
+ * Update all SEO meta tags for the current section.
56
+ * Called on every route change to keep meta tags in sync with content.
57
+ *
58
+ * @param {object} opts
59
+ * @param {string} [opts.title] - Page title
60
+ * @param {string} [opts.description] - Page description
61
+ * @param {string} [opts.siteTitle] - Site title (overrides DEFAULT_TITLE)
62
+ * @param {string} [opts.siteUrl] - Base URL for canonical/og:url (e.g., 'https://docs.aiwg.io')
63
+ * @param {string} [opts.sectionId] - Section ID for canonical URL hash fragment
64
+ */
65
+ export function updateMetaTags({ title, description, siteTitle, siteUrl, sectionId }) {
66
+ const brand = siteTitle || DEFAULT_TITLE;
67
+ const pageTitle = title ? `${title} · ${brand}` : brand;
68
+ document.title = pageTitle;
69
+
70
+ // Description
71
+ const desc = description || '';
72
+ setMeta('name', 'description', desc);
73
+
74
+ // Open Graph
75
+ setMeta('property', 'og:title', title || brand);
76
+ setMeta('property', 'og:description', desc);
77
+ setMeta('property', 'og:type', 'article');
78
+
79
+ // Twitter Card
80
+ setMeta('name', 'twitter:card', 'summary');
81
+ setMeta('name', 'twitter:title', title || brand);
82
+ setMeta('name', 'twitter:description', desc);
83
+
84
+ // Canonical URL and og:url
85
+ if (siteUrl) {
86
+ const canonical = sectionId ? `${siteUrl}/#${sectionId}` : siteUrl;
87
+ setLink('canonical', canonical);
88
+ setMeta('property', 'og:url', canonical);
89
+ }
90
+ }