raffel 1.1.97 → 1.1.98

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 (97) hide show
  1. package/dist/docs/try-it-proxy.d.ts +15 -0
  2. package/dist/docs/try-it-proxy.d.ts.map +1 -1
  3. package/dist/docs/try-it-proxy.js +54 -0
  4. package/dist/docs/try-it-proxy.js.map +1 -1
  5. package/dist/docs/ui/assets/protocol-console.js +13 -1
  6. package/dist/docs/ui/assets/raffel-docs.js +167 -1
  7. package/dist/docs/ui/client-script/index.d.ts.map +1 -1
  8. package/dist/docs/ui/client-script/index.js +3 -95
  9. package/dist/docs/ui/client-script/index.js.map +1 -1
  10. package/dist/docs/ui/html-builder.d.ts.map +1 -1
  11. package/dist/docs/ui/html-builder.js +6 -3
  12. package/dist/docs/ui/html-builder.js.map +1 -1
  13. package/dist/docs/ui/runtime/index.js +167 -1
  14. package/dist/docs/ui/runtime/index.js.map +1 -1
  15. package/dist/docs/ui/runtime/protocol-console.d.ts +2 -0
  16. package/dist/docs/ui/runtime/protocol-console.d.ts.map +1 -1
  17. package/dist/docs/ui/runtime/protocol-console.js +13 -1
  18. package/dist/docs/ui/runtime/protocol-console.js.map +1 -1
  19. package/dist/docs/usd-middleware.d.ts +2 -0
  20. package/dist/docs/usd-middleware.d.ts.map +1 -1
  21. package/dist/docs/usd-middleware.js +37 -1
  22. package/dist/docs/usd-middleware.js.map +1 -1
  23. package/dist/server/builder/execution-http-docs.d.ts.map +1 -1
  24. package/dist/server/builder/execution-http-docs.js +8 -0
  25. package/dist/server/builder/execution-http-docs.js.map +1 -1
  26. package/dist/server/rest-middleware.d.ts.map +1 -1
  27. package/dist/server/rest-middleware.js +26 -0
  28. package/dist/server/rest-middleware.js.map +1 -1
  29. package/dist/ui/docs/try-it-proxy.d.ts +15 -0
  30. package/dist/ui/docs/try-it-proxy.d.ts.map +1 -1
  31. package/dist/ui/docs/ui/client-script/index.d.ts.map +1 -1
  32. package/dist/ui/docs/ui/html-builder.d.ts.map +1 -1
  33. package/dist/ui/docs/ui/runtime/protocol-console.d.ts +2 -0
  34. package/dist/ui/docs/ui/runtime/protocol-console.d.ts.map +1 -1
  35. package/dist/ui/docs/usd-middleware.d.ts +2 -0
  36. package/dist/ui/docs/usd-middleware.d.ts.map +1 -1
  37. package/package.json +1 -1
  38. package/dist/docs/ui/client-script/cards-and-code.d.ts +0 -5
  39. package/dist/docs/ui/client-script/cards-and-code.d.ts.map +0 -1
  40. package/dist/docs/ui/client-script/cards-and-code.js +0 -5
  41. package/dist/docs/ui/client-script/cards-and-code.js.map +0 -1
  42. package/dist/docs/ui/client-script/content.d.ts +0 -5
  43. package/dist/docs/ui/client-script/content.d.ts.map +0 -1
  44. package/dist/docs/ui/client-script/content.js +0 -412
  45. package/dist/docs/ui/client-script/content.js.map +0 -1
  46. package/dist/docs/ui/client-script/docs-pages.d.ts +0 -5
  47. package/dist/docs/ui/client-script/docs-pages.d.ts.map +0 -1
  48. package/dist/docs/ui/client-script/docs-pages.js +0 -153
  49. package/dist/docs/ui/client-script/docs-pages.js.map +0 -1
  50. package/dist/docs/ui/client-script/endpoint-details.d.ts +0 -5
  51. package/dist/docs/ui/client-script/endpoint-details.d.ts.map +0 -1
  52. package/dist/docs/ui/client-script/endpoint-details.js +0 -5
  53. package/dist/docs/ui/client-script/endpoint-details.js.map +0 -1
  54. package/dist/docs/ui/client-script/init.d.ts +0 -5
  55. package/dist/docs/ui/client-script/init.d.ts.map +0 -1
  56. package/dist/docs/ui/client-script/init.js +0 -227
  57. package/dist/docs/ui/client-script/init.js.map +0 -1
  58. package/dist/docs/ui/client-script/markdown.d.ts +0 -5
  59. package/dist/docs/ui/client-script/markdown.d.ts.map +0 -1
  60. package/dist/docs/ui/client-script/markdown.js +0 -438
  61. package/dist/docs/ui/client-script/markdown.js.map +0 -1
  62. package/dist/docs/ui/client-script/navigation.d.ts +0 -5
  63. package/dist/docs/ui/client-script/navigation.d.ts.map +0 -1
  64. package/dist/docs/ui/client-script/navigation.js +0 -548
  65. package/dist/docs/ui/client-script/navigation.js.map +0 -1
  66. package/dist/docs/ui/client-script/protocols.d.ts +0 -5
  67. package/dist/docs/ui/client-script/protocols.d.ts.map +0 -1
  68. package/dist/docs/ui/client-script/protocols.js +0 -5
  69. package/dist/docs/ui/client-script/protocols.js.map +0 -1
  70. package/dist/docs/ui/client-script/schema-rendering.d.ts +0 -5
  71. package/dist/docs/ui/client-script/schema-rendering.d.ts.map +0 -1
  72. package/dist/docs/ui/client-script/schema-rendering.js +0 -5
  73. package/dist/docs/ui/client-script/schema-rendering.js.map +0 -1
  74. package/dist/docs/ui/client-script/try-it.d.ts +0 -5
  75. package/dist/docs/ui/client-script/try-it.d.ts.map +0 -1
  76. package/dist/docs/ui/client-script/try-it.js +0 -5
  77. package/dist/docs/ui/client-script/try-it.js.map +0 -1
  78. package/dist/ui/docs/ui/client-script/cards-and-code.d.ts +0 -5
  79. package/dist/ui/docs/ui/client-script/cards-and-code.d.ts.map +0 -1
  80. package/dist/ui/docs/ui/client-script/content.d.ts +0 -5
  81. package/dist/ui/docs/ui/client-script/content.d.ts.map +0 -1
  82. package/dist/ui/docs/ui/client-script/docs-pages.d.ts +0 -5
  83. package/dist/ui/docs/ui/client-script/docs-pages.d.ts.map +0 -1
  84. package/dist/ui/docs/ui/client-script/endpoint-details.d.ts +0 -5
  85. package/dist/ui/docs/ui/client-script/endpoint-details.d.ts.map +0 -1
  86. package/dist/ui/docs/ui/client-script/init.d.ts +0 -5
  87. package/dist/ui/docs/ui/client-script/init.d.ts.map +0 -1
  88. package/dist/ui/docs/ui/client-script/markdown.d.ts +0 -5
  89. package/dist/ui/docs/ui/client-script/markdown.d.ts.map +0 -1
  90. package/dist/ui/docs/ui/client-script/navigation.d.ts +0 -5
  91. package/dist/ui/docs/ui/client-script/navigation.d.ts.map +0 -1
  92. package/dist/ui/docs/ui/client-script/protocols.d.ts +0 -5
  93. package/dist/ui/docs/ui/client-script/protocols.d.ts.map +0 -1
  94. package/dist/ui/docs/ui/client-script/schema-rendering.d.ts +0 -5
  95. package/dist/ui/docs/ui/client-script/schema-rendering.d.ts.map +0 -1
  96. package/dist/ui/docs/ui/client-script/try-it.d.ts +0 -5
  97. package/dist/ui/docs/ui/client-script/try-it.d.ts.map +0 -1
@@ -2287,11 +2287,168 @@ function renderAsyncContracts(title, entries, callbacks = false) {
2287
2287
  });
2288
2288
  return section;
2289
2289
  }
2290
+ // Merge content-type declarations across the three USD layers (operation →
2291
+ // protocol → global) the same way the reference generator does, so a console
2292
+ // row shows the effective default plus every supported media type.
2293
+ function resolveEffectiveContentTypes(operationTypes, protocolTypes) {
2294
+ const globalTypes = (xUsd && xUsd.contentTypes) ? xUsd.contentTypes : {};
2295
+ const defaultType = (operationTypes && operationTypes.default)
2296
+ || (protocolTypes && protocolTypes.default)
2297
+ || globalTypes.default
2298
+ || 'application/json';
2299
+ const supportedList = (operationTypes && operationTypes.supported)
2300
+ || (protocolTypes && protocolTypes.supported)
2301
+ || globalTypes.supported
2302
+ || [];
2303
+ const supported = Array.isArray(supportedList) ? supportedList.slice() : [];
2304
+ if (defaultType && supported.indexOf(defaultType) === -1)
2305
+ supported.unshift(defaultType);
2306
+ return { default: defaultType, supported };
2307
+ }
2308
+ function appendContentTypesSection(container, label, contentTypes) {
2309
+ if (!contentTypes)
2310
+ return;
2311
+ const section = doc.createElement('div');
2312
+ section.className = 'endpoint-subsection';
2313
+ section.innerHTML = `<div class="subsection-label">${esc(label)}</div>`;
2314
+ const grid = doc.createElement('div');
2315
+ grid.className = 'info-grid';
2316
+ const supportedText = (contentTypes.supported && contentTypes.supported.length > 0)
2317
+ ? contentTypes.supported.join(', ')
2318
+ : contentTypes.default;
2319
+ grid.innerHTML =
2320
+ `<div class="info-card"><div class="info-card-title">Default</div><div class="info-card-value">${esc(contentTypes.default || 'application/json')}</div></div>` +
2321
+ `<div class="info-card"><div class="info-card-title">Supported</div><div class="info-card-value">${esc(supportedText || 'application/json')}</div></div>`;
2322
+ section.appendChild(grid);
2323
+ container.appendChild(section);
2324
+ }
2325
+ // Multi-language client snippets for WebSocket channels.
2326
+ function generateWsCodeSample(lang, url, path, data) {
2327
+ const channelType = data?.type || 'public';
2328
+ const subscribeMsg = { type: 'subscribe', channel: path, id: '1' };
2329
+ const subscribeMsgStr = JSON.stringify(subscribeMsg, null, 2);
2330
+ const publishMsg = data?.publish?.message?.payload
2331
+ ? { type: 'publish', channel: path, event: 'message', data: generateExampleFromSchema(data.publish.message.payload), id: '2' }
2332
+ : null;
2333
+ const needsAuth = channelType === 'private' || channelType === 'presence';
2334
+ const authUrl = needsAuth ? `${url}?token=YOUR_TOKEN` : url;
2335
+ const indent = (value, pad) => value.split('\n').map((line, i) => i === 0 ? line : pad + line).join('\n');
2336
+ switch (lang) {
2337
+ case 'wscat': {
2338
+ let out = `wscat -c "${authUrl}"\n\n# Subscribe to channel:\n> ${JSON.stringify(subscribeMsg)}`;
2339
+ if (publishMsg)
2340
+ out += `\n\n# Publish a message:\n> ${JSON.stringify(publishMsg)}`;
2341
+ return out;
2342
+ }
2343
+ case 'javascript': {
2344
+ let out = `const ws = new WebSocket("${authUrl}");\n\n`;
2345
+ out += `ws.onopen = () => {\n console.log("Connected");\n // Subscribe to channel\n ws.send(JSON.stringify(${indent(subscribeMsgStr, ' ')}));\n};\n\n`;
2346
+ out += `ws.onmessage = (event) => {\n const msg = JSON.parse(event.data);\n console.log("Received:", msg);\n`;
2347
+ if (publishMsg)
2348
+ out += `\n // After subscribed, you can publish:\n // ws.send(JSON.stringify(${JSON.stringify(publishMsg)}));\n`;
2349
+ out += `};\n\nws.onclose = () => {\n console.log("Disconnected");\n};`;
2350
+ return out;
2351
+ }
2352
+ case 'recker': {
2353
+ let out = `import { ws } from "recker";\n\n`;
2354
+ out += needsAuth
2355
+ ? `const socket = await ws("${url}", {\n query: { token: "YOUR_TOKEN" }\n});\n\n`
2356
+ : `const socket = await ws("${url}");\n\n`;
2357
+ out += `// Subscribe to channel\nsocket.send(${indent(subscribeMsgStr, ' ')});\n\n`;
2358
+ out += `// Listen for messages\nsocket.on("message", (data) => {\n console.log("Received:", data);\n});\n`;
2359
+ if (publishMsg)
2360
+ out += `\n// Publish a message\n// socket.send(${JSON.stringify(publishMsg)});\n`;
2361
+ return out;
2362
+ }
2363
+ case 'python': {
2364
+ let out = `import asyncio\nimport websockets\nimport json\n\n`;
2365
+ out += `async def connect():\n async with websockets.connect("${authUrl}") as ws:\n`;
2366
+ out += ` # Subscribe to channel\n await ws.send(json.dumps(${indent(subscribeMsgStr, ' ')}))\n \n`;
2367
+ out += ` # Wait for messages\n async for message in ws:\n data = json.loads(message)\n print(f"Received: {data}")\n\n`;
2368
+ out += `asyncio.run(connect())`;
2369
+ return out;
2370
+ }
2371
+ default:
2372
+ return '// Not implemented';
2373
+ }
2374
+ }
2375
+ // Multi-language client snippets for SSE / EventSource streams.
2376
+ function generateStreamCodeSample(lang, url) {
2377
+ switch (lang) {
2378
+ case 'curl':
2379
+ return `curl -N "${url}"\n\n# -N disables buffering for streaming output`;
2380
+ case 'eventsource':
2381
+ return `const eventSource = new EventSource("${url}");\n\neventSource.onmessage = (event) => {\n console.log("Received:", event.data);\n};\n\neventSource.onerror = (error) => {\n console.error("Error:", error);\n eventSource.close();\n};\n\n// To close the connection:\n// eventSource.close();`;
2382
+ case 'recker':
2383
+ return `import { sse } from "recker";\n\nconst stream = sse("${url}");\n\nfor await (const event of stream) {\n console.log("Received:", event.data);\n}`;
2384
+ case 'python':
2385
+ return `import sseclient\nimport requests\n\nresponse = requests.get("${url}", stream=True)\nclient = sseclient.SSEClient(response)\n\nfor event in client.events():\n print(f"Event: {event.event}, Data: {event.data}")`;
2386
+ default:
2387
+ return '// Not implemented';
2388
+ }
2389
+ }
2390
+ // Tabbed client-code panel for the non-HTTP protocols that carry a live console
2391
+ // (WebSocket, streams). Mirrors renderCodeExamples' markup so the shared code
2392
+ // tab / copy styling applies.
2393
+ function renderProtocolCodeSamples(kind, endpoint, data) {
2394
+ const base = String(spec.servers?.[0]?.url ?? 'http://localhost:3000').replace(/\/$/, '');
2395
+ const isWs = kind === 'websocket';
2396
+ const url = isWs
2397
+ ? `${base.replace(/^http/, 'ws')}${wsSpec.path ?? '/ws'}`
2398
+ : `${base}/${streamsSpec.pathPrefix ?? 'streams'}/${endpoint.path}`.replace(/([^:]\/)\/+/g, '$1');
2399
+ const langs = isWs
2400
+ ? [['wscat', 'wscat', 'bash'], ['javascript', 'WebSocket', 'javascript'], ['recker', 'Recker', 'typescript'], ['python', 'Python', 'python']]
2401
+ : [['curl', 'cURL', 'bash'], ['eventsource', 'EventSource', 'javascript'], ['recker', 'Recker', 'typescript'], ['python', 'Python', 'python']];
2402
+ const section = doc.createElement('div');
2403
+ section.className = 'endpoint-subsection';
2404
+ section.innerHTML = '<div class="subsection-label">Client examples</div>';
2405
+ const wrap = doc.createElement('div');
2406
+ wrap.className = 'http-code-samples';
2407
+ const tabs = doc.createElement('div');
2408
+ tabs.className = 'code-tabs';
2409
+ const contents = doc.createElement('div');
2410
+ contents.className = 'code-contents';
2411
+ langs.forEach(([key, label, language], index) => {
2412
+ const tab = doc.createElement('button');
2413
+ tab.type = 'button';
2414
+ tab.className = `code-tab${index === 0 ? ' active' : ''}`;
2415
+ tab.textContent = label;
2416
+ const content = doc.createElement('div');
2417
+ content.className = `code-content${index === 0 ? ' active' : ''}`;
2418
+ const pre = doc.createElement('pre');
2419
+ pre.className = 'http-code-sample-pre';
2420
+ pre.setAttribute('data-code-toolbar', 'managed');
2421
+ const code = doc.createElement('code');
2422
+ code.className = `language-${language}`;
2423
+ code.textContent = isWs
2424
+ ? generateWsCodeSample(key, url, endpoint.path, data)
2425
+ : generateStreamCodeSample(key, url);
2426
+ pre.appendChild(code);
2427
+ content.appendChild(pre);
2428
+ tab.onclick = () => {
2429
+ tabs.querySelectorAll('.code-tab').forEach((t) => t.classList.remove('active'));
2430
+ contents.querySelectorAll('.code-content').forEach((c) => c.classList.remove('active'));
2431
+ tab.classList.add('active');
2432
+ content.classList.add('active');
2433
+ };
2434
+ tabs.appendChild(tab);
2435
+ contents.appendChild(content);
2436
+ });
2437
+ const copy = createSampleCopyButton('http-code-copy', () => {
2438
+ const active = contents.querySelector('.code-content.active pre');
2439
+ return active?.textContent ?? '';
2440
+ });
2441
+ tabs.appendChild(copy);
2442
+ wrap.appendChild(tabs);
2443
+ wrap.appendChild(contents);
2444
+ section.appendChild(wrap);
2445
+ return section;
2446
+ }
2290
2447
  function renderEndpointDetails(endpoint) {
2291
2448
  const container = doc.createElement('div');
2292
2449
  container.className = 'endpoint-details';
2293
2450
  const data = (endpoint.data ?? {});
2294
- appendProtocolConsole(container, { doc, spec, wsSpec, streamsSpec, jsonrpcSpec, activeProtocol, endpoint, data, esc, escapeAttr });
2451
+ appendProtocolConsole(container, { doc, spec, wsSpec, streamsSpec, jsonrpcSpec, activeProtocol, endpoint, data, esc, escapeAttr, tryItConfig });
2295
2452
  const appendMany = (items) => items.forEach(([title, value]) => appendSchemaSubsection(container, title, value));
2296
2453
  if (activeProtocol === 'http') {
2297
2454
  // Two-column operation layout (ReDoc-style): the left column carries the
@@ -2417,6 +2574,9 @@ function renderEndpointDetails(endpoint) {
2417
2574
  if (activeProtocol === 'websocket') {
2418
2575
  appendInfoGrid(container, [['Channel Type', data.type], ['Path', endpoint.path]]);
2419
2576
  appendMany([['Parameters', parameterMapToSchema(data.parameters)], ['Subscribe Message', resolveMessagePayload(data.subscribe?.message)], ['Publish Message', resolveMessagePayload(data.publish?.message)]]);
2577
+ appendContentTypesSection(container, 'Subscribe Content Types', resolveEffectiveContentTypes(data.subscribe?.contentTypes, wsSpec?.contentTypes));
2578
+ appendContentTypesSection(container, 'Publish Content Types', resolveEffectiveContentTypes(data.publish?.contentTypes, wsSpec?.contentTypes));
2579
+ container.appendChild(renderProtocolCodeSamples('websocket', endpoint, data));
2420
2580
  }
2421
2581
  if (activeProtocol === 'graphql') {
2422
2582
  appendInfoGrid(container, [['Endpoint', graphqlSpec.endpoint], ['Kind', data.kind], ['Resource', data.resource ?? data.name], ['Source', data.source]]);
@@ -2433,23 +2593,29 @@ function renderEndpointDetails(endpoint) {
2433
2593
  ]);
2434
2594
  appendStreamProjectionDiagnostics(container, resumable?.projections);
2435
2595
  appendMany([['Parameters', parameterMapToSchema(data.parameters)], ['Message Schema', resolveMessagePayload(data.message)]]);
2596
+ appendContentTypesSection(container, 'Content Types', resolveEffectiveContentTypes(data.contentTypes, streamsSpec?.contentTypes));
2597
+ container.appendChild(renderProtocolCodeSamples('streams', endpoint, data));
2436
2598
  }
2437
2599
  if (activeProtocol === 'jsonrpc') {
2438
2600
  appendInfoGrid(container, [['Method', endpoint.path], ['Notification', data['x-usd-notification'] === true ? 'yes' : undefined], ['Streaming', data['x-usd-streaming'] === true ? 'yes' : undefined]]);
2439
2601
  appendMany([['Parameters', data.params], ['Result', data.result], ['Errors', data.errors]]);
2602
+ appendContentTypesSection(container, 'Content Types', resolveEffectiveContentTypes(data.contentTypes, jsonrpcSpec?.contentTypes));
2440
2603
  }
2441
2604
  if (activeProtocol === 'grpc') {
2442
2605
  const method = data.method ?? {};
2443
2606
  appendInfoGrid(container, [['Service', data.serviceName], ['Method', data.methodName], ['Type', getGrpcMethodType(method).replace(/_/g, ' ')]]);
2444
2607
  appendMany([['Request', method.input], ['Response', method.output]]);
2608
+ appendContentTypesSection(container, 'Content Types', resolveEffectiveContentTypes(method.contentTypes, grpcSpec?.contentTypes));
2445
2609
  }
2446
2610
  if (activeProtocol === 'tcp') {
2447
2611
  appendInfoGrid(container, [['Host', data.host ?? 'localhost'], ['Port', data.port], ['TLS', data.tls?.enabled === true ? 'enabled' : undefined]]);
2448
2612
  appendMany([['Framing', data.framing], ['Inbound Message', resolveMessagePayload(data.messages?.inbound)], ['Outbound Message', resolveMessagePayload(data.messages?.outbound)]]);
2613
+ appendContentTypesSection(container, 'Content Types', resolveEffectiveContentTypes(data.contentTypes, tcpSpec?.contentTypes));
2449
2614
  }
2450
2615
  if (activeProtocol === 'udp') {
2451
2616
  appendInfoGrid(container, [['Host', data.host ?? '127.0.0.1'], ['Port', data.port], ['Max Packet', data.maxPacketSize ? `${data.maxPacketSize} bytes` : undefined]]);
2452
2617
  appendMany([['Inbound Message', resolveMessagePayload(data.messages?.inbound)], ['Outbound Message', resolveMessagePayload(data.messages?.outbound)], ['Message Schema', resolveMessagePayload(data.message)]]);
2618
+ appendContentTypesSection(container, 'Content Types', resolveEffectiveContentTypes(data.contentTypes, udpSpec?.contentTypes));
2453
2619
  }
2454
2620
  return container;
2455
2621
  }