UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature toggles service. It provides different strategies for handling feature toggles.

119 lines 4.7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const controller_1 = __importDefault(require("../controller")); const types_1 = require("../../types"); const openapi_1 = require("../../openapi"); const proxy_1 = require("../../proxy"); const middleware_1 = require("../../middleware"); class ProxyController extends controller_1.default { constructor(config, services, flagResolver) { super(config); this.logger = config.getLogger('proxy-api/index.ts'); this.services = services; this.flagResolver = flagResolver; // Support CORS requests for the frontend endpoints. // Preflight requests are handled in `app.ts`. this.app.use((0, middleware_1.corsOriginMiddleware)(services, config)); this.route({ method: 'get', path: '', handler: this.getProxyFeatures, permission: types_1.NONE, middleware: [ this.services.openApiService.validPath({ tags: ['Unstable'], operationId: 'getFrontendFeatures', responses: { 200: (0, openapi_1.createResponseSchema)('proxyFeaturesSchema'), }, }), ], }); this.route({ method: 'post', path: '', handler: ProxyController.endpointNotImplemented, permission: types_1.NONE, }); this.route({ method: 'get', path: '/client/features', handler: ProxyController.endpointNotImplemented, permission: types_1.NONE, }); this.route({ method: 'post', path: '/client/metrics', handler: this.registerProxyMetrics, permission: types_1.NONE, middleware: [ this.services.openApiService.validPath({ tags: ['Unstable'], operationId: 'registerFrontendMetrics', requestBody: (0, openapi_1.createRequestSchema)('proxyMetricsSchema'), responses: { 200: openapi_1.emptyResponse }, }), ], }); this.route({ method: 'post', path: '/client/register', handler: ProxyController.registerProxyClient, permission: types_1.NONE, middleware: [ this.services.openApiService.validPath({ tags: ['Unstable'], operationId: 'registerFrontendClient', requestBody: (0, openapi_1.createRequestSchema)('proxyClientSchema'), responses: { 200: openapi_1.emptyResponse }, }), ], }); this.route({ method: 'get', path: '/health', handler: ProxyController.endpointNotImplemented, permission: types_1.NONE, }); this.route({ method: 'get', path: '/internal-backstage/prometheus', handler: ProxyController.endpointNotImplemented, permission: types_1.NONE, }); } static async endpointNotImplemented(req, res) { res.status(405).json({ message: 'The frontend API does not support this endpoint.', }); } async getProxyFeatures(req, res) { let toggles; if (this.flagResolver.isEnabled('proxyReturnAllToggles')) { toggles = await this.services.proxyService.getAllProxyFeatures(req.user, ProxyController.createContext(req)); } else { toggles = await this.services.proxyService.getProxyFeatures(req.user, ProxyController.createContext(req)); } res.set('Cache-control', 'public, max-age=2'); this.services.openApiService.respondWithValidation(200, res, openapi_1.proxyFeaturesSchema.$id, { toggles }); } async registerProxyMetrics(req, res) { await this.services.proxyService.registerProxyMetrics(req.user, req.body, req.ip); res.sendStatus(200); } static async registerProxyClient(req, res) { // Client registration is not yet supported by @unleash/proxy, // but proxy clients may still expect a 200 from this endpoint. res.sendStatus(200); } static createContext(req) { const { query } = req; return (0, proxy_1.enrichContextWithIp)(query, req.ip); } } exports.default = ProxyController; //# sourceMappingURL=index.js.map