raffel 0.2.2 → 0.2.3-next.adaade6

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 (50) hide show
  1. package/dist/docs/generators/usd-generator.d.ts +3 -1
  2. package/dist/docs/generators/usd-generator.d.ts.map +1 -1
  3. package/dist/docs/generators/usd-generator.js +2 -1
  4. package/dist/docs/generators/usd-generator.js.map +1 -1
  5. package/dist/docs/generators/websocket-generator.d.ts.map +1 -1
  6. package/dist/docs/generators/websocket-generator.js +6 -4
  7. package/dist/docs/generators/websocket-generator.js.map +1 -1
  8. package/dist/docs/ui/html-builder.d.ts.map +1 -1
  9. package/dist/docs/ui/html-builder.js +260 -54
  10. package/dist/docs/ui/html-builder.js.map +1 -1
  11. package/dist/docs/ui/styles.d.ts.map +1 -1
  12. package/dist/docs/ui/styles.js +240 -30
  13. package/dist/docs/ui/styles.js.map +1 -1
  14. package/dist/docs/ui/types.d.ts +15 -1
  15. package/dist/docs/ui/types.d.ts.map +1 -1
  16. package/dist/docs/usd-middleware.d.ts +3 -1
  17. package/dist/docs/usd-middleware.d.ts.map +1 -1
  18. package/dist/docs/usd-middleware.js +2 -1
  19. package/dist/docs/usd-middleware.js.map +1 -1
  20. package/dist/http/http.int.test.js +2 -1
  21. package/dist/http/http.int.test.js.map +1 -1
  22. package/dist/server/builder.d.ts.map +1 -1
  23. package/dist/server/builder.js +6 -0
  24. package/dist/server/builder.js.map +1 -1
  25. package/dist/server/fs-routes/types.d.ts +6 -0
  26. package/dist/server/fs-routes/types.d.ts.map +1 -1
  27. package/dist/server/types.d.ts +77 -0
  28. package/dist/server/types.d.ts.map +1 -1
  29. package/dist/ui/docs/generators/usd-generator.d.ts +3 -1
  30. package/dist/ui/docs/generators/usd-generator.d.ts.map +1 -1
  31. package/dist/ui/docs/generators/websocket-generator.d.ts.map +1 -1
  32. package/dist/ui/docs/ui/html-builder.d.ts.map +1 -1
  33. package/dist/ui/docs/ui/styles.d.ts.map +1 -1
  34. package/dist/ui/docs/ui/types.d.ts +15 -1
  35. package/dist/ui/docs/ui/types.d.ts.map +1 -1
  36. package/dist/ui/docs/usd-middleware.d.ts +3 -1
  37. package/dist/ui/docs/usd-middleware.d.ts.map +1 -1
  38. package/dist/ui/server/fs-routes/types.d.ts +6 -0
  39. package/dist/ui/server/fs-routes/types.d.ts.map +1 -1
  40. package/dist/ui/usd/index.d.ts +1 -1
  41. package/dist/ui/usd/index.d.ts.map +1 -1
  42. package/dist/ui/usd/spec/types.d.ts +78 -0
  43. package/dist/ui/usd/spec/types.d.ts.map +1 -1
  44. package/dist/usd/index.d.ts +1 -1
  45. package/dist/usd/index.d.ts.map +1 -1
  46. package/dist/usd/index.js.map +1 -1
  47. package/dist/usd/spec/types.d.ts +78 -0
  48. package/dist/usd/spec/types.d.ts.map +1 -1
  49. package/dist/usd/spec/types.js.map +1 -1
  50. package/package.json +1 -1
@@ -13,23 +13,51 @@
13
13
  */
14
14
  import { generateStyles } from './styles.js';
15
15
  import { escapeHtml, escapeJsonForScript, generateHeroBackgroundCSS } from './utils.js';
