Files
openchamber/packages/web/server/lib/notifications/message.js
T
Nelson Pires 2a3254495f refactor(notifications): move notification helpers into dedicated module boundary (#484)
* refactor(notifications): move message helper into domain module

* test(notifications): move helper tests to new module path

* refactor(notifications): add stable module entrypoint

* refactor(server): route notification imports through domain boundary

* docs(notifications): add module reference documentation

* docs: map notifications module in AGENTS
2026-02-23 00:05:13 +02:00

50 lines
1.8 KiB
JavaScript

const DEFAULT_NOTIFICATION_MESSAGE_MAX_LENGTH = 250;
const DEFAULT_NOTIFICATION_SUMMARY_THRESHOLD = 200;
const DEFAULT_NOTIFICATION_SUMMARY_LENGTH = 100;
const resolvePositiveNumber = (value, fallback) => {
if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {
return fallback;
}
return value;
};
export const truncateNotificationText = (text, maxLength = DEFAULT_NOTIFICATION_MESSAGE_MAX_LENGTH) => {
if (typeof text !== 'string') {
return '';
}
const safeMaxLength = resolvePositiveNumber(maxLength, DEFAULT_NOTIFICATION_MESSAGE_MAX_LENGTH);
if (text.length <= safeMaxLength) {
return text;
}
return `${text.slice(0, safeMaxLength)}...`;
};
export const prepareNotificationLastMessage = async ({ message, settings, summarize }) => {
const originalMessage = typeof message === 'string' ? message : '';
if (!originalMessage) {
return '';
}
const shouldSummarize = settings?.summarizeLastMessage === true && typeof summarize === 'function';
const summaryThreshold = resolvePositiveNumber(settings?.summaryThreshold, DEFAULT_NOTIFICATION_SUMMARY_THRESHOLD);
const summaryLength = resolvePositiveNumber(settings?.summaryLength, DEFAULT_NOTIFICATION_SUMMARY_LENGTH);
const maxLastMessageLength = resolvePositiveNumber(settings?.maxLastMessageLength, DEFAULT_NOTIFICATION_MESSAGE_MAX_LENGTH);
let messageForNotification = originalMessage;
if (shouldSummarize && originalMessage.length > summaryThreshold) {
try {
const summary = await summarize(originalMessage, summaryLength);
if (typeof summary === 'string' && summary.trim().length > 0) {
messageForNotification = summary;
}
} catch {
messageForNotification = originalMessage;
}
}
return truncateNotificationText(messageForNotification, maxLastMessageLength);
};