Files
bodyshop/server/feature-flags/socket-events.js

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
};