mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-14 00:19:16 +01:00
feat: add SSE endpoint for events
This commit is contained in:
parent
8906bf99ff
commit
71cfee4e89
@ -22,6 +22,7 @@ import noAuthentication from './middleware/no-authentication';
|
|||||||
import secureHeaders from './middleware/secure-headers';
|
import secureHeaders from './middleware/secure-headers';
|
||||||
|
|
||||||
import { loadIndexHTML } from './util/load-index-html';
|
import { loadIndexHTML } from './util/load-index-html';
|
||||||
|
import { clientEvents } from './types/events';
|
||||||
|
|
||||||
export default async function getApp(
|
export default async function getApp(
|
||||||
config: IUnleashConfig,
|
config: IUnleashConfig,
|
||||||
@ -136,6 +137,22 @@ export default async function getApp(
|
|||||||
res.send(indexHTML);
|
res.send(indexHTML);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (config.enableEventStream) {
|
||||||
|
console.log('Enabled, configuring events');
|
||||||
|
app.get(`${baseUriPath}/api/client/events`, (req, res) => {
|
||||||
|
res.set({
|
||||||
|
'Content-Type': 'text/event-stream',
|
||||||
|
'Cache-Control': 'no-cache',
|
||||||
|
Connection: 'keep-alive',
|
||||||
|
});
|
||||||
|
clientEvents.forEach((e) => {
|
||||||
|
stores.eventStore.on(e, (data) => {
|
||||||
|
res.write(`event: message\n`);
|
||||||
|
res.write(`data: ${JSON.stringify(data)}\n\n`);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
app.get(`${baseUriPath}/*`, (req, res) => {
|
app.get(`${baseUriPath}/*`, (req, res) => {
|
||||||
if (req.path.startsWith(`${baseUriPath}/api`)) {
|
if (req.path.startsWith(`${baseUriPath}/api`)) {
|
||||||
res.status(404).send({ message: '404 - Not found' });
|
res.status(404).send({ message: '404 - Not found' });
|
||||||
@ -144,5 +161,6 @@ export default async function getApp(
|
|||||||
|
|
||||||
res.send(indexHTML);
|
res.send(indexHTML);
|
||||||
});
|
});
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
@ -311,6 +311,7 @@ export function createConfig(options: IUnleashOptions): IUnleashConfig {
|
|||||||
eventHook: options.eventHook,
|
eventHook: options.eventHook,
|
||||||
enterpriseVersion: options.enterpriseVersion,
|
enterpriseVersion: options.enterpriseVersion,
|
||||||
eventBus: new EventEmitter(),
|
eventBus: new EventEmitter(),
|
||||||
|
enableEventStream: safeBoolean(process.env.ENABLE_EVENT_STREAM, false),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,6 +63,28 @@ export const ENVIRONMENT_IMPORT = 'environment-import';
|
|||||||
|
|
||||||
export const CLIENT_METRICS = 'client-metrics';
|
export const CLIENT_METRICS = 'client-metrics';
|
||||||
|
|
||||||
|
export const clientEvents = [
|
||||||
|
FEATURE_UPDATED,
|
||||||
|
FEATURE_ARCHIVED,
|
||||||
|
FEATURE_CREATED,
|
||||||
|
FEATURE_DELETED,
|
||||||
|
FEATURE_ENVIRONMENT_ENABLED,
|
||||||
|
FEATURE_ENVIRONMENT_DISABLED,
|
||||||
|
FEATURE_METADATA_UPDATED,
|
||||||
|
FEATURE_PROJECT_CHANGE,
|
||||||
|
FEATURE_REVIVED,
|
||||||
|
FEATURE_STALE_OFF,
|
||||||
|
FEATURE_STALE_ON,
|
||||||
|
STRATEGY_CREATED,
|
||||||
|
STRATEGY_DELETED,
|
||||||
|
STRATEGY_UPDATED,
|
||||||
|
STRATEGY_DEPRECATED,
|
||||||
|
STRATEGY_REACTIVATED,
|
||||||
|
FEATURE_STRATEGY_ADD,
|
||||||
|
FEATURE_STRATEGY_REMOVE,
|
||||||
|
FEATURE_STRATEGY_UPDATE,
|
||||||
|
];
|
||||||
|
|
||||||
export interface IBaseEvent {
|
export interface IBaseEvent {
|
||||||
type: string;
|
type: string;
|
||||||
createdBy: string;
|
createdBy: string;
|
||||||
|
@ -158,4 +158,5 @@ export interface IUnleashConfig {
|
|||||||
enterpriseVersion?: string;
|
enterpriseVersion?: string;
|
||||||
eventBus: EventEmitter;
|
eventBus: EventEmitter;
|
||||||
disableLegacyFeaturesApi?: boolean;
|
disableLegacyFeaturesApi?: boolean;
|
||||||
|
enableEventStream?: boolean;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user