16
+ /**
17
+ * Merge USD documentation config with UI config (UI config takes precedence)
18
+ */
19
+ function mergeHeroConfig(usdDocumentation, uiHero) {
20
+ const usdHero = usdDocumentation?.hero;
21
+ if (!usdHero && !uiHero)
22
+ return undefined;
23
+ // UI config takes precedence over USD spec config
24
+ return {
25
+ title: uiHero?.title ?? usdHero?.title,
26
+ version: uiHero?.version ?? usdHero?.version,
27
+ tagline: uiHero?.tagline ?? usdHero?.tagline,
28
+ features: uiHero?.features ?? usdHero?.features,
29
+ background: uiHero?.background ?? usdHero?.background,
30
+ backgroundImage: uiHero?.backgroundImage ?? usdHero?.backgroundImage,
31
+ backgroundColor: uiHero?.backgroundColor ?? usdHero?.backgroundColor,
32
+ buttons: uiHero?.buttons ?? usdHero?.buttons,
33
+ quickLinks: uiHero?.quickLinks ?? usdHero?.quickLinks,
34
+ github: uiHero?.github ?? usdHero?.github,
35
+ };
36
+ }
16
37
  /**
17
38
  * Generate HTML for USD documentation UI
18
39
  */
19
40
  export function generateUIHTML(options) {
20
41
  const { doc, basePath: _basePath, ui, tagGroups } = options;
42
+ // Get USD documentation config from spec
43
+ const usdDocumentation = doc['x-usd']?.documentation;
21
44
  const theme = ui?.theme ?? 'auto';
22
45
  const primaryColor = ui?.primaryColor ?? '#6366f1';
23
- const logo = ui?.logo;
24
- const favicon = ui?.favicon;
46
+ const logo = ui?.logo ?? usdDocumentation?.logo;
47
+ const favicon = ui?.favicon ?? usdDocumentation?.favicon;
25
48
  const title = doc.info.title;
26
- const hero = ui?.hero;
49
+ const version = doc.info.version;
27
50
  const sidebar = ui?.sidebar;
51
+ // Merge hero config from USD spec and UI config
52
+ const hero = mergeHeroConfig(usdDocumentation, ui?.hero);
53
+ // Get introduction markdown from USD spec
54
+ const introduction = usdDocumentation?.introduction;
28
55
  // Escape data for embedding in script tag (prevents XSS)
29
56
  const escapedSpec = escapeJsonForScript(doc);
30
57
  const escapedTagGroups = escapeJsonForScript(tagGroups ?? []);
31
58
  const escapedHero = escapeJsonForScript(hero ?? null);
32
59
  const escapedSidebar = escapeJsonForScript(sidebar ?? {});
60
+ const escapedIntroduction = escapeJsonForScript(introduction ?? null);
33
61
  // Generate hero background CSS
34
62
  const heroBackgroundCSS = generateHeroBackgroundCSS(primaryColor, hero?.background, hero?.backgroundImage);
35
63
  // Generate CSS
@@ -47,20 +75,61 @@ ${styles}
47
75
  </style>
48
76
  </head>
49
77
  <body>
50
- ${generateHeroSection(hero, logo, title)}
78
+ ${generateHeroSection(hero, logo, title, version)}
79
+ ${generateIntroductionSection(introduction)}
51
80
  ${generateAppContainer(logo, title, sidebar)}
52
81
  <script>
53
- ${generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escapedSidebar)}
82
+ ${generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escapedSidebar, escapedIntroduction)}
54
83
  </script>
55
84
  </body>
56
85
  </html>`;
57
86
  }
58
87
  /**
59
- * Generate hero section HTML
88
+ * Generate introduction section HTML (markdown content)
89
+ * This renders after the hero and before the main docs content
90
+ */
91
+ function generateIntroductionSection(introduction) {
92
+ if (!introduction)
93
+ return '';
94
+ return `
95
+ <section class="introduction" id="introduction">
96
+ <div class="introduction-content" id="introductionContent">
97
+ <!-- Markdown will be rendered by client-side script -->
98
+ </div>
99
+ </section>
100
+ `;
101
+ }
102
+ /**
103
+ * Generate GitHub corner SVG (Docsify-style)
104
+ */
105
+ function generateGitHubCorner(url) {
106
+ return `
107
+ <a href="${escapeHtml(url)}" target="_blank" class="github-corner" aria-label="View source on GitHub">
108
+ <svg viewBox="0 0 250 250" aria-hidden="true">
109
+ <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
110
+ <path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path>
111
+ <path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path>
112
+ </svg>
113
+ </a>
114
+ `;
115
+ }
116
+ /**
117
+ * Generate hero section HTML (Docsify-inspired)
60
118
  */
61
- function generateHeroSection(hero, logo, title) {
119
+ function generateHeroSection(hero, logo, title, version) {
62
120
  if (!hero)
63
121
  return '';
122
+ // Version badge
123
+ const versionHtml = hero.version || version
124
+ ? `<span class="hero-version">${escapeHtml(hero.version || version || '')}</span>`
125
+ : '';
126
+ // Features list
127
+ const featuresHtml = hero.features && hero.features.length > 0
128
+ ? `<ul class="hero-features">
129
+ ${hero.features.map(feature => `<li>${escapeHtml(feature)}</li>`).join('')}
130
+ </ul>`
131
+ : '';
132
+ // Action buttons
64
133
  const buttonsHtml = hero.buttons && hero.buttons.length > 0
65
134
  ? `<div class="hero-buttons">
66
135
  ${hero.buttons.map(btn => `
@@ -70,6 +139,7 @@ function generateHeroSection(hero, logo, title) {
70
139
  `).join('')}
71
140
  </div>`
72
141
  : '';
142
+ // Quick links grid
73
143
  const quickLinksHtml = hero.quickLinks && hero.quickLinks.length > 0
74
144
  ? `<div class="hero-quicklinks">
75
145
  ${hero.quickLinks.map(link => `
@@ -81,12 +151,16 @@ function generateHeroSection(hero, logo, title) {
81
151
  `).join('')}
82
152
  </div>`
83
153
  : '';
154
+ // GitHub corner
155
+ const githubHtml = hero.github ? generateGitHubCorner(hero.github) : '';
84
156
  return `
85
157
  <header class="hero">
158
+ ${githubHtml}
86
159
  <div class="hero-content">
87
160
  ${logo ? `<img class="hero-logo" src="${escapeHtml(logo)}" alt="Logo">` : ''}
88
- <h1 class="hero-title">${escapeHtml(hero.title || title)}</h1>
161
+ <h1 class="hero-title">${escapeHtml(hero.title || title)}${versionHtml}</h1>
89
162
  ${hero.tagline ? `<p class="hero-tagline">${escapeHtml(hero.tagline)}</p>` : ''}
163
+ ${featuresHtml}
90
164
  ${buttonsHtml}
91
165
  ${quickLinksHtml}
92
166
  </div>
@@ -122,13 +196,14 @@ function generateAppContainer(logo, title, sidebar) {
122
196
  * Generate client-side JavaScript
123
197
  * This is embedded in the HTML and handles all UI interactions
124
198
  */
125
- function generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escapedSidebar) {
199
+ function generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escapedSidebar, escapedIntroduction) {
126
200
  return `
127
201
  // Trusted data from server
128
202
  const spec = ${escapedSpec};
129
203
  const tagGroups = ${escapedTagGroups};
130
204
  const heroConfig = ${escapedHero};
131
205
  const sidebarConfig = ${escapedSidebar};
206
+ const introductionMarkdown = ${escapedIntroduction};
132
207
 
133
208
  // Helper to escape text for display
134
209
  function esc(str) {
@@ -1504,21 +1579,30 @@ function generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escape
1504
1579
  container.className = 'code-example';
1505
1580
 
1506
1581
  const baseUrl = (spec.servers && spec.servers[0]?.url) || 'http://localhost:3000';
1507
- const wsUrl = baseUrl.replace(/^http/, 'ws') + (ep.path || '/' + ep.id);
1582
+ // WebSocket URL uses the ws:// scheme and the configured WebSocket path (default: /ws)
1583
+ const wsPath = wsSpec?.path || '/ws';
1584
+ const wsUrl = baseUrl.replace(/^http/, 'ws') + wsPath;
1508
1585
 
1509
1586
  // Language tabs
1510
- const languages = ['wscat', 'javascript', 'python'];
1587
+ const languages = ['wscat', 'javascript', 'recker', 'python'];
1511
1588
  const tabs = document.createElement('div');
1512
1589
  tabs.className = 'code-tabs';
1513
1590
 
1514
1591
  const contents = document.createElement('div');
1515
1592
  contents.className = 'code-contents';
1516
1593
 
1594
+ const langLabels = {
1595
+ wscat: 'wscat',
1596
+ javascript: 'WebSocket',
1597
+ recker: 'Recker',
1598
+ python: 'Python'
1599
+ };
1600
+
1517
1601
  languages.forEach((lang, i) => {
1518
1602
  // Tab button
1519
1603
  const tab = document.createElement('button');
1520
1604
  tab.className = 'code-tab' + (i === 0 ? ' active' : '');
1521
- tab.textContent = lang === 'wscat' ? 'wscat' : lang === 'javascript' ? 'JavaScript' : 'Python';
1605
+ tab.textContent = langLabels[lang] || lang;
1522
1606
  tab.onclick = () => {
1523
1607
  tabs.querySelectorAll('.code-tab').forEach(t => t.classList.remove('active'));
1524
1608
  tab.classList.add('active');
@@ -1547,41 +1631,90 @@ function generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escape
1547
1631
  }
1548
1632
 
1549
1633
  function generateWsCodeSample(lang, url, ep) {
1550
- const data = ep.data || {};
1551
- let exampleMsg = {};
1552
- if (data.subscribe?.message?.payload) {
1553
- exampleMsg = buildExampleFromSchema(data.subscribe.message.payload);
1554
- } else if (data.publish?.message?.payload) {
1555
- exampleMsg = buildExampleFromSchema(data.publish.message.payload);
1634
+ const channelName = ep.path;
1635
+ const channelType = ep.data?.type || 'public';
1636
+
1637
+ // Build subscribe message
1638
+ const subscribeMsg = { type: 'subscribe', channel: channelName, id: '1' };
1639
+ const subscribeMsgStr = JSON.stringify(subscribeMsg, null, 2);
1640
+
1641
+ // Build example publish message if channel supports it
1642
+ let publishMsg = null;
1643
+ if (ep.data?.publish?.message?.payload) {
1644
+ const payload = buildExampleFromSchema(ep.data.publish.message.payload);
1645
+ publishMsg = { type: 'publish', channel: channelName, event: 'message', data: payload, id: '2' };
1556
1646
  }
1557
- const msgStr = JSON.stringify(exampleMsg || {}, null, 2);
1647
+ const publishMsgStr = publishMsg ? JSON.stringify(publishMsg, null, 2) : null;
1648
+
1649
+ // For private/presence channels, add token to URL
1650
+ const needsAuth = channelType === 'private' || channelType === 'presence';
1651
+ const authUrl = needsAuth ? url + '?token=YOUR_TOKEN' : url;
1558
1652
 
1559
1653
  switch (lang) {
1560
1654
  case 'wscat':
1561
- return 'wscat -c "' + url + '"\\n\\n# Once connected, send messages:\\n> ' + msgStr.replace(/\\n/g, '');
1655
+ let wscatCode = 'wscat -c "' + authUrl + '"\\n\\n';
1656
+ wscatCode += '# Subscribe to channel:\\n> ' + JSON.stringify(subscribeMsg);
1657
+ if (publishMsgStr) {
1658
+ wscatCode += '\\n\\n# Publish a message:\\n> ' + JSON.stringify(publishMsg);
1659
+ }
1660
+ return wscatCode;
1562
1661
 
1563
1662
  case 'javascript':
1564
- return 'const ws = new WebSocket("' + url + '");\\n\\n' +
1565
- 'ws.onopen = () => {\\n' +
1566
- ' console.log("Connected");\\n' +
1567
- ' ws.send(JSON.stringify(' + msgStr.split('\\n').map((l, i) => i === 0 ? l : ' ' + l).join('\\n') + '));\\n' +
1568
- '};\\n\\n' +
1569
- 'ws.onmessage = (event) => {\\n' +
1570
- ' console.log("Received:", event.data);\\n' +
1571
- '};\\n\\n' +
1572
- 'ws.onclose = () => {\\n' +
1573
- ' console.log("Disconnected");\\n' +
1574
- '};';
1663
+ let jsCode = 'const ws = new WebSocket("' + authUrl + '");\\n\\n';
1664
+ jsCode += 'ws.onopen = () => {\\n';
1665
+ jsCode += ' console.log("Connected");\\n';
1666
+ jsCode += ' // Subscribe to channel\\n';
1667
+ jsCode += ' ws.send(JSON.stringify(' + subscribeMsgStr.split('\\n').map((l, i) => i === 0 ? l : ' ' + l).join('\\n') + '));\\n';
1668
+ jsCode += '};\\n\\n';
1669
+ jsCode += 'ws.onmessage = (event) => {\\n';
1670
+ jsCode += ' const msg = JSON.parse(event.data);\\n';
1671
+ jsCode += ' console.log("Received:", msg);\\n';
1672
+ if (publishMsgStr) {
1673
+ jsCode += '\\n // After subscribed, you can publish:\\n';
1674
+ jsCode += ' // ws.send(JSON.stringify(' + JSON.stringify(publishMsg) + '));\\n';
1675
+ }
1676
+ jsCode += '};\\n\\n';
1677
+ jsCode += 'ws.onclose = () => {\\n';
1678
+ jsCode += ' console.log("Disconnected");\\n';
1679
+ jsCode += '};';
1680
+ return jsCode;
1681
+
1682
+ case 'recker':
1683
+ let reckerCode = 'import { ws } from "recker";\\n\\n';
1684
+ if (needsAuth) {
1685
+ reckerCode += 'const socket = await ws("' + url + '", {\\n';
1686
+ reckerCode += ' query: { token: "YOUR_TOKEN" }\\n';
1687
+ reckerCode += '});\\n\\n';
1688
+ } else {
1689
+ reckerCode += 'const socket = await ws("' + url + '");\\n\\n';
1690
+ }
1691
+ reckerCode += '// Subscribe to channel\\n';
1692
+ reckerCode += 'socket.send(' + subscribeMsgStr.split('\\n').map((l, i) => i === 0 ? l : ' ' + l).join('\\n') + ');\\n\\n';
1693
+ reckerCode += '// Listen for messages\\n';
1694
+ reckerCode += 'socket.on("message", (data) => {\\n';
1695
+ reckerCode += ' console.log("Received:", data);\\n';
1696
+ reckerCode += '});\\n';
1697
+ if (publishMsgStr) {
1698
+ reckerCode += '\\n// Publish a message\\n';
1699
+ reckerCode += '// socket.send(' + JSON.stringify(publishMsg) + ');\\n';
1700
+ }
1701
+ return reckerCode;
1575
1702
 
1576
1703
  case 'python':
1577
- return 'import asyncio\\n' +
1578
- 'import websockets\\n\\n' +
1579
- 'async def connect():\\n' +
1580
- ' async with websockets.connect("' + url + '") as ws:\\n' +
1581
- ' await ws.send(\\'\\'\\'\\n' + msgStr + '\\n\\'\\'\\')\\n' +
1582
- ' response = await ws.recv()\\n' +
1583
- ' print(f"Received: {response}")\\n\\n' +
1584
- 'asyncio.run(connect())';
1704
+ let pyCode = 'import asyncio\\n';
1705
+ pyCode += 'import websockets\\n';
1706
+ pyCode += 'import json\\n\\n';
1707
+ pyCode += 'async def connect():\\n';
1708
+ pyCode += ' async with websockets.connect("' + authUrl + '") as ws:\\n';
1709
+ pyCode += ' # Subscribe to channel\\n';
1710
+ pyCode += ' await ws.send(json.dumps(' + subscribeMsgStr.split('\\n').map((l, i) => i === 0 ? l : ' ' + l).join('\\n') + '))\\n';
1711
+ pyCode += ' \\n';
1712
+ pyCode += ' # Wait for messages\\n';
1713
+ pyCode += ' async for message in ws:\\n';
1714
+ pyCode += ' data = json.loads(message)\\n';
1715
+ pyCode += ' print(f"Received: {data}")\\n\\n';
1716
+ pyCode += 'asyncio.run(connect())';
1717
+ return pyCode;
1585
1718
 
1586
1719
  default:
1587
1720
  return '// Not implemented';
@@ -1594,21 +1727,29 @@ function generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escape
1594
1727
  container.className = 'code-example';
1595
1728
 
1596
1729
  const baseUrl = (spec.servers && spec.servers[0]?.url) || 'http://localhost:3000';
1597
- const streamUrl = baseUrl + (ep.path || '/' + ep.id);
1730
+ // SSE streams are accessed via GET /streams/<procedure-name>
1731
+ const streamUrl = baseUrl + '/streams/' + ep.path;
1598
1732
 
1599
1733
  // Language tabs
1600
- const languages = ['curl', 'javascript', 'python'];
1734
+ const languages = ['curl', 'eventsource', 'recker', 'python'];
1601
1735
  const tabs = document.createElement('div');
1602
1736
  tabs.className = 'code-tabs';
1603
1737
 
1604
1738
  const contents = document.createElement('div');
1605
1739
  contents.className = 'code-contents';
1606
1740
 
1741
+ const langLabels = {
1742
+ curl: 'cURL',
1743
+ eventsource: 'EventSource',
1744
+ recker: 'Recker',
1745
+ python: 'Python'
1746
+ };
1747
+
1607
1748
  languages.forEach((lang, i) => {
1608
1749
  // Tab button
1609
1750
  const tab = document.createElement('button');
1610
1751
  tab.className = 'code-tab' + (i === 0 ? ' active' : '');
1611
- tab.textContent = lang === 'curl' ? 'cURL' : lang === 'javascript' ? 'JavaScript' : 'Python';
1752
+ tab.textContent = langLabels[lang] || lang;
1612
1753
  tab.onclick = () => {
1613
1754
  tabs.querySelectorAll('.code-tab').forEach(t => t.classList.remove('active'));
1614
1755
  tab.classList.add('active');
@@ -1641,7 +1782,7 @@ function generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escape
1641
1782
  case 'curl':
1642
1783
  return 'curl -N "' + url + '"\\n\\n# -N disables buffering for streaming output';
1643
1784
 
1644
- case 'javascript':
1785
+ case 'eventsource':
1645
1786
  return 'const eventSource = new EventSource("' + url + '");\\n\\n' +
1646
1787
  'eventSource.onmessage = (event) => {\\n' +
1647
1788
  ' console.log("Received:", event.data);\\n' +
@@ -1653,6 +1794,13 @@ function generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escape
1653
1794
  '// To close the connection:\\n' +
1654
1795
  '// eventSource.close();';
1655
1796
 
1797
+ case 'recker':
1798
+ return 'import { sse } from "recker";\\n\\n' +
1799
+ 'const stream = sse("' + url + '");\\n\\n' +
1800
+ 'for await (const event of stream) {\\n' +
1801
+ ' console.log("Received:", event.data);\\n' +
1802
+ '}';
1803
+
1656
1804
  case 'python':
1657
1805
  return 'import sseclient\\n' +
1658
1806
  'import requests\\n\\n' +
@@ -1692,31 +1840,67 @@ function generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escape
1692
1840
  const method = ep.method.toUpperCase();
1693
1841
  const path = ep.path;
1694
1842
  const baseUrl = (spec.servers && spec.servers[0]?.url) || 'http://localhost:3000';
1695
- const fullUrl = baseUrl + path;
1696
1843
 
1697
- // Get request body if exists
1844
+ // Handle JSON-RPC methods specially
1845
+ const isJsonRpc = method === 'RPC';
1846
+ let fullUrl;
1698
1847
  let exampleBody = null;
1699
- const opData = ep.data;
1700
- if (opData && opData.requestBody && opData.requestBody.content) {
1701
- const jsonContent = opData.requestBody.content['application/json'];
1702
- if (jsonContent && jsonContent.schema) {
1703
- exampleBody = buildExampleFromSchema(jsonContent.schema);
1848
+ let actualMethod = method;
1849
+
1850
+ if (isJsonRpc) {
1851
+ // For JSON-RPC, use the /rpc endpoint and POST method
1852
+ const rpcEndpoint = jsonrpcSpec?.endpoint || '/rpc';
1853
+ fullUrl = baseUrl + rpcEndpoint;
1854
+ actualMethod = 'POST';
1855
+
1856
+ // Build JSON-RPC request body
1857
+ const opData = ep.data;
1858
+ let params = {};
1859
+ if (opData && opData.params) {
1860
+ params = buildExampleFromSchema(opData.params);
1861
+ }
1862
+ exampleBody = {
1863
+ jsonrpc: '2.0',
1864
+ method: path, // The method name like "tasks.list"
1865
+ params: params,
1866
+ id: 1
1867
+ };
1868
+ } else {
1869
+ // Ensure path has leading slash for proper URL construction
1870
+ const normalizedPath = path.startsWith('/') ? path : '/' + path;
1871
+ fullUrl = baseUrl + normalizedPath;
1872
+
1873
+ // Get request body if exists
1874
+ const opData = ep.data;
1875
+ if (opData && opData.requestBody && opData.requestBody.content) {
1876
+ const jsonContent = opData.requestBody.content['application/json'];
1877
+ if (jsonContent && jsonContent.schema) {
1878
+ exampleBody = buildExampleFromSchema(jsonContent.schema);
1879
+ }
1704
1880
  }
1705
1881
  }
1706
1882
 
1707
1883
  // Language tabs
1708
- const languages = ['curl', 'typescript', 'python', 'go'];
1884
+ const languages = ['curl', 'fetch', 'recker', 'python', 'go'];
1709
1885
  const tabs = document.createElement('div');
1710
1886
  tabs.className = 'code-tabs';
1711
1887
 
1712
1888
  const contents = document.createElement('div');
1713
1889
  contents.className = 'code-contents';
1714
1890
 
1891
+ const langLabels = {
1892
+ curl: 'cURL',
1893
+ fetch: 'Fetch',
1894
+ recker: 'Recker',
1895
+ python: 'Python',
1896
+ go: 'Go'
1897
+ };
1898
+
1715
1899
  languages.forEach((lang, i) => {
1716
1900
  // Tab button
1717
1901
  const tab = document.createElement('button');
1718
1902
  tab.className = 'code-tab' + (i === 0 ? ' active' : '');
1719
- tab.textContent = lang === 'typescript' ? 'TypeScript' : lang === 'curl' ? 'cURL' : lang.charAt(0).toUpperCase() + lang.slice(1);
1903
+ tab.textContent = langLabels[lang] || lang;
1720
1904
  tab.onclick = () => {
1721
1905
  tabs.querySelectorAll('.code-tab').forEach(t => t.classList.remove('active'));
1722
1906
  tab.classList.add('active');
@@ -1732,7 +1916,7 @@ function generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escape
1732
1916
 
1733
1917
  const pre = document.createElement('pre');
1734
1918
  const code = document.createElement('code');
1735
- code.textContent = generateCodeSample(lang, method, fullUrl, exampleBody);
1919
+ code.textContent = generateCodeSample(lang, actualMethod, fullUrl, exampleBody);
1736
1920
  pre.appendChild(code);
1737
1921
  content.appendChild(pre);
1738
1922
  contents.appendChild(content);
@@ -1759,7 +1943,7 @@ function generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escape
1759
1943
  }
1760
1944
  return curlLines.join(' \\\\\\n');
1761
1945
 
1762
- case 'typescript':
1946
+ case 'fetch':
1763
1947
  if (hasBody) {
1764
1948
  return 'const response = await fetch("' + url + '", {\\n' +
1765
1949
  ' method: "' + method + '",\\n' +
@@ -1776,6 +1960,18 @@ function generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escape
1776
1960
  'const data = await response.json();\\n' +
1777
1961
  'console.log(data);';
1778
1962
 
1963
+ case 'recker':
1964
+ if (hasBody) {
1965
+ return 'import { ' + method.toLowerCase() + ' } from "recker";\\n\\n' +
1966
+ 'const data = await ' + method.toLowerCase() + '("' + url + '")\\n' +
1967
+ ' .json(' + bodyStr.split('\\n').map((l, i) => i === 0 ? l : ' ' + l).join('\\n') + ')\\n' +
1968
+ ' .json();\\n\\n' +
1969
+ 'console.log(data);';
1970
+ }
1971
+ return 'import { ' + method.toLowerCase() + ' } from "recker";\\n\\n' +
1972
+ 'const data = await ' + method.toLowerCase() + '("' + url + '").json();\\n\\n' +
1973
+ 'console.log(data);';
1974
+
1779
1975
  case 'python':
1780
1976
  if (hasBody) {
1781
1977
  return 'import requests\\n\\n' +
@@ -3056,7 +3252,17 @@ function generateClientScript(escapedSpec, escapedTagGroups, escapedHero, escape
3056
3252
  return message;
3057
3253
  }
3058
3254
 
3255
+ // Render introduction markdown if provided
3256
+ // Note: introductionMarkdown is server-generated trusted content from USD spec
3257
+ // parseMarkdown() escapes text before processing markdown syntax
3258
+ function renderIntroduction() {
3259
+ const container = document.getElementById('introductionContent');
3260
+ if (!container || !introductionMarkdown) return;
3261
+ container.innerHTML = parseMarkdown(introductionMarkdown);
3262
+ }
3263
+
3059
3264
  // Initial render
3265
+ renderIntroduction();
3060
3266
  renderProtocolTabs();
3061
3267
  renderSidebar();
3062
3268
  renderContent();
@@ -1 +1 @@
1
- {"version":3,"file":"html-builder.js","sourceRoot":"","sources":["../../../src/docs/ui/html-builder.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAo3FvC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"html-builder.js","sourceRoot":"","sources":["../../../src/docs/ui/html-builder.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAu/FnD,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/docs/ui/styles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA0qE3D"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/docs/ui/styles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA43E3D"}