diff --git a/lib/routes/admin-api/api-def.json b/lib/routes/admin-api/api-def.json new file mode 100644 index 0000000000..9be80b824a --- /dev/null +++ b/lib/routes/admin-api/api-def.json @@ -0,0 +1,20 @@ +{ + "version": 2, + "links": { + "feature-toggles": { + "uri": "/api/admin/features" + }, + "feature-archive": { + "uri": "/api/admin/archive" + }, + "strategies": { + "uri": "/api/admin/strategies" + }, + "events": { + "uri": "/api/admin/events" + }, + "metrics": { + "uri": "/api/admin/metrics" + } + } +} diff --git a/lib/routes/admin-api/index.js b/lib/routes/admin-api/index.js index 75a495c53e..fb95844be8 100644 --- a/lib/routes/admin-api/index.js +++ b/lib/routes/admin-api/index.js @@ -8,31 +8,29 @@ const events = require('./event.js'); const strategies = require('./strategy'); const metrics = require('./metrics'); const user = require('./user'); +const apiDef = require('./api-def.json'); -const apiDef = { - version: 2, - links: { - 'feature-toggles': { uri: '/api/admin/features' }, - 'feature-archive': { uri: '/api/admin/archive' }, - strategies: { uri: '/api/admin/strategies' }, - events: { uri: '/api/admin/events' }, - metrics: { uri: '/api/admin/metrics' }, - }, -}; +class AdminApi { + constructor(config) { + const router = Router(); + this._router = router; -exports.apiDef = apiDef; + router.get('/', (req, res) => res.json(apiDef)); + router.use('/features', features.router(config)); + router.use('/archive', featureArchive.router(config)); + router.use('/strategies', strategies.router(config)); + router.use('/events', events.router(config)); + router.use('/metrics', metrics.router(config)); + router.use('/user', user.router(config)); + } -exports.router = config => { - const router = Router(); + index(req, res) { + res.json(apiDef); + } - router.get('/', (req, res) => res.json(apiDef)); + router() { + return this._router; + } +} - router.use('/features', features.router(config)); - router.use('/archive', featureArchive.router(config)); - router.use('/strategies', strategies.router(config)); - router.use('/events', events.router(config)); - router.use('/metrics', metrics.router(config)); - router.use('/user', user.router(config)); - - return router; -}; +module.exports = AdminApi; diff --git a/lib/routes/api-def.js b/lib/routes/api-def.js new file mode 100644 index 0000000000..6f138b02c2 --- /dev/null +++ b/lib/routes/api-def.js @@ -0,0 +1,25 @@ +'use strict'; + +// export module version +require('pkginfo')(module, 'version'); +const version = module.exports.version; +const clientApiDef = require('./client-api/api-def.json'); +const adminApiDef = require('./admin-api/api-def.json'); + +const apiDef = { + name: 'unleash-server', + version, + uri: '/api', + links: { + admin: { + uri: '/api/admin', + links: adminApiDef.links, + }, + client: { + uri: '/api/client', + links: clientApiDef.links, + }, + }, +}; + +module.exports = apiDef; diff --git a/lib/routes/client-api/client-api.json b/lib/routes/client-api/api-def.json similarity index 100% rename from lib/routes/client-api/client-api.json rename to lib/routes/client-api/api-def.json diff --git a/lib/routes/client-api/index.js b/lib/routes/client-api/index.js index 112aa1efe2..1b516cddc7 100644 --- a/lib/routes/client-api/index.js +++ b/lib/routes/client-api/index.js @@ -4,7 +4,7 @@ const { Router } = require('express'); const FeatureController = require('./feature.js'); const MetricsController = require('./metrics.js'); const RegisterController = require('./register.js'); -const clientApiSpec = require('./client-api.json'); +const apiDef = require('./api-def.json'); class ClientApi { constructor(config) { @@ -20,7 +20,7 @@ class ClientApi { } index(req, res) { - res.json(clientApiSpec); + res.json(apiDef); } router() { @@ -28,6 +28,4 @@ class ClientApi { } } -ClientApi.api = clientApiSpec; - module.exports = ClientApi; diff --git a/lib/routes/index.js b/lib/routes/index.js index f4a9079493..b00095e0af 100644 --- a/lib/routes/index.js +++ b/lib/routes/index.js @@ -1,17 +1,13 @@ 'use strict'; const { Router } = require('express'); -// export module version -require('pkginfo')(module, 'version'); - -const version = module.exports.version; - -const adminApi = require('./admin-api'); +const AdminApi = require('./admin-api'); const ClientApi = require('./client-api'); const FeatureController = require('./client-api/feature.js'); const HealthCheckController = require('./health-check'); -const BackstageController = require('./backstage.js'); +const BackstageCTR = require('./backstage.js'); +const api = require('./api-def'); class IndexRouter { constructor(config) { @@ -19,13 +15,10 @@ class IndexRouter { this._router = router; router.use('/health', new HealthCheckController(config).router()); - router.use( - '/internal-backstage', - new BackstageController(config).router() - ); - router.get('/api', (req, res) => this.api(req, res)); - router.use('/api/admin', adminApi.router(config)); - router.use('/api/client', new ClientApi(config).router()); + router.use('/internal-backstage', new BackstageCTR(config).router()); + router.get(api.uri, (req, res) => res.json(api)); + router.use(api.links.admin.uri, new AdminApi(config).router()); + router.use(api.links.client.uri, new ClientApi(config).router()); // legacy support (remove in 4.x) if (config.enableLegacyRoutes) { @@ -36,23 +29,6 @@ class IndexRouter { } } - api(req, res) { - res.json({ - name: 'unleash-server', - version, - links: { - admin: { - uri: '/api/admin', - links: adminApi.apiDef.links, - }, - client: { - uri: '/api/client', - links: ClientApi.api.links, - }, - }, - }); - } - router() { return this._router; }