Skip to content
27 changes: 21 additions & 6 deletions server/lib/notifications/agents/ntfy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ class NtfyAgent
return settings.notifications.agents.ntfy;
}

private escapeMarkdown(text: string): string {
return text.replace(/([\\`*_{}\[\]()#+\-.!|>~<])/g, '\\$1');
}

private buildPayload(type: Notification, payload: NotificationPayload) {
const settings = getSettings();
const { applicationUrl } = settings.main;
Expand All @@ -35,7 +39,10 @@ class NtfyAgent
let message = payload.message ?? '';

if (payload.request) {
message += `\n\nRequested By: ${payload.request.requestedBy.displayName}`;
if (message) {
message = `**- Description:**\n${message}`;
}
message += `${message ? '\n\n' : ''}**- Requested By:** ${this.escapeMarkdown(payload.request.requestedBy.displayName)}`;

let status = '';
switch (type) {
Expand All @@ -58,14 +65,21 @@ class NtfyAgent
}

if (status) {
message += `\nRequest Status: ${status}`;
message += `\n**- Request Status:** ${status}`;
}
} else if (payload.comment) {
message += `\nComment from ${payload.comment.user.displayName}:\n${payload.comment.message}`;
if (message) {
message = `**- Description:**\n${message}\n\n`;
}
message += `**- Comment:**\n${payload.comment.message}`;
message += `\n\n**- Comment from:** ${this.escapeMarkdown(payload.comment.user.displayName)}`;
} else if (payload.issue) {
message += `\n\nReported By: ${payload.issue.createdBy.displayName}`;
message += `\nIssue Type: ${IssueTypeName[payload.issue.issueType]}`;
message += `\nIssue Status: ${
if (message) {
message = `**- Description:**\n${message}`;
}
message += `${message ? '\n\n' : ''}**- Reported By:** ${this.escapeMarkdown(payload.issue.createdBy.displayName)}`;
message += `\n**- Issue Type:** ${IssueTypeName[payload.issue.issueType]}`;
message += `\n**- Issue Status:** ${
payload.issue.status === IssueStatus.OPEN ? 'Open' : 'Resolved'
}`;
}
Expand All @@ -86,6 +100,7 @@ class NtfyAgent
priority,
title,
message,
markdown: true,
attach,
click,
};
Expand Down
Loading