unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
75 lines • 3.14 kB
JavaScript
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