Refine open API docs
This commit is contained in:
44
docs/api.md
44
docs/api.md
@@ -1,44 +0,0 @@
|
|||||||
# API Reference
|
|
||||||
|
|
||||||
This page contains the interactive API documentation for ntfy. You can try out the API endpoints directly from this page.
|
|
||||||
|
|
||||||
## Using the API Documentation
|
|
||||||
|
|
||||||
### Server Selection
|
|
||||||
|
|
||||||
The API reference includes a server selector dropdown at the top of the page. By default, it's configured to use the **public ntfy.sh server**.
|
|
||||||
|
|
||||||
To use your own ntfy instance, edit `docs/api/openapi.yaml` and add your server URL to the `servers` section:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
servers:
|
|
||||||
- url: https://ntfy.sh
|
|
||||||
description: Public ntfy server
|
|
||||||
- url: https://your-ntfy-instance.com
|
|
||||||
description: Your custom server
|
|
||||||
```
|
|
||||||
|
|
||||||
After editing the file, rebuild the docs with `mkdocs build`.
|
|
||||||
|
|
||||||
### Authentication
|
|
||||||
|
|
||||||
Click the **Authorize** button (lock icon) in the API reference to add your access token. Use the format `Bearer <your_token>` or `Basic <base64_encoded_credentials>`.
|
|
||||||
|
|
||||||
### Try It Out
|
|
||||||
|
|
||||||
Click **Try it out** on any endpoint to test it directly. Parameters will be empty by default - enter your own values to test.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Redirect to standalone Scalar page - use absolute path from root
|
|
||||||
var currentPath = window.location.pathname;
|
|
||||||
// Get base path (everything before /api/)
|
|
||||||
var basePath = currentPath.substring(0, currentPath.indexOf('/api/'));
|
|
||||||
if (basePath === -1 || basePath === '') {
|
|
||||||
basePath = '';
|
|
||||||
}
|
|
||||||
window.location.href = basePath + '/api/scalar.html';
|
|
||||||
</script>
|
|
||||||
|
|
||||||
If you are not redirected automatically, [click here to view the API Reference](api/scalar.html).
|
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>ntfy API Reference</title>
|
<title>ntfy API Reference</title>
|
||||||
<link rel="icon" type="image/svg+xml" href="https://ntfy.sh/static/img/favicon.svg">
|
<link rel="icon" type="image/png" href="/static/img/favicon.png">
|
||||||
<style>
|
<style>
|
||||||
* {
|
* {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -70,43 +70,22 @@
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Proxy toggle checkbox */
|
|
||||||
.proxy-toggle {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 8px;
|
|
||||||
margin-left: 20px;
|
|
||||||
padding: 8px 12px;
|
|
||||||
background: rgba(255, 255, 255, 0.15);
|
|
||||||
border-radius: 6px;
|
|
||||||
cursor: pointer;
|
|
||||||
transition: background 0.2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.proxy-toggle:hover {
|
|
||||||
background: rgba(255, 255, 255, 0.25);
|
|
||||||
}
|
|
||||||
|
|
||||||
.proxy-toggle input[type="checkbox"] {
|
|
||||||
cursor: pointer;
|
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.proxy-toggle label {
|
|
||||||
color: white;
|
|
||||||
font-size: 13px;
|
|
||||||
font-weight: 500;
|
|
||||||
cursor: pointer;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Scalar container */
|
/* Scalar container */
|
||||||
#scalar-api-reference {
|
#scalar-api-reference {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-height: calc(100vh - 100px);
|
min-height: calc(100vh - 100px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Hide Share and Generate SDKs menu items */
|
||||||
|
[data-scalar-menu-item="share"],
|
||||||
|
[data-scalar-menu-item="sdk"],
|
||||||
|
.scalar-card-header-actions button[title="Share"],
|
||||||
|
.scalar-card-header-actions button[title="Generate SDK"],
|
||||||
|
button:has(> span:contains("Share")),
|
||||||
|
button:has(> span:contains("SDK")) {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
/* Responsive */
|
/* Responsive */
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.header-content {
|
.header-content {
|
||||||
@@ -126,7 +105,7 @@
|
|||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="header-content">
|
<div class="header-content">
|
||||||
<a href="/" style="display: flex; align-items: center; text-decoration: none;">
|
<a href="/" style="display: flex; align-items: center; text-decoration: none;">
|
||||||
<img src="https://docs.ntfy.sh/static/img/ntfy.png" width="35" height="35" alt="ntfy logo" style="margin-right: 10px;">
|
<img src="/static/img/ntfy.png" width="35" height="35" alt="ntfy logo" style="margin-right: 10px;">
|
||||||
</a>
|
</a>
|
||||||
<div class="header-text">
|
<div class="header-text">
|
||||||
<h1>ntfy</h1>
|
<h1>ntfy</h1>
|
||||||
@@ -136,61 +115,16 @@
|
|||||||
<a href="/">Documentation Home</a>
|
<a href="/">Documentation Home</a>
|
||||||
<a href="https://ntfy.sh">ntfy.sh</a>
|
<a href="https://ntfy.sh">ntfy.sh</a>
|
||||||
<a href="https://github.com/binwiederhier/ntfy">GitHub</a>
|
<a href="https://github.com/binwiederhier/ntfy">GitHub</a>
|
||||||
<div class="proxy-toggle" title="Enable CORS proxy to make requests through Scalar's proxy server">
|
|
||||||
<input type="checkbox" id="proxy-toggle-checkbox" checked>
|
|
||||||
<label for="proxy-toggle-checkbox">Use CORS Proxy</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Scalar API Reference -->
|
<!-- Scalar API Reference -->
|
||||||
<div id="scalar-api-reference"></div>
|
<div id="scalar-api-reference"></div>
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@scalar/api-reference@1.43.8/dist/browser/style.css" />
|
<link rel="stylesheet" type="text/css" href="./scalar-style.css" />
|
||||||
<script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference@1.43.8/dist/browser/standalone.js"></script>
|
<script src="./scalar-standalone.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// Store the Scalar instance globally so we can reinitialize it
|
|
||||||
let scalarInstance = null;
|
|
||||||
|
|
||||||
// Get proxy preference from localStorage (default: true)
|
|
||||||
function getProxyEnabled() {
|
|
||||||
const stored = localStorage.getItem('scalar-proxy-enabled');
|
|
||||||
return stored === null ? true : stored === 'true';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Save proxy preference to localStorage
|
|
||||||
function setProxyEnabled(enabled) {
|
|
||||||
localStorage.setItem('scalar-proxy-enabled', enabled.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize checkbox state
|
|
||||||
function initProxyCheckbox() {
|
|
||||||
const checkbox = document.getElementById('proxy-toggle-checkbox');
|
|
||||||
if (checkbox) {
|
|
||||||
checkbox.checked = getProxyEnabled();
|
|
||||||
|
|
||||||
// Add change listener
|
|
||||||
checkbox.addEventListener('change', function() {
|
|
||||||
const enabled = checkbox.checked;
|
|
||||||
setProxyEnabled(enabled);
|
|
||||||
// Reinitialize Scalar with new proxy setting
|
|
||||||
reinitializeScalar();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reinitialize Scalar with current proxy setting
|
|
||||||
function reinitializeScalar() {
|
|
||||||
const targetElement = document.getElementById('scalar-api-reference');
|
|
||||||
if (targetElement) {
|
|
||||||
// Clear the container
|
|
||||||
targetElement.innerHTML = '<div style="padding: 20px; text-align: center; color: #6b7280;">Reinitializing API Reference...</div>';
|
|
||||||
// Reinitialize
|
|
||||||
setTimeout(initScalar, 100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function initScalar() {
|
function initScalar() {
|
||||||
const targetElement = document.getElementById('scalar-api-reference');
|
const targetElement = document.getElementById('scalar-api-reference');
|
||||||
|
|
||||||
@@ -204,14 +138,25 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get proxy setting
|
|
||||||
const useProxy = getProxyEnabled();
|
|
||||||
|
|
||||||
// Build config object
|
|
||||||
const config = {
|
const config = {
|
||||||
url: './openapi.yaml',
|
url: './openapi.yaml',
|
||||||
layout: 'modern',
|
layout: 'modern',
|
||||||
theme: 'default',
|
theme: 'default',
|
||||||
|
customCss: `
|
||||||
|
/* Hide Share and Generate SDKs menu items in dropdowns */
|
||||||
|
[data-testid="share-button"],
|
||||||
|
[data-testid="sdk-button"],
|
||||||
|
.context-menu-item:has(svg[data-icon="share"]),
|
||||||
|
.context-menu-item:has(svg[data-icon="sdk"]),
|
||||||
|
.dropdown-item:has(span:contains("Share")),
|
||||||
|
.dropdown-item:has(span:contains("SDK")),
|
||||||
|
.scalar-dropdown-item[data-action="share"],
|
||||||
|
.scalar-dropdown-item[data-action="generate-sdk"],
|
||||||
|
button[aria-label="Share"],
|
||||||
|
button[aria-label="Generate SDK"] {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
`,
|
||||||
configuration: {
|
configuration: {
|
||||||
hideSidebar: false,
|
hideSidebar: false,
|
||||||
hideSearch: false,
|
hideSearch: false,
|
||||||
@@ -223,36 +168,23 @@
|
|||||||
darkMode: false,
|
darkMode: false,
|
||||||
withDefaultFonts: false,
|
withDefaultFonts: false,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// Only add proxyUrl if enabled
|
|
||||||
if (useProxy) {
|
|
||||||
config.proxyUrl = 'https://proxy.scalar.com';
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const apiRef = Scalar.createApiReference('#scalar-api-reference', config);
|
Scalar.createApiReference('#scalar-api-reference', config);
|
||||||
console.log('Scalar initialized successfully', useProxy ? 'with proxy' : 'without proxy');
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error initializing Scalar:', error);
|
console.error('Error initializing Scalar:', error);
|
||||||
targetElement.innerHTML = '<div style="padding: 20px; color: red;">Error loading API reference: ' + error.message + '</div>';
|
targetElement.innerHTML = '<div style="padding: 20px; color: red;">Error loading API reference: ' + error.message + '</div>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize checkbox first
|
|
||||||
if (document.readyState === 'loading') {
|
if (document.readyState === 'loading') {
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', initScalar);
|
||||||
initProxyCheckbox();
|
|
||||||
initScalar();
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
initProxyCheckbox();
|
|
||||||
setTimeout(initScalar, 100);
|
setTimeout(initScalar, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also try on window load as fallback
|
|
||||||
window.addEventListener('load', function() {
|
window.addEventListener('load', function() {
|
||||||
initProxyCheckbox();
|
|
||||||
setTimeout(initScalar, 200);
|
setTimeout(initScalar, 200);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
File diff suppressed because it is too large
Load Diff
35987
docs/api/scalar-standalone.js
Normal file
35987
docs/api/scalar-standalone.js
Normal file
File diff suppressed because one or more lines are too long
11911
docs/api/scalar-style.css
Normal file
11911
docs/api/scalar-style.css
Normal file
File diff suppressed because it is too large
Load Diff
@@ -74,7 +74,6 @@ plugins:
|
|||||||
- search
|
- search
|
||||||
- minify:
|
- minify:
|
||||||
minify_html: true
|
minify_html: true
|
||||||
- swagger-ui-tag
|
|
||||||
|
|
||||||
nav:
|
nav:
|
||||||
- "Getting started": index.md
|
- "Getting started": index.md
|
||||||
@@ -90,9 +89,9 @@ nav:
|
|||||||
- "Installation": install.md
|
- "Installation": install.md
|
||||||
- "Configuration": config.md
|
- "Configuration": config.md
|
||||||
- "Other things":
|
- "Other things":
|
||||||
- "API Reference": api.md
|
|
||||||
- "FAQs": faq.md
|
- "FAQs": faq.md
|
||||||
- "Examples": examples.md
|
- "Examples": examples.md
|
||||||
|
- "API Reference": /api/
|
||||||
- "Integrations + projects": integrations.md
|
- "Integrations + projects": integrations.md
|
||||||
- "Release notes": releases.md
|
- "Release notes": releases.md
|
||||||
- "Emojis 🥳 🎉": emojis.md
|
- "Emojis 🥳 🎉": emojis.md
|
||||||
|
|||||||
Reference in New Issue
Block a user