From 238bbba7bfc29ca3a50d7ccac3e4a2689016af27 Mon Sep 17 00:00:00 2001 From: Ecio Date: Sat, 20 Jun 2026 17:24:35 -0300 Subject: [PATCH] feat: apply same Swagger UI template as whatsapp-api MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Logo, header (CoreGuard / WhatsAPI Oficial), search filter, auth gate, PT-BR button labels and footer — identical to whatsapp-api. Co-Authored-By: Claude Sonnet 4.6 --- LogoMenor.png | Bin 0 -> 44548 bytes src/routes.js | 369 ++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 328 insertions(+), 41 deletions(-) create mode 100644 LogoMenor.png diff --git a/LogoMenor.png b/LogoMenor.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6a647f233f8652181aada756d382c35cd4e21c GIT binary patch literal 44548 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 literal 0 HcmV?d00001 diff --git a/src/routes.js b/src/routes.js index 4864198..6fc335d 100644 --- a/src/routes.js +++ b/src/routes.js @@ -64,66 +64,352 @@ if (enableSwagger) { } } + routes.get('/api-docs/custom-logo.png', (req, res) => { + res.sendFile(path.resolve(__dirname, '..', 'LogoMenor.png')) + }) + const customCss = ` - .swagger-ui .topbar { background: #1a1a2e; } - .swagger-ui .topbar .topbar-wrapper .link { display: grid; grid-template-columns: 1fr; align-items: center; } - .swagger-ui .topbar .topbar-wrapper .link img { display: none; } + /* Traduzir botões e labels do Swagger UI para PT-BR via CSS content */ + .swagger-ui .btn.try-out__btn { font-size: 0; } + .swagger-ui .btn.try-out__btn::before { content: "Experimentar"; font-size: 14px; } + .swagger-ui .try-out .btn.cancel { font-size: 0; } + .swagger-ui .try-out .btn.cancel::before { content: "Cancelar"; font-size: 14px; } + .swagger-ui .btn.execute { font-size: 0; } + .swagger-ui .btn.execute::before { content: "Executar"; font-size: 14px; font-weight: bold; } + .swagger-ui .btn.btn-clear { font-size: 0; } + .swagger-ui .btn.btn-clear::before { content: "Limpar"; font-size: 14px; } + .swagger-ui .auth-wrapper .authorize { font-size: 0; } + .swagger-ui .auth-wrapper .authorize span { display: none; } + .swagger-ui .auth-wrapper .authorize::before { content: "Autorizar"; font-size: 14px; font-weight: bold; } + .swagger-ui .auth-btn-wrapper .btn-done { font-size: 0; } + .swagger-ui .auth-btn-wrapper .btn-done::before { content: "Fechar"; font-size: 14px; } + .swagger-ui .auth-container .auth-btn-wrapper .authorize { font-size: 0; } + .swagger-ui .auth-container .auth-btn-wrapper .authorize::before { content: "Autorizar"; font-size: 14px; } + .swagger-ui .btn-group .btn { color: inherit; } + .swagger-ui .info .title small { display: none; } + + /* Logo customizada da Neuralsys no topbar (substitui a logo do Swagger) */ + .swagger-ui .topbar .topbar-wrapper .link { + display: grid; + grid-template-columns: auto 1fr; + grid-template-rows: auto auto; + column-gap: 14px; + align-items: center; + } + .swagger-ui .topbar .topbar-wrapper .link img { + content: url("./custom-logo.png"); + height: 56px; + width: auto; + grid-column: 1; + grid-row: 1 / span 2; + } .swagger-ui .topbar .topbar-wrapper .link span { display: none; } .swagger-ui .topbar .topbar-wrapper .link::before { - content: "CoreGuard • WhatsAPI Oficial"; - color: #fff; font-family: sans-serif; font-weight: 700; font-size: 20px; padding: 8px 0; + content: "CoreGuard"; + grid-column: 2; + grid-row: 1; + align-self: end; + color: #fff; + font-family: sans-serif; + font-weight: 700; + font-size: 22px; + line-height: 1; + letter-spacing: 0.3px; } - .swagger-ui section.models, .swagger-ui .models { display: none !important; } - body:not(.neuralsys-authorized) .swagger-ui .opblock-tag { pointer-events: none; opacity: 0.55; } + .swagger-ui .topbar .topbar-wrapper .link::after { + content: "WhatsAPI Oficial"; + grid-column: 2; + grid-row: 2; + align-self: start; + color: #fff; + font-family: sans-serif; + font-weight: 600; + font-size: 14px; + line-height: 1.1; + letter-spacing: 0.4px; + margin-top: 3px; + } + + /* Classe usada pelo filtro customizado para esconder endpoints/seções */ + .swagger-ui .neuralsys-hidden { display: none !important; } + + /* Container do filtro customizado (substitui o filtro nativo) */ + .swagger-ui .neuralsys-filter-container { + margin: 20px 0; + padding: 0 20px; + max-width: 1460px; + box-sizing: border-box; + } + .swagger-ui .neuralsys-filter-container input { + width: 100%; + padding: 10px 14px; + border: 2px solid #41444e; + border-radius: 4px; + font-size: 14px; + box-sizing: border-box; + outline: none; + transition: border-color .15s; + } + .swagger-ui .neuralsys-filter-container input:focus { + border-color: #4990e2; + } + + /* Labels de "Parameters" / "Responses" / "No parameters" etc. */ + .swagger-ui .opblock-section-header h4 span[data-name="parameters"]::after, + .swagger-ui .opblock-section-header h4.parameters-header::after { content: ""; } + + /* Botão "Copy to clipboard" sempre visível nos endpoints da lista */ + .swagger-ui .opblock .opblock-summary .view-line-link.copy-to-clipboard { + width: 24px !important; + } + + /* Ocultar seção "Schemas" no final da página */ + .swagger-ui section.models, + .swagger-ui .models { display: none !important; } + + /* Gate: bloqueia expansão e filtragem até autorizar com apiKey válida */ + body:not(.neuralsys-authorized) .swagger-ui .opblock-tag { pointer-events: none; opacity: 0.55; cursor: not-allowed; } body:not(.neuralsys-authorized) .swagger-ui .opblock-tag-section .no-margin { display: none !important; } + body:not(.neuralsys-authorized) .swagger-ui .neuralsys-filter-container { display: none !important; } + /* Rodapé minimalista */ + body { margin-bottom: 0; } .neuralsys-footer { - background: #000; color: #fff; padding: 16px 32px; font-size: 13px; - display: flex; justify-content: space-between; font-family: sans-serif; margin-top: 40px; + background: #000; + color: #fff; + padding: 16px 32px; + font-size: 13px; + display: flex; + justify-content: space-between; + align-items: center; + font-family: sans-serif; + margin-top: 40px; } + .neuralsys-footer a { color: #fff; text-decoration: none; display: inline-flex; align-items: center; gap: 8px; } + .neuralsys-footer a:hover { text-decoration: underline; } + .neuralsys-footer svg { width: 16px; height: 16px; fill: currentColor; } ` const customJsStr = ` (function () { - var authorized = false, lastKey = null, validating = false; + var HIDDEN = 'neuralsys-hidden' + + function buildCorpus(op, rawPath) { + var paramNames = (op.parameters || []).map(function (p) { return p.name || '' }).join(' ') + var props = op && op.requestBody && op.requestBody.content && + op.requestBody.content['application/json'] && + op.requestBody.content['application/json'].schema && + op.requestBody.content['application/json'].schema.properties + var reqBodyProps = props ? Object.keys(props).join(' ') : '' + return (rawPath + ' ' + (op.summary || '') + ' ' + (op.description || '') + + ' ' + paramNames + ' ' + reqBodyProps).toLowerCase() + } + + function resetAll() { + document.querySelectorAll('.' + HIDDEN).forEach(function (el) { + el.classList.remove(HIDDEN) + }) + } + + function installFilter() { + if (!window.ui) { return setTimeout(installFilter, 250) } + if (document.querySelector('.neuralsys-filter-container')) return + + var wrapper = document.querySelector('.swagger-ui .wrapper') + var firstSection = document.querySelector('.opblock-tag-section') + if (!wrapper || !firstSection) { return setTimeout(installFilter, 250) } + + var container = document.createElement('div') + container.className = 'neuralsys-filter-container' + var input = document.createElement('input') + input.type = 'text' + input.placeholder = 'Filtrar...' + input.setAttribute('aria-label', 'Filtrar endpoints') + container.appendChild(input) + + firstSection.parentNode.insertBefore(container, firstSection) + + var specJson = window.ui.specSelectors.specJson().toJS() + var paths = specJson.paths || {} + + var tagIndex = null + function buildTagIndex() { + if (tagIndex) return tagIndex + tagIndex = {} + var httpMethods = ['get', 'post', 'put', 'delete', 'patch', 'options', 'head'] + Object.keys(paths).forEach(function (p) { + Object.keys(paths[p] || {}).forEach(function (m) { + var ml = m.toLowerCase() + if (httpMethods.indexOf(ml) === -1) return + var op = paths[p][m] + if (!op || typeof op !== 'object') return + var tags = (op.tags && op.tags.length) ? op.tags : ['default'] + tags.forEach(function (t) { + if (!tagIndex[t]) tagIndex[t] = [] + tagIndex[t].push({ path: p, method: ml, corpus: buildCorpus(op, p) }) + }) + }) + }) + return tagIndex + } + + function getTagName(sec) { + var tagEl = sec.querySelector('.opblock-tag') + if (!tagEl) return '' + var name = tagEl.getAttribute('data-tag') || tagEl.getAttribute('data-name') + if (name) return name + var span = tagEl.querySelector('span') || tagEl + return ((span.textContent || '').replace(/\\s+/g, ' ') || '').trim() + } + + function hideNonMatchingBlocks(q) { + document.querySelectorAll('.opblock').forEach(function (block) { + var pathEl = block.querySelector('.opblock-summary-path') + var methodEl = block.querySelector('.opblock-summary-method') + if (!pathEl || !methodEl) { + block.classList.remove(HIDDEN) + return + } + var rawPath = pathEl.getAttribute('data-path') || + (pathEl.querySelector('a') && pathEl.querySelector('a').textContent) || + pathEl.textContent + rawPath = (rawPath || '').trim() + var method = methodEl.textContent.trim().toLowerCase() + var op = (paths[rawPath] && paths[rawPath][method]) || {} + var corpus = buildCorpus(op, rawPath) + if (corpus.indexOf(q) !== -1) { + block.classList.remove(HIDDEN) + } else { + block.classList.add(HIDDEN) + } + }) + } + + function applyFilter() { + var q = input.value.trim().toLowerCase() + if (!q) { resetAll(); return } + + var idx = buildTagIndex() + var needsExpansion = false + + document.querySelectorAll('.opblock-tag-section').forEach(function (sec) { + var tagName = getTagName(sec) + var ops = idx[tagName] || [] + var hasMatch = ops.some(function (o) { return o.corpus.indexOf(q) !== -1 }) + if (!hasMatch) { + sec.classList.add(HIDDEN) + return + } + sec.classList.remove(HIDDEN) + if (!sec.classList.contains('is-open')) { + var header = sec.querySelector('.opblock-tag') + if (header) { + header.click() + needsExpansion = true + } + } + }) + + if (needsExpansion) { + setTimeout(function () { hideNonMatchingBlocks(q) }, 80) + } else { + hideNonMatchingBlocks(q) + } + } + + input.addEventListener('input', applyFilter) + } + + var observer = new MutationObserver(function () { + if (!document.querySelector('.neuralsys-filter-container') && + document.querySelector('.opblock-tag-section')) { + installFilter() + } + translateCopyButtons() + if (!document.querySelector('.neuralsys-footer')) installFooter() + }) + + function translateCopyButtons() { + var label = 'Copiar para área de transferência' + document.querySelectorAll('.view-line-link.copy-to-clipboard, .copy-to-clipboard').forEach(function (el) { + if (el.getAttribute('title') !== label) el.setAttribute('title', label) + if (el.getAttribute('aria-label') !== label) el.setAttribute('aria-label', label) + }) + } + + var authorized = false + var lastKey = null + var validating = false + function currentKey() { try { - var auth = window.ui && window.ui.authSelectors.authorized(); - if (!auth) return null; - var js = auth.toJS ? auth.toJS() : auth; - if (js && js.apiKeyAuth && js.apiKeyAuth.value) return js.apiKeyAuth.value; - } catch(e) {} - return null; + var auth = window.ui.authSelectors.authorized() + if (!auth) return null + var js = auth.toJS ? auth.toJS() : auth + if (js && js.apiKeyAuth && js.apiKeyAuth.value) return js.apiKeyAuth.value + } catch (e) {} + return null } + + function collapseAll() { + document.querySelectorAll('.opblock-tag-section.is-open').forEach(function (sec) { + var header = sec.querySelector('.opblock-tag') + if (header) header.click() + }) + } + function setAuthorized(ok) { - authorized = ok; - document.body.classList.toggle('neuralsys-authorized', ok); - if (!ok) { - document.querySelectorAll('.opblock-tag-section.is-open').forEach(function(s) { - var h = s.querySelector('.opblock-tag'); if (h) h.click(); - }); + authorized = ok + document.body.classList.toggle('neuralsys-authorized', ok) + if (!ok) collapseAll() + } + + function validateKey(key) { + if (validating) return + validating = true + fetch('/validateApiKey', { headers: { 'x-api-key': key } }) + .then(function (r) { setAuthorized(r.status === 200) }) + .catch(function () { setAuthorized(false) }) + .then(function () { validating = false }) + } + + function pollAuth() { + var key = currentKey() + if (key !== lastKey) { + lastKey = key + if (key) { validateKey(key) } else { setAuthorized(false) } } } - function validateKey(key) { - if (validating) return; validating = true; - fetch('/validateApiKey', { headers: { 'x-api-key': key } }) - .then(function(r) { setAuthorized(r.status === 200); }) - .catch(function() { setAuthorized(false); }) - .then(function() { validating = false; }); - } - function pollAuth() { - var key = currentKey(); - if (key !== lastKey) { lastKey = key; if (key) validateKey(key); else setAuthorized(false); } - } + function installFooter() { - if (document.querySelector('.neuralsys-footer')) return; - var f = document.createElement('footer'); - f.className = 'neuralsys-footer'; - f.innerHTML = 'Copyright © ' + new Date().getFullYear() + ' — CoreGuardcontato@neuralsys.com.br'; - document.body.appendChild(f); + if (document.querySelector('.neuralsys-footer')) return + var footer = document.createElement('footer') + footer.className = 'neuralsys-footer' + var year = new Date().getFullYear() + footer.innerHTML = + 'Copyright \\u00A9 ' + year + ' - CoreGuard' + + '' + + '' + + '' + + '' + + 'contato@neuralsys.com.br' + + '' + document.body.appendChild(footer) + } + + function boot() { + installFilter() + translateCopyButtons() + installFooter() + setAuthorized(false) + setInterval(pollAuth, 500) + observer.observe(document.body, { childList: true, subtree: true }) + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', function () { setTimeout(boot, 400) }) + } else { + setTimeout(boot, 400) } - function boot() { setAuthorized(false); setInterval(pollAuth, 500); installFooter(); } - if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', function() { setTimeout(boot, 400); }); - else setTimeout(boot, 400); })(); ` @@ -132,6 +418,7 @@ if (enableSwagger) { customCss, customJsStr, customSiteTitle: 'WhatsApp Oficial API — Documentação', + customfavIcon: '/api-docs/custom-logo.png', swaggerOptions: { docExpansion: 'none', persistAuthorization: true }, })) }