41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
const FEATURE_FLAGS_CHANGED_EVENT = "feature-flags-changed";
|
|
|
|
/**
|
|
* Creates the Socket.IO payload used to tell browsers that feature flags changed.
|
|
*/
|
|
const createFeatureFlagsChangedPayload = ({ bodyshopId = null, source = "unknown", table = null, name = null } = {}) => ({
|
|
bodyshopId,
|
|
changedAt: new Date().toISOString(),
|
|
name,
|
|
scope: bodyshopId ? "bodyshop" : "global",
|
|
source,
|
|
table
|
|
});
|
|
|
|
/**
|
|
* Emits a feature-flag change event globally or to one bodyshop room.
|
|
*/
|
|
const emitFeatureFlagsChanged = ({ req, bodyshopId = null, source = "unknown", table = null, name = null } = {}) => {
|
|
const io = req?.ioRedis;
|
|
if (!io) return null;
|
|
|
|
const payload = createFeatureFlagsChangedPayload({ bodyshopId, source, table, name });
|
|
|
|
if (bodyshopId) {
|
|
const room = req?.ioHelpers?.getBodyshopRoom
|
|
? req.ioHelpers.getBodyshopRoom(bodyshopId)
|
|
: `bodyshop-broadcast-room:${bodyshopId}`;
|
|
io.to(room).emit(FEATURE_FLAGS_CHANGED_EVENT, payload);
|
|
return payload;
|
|
}
|
|
|
|
io.emit(FEATURE_FLAGS_CHANGED_EVENT, payload);
|
|
return payload;
|
|
};
|
|
|
|
module.exports = {
|
|
FEATURE_FLAGS_CHANGED_EVENT,
|
|
createFeatureFlagsChangedPayload,
|
|
emitFeatureFlagsChanged
|
|
};
|