UNPKG

unleash-server

Version:

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

75 lines 3.14 kB
import { NONE } from '../../types/permissions.js'; import { createResponseSchema } from '../../openapi/util/create-response-schema.js'; import { serializeDates } from '../../../lib/types/serialize-dates.js'; import { eventSearchQueryParameters, } from '../../openapi/spec/event-search-query-parameters.js'; import { eventSearchResponseSchema, } from '../../openapi/index.js'; import { normalizeQueryParams } from '../feature-search/search-utils.js'; import Controller from '../../routes/controller.js'; import { anonymiseKeys, extractUserIdFromUser } from '../../util/index.js'; import { FeatureEventFormatterMd, } from '../../addons/feature-event-formatter-md.js'; const ANON_KEYS = ['email', 'username', 'createdBy']; const _version = 1; export default class EventSearchController extends Controller { constructor(config, { eventService, openApiService, }) { super(config); this.eventService = eventService; this.flagResolver = config.flagResolver; this.openApiService = openApiService; this.msgFormatter = new FeatureEventFormatterMd({ unleashUrl: config.server.unleashUrl, formatStyle: 'markdown', }); this.route({ method: 'get', path: '', handler: this.searchEvents, permission: NONE, middleware: [ openApiService.validPath({ operationId: 'searchEvents', tags: ['Events'], summary: 'Search for events', description: 'Allows searching for events that match the query parameter criteria.', parameters: [...eventSearchQueryParameters], responses: { 200: createResponseSchema('eventSearchResponseSchema'), }, }), ], }); } async searchEvents(req, res) { const { user } = req; const { normalizedLimit, normalizedOffset } = normalizeQueryParams(req.query, { limitDefault: 50, maxLimit: 1000, }); const { events, totalEvents } = await this.eventService.searchEvents({ ...req.query, offset: normalizedOffset, limit: normalizedLimit, }, extractUserIdFromUser(user)); const enrichedEvents = this.enrichEvents(events); this.openApiService.respondWithValidation(200, res, eventSearchResponseSchema.$id, serializeDates({ events: serializeDates(this.maybeAnonymiseEvents(enrichedEvents)), total: totalEvents, })); } enrichEvents(events) { return events.map((event) => { const { label, text: summary } = this.msgFormatter.format(event); return { ...event, label, summary, }; }); } maybeAnonymiseEvents(events) { if (this.flagResolver.isEnabled('anonymiseEventLog')) { return anonymiseKeys(events, ANON_KEYS); } return events; } } //# sourceMappingURL=event-search-controller.js.map