diff --git a/lib/routes/client-api/client-api.json b/lib/routes/client-api/client-api.json new file mode 100644 index 0000000000..6fed395db3 --- /dev/null +++ b/lib/routes/client-api/client-api.json @@ -0,0 +1,14 @@ +{ + "version": 2, + "links": { + "feature-toggles": { + "uri": "/api/client/features" + }, + "register": { + "uri": "/api/client/register" + }, + "metrics": { + "uri": "/api/client/metrics" + } + } +} diff --git a/lib/routes/client-api/feature.js b/lib/routes/client-api/feature.js index f545b54f98..f38632b36e 100644 --- a/lib/routes/client-api/feature.js +++ b/lib/routes/client-api/feature.js @@ -1,14 +1,10 @@ 'use strict'; const { Router } = require('express'); +const { filter } = require('./util'); const version = 1; -const filter = (key, value) => { - if (!key || !value) return array => array; - return array => array.filter(item => item[key].startsWith(value)); -}; - class FeatureController { constructor(config) { const router = Router(); diff --git a/lib/routes/client-api/index.js b/lib/routes/client-api/index.js index b9f8e6a6e5..644c12b7d2 100644 --- a/lib/routes/client-api/index.js +++ b/lib/routes/client-api/index.js @@ -4,27 +4,28 @@ const { Router } = require('express'); const FeatureController = require('./feature.js'); const metrics = require('./metrics.js'); const register = require('./register.js'); +const clientApi = require('./client-api.json'); -const apiDef = { - version: 2, - links: { - 'feature-toggles': { uri: '/api/client/features' }, - register: { uri: '/api/client/register' }, - metrics: { uri: '/api/client/metrics' }, - }, -}; +class ClientApi { + constructor(config) { + const router = Router(); + this._router = router; -exports.apiDef = apiDef; + router.get('/', this.index); + router.use('/features', new FeatureController(config).router()); + router.use('/metrics', metrics.router(config)); + router.use('/register', register.router(config)); + } -exports.router = config => { - const router = Router(); - router.get('/', (req, res) => { - res.json(apiDef); - }); + index(req, res) { + res.json(clientApi); + } - router.use('/features', new FeatureController(config).router()); - router.use('/metrics', metrics.router(config)); - router.use('/register', register.router(config)); + router() { + return this._router; + } +} - return router; -}; +ClientApi.api = clientApi; + +module.exports = ClientApi; diff --git a/lib/routes/client-api/util.js b/lib/routes/client-api/util.js new file mode 100644 index 0000000000..3fbe38a9d1 --- /dev/null +++ b/lib/routes/client-api/util.js @@ -0,0 +1,10 @@ +'use strict'; + +const filter = (key, value) => { + if (!key || !value) return array => array; + return array => array.filter(item => item[key].startsWith(value)); +}; + +module.exports = { + filter, +}; diff --git a/lib/routes/index.js b/lib/routes/index.js index f516eecec2..5ca5981988 100644 --- a/lib/routes/index.js +++ b/lib/routes/index.js @@ -7,7 +7,7 @@ require('pkginfo')(module, 'version'); const version = module.exports.version; const adminApi = require('./admin-api'); -const clientApi = require('./client-api'); +const ClientApi = require('./client-api'); const FeatureController = require('./client-api/feature.js'); const HealthCheckController = require('./health-check'); @@ -25,7 +25,7 @@ class IndexRouter { ); router.get('/api', (req, res) => this.api(req, res)); router.use('/api/admin', adminApi.router(config)); - router.use('/api/client', clientApi.router(config)); + router.use('/api/client', new ClientApi(config).router()); // legacy support (remove in 4.x) if (config.enableLegacyRoutes) { @@ -44,7 +44,7 @@ class IndexRouter { }, client: { uri: '/api/client', - links: clientApi.apiDef.links, + links: ClientApi.api.links, }, }, });