From 02d7958ea48b6125c7f0c80a0ba052a965121a0e Mon Sep 17 00:00:00 2001 From: ricardo Date: Tue, 26 Apr 2022 16:20:35 -0400 Subject: [PATCH] :zap: Expose swagger ui in GET /{version}/docs --- packages/cli/package.json | 8 +++++-- packages/cli/src/PublicApi/index.ts | 24 +++++++++++++++---- packages/cli/src/PublicApi/swaggerTheme.css | 26 +++++++++++++++++++++ packages/cli/src/PublicApi/v1/openapi.yml | 18 ++++++-------- 4 files changed, 59 insertions(+), 17 deletions(-) create mode 100644 packages/cli/src/PublicApi/swaggerTheme.css diff --git a/packages/cli/package.json b/packages/cli/package.json index 30774e0e95..fae3a33ab9 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -19,7 +19,7 @@ "bin": "n8n" }, "scripts": { - "build": "tsc && cp -r ./src/UserManagement/email/templates ./dist/src/UserManagement/email; rsync -a --include='*/' --include='*.yml' --exclude='*' ./src/PublicApi/ ./dist/src/PublicApi/", + "build": "tsc && cp -r ./src/UserManagement/email/templates ./dist/src/UserManagement/email; rsync -a --include='*/' --include={'*.yml','*.css'} --exclude='*' ./src/PublicApi/ ./dist/src/PublicApi/", "dev": "concurrently -k -n \"TypeScript,Node\" -c \"yellow.bold,cyan.bold\" \"npm run watch\" \"nodemon\"", "format": "cd ../.. && node_modules/prettier/bin-prettier.js packages/cli/**/**.ts --write", "lint": "cd ../.. && node_modules/eslint/bin/eslint.js packages/cli", @@ -97,6 +97,8 @@ "@rudderstack/rudder-sdk-node": "1.0.6", "@types/json-diff": "^0.5.1", "@types/jsonwebtoken": "^8.5.2", + "@types/swagger-ui-express": "^4.1.3", + "@types/yamljs": "^0.2.31", "basic-auth": "^2.0.1", "bcryptjs": "^2.4.3", "body-parser": "^1.18.3", @@ -143,10 +145,12 @@ "request-promise-native": "^1.0.7", "sqlite3": "^5.0.2", "sse-channel": "^3.1.1", + "swagger-ui-express": "^4.3.0", "tslib": "1.14.1", "typeorm": "0.2.30", "uuid": "^8.3.0", "validator": "13.7.0", - "winston": "^3.3.3" + "winston": "^3.3.3", + "yamljs": "^0.3.0" } } diff --git a/packages/cli/src/PublicApi/index.ts b/packages/cli/src/PublicApi/index.ts index 32e96028b9..1ea0225a8f 100644 --- a/packages/cli/src/PublicApi/index.ts +++ b/packages/cli/src/PublicApi/index.ts @@ -8,15 +8,29 @@ import * as OpenApiValidator from 'express-openapi-validator'; import { HttpError } from 'express-openapi-validator/dist/framework/types'; import fs from 'fs/promises'; import path from 'path'; +import * as swaggerUi from 'swagger-ui-express'; +import * as YAML from 'yamljs'; +import config from '../../config'; import { authenticationHandler, specFormats } from './helpers'; function createApiRouter( version: string, openApiSpecPath: string, hanldersDirectory: string, + swaggerThemeCss: string, ): Router { + const n8nPath = config.getEnv('path'); + const swaggerDocument = YAML.load(openApiSpecPath) as swaggerUi.JsonObject; const apiController = express.Router(); - apiController.use(`/${version}/spec`, express.static(openApiSpecPath)); + apiController.use( + `/${version}/docs`, + swaggerUi.serveFiles(swaggerDocument), + swaggerUi.setup(swaggerDocument, { + customCss: swaggerThemeCss, + customSiteTitle: 'n8n Public API UI', + customfavIcon: `${n8nPath}favicon.ico`, + }), + ); apiController.use(`/${version}`, express.json()); apiController.use( `/${version}`, @@ -44,12 +58,14 @@ function createApiRouter( } export const loadPublicApiVersions = async (): Promise => { - const data = await fs.readdir(__dirname); - const versions = data.filter((folderName) => folderName.startsWith('v')); + const swaggerThemePath = path.join(__dirname, 'swaggerTheme.css'); + const folders = await fs.readdir(__dirname); + const css = (await fs.readFile(swaggerThemePath)).toString(); + const versions = folders.filter((folderName) => folderName.startsWith('v')); const apiRouters: express.Router[] = []; for (const version of versions) { const openApiPath = path.join(__dirname, version, 'openapi.yml'); - apiRouters.push(createApiRouter(version, openApiPath, __dirname)); + apiRouters.push(createApiRouter(version, openApiPath, __dirname, css)); } return apiRouters; }; diff --git a/packages/cli/src/PublicApi/swaggerTheme.css b/packages/cli/src/PublicApi/swaggerTheme.css new file mode 100644 index 0000000000..b7682cc8fa --- /dev/null +++ b/packages/cli/src/PublicApi/swaggerTheme.css @@ -0,0 +1,26 @@ +.swagger-ui .info .title small:last-child { + background-color: #ff6d5a !important +} + +.swagger-ui .topbar { + background-color: #fff; +} + +.swagger-ui img { + content: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI0IiBoZWlnaHQ9IjI4IiB2aWV3Qm94PSIwIDAgMTI0IDI4IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGRhdGEtdi03OGMyN2E5YT0iIj48dGl0bGUgZGF0YS12LTc4YzI3YTlhPSIiPm44PC90aXRsZT4gPGcgaWQ9Im5hdi1tZW51LShWMSkiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGRhdGEtdi03OGMyN2E5YT0iIj48ZyBpZD0ibmF2LW1lbnUtKHYxKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEyMC4wMDAwMDAsIC0xMTYuMDAwMDAwKSIgZmlsbC1ydWxlPSJub256ZXJvIiBkYXRhLXYtNzhjMjdhOWE9IiIgZmlsbD0ibm9uZSI+PGcgaWQ9Im44IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAuMDAwMDAwLCAxMTYuMDAwMDAwKSIgZGF0YS12LTc4YzI3YTlhPSIiIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik00OC43Mzg0OTA2LDAuMTkwMTg4Njc5IEM0Ni4xNTc3MzU4LDAuMTkwMTg4Njc5IDQzLjk4NjQxNTEsMS45Njc5MjQ1MyA0My4zNzM1ODQ5LDQuMzYxMTMyMDggTDM1LjY1MjQ1MjgsNC4zNjExMzIwOCBDMzIuNjIyNjQxNSw0LjM2MTEzMjA4IDMwLjE1ODExMzIsNi44MjU2NjAzOCAzMC4xNTgxMTMyLDkuODU1NDcxNyBDMzAuMTU4MTEzMiwxMS4zNjkwNTY2IDI4LjkyNzE2OTgsMTIuNjAyNjQxNSAyNy40MTA5NDM0LDEyLjYwMjY0MTUgTDI2LjMwOTQzNCwxMi42MDI2NDE1IEMyNS42OTY2MDM4LDEwLjIwOTQzNCAyMy41Mjc5MjQ1LDguNDMxNjk4MTEgMjAuOTQ0NTI4Myw4LjQzMTY5ODExIEMxOC4zNjM3NzM2LDguNDMxNjk4MTEgMTYuMTkyNDUyOCwxMC4yMDk0MzQgMTUuNTc5NjIyNiwxMi42MDI2NDE1IEwxMS4xNjgzMDE5LDEyLjYwMjY0MTUgQzEwLjU1NTQ3MTcsMTAuMjA5NDM0IDguMzg2NzkyNDUsOC40MzE2OTgxMSA1LjgwMzM5NjIzLDguNDMxNjk4MTEgQzIuNzQ3MTY5ODEsOC40MzE2OTgxMSAwLjI1ODg2NzkyNSwxMC45MTczNTg1IDAuMjU4ODY3OTI1LDEzLjk3NjIyNjQgQzAuMjU4ODY3OTI1LDE3LjAzMjQ1MjggMi43NDQ1MjgzLDE5LjUyMDc1NDcgNS44MDMzOTYyMywxOS41MjA3NTQ3IEM4LjM4NDE1MDk0LDE5LjUyMDc1NDcgMTAuNTU1NDcxNywxNy43NDMwMTg5IDExLjE2ODMwMTksMTUuMzQ5ODExMyBMMTUuNTg0OTA1NywxNS4zNDk4MTEzIEMxNi4xOTc3MzU4LDE3Ljc0MzAxODkgMTguMzY2NDE1MSwxOS41MjA3NTQ3IDIwLjk0OTgxMTMsMTkuNTIwNzU0NyBDMjMuNTE0NzE3LDE5LjUyMDc1NDcgMjUuNjcwMTg4NywxNy43Njk0MzQgMjYuMzAxNTA5NCwxNS40IEwyNy40MTM1ODQ5LDE1LjQgQzI4LjkyNzE2OTgsMTUuNCAzMC4xNjA3NTQ3LDE2LjYzMDk0MzQgMzAuMTYwNzU0NywxOC4xNDcxNjk4IEMzMC4xNjA3NTQ3LDIxLjE3Njk4MTEgMzIuNjI1MjgzLDIzLjY0MTUwOTQgMzUuNjU1MDk0MywyMy42NDE1MDk0IEwzNy40NTM5NjIzLDIzLjY0MTUwOTQgQzM4LjA2Njc5MjUsMjYuMDM0NzE3IDQwLjIzNTQ3MTcsMjcuODEyNDUyOCA0Mi44MTg4Njc5LDI3LjgxMjQ1MjggQzQ1Ljg3NTA5NDMsMjcuODEyNDUyOCA0OC4zNjMzOTYyLDI1LjMyNjc5MjUgNDguMzYzMzk2MiwyMi4yNjc5MjQ1IEM0OC4zNjMzOTYyLDE5LjIxMTY5ODEgNDUuODc3NzM1OCwxNi43MjMzOTYyIDQyLjgxODg2NzksMTYuNzIzMzk2MiBDNDAuMjM4MTEzMiwxNi43MjMzOTYyIDM4LjA2Njc5MjUsMTguNTAxMTMyMSAzNy40NTM5NjIzLDIwLjg5NDMzOTYgTDM1LjY1NTA5NDMsMjAuODk0MzM5NiBDMzQuMTQxNTA5NCwyMC44OTQzMzk2IDMyLjkwNzkyNDUsMTkuNjYzMzk2MiAzMi45MDc5MjQ1LDE4LjE0NzE2OTggQzMyLjkwNzkyNDUsMTYuNDkzNTg0OSAzMi4xNjgzMDE5LDE1LjAwOTA1NjYgMzEuMDA4Njc5MiwxNC4wMDI2NDE1IEMzMi4xNzA5NDM0LDEyLjk5MzU4NDkgMzIuOTA3OTI0NSwxMS41MTE2OTgxIDMyLjkwNzkyNDUsOS44NTgxMTMyMSBDMzIuOTA3OTI0NSw4LjM0NDUyODMgMzQuMTM4ODY3OSw3LjExMDk0MzQgMzUuNjU1MDk0Myw3LjExMDk0MzQgTDQzLjM3NjIyNjQsNy4xMTA5NDM0IEM0My45ODkwNTY2LDkuNTA0MTUwOTQgNDYuMTU3NzM1OCwxMS4yODE4ODY4IDQ4Ljc0MTEzMjEsMTEuMjgxODg2OCBDNTEuNzk3MzU4NSwxMS4yODE4ODY4IDU0LjI4NTY2MDQsOC43OTYyMjY0MiA1NC4yODU2NjA0LDUuNzM3MzU4NDkgQzU0LjI4MzAxODksMi42Nzg0OTA1NyA1MS43OTQ3MTcsMC4xOTAxODg2NzkgNDguNzM4NDkwNiwwLjE5MDE4ODY3OSBaIE01LjgwODY3OTI1LDE2Ljc3MDk0MzQgQzQuMjY2MDM3NzQsMTYuNzcwOTQzNCAzLjAxMTMyMDc1LDE1LjUxNjIyNjQgMy4wMTEzMjA3NSwxMy45NzM1ODQ5IEMzLjAxMTMyMDc1LDEyLjQzMDk0MzQgNC4yNjYwMzc3NCwxMS4xNzYyMjY0IDUuODA4Njc5MjUsMTEuMTc2MjI2NCBDNy4zNTEzMjA3NSwxMS4xNzYyMjY0IDguNjA2MDM3NzQsMTIuNDMwOTQzNCA4LjYwNjAzNzc0LDEzLjk3MzU4NDkgQzguNjA2MDM3NzQsMTUuNTE2MjI2NCA3LjM1MTMyMDc1LDE2Ljc3MDk0MzQgNS44MDg2NzkyNSwxNi43NzA5NDM0IFogTTIwLjk0OTgxMTMsMTYuNzcwOTQzNCBDMTkuNDA3MTY5OCwxNi43NzA5NDM0IDE4LjE1MjQ1MjgsMTUuNTE2MjI2NCAxOC4xNTI0NTI4LDEzLjk3MzU4NDkgQzE4LjE1MjQ1MjgsMTIuNDMwOTQzNCAxOS40MDcxNjk4LDExLjE3NjIyNjQgMjAuOTQ5ODExMywxMS4xNzYyMjY0IEMyMi40OTI0NTI4LDExLjE3NjIyNjQgMjMuNzQ3MTY5OCwxMi40MzA5NDM0IDIzLjc0NzE2OTgsMTMuOTczNTg0OSBDMjMuNzQ3MTY5OCwxNS41MTYyMjY0IDIyLjQ5MjQ1MjgsMTYuNzcwOTQzNCAyMC45NDk4MTEzLDE2Ljc3MDk0MzQgWiBNNDIuODE2MjI2NCwxOS40Njc5MjQ1IEM0NC4zNTg4Njc5LDE5LjQ2NzkyNDUgNDUuNjEzNTg0OSwyMC43MjI2NDE1IDQ1LjYxMzU4NDksMjIuMjY1MjgzIEM0NS42MTM1ODQ5LDIzLjgwNzkyNDUgNDQuMzU4ODY3OSwyNS4wNjI2NDE1IDQyLjgxNjIyNjQsMjUuMDYyNjQxNSBDNDEuMjczNTg0OSwyNS4wNjI2NDE1IDQwLjAxODg2NzksMjMuODA3OTI0NSA0MC4wMTg4Njc5LDIyLjI2NTI4MyBDNDAuMDIxNTA5NCwyMC43MjI2NDE1IDQxLjI3NjIyNjQsMTkuNDY3OTI0NSA0Mi44MTYyMjY0LDE5LjQ2NzkyNDUgWiBNNDguNzM4NDkwNiw4LjUzMjA3NTQ3IEM0Ny4xOTU4NDkxLDguNTMyMDc1NDcgNDUuOTQxMTMyMSw3LjI3NzM1ODQ5IDQ1Ljk0MTEzMjEsNS43MzQ3MTY5OCBDNDUuOTQxMTMyMSw0LjE5MjA3NTQ3IDQ3LjE5NTg0OTEsMi45MzczNTg0OSA0OC43Mzg0OTA2LDIuOTM3MzU4NDkgQzUwLjI4MTEzMjEsMi45MzczNTg0OSA1MS41MzU4NDkxLDQuMTkyMDc1NDcgNTEuNTM1ODQ5MSw1LjczNDcxNjk4IEM1MS41MzU4NDkxLDcuMjc3MzU4NDkgNTAuMjgxMTMyMSw4LjUzMjA3NTQ3IDQ4LjczODQ5MDYsOC41MzIwNzU0NyBaIiBpZD0iU2hhcGUiIGZpbGw9IiNGRjZENUEiIGRhdGEtdi03OGMyN2E5YT0iIj48L3BhdGg+IDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTYuNTI4MzAyLCA1LjU0NzE3MCkiIGZpbGw9IiMzODRENUIiIGRhdGEtdi03OGMyN2E5YT0iIj48cGF0aCBkPSJNMS41Nzk2MjI2NCw3LjA5NzczNTg1IEMxLjU3OTYyMjY0LDYuNzY0OTA1NjYgMS40MDI2NDE1MSw2LjYwOTA1NjYgMS4wOTA5NDM0LDYuNjA5MDU2NiBMMC4xNzk2MjI2NDIsNi42MDkwNTY2IEwwLjE3OTYyMjY0Miw0Ljc2NTI4MzAyIEwyLjI0NzkyNDUzLDQuNzY1MjgzMDIgQzMuMjA0MTUwOTQsNC43NjUyODMwMiAzLjY3MTY5ODExLDUuMTg3OTI0NTMgMy42NzE2OTgxMSw2LjAwOTQzMzk2IEwzLjY3MTY5ODExLDYuNDMyMDc1NDcgQzMuNjcxNjk4MTEsNi43ODg2NzkyNSAzLjYyNjc5MjQ1LDcuMDc2NjAzNzcgMy42MjY3OTI0NSw3LjA3NjYwMzc3IEwzLjY3MTY5ODExLDcuMDc2NjAzNzcgQzQuMTE1NDcxNyw2LjA5OTI0NTI4IDUuNDQ5NDMzOTYsNC40OTg0OTA1NyA3Ljg5NTQ3MTcsNC40OTg0OTA1NyBDMTAuNTYzMzk2Miw0LjQ5ODQ5MDU3IDExLjc2MjY0MTUsNS45NDMzOTYyMyAxMS43NjI2NDE1LDguODA5NDMzOTYgTDExLjc2MjY0MTUsMTMuNjc3NzM1OCBDMTEuNzYyNjQxNSwxNC4wMTA1NjYgMTEuOTM5NjIyNiwxNC4xNjY0MTUxIDEyLjI1MTMyMDgsMTQuMTY2NDE1MSBMMTMuMTYyNjQxNSwxNC4xNjY0MTUxIEwxMy4xNjI2NDE1LDE2LjAxMDE4ODcgTDExLjAyODMwMTksMTYuMDEwMTg4NyBDMTAuMDI3MTY5OCwxNi4wMTAxODg3IDkuNjA0NTI4MywxNS41ODc1NDcyIDkuNjA0NTI4MywxNC41ODY0MTUxIEw5LjYwNDUyODMsOS4yOTgxMTMyMSBDOS42MDQ1MjgzLDcuNzE4NDkwNTcgOS4yOTI4MzAxOSw2LjQ3NDMzOTYyIDcuNDkzOTYyMjYsNi40NzQzMzk2MiBDNS43NjExMzIwOCw2LjQ3NDMzOTYyIDQuMzgyMjY0MTUsNy42MDc1NDcxNyAzLjkzODQ5MDU3LDkuMjMyMDc1NDcgQzMuNzgyNjQxNTEsOS42NzU4NDkwNiAzLjczNzczNTg1LDEwLjE4ODMwMTkgMy43Mzc3MzU4NSwxMC43NDMwMTg5IEwzLjczNzczNTg1LDE2LjAxMDE4ODcgTDEuNTgyMjY0MTUsMTYuMDEwMTg4NyBMMS41ODIyNjQxNSw3LjA5NzczNTg1IEwxLjU3OTYyMjY0LDcuMDk3NzM1ODUgWiIgaWQ9IlBhdGgiIGRhdGEtdi03OGMyN2E5YT0iIiBmaWxsPSIjMzg0RDVCIj48L3BhdGg+IDxwYXRoIGQ9Ik0xNy42NjkwNTY2LDcuNDk2NjAzNzcgTDE3LjY2OTA1NjYsNy40NTE2OTgxMSBDMTcuNjY5MDU2Niw3LjQ1MTY5ODExIDE1LjczNTQ3MTcsNi40Mjk0MzM5NiAxNS43MzU0NzE3LDQuMjUwMTg4NjggQzE1LjczNTQ3MTcsMi4wNzA5NDM0IDE3LjQ2ODMwMTksMC4wNTAxODg2NzkyIDIwLjYyNDkwNTcsMC4wNTAxODg2NzkyIEMyMy42MjU2NjA0LDAuMDUwMTg4Njc5MiAyNS41MzgxMTMyLDEuODUxNjk4MTEgMjUuNTM4MTEzMiw0LjI5NTA5NDM0IEMyNS41MzgxMTMyLDYuNjA2NDE1MDkgMjMuNjQ5NDM0LDguMDMwMTg4NjggMjMuNjQ5NDM0LDguMDMwMTg4NjggTDIzLjY0OTQzNCw4LjA3NTA5NDM0IEMyNS4wNzMyMDc1LDguODk2NjAzNzcgMjUuOTg0NTI4Myw5Ljk4NzU0NzE3IDI1Ljk4NDUyODMsMTEuNjc1NDcxNyBDMjUuOTg0NTI4MywxNC4xMjE1MDk0IDIzLjc2MzAxODksMTYuMjc2OTgxMSAyMC41NjE1MDk0LDE2LjI3Njk4MTEgQzE3LjYwNTY2MDQsMTYuMjc2OTgxMSAxNS4wOTM1ODI5LDE0LjQzMzIwNzUgMTUuMDkzNTgyOSwxMS41MTk2MjI2IEMxNS4wOTA5NDM0LDguOTQxNTA5NDMgMTcuNjY5MDU2Niw3LjQ5NjYwMzc3IDE3LjY2OTA1NjYsNy40OTY2MDM3NyBaIE0yMC41NTg4Njc5LDE0LjI1MzU4NDkgQzIyLjIwNDUyODMsMTQuMjUzNTg0OSAyMy43MzY2MDM4LDEzLjE2NTI4MyAyMy43MzY2MDM4LDExLjYwOTQzNCBDMjMuNzM2NjAzOCwxMC4yMzA1NjYgMjIuNTU4NDkwNiw5LjYzMDk0MzQgMjEuMDkyNDUyOCw5LjAzMTMyMDc1IEMyMC40OTI4MzAyLDguNzg1NjYwMzggMTkuNjQ3NTQ3Miw4LjQ1MjgzMDE5IDE5LjQ3MDU2Niw4LjQ1MjgzMDE5IEMxOC45MTU4NDkxLDguNDUyODMwMTkgMTcuMzM2MjI2NCw5Ljc0MTg4Njc5IDE3LjMzNjIyNjQsMTEuNDA4Njc5MiBDMTcuMzM2MjI2NCwxMy4xNjUyODMgMTguODQ3MTY5OCwxNC4yNTM1ODQ5IDIwLjU1ODg2NzksMTQuMjUzNTg0OSBaIE0yMS43MTU4NDkxLDcuMTQgQzIyLjI0OTQzNCw3LjE0IDIzLjM4MjY0MTUsNS44MjcxNjk4MSAyMy4zODI2NDE1LDQuNDI3MTY5ODEgQzIzLjM4MjY0MTUsMi45ODIyNjQxNSAyMi4yMjU2NjA0LDIuMDcwOTQzNCAyMC42Mjc1NDcyLDIuMDcwOTQzNCBDMTguOTE1ODQ5MSwyLjA3MDk0MzQgMTcuOTE0NzE3LDMuMDQ4MzAxODkgMTcuOTE0NzE3LDQuMjkyNDUyODMgQzE3LjkxNDcxNyw1LjY3MTMyMDc1IDE5LjA5MjgzMDIsNi4yMDQ5MDU2NiAyMC40OTI4MzAyLDYuNzU5NjIyNjQgQzIwLjgwNDUyODMsNi44OTY5ODExMyAyMS40NDkwNTY2LDcuMTQgMjEuNzE1ODQ5MSw3LjE0IFoiIGlkPSJTaGFwZSIgZGF0YS12LTc4YzI3YTlhPSIiIGZpbGw9IiMzODRENUIiPjwvcGF0aD4gPHBhdGggZD0iTTI5LjQwNTI4Myw3LjA5NzczNTg1IEMyOS40MDUyODMsNi43NjQ5MDU2NiAyOS4yMjgzMDE5LDYuNjA5MDU2NiAyOC45MTY2MDM4LDYuNjA5MDU2NiBMMjguMDA1MjgzLDYuNjA5MDU2NiBMMjguMDA1MjgzLDQuNzY1MjgzMDIgTDMwLjA3MzU4NDksNC43NjUyODMwMiBDMzEuMDI5ODExMyw0Ljc2NTI4MzAyIDMxLjQ5NzM1ODUsNS4xODc5MjQ1MyAzMS40OTczNTg1LDYuMDA5NDMzOTYgTDMxLjQ5NzM1ODUsNi40MzIwNzU0NyBDMzEuNDk3MzU4NSw2Ljc4ODY3OTI1IDMxLjQ1MjQ1MjgsNy4wNzY2MDM3NyAzMS40NTI0NTI4LDcuMDc2NjAzNzcgTDMxLjQ5NzM1ODUsNy4wNzY2MDM3NyBDMzEuOTQxMTMyMSw2LjA5OTI0NTI4IDMzLjI3NTA5NDMsNC40OTg0OTA1NyAzNS43MjExMzIxLDQuNDk4NDkwNTcgQzM4LjM4OTA1NjYsNC40OTg0OTA1NyAzOS41ODgzMDE5LDUuOTQzMzk2MjMgMzkuNTg4MzAxOSw4LjgwOTQzMzk2IEwzOS41ODgzMDE5LDEzLjY3NzczNTggQzM5LjU4ODMwMTksMTQuMDEwNTY2IDM5Ljc2NTI4MywxNC4xNjY0MTUxIDQwLjA3Njk4MTEsMTQuMTY2NDE1MSBMNDAuOTg4MzAxOSwxNC4xNjY0MTUxIEw0MC45ODgzMDE5LDE2LjAxMDE4ODcgTDM4Ljg1Mzk2MjMsMTYuMDEwMTg4NyBDMzcuODUyODMwMiwxNi4wMTAxODg3IDM3LjQzMDE4ODcsMTUuNTg3NTQ3MiAzNy40MzAxODg3LDE0LjU4NjQxNTEgTDM3LjQzMDE4ODcsOS4yOTgxMTMyMSBDMzcuNDMwMTg4Nyw3LjcxODQ5MDU3IDM3LjExODQ5MDYsNi40NzQzMzk2MiAzNS4zMTk2MjI2LDYuNDc0MzM5NjIgQzMzLjU4Njc5MjUsNi40NzQzMzk2MiAzMi4yMDc5MjQ1LDcuNjA3NTQ3MTcgMzEuNzY0MTUwOSw5LjIzMjA3NTQ3IEMzMS42MDgzMDE5LDkuNjc1ODQ5MDYgMzEuNTYzMzk2MiwxMC4xODgzMDE5IDMxLjU2MzM5NjIsMTAuNzQzMDE4OSBMMzEuNTYzMzk2MiwxNi4wMTAxODg3IEwyOS40MDc5MjQ1LDE2LjAxMDE4ODcgTDI5LjQwNzkyNDUsNy4wOTc3MzU4NSBMMjkuNDA1MjgzLDcuMDk3NzM1ODUgWiIgaWQ9IlBhdGgiIGRhdGEtdi03OGMyN2E5YT0iIiBmaWxsPSIjMzg0RDVCIj48L3BhdGg+IDxwb2x5Z29uIGlkPSJQYXRoIiBwb2ludHM9IjQzLjU0IDEzLjcyIDQ1Ljc0MDM3NzQgMTMuNzIgNDUuNzQwMzc3NCAxNi4wMTAxODg3IDQzLjU0IDE2LjAxMDE4ODciIGRhdGEtdi03OGMyN2E5YT0iIiBmaWxsPSIjMzg0RDVCIj48L3BvbHlnb24+IDxwYXRoIGQ9Ik00OC43MTczNTg1LDcuMDk3NzM1ODUgQzQ4LjcxNzM1ODUsNi43NjQ5MDU2NiA0OC41NDAzNzc0LDYuNjA5MDU2NiA0OC4yMjg2NzkyLDYuNjA5MDU2NiBMNDcuMzE3MzU4NSw2LjYwOTA1NjYgTDQ3LjMxNzM1ODUsNC43NjUyODMwMiBMNDkuNDI3OTI0NSw0Ljc2NTI4MzAyIEM1MC40MjkwNTY2LDQuNzY1MjgzMDIgNTAuODUxNjk4MSw1LjE4NzkyNDUzIDUwLjg1MTY5ODEsNi4xODkwNTY2IEw1MC44NTE2OTgxLDEzLjY4MDM3NzQgQzUwLjg1MTY5ODEsMTQuMDEzMjA3NSA1MS4wMjg2NzkyLDE0LjE2OTA1NjYgNTEuMzQwMzc3NCwxNC4xNjkwNTY2IEw1Mi4yNTE2OTgxLDE0LjE2OTA1NjYgTDUyLjI1MTY5ODEsMTYuMDEyODMwMiBMNTAuMTQxMTMyMSwxNi4wMTI4MzAyIEM0OS4xNCwxNi4wMTI4MzAyIDQ4LjcxNzM1ODUsMTUuNTkwMTg4NyA0OC43MTczNTg1LDE0LjU4OTA1NjYgTDQ4LjcxNzM1ODUsNy4wOTc3MzU4NSBaIiBpZD0iUGF0aCIgZGF0YS12LTc4YzI3YTlhPSIiIGZpbGw9IiMzODRENUIiPjwvcGF0aD4gPHBhdGggZD0iTTYwLjIzMTY5ODEsNC40OTU4NDkwNiBDNjMuNTg5MDU2Niw0LjQ5NTg0OTA2IDY2LjI5OTI0NTMsNi45NjMwMTg4NyA2Ni4yOTkyNDUzLDEwLjM2NTI4MyBDNjYuMjk5MjQ1MywxMy43ODg2NzkyIDYzLjU4NjQxNTEsMTYuMjc2OTgxMSA2MC4yMzE2OTgxLDE2LjI3Njk4MTEgQzU2Ljg3NDMzOTYsMTYuMjc2OTgxMSA1NC4xODUyODMsMTMuNzg2MDM3NyA1NC4xODUyODMsMTAuMzY1MjgzIEM1NC4xODUyODMsNi45NjMwMTg4NyA1Ni44NzQzMzk2LDQuNDk1ODQ5MDYgNjAuMjMxNjk4MSw0LjQ5NTg0OTA2IFogTTYwLjIzMTY5ODEsMTQuNDA5NDM0IEM2Mi4zNjYwMzc3LDE0LjQwOTQzNCA2NC4wOTg4Njc5LDEyLjcxODg2NzkgNjQuMDk4ODY3OSwxMC4zNjI2NDE1IEM2NC4wOTg4Njc5LDguMDI3NTQ3MTcgNjIuMzY2MDM3Nyw2LjM2MDc1NDcyIDYwLjIzMTY5ODEsNi4zNjA3NTQ3MiBDNTguMTIxMTMyMSw2LjM2MDc1NDcyIDU2LjM4NTY2MDQsOC4wMjc1NDcxNyA1Ni4zODU2NjA0LDEwLjM2MjY0MTUgQzU2LjM4NTY2MDQsMTIuNzIxNTA5NCA1OC4xMTg0OTA2LDE0LjQwOTQzNCA2MC4yMzE2OTgxLDE0LjQwOTQzNCBaIiBpZD0iU2hhcGUiIGRhdGEtdi03OGMyN2E5YT0iIiBmaWxsPSIjMzg0RDVCIj48L3BhdGg+PC9nPiA8cGF0aCBkPSJNMTA2LjIzMDk0Myw5LjYzODg2NzkyIEMxMDUuMTI0MTUxLDkuNjM4ODY3OTIgMTA0LjIyMzM5Niw4LjczODExMzIxIDEwNC4yMjMzOTYsNy42MzEzMjA3NSBDMTA0LjIyMzM5Niw2LjUyNDUyODMgMTA1LjEyNDE1MSw1LjYyMzc3MzU4IDEwNi4yMzA5NDMsNS42MjM3NzM1OCBDMTA3LjMzNzczNiw1LjYyMzc3MzU4IDEwOC4yMzg0OTEsNi41MjQ1MjgzIDEwOC4yMzg0OTEsNy42MzEzMjA3NSBDMTA4LjIzODQ5MSw4LjczODExMzIxIDEwNy4zMzc3MzYsOS42Mzg4Njc5MiAxMDYuMjMwOTQzLDkuNjM4ODY3OTIgWiBNMTA2LjIzMDk0Myw2LjU4NzkyNDUzIEMxMDUuNjU3NzM2LDYuNTg3OTI0NTMgMTA1LjE5MDE4OSw3LjA1NTQ3MTcgMTA1LjE5MDE4OSw3LjYyODY3OTI1IEMxMDUuMTkwMTg5LDguMjAxODg2NzkgMTA1LjY1NzczNiw4LjY2OTQzMzk2IDEwNi4yMzA5NDMsOC42Njk0MzM5NiBDMTA2LjgwNDE1MSw4LjY2OTQzMzk2IDEwNy4yNzE2OTgsOC4yMDE4ODY3OSAxMDcuMjcxNjk4LDcuNjI4Njc5MjUgQzEwNy4yNzE2OTgsNy4wNTU0NzE3IDEwNi44MDQxNTEsNi41ODc5MjQ1MyAxMDYuMjMwOTQzLDYuNTg3OTI0NTMgWiIgaWQ9IlNoYXBlIiBmaWxsPSIjRkY2RDVBIiBkYXRhLXYtNzhjMjdhOWE9IiI+PC9wYXRoPjwvZz48L2c+PC9nPjwvc3ZnPg==); + width: 140px; + height: 40px; +} + +.swagger-ui .btn.authorize { + border-color: #ff6d5a; + color: #3b4151; +} + +.swagger-ui .btn.authorize svg { + fill: #7d8492 +} + +.swagger-ui select { + border-color: #ff6d5a; +} diff --git a/packages/cli/src/PublicApi/v1/openapi.yml b/packages/cli/src/PublicApi/v1/openapi.yml index f71156f0df..d5053600ae 100644 --- a/packages/cli/src/PublicApi/v1/openapi.yml +++ b/packages/cli/src/PublicApi/v1/openapi.yml @@ -1,7 +1,7 @@ --- openapi: 3.0.0 info: - title: Public n8n API + title: n8n Public API description: n8n Public API termsOfService: https://n8n.io/legal/terms contact: @@ -9,26 +9,22 @@ info: license: name: Sustainable Use License url: https://github.com/n8n-io/n8n/blob/master/packages/cli/LICENSE.md - version: 1.0.0 + version: v1 externalDocs: description: n8n API documentation url: https://docs.n8n.io/api/ servers: - # Added by API Auto Mocking Plugin - url: /api/v1 tags: -- name: users +- name: User description: Operations about user - externalDocs: - description: Find out more about our store - url: http://swagger.io paths: /users: get: x-eov-operation-id: getUsers x-eov-operation-handler: v1/handlers/Users tags: - - users + - User summary: Retrieve all users description: Retrieve all users from your instance. Only available for the instance owner. parameters: @@ -74,7 +70,7 @@ paths: x-eov-operation-id: createUsers x-eov-operation-handler: v1/handlers/Users tags: - - users + - User summary: Invite a user description: Invites a user to your instance. Only available for the instance owner. operationId: createUser @@ -107,7 +103,7 @@ paths: x-eov-operation-id: getUser x-eov-operation-handler: v1/handlers/Users tags: - - users + - User summary: Get user by ID/Email description: Retrieve a user from your instance. Only available for the instance owner. operationId: getUser @@ -142,7 +138,7 @@ paths: x-eov-operation-id: deleteUser x-eov-operation-handler: v1/handlers/Users tags: - - users + - User summary: Delete user by ID/Email description: Deletes a user from your instance. Only available for the instance owner. operationId: deleteUser