diff --git a/lith/server.mjs b/lith/server.mjs index 178b7f5a7d..8b430c2a49 100644 --- a/lith/server.mjs +++ b/lith/server.mjs @@ -172,6 +172,13 @@ app.use((req, _res, next) => { req.url = "/notepat" + (req.url === "/" ? "" : req.url.slice(req.path.length)); } + // api.aesthetic.computer / api.prompt.ac → api-docs function (public API reference) + if (host === "api.aesthetic.computer" || host === "api.prompt.ac") { + if (req.path === "/" || req.path === "") { + req.url = "/api-docs" + (req.url.includes("?") ? req.url.slice(req.url.indexOf("?")) : ""); + } + } + next(); }); @@ -948,6 +955,8 @@ app.all("/media/*rest", async (req, res) => { }); // API functions (matches Netlify redirect rules) +// Bare `/api` serves the public API reference (same function that backs api.aesthetic.computer). +app.all("/api", directFn("api-docs")); app.all("/api/:fn", handleFunctionResolved); app.all("/api/:fn/*rest", handleFunctionResolved); app.all("/.netlify/functions/:fn", handleFunction); @@ -986,6 +995,8 @@ app.all("/presigned-download-url/*rest", directFn("presigned-url")); app.all("/docs", directFn("docs")); app.all("/docs.json", directFn("docs")); app.all("/docs/*rest", directFn("docs")); +app.all("/api-docs", directFn("api-docs")); +app.all("/api-docs.json", directFn("api-docs")); app.all("/media-collection", directFn("media-collection")); app.all("/media-collection/*rest", directFn("media-collection")); app.all("/device-login", directFn("device-login")); diff --git a/system/netlify/functions/api-docs.mjs b/system/netlify/functions/api-docs.mjs index ac74f759ba..af43930339 100644 --- a/system/netlify/functions/api-docs.mjs +++ b/system/netlify/functions/api-docs.mjs @@ -1097,9 +1097,9 @@ function generateHTML(docs) {
${docs.baseURL}${endpoint.path}
${endpoint.description}
- ${endpoint.examples.map((example, exIdx) => ` -${example.description}
+ ${(endpoint.examples || []).map((example, exIdx) => ` +${example.description || ''}
${escapeHTML(example.curl)}
+ ${escapeHTML(example.curl || '')}
${escapeHTML(example.javascript)}
+ ${escapeHTML(example.javascript || '')}
${escapeHTML(example.python)}
+ ${escapeHTML(example.python || '')}
${JSON.stringify(example.response.body, null, 2)}
+ ${example.response ? `${escapeHTML(JSON.stringify(example.response.body ?? example.response, null, 2))}` : ''}
`).join('')}
`).join('')}