UNPKG

matrix-react-sdk

Version:
90 lines (87 loc) 15.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toNotificationSettings = toNotificationSettings; var _matrix = require("matrix-js-sdk/src/matrix"); var _notifications = require("../../notifications"); var _RoomNotifs = require("../../RoomNotifs"); var _PushRuleMap = require("./PushRuleMap"); /* Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ function shouldNotify(rules) { if (rules.length === 0) { return true; } for (const rule of rules) { if (rule === null || rule === undefined || rule === false || !rule.enabled) { continue; } const actions = _notifications.NotificationUtils.decodeActions(rule.actions); if (actions !== null && actions.notify) { return true; } } return false; } function isMuted(rules) { if (rules.length === 0) { return false; } for (const rule of rules) { if (rule === null || rule === undefined || rule === false || !rule.enabled) { continue; } const actions = _notifications.NotificationUtils.decodeActions(rule.actions); if (actions !== null && !actions.notify && actions.highlight !== true && actions.sound === undefined) { return true; } } return false; } function determineSound(rules) { for (const rule of rules) { if (rule === null || rule === undefined || rule === false || !rule.enabled) { continue; } const actions = _notifications.NotificationUtils.decodeActions(rule.actions); if (actions !== null && actions.notify && actions.sound !== undefined) { return actions.sound; } } return undefined; } function toNotificationSettings(pushRules, supportsIntentionalMentions) { const standardRules = (0, _PushRuleMap.buildPushRuleMap)(pushRules); const contentRules = pushRules.global.content?.filter(rule => !rule.rule_id.startsWith(".")) ?? []; const dmRules = [standardRules.get(_matrix.RuleId.DM), standardRules.get(_matrix.RuleId.EncryptedDM)]; const roomRules = [standardRules.get(_matrix.RuleId.Message), standardRules.get(_matrix.RuleId.EncryptedMessage)]; return { globalMute: standardRules.get(_matrix.RuleId.Master)?.enabled ?? false, defaultLevels: { room: shouldNotify(roomRules) ? _RoomNotifs.RoomNotifState.AllMessages : _RoomNotifs.RoomNotifState.MentionsOnly, dm: shouldNotify(dmRules) ? _RoomNotifs.RoomNotifState.AllMessages : _RoomNotifs.RoomNotifState.MentionsOnly }, sound: { calls: determineSound([standardRules.get(_matrix.RuleId.IncomingCall)]), mentions: determineSound([supportsIntentionalMentions && standardRules.get(_matrix.RuleId.IsUserMention), standardRules.get(_matrix.RuleId.ContainsUserName), standardRules.get(_matrix.RuleId.ContainsDisplayName), ...contentRules]), people: determineSound(dmRules) }, activity: { bot_notices: !isMuted([standardRules.get(_matrix.RuleId.SuppressNotices)]), invite: shouldNotify([standardRules.get(_matrix.RuleId.InviteToSelf)]), status_event: shouldNotify([standardRules.get(_matrix.RuleId.MemberEvent), standardRules.get(_matrix.RuleId.Tombstone)]) }, mentions: { user: shouldNotify([supportsIntentionalMentions && standardRules.get(_matrix.RuleId.IsUserMention), standardRules.get(_matrix.RuleId.ContainsUserName), standardRules.get(_matrix.RuleId.ContainsDisplayName)]), room: shouldNotify([supportsIntentionalMentions && standardRules.get(_matrix.RuleId.IsRoomMention), standardRules.get(_matrix.RuleId.AtRoomNotification)]), keywords: shouldNotify(contentRules) }, keywords: contentRules.map(it => it.pattern) }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl9ub3RpZmljYXRpb25zIiwiX1Jvb21Ob3RpZnMiLCJfUHVzaFJ1bGVNYXAiLCJzaG91bGROb3RpZnkiLCJydWxlcyIsImxlbmd0aCIsInJ1bGUiLCJ1bmRlZmluZWQiLCJlbmFibGVkIiwiYWN0aW9ucyIsIk5vdGlmaWNhdGlvblV0aWxzIiwiZGVjb2RlQWN0aW9ucyIsIm5vdGlmeSIsImlzTXV0ZWQiLCJoaWdobGlnaHQiLCJzb3VuZCIsImRldGVybWluZVNvdW5kIiwidG9Ob3RpZmljYXRpb25TZXR0aW5ncyIsInB1c2hSdWxlcyIsInN1cHBvcnRzSW50ZW50aW9uYWxNZW50aW9ucyIsInN0YW5kYXJkUnVsZXMiLCJidWlsZFB1c2hSdWxlTWFwIiwiY29udGVudFJ1bGVzIiwiZ2xvYmFsIiwiY29udGVudCIsImZpbHRlciIsInJ1bGVfaWQiLCJzdGFydHNXaXRoIiwiZG1SdWxlcyIsImdldCIsIlJ1bGVJZCIsIkRNIiwiRW5jcnlwdGVkRE0iLCJyb29tUnVsZXMiLCJNZXNzYWdlIiwiRW5jcnlwdGVkTWVzc2FnZSIsImdsb2JhbE11dGUiLCJNYXN0ZXIiLCJkZWZhdWx0TGV2ZWxzIiwicm9vbSIsIlJvb21Ob3RpZlN0YXRlIiwiQWxsTWVzc2FnZXMiLCJNZW50aW9uc09ubHkiLCJkbSIsImNhbGxzIiwiSW5jb21pbmdDYWxsIiwibWVudGlvbnMiLCJJc1VzZXJNZW50aW9uIiwiQ29udGFpbnNVc2VyTmFtZSIsIkNvbnRhaW5zRGlzcGxheU5hbWUiLCJwZW9wbGUiLCJhY3Rpdml0eSIsImJvdF9ub3RpY2VzIiwiU3VwcHJlc3NOb3RpY2VzIiwiaW52aXRlIiwiSW52aXRlVG9TZWxmIiwic3RhdHVzX2V2ZW50IiwiTWVtYmVyRXZlbnQiLCJUb21ic3RvbmUiLCJ1c2VyIiwiSXNSb29tTWVudGlvbiIsIkF0Um9vbU5vdGlmaWNhdGlvbiIsImtleXdvcmRzIiwibWFwIiwiaXQiLCJwYXR0ZXJuIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVscy9ub3RpZmljYXRpb25zZXR0aW5ncy90b05vdGlmaWNhdGlvblNldHRpbmdzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIzIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IElQdXNoUnVsZSwgSVB1c2hSdWxlcywgUnVsZUlkIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgeyBOb3RpZmljYXRpb25VdGlscyB9IGZyb20gXCIuLi8uLi9ub3RpZmljYXRpb25zXCI7XG5pbXBvcnQgeyBSb29tTm90aWZTdGF0ZSB9IGZyb20gXCIuLi8uLi9Sb29tTm90aWZzXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXR0aW5ncyB9IGZyb20gXCIuL05vdGlmaWNhdGlvblNldHRpbmdzXCI7XG5pbXBvcnQgeyBidWlsZFB1c2hSdWxlTWFwIH0gZnJvbSBcIi4vUHVzaFJ1bGVNYXBcIjtcblxuZnVuY3Rpb24gc2hvdWxkTm90aWZ5KHJ1bGVzOiAoSVB1c2hSdWxlIHwgbnVsbCB8IHVuZGVmaW5lZCB8IGZhbHNlKVtdKTogYm9vbGVhbiB7XG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICAgIGlmIChydWxlID09PSBudWxsIHx8IHJ1bGUgPT09IHVuZGVmaW5lZCB8fCBydWxlID09PSBmYWxzZSB8fCAhcnVsZS5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3Rpb25zID0gTm90aWZpY2F0aW9uVXRpbHMuZGVjb2RlQWN0aW9ucyhydWxlLmFjdGlvbnMpO1xuICAgICAgICBpZiAoYWN0aW9ucyAhPT0gbnVsbCAmJiBhY3Rpb25zLm5vdGlmeSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc011dGVkKHJ1bGVzOiAoSVB1c2hSdWxlIHwgbnVsbCB8IHVuZGVmaW5lZCB8IGZhbHNlKVtdKTogYm9vbGVhbiB7XG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgICBpZiAocnVsZSA9PT0gbnVsbCB8fCBydWxlID09PSB1bmRlZmluZWQgfHwgcnVsZSA9PT0gZmFsc2UgfHwgIXJ1bGUuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0aW9ucyA9IE5vdGlmaWNhdGlvblV0aWxzLmRlY29kZUFjdGlvbnMocnVsZS5hY3Rpb25zKTtcbiAgICAgICAgaWYgKGFjdGlvbnMgIT09IG51bGwgJiYgIWFjdGlvbnMubm90aWZ5ICYmIGFjdGlvbnMuaGlnaGxpZ2h0ICE9PSB0cnVlICYmIGFjdGlvbnMuc291bmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVTb3VuZChydWxlczogKElQdXNoUnVsZSB8IG51bGwgfCB1bmRlZmluZWQgfCBmYWxzZSlbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICAgIGlmIChydWxlID09PSBudWxsIHx8IHJ1bGUgPT09IHVuZGVmaW5lZCB8fCBydWxlID09PSBmYWxzZSB8fCAhcnVsZS5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3Rpb25zID0gTm90aWZpY2F0aW9uVXRpbHMuZGVjb2RlQWN0aW9ucyhydWxlLmFjdGlvbnMpO1xuICAgICAgICBpZiAoYWN0aW9ucyAhPT0gbnVsbCAmJiBhY3Rpb25zLm5vdGlmeSAmJiBhY3Rpb25zLnNvdW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb25zLnNvdW5kO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b05vdGlmaWNhdGlvblNldHRpbmdzKFxuICAgIHB1c2hSdWxlczogSVB1c2hSdWxlcyxcbiAgICBzdXBwb3J0c0ludGVudGlvbmFsTWVudGlvbnM6IGJvb2xlYW4sXG4pOiBOb3RpZmljYXRpb25TZXR0aW5ncyB7XG4gICAgY29uc3Qgc3RhbmRhcmRSdWxlcyA9IGJ1aWxkUHVzaFJ1bGVNYXAocHVzaFJ1bGVzKTtcbiAgICBjb25zdCBjb250ZW50UnVsZXMgPSBwdXNoUnVsZXMuZ2xvYmFsLmNvbnRlbnQ/LmZpbHRlcigocnVsZSkgPT4gIXJ1bGUucnVsZV9pZC5zdGFydHNXaXRoKFwiLlwiKSkgPz8gW107XG4gICAgY29uc3QgZG1SdWxlcyA9IFtzdGFuZGFyZFJ1bGVzLmdldChSdWxlSWQuRE0pLCBzdGFuZGFyZFJ1bGVzLmdldChSdWxlSWQuRW5jcnlwdGVkRE0pXTtcbiAgICBjb25zdCByb29tUnVsZXMgPSBbc3RhbmRhcmRSdWxlcy5nZXQoUnVsZUlkLk1lc3NhZ2UpLCBzdGFuZGFyZFJ1bGVzLmdldChSdWxlSWQuRW5jcnlwdGVkTWVzc2FnZSldO1xuICAgIHJldHVybiB7XG4gICAgICAgIGdsb2JhbE11dGU6IHN0YW5kYXJkUnVsZXMuZ2V0KFJ1bGVJZC5NYXN0ZXIpPy5lbmFibGVkID8/IGZhbHNlLFxuICAgICAgICBkZWZhdWx0TGV2ZWxzOiB7XG4gICAgICAgICAgICByb29tOiBzaG91bGROb3RpZnkocm9vbVJ1bGVzKSA/IFJvb21Ob3RpZlN0YXRlLkFsbE1lc3NhZ2VzIDogUm9vbU5vdGlmU3RhdGUuTWVudGlvbnNPbmx5LFxuICAgICAgICAgICAgZG06IHNob3VsZE5vdGlmeShkbVJ1bGVzKSA/IFJvb21Ob3RpZlN0YXRlLkFsbE1lc3NhZ2VzIDogUm9vbU5vdGlmU3RhdGUuTWVudGlvbnNPbmx5LFxuICAgICAgICB9LFxuICAgICAgICBzb3VuZDoge1xuICAgICAgICAgICAgY2FsbHM6IGRldGVybWluZVNvdW5kKFtzdGFuZGFyZFJ1bGVzLmdldChSdWxlSWQuSW5jb21pbmdDYWxsKV0pLFxuICAgICAgICAgICAgbWVudGlvbnM6IGRldGVybWluZVNvdW5kKFtcbiAgICAgICAgICAgICAgICBzdXBwb3J0c0ludGVudGlvbmFsTWVudGlvbnMgJiYgc3RhbmRhcmRSdWxlcy5nZXQoUnVsZUlkLklzVXNlck1lbnRpb24pLFxuICAgICAgICAgICAgICAgIHN0YW5kYXJkUnVsZXMuZ2V0KFJ1bGVJZC5Db250YWluc1VzZXJOYW1lKSxcbiAgICAgICAgICAgICAgICBzdGFuZGFyZFJ1bGVzLmdldChSdWxlSWQuQ29udGFpbnNEaXNwbGF5TmFtZSksXG4gICAgICAgICAgICAgICAgLi4uY29udGVudFJ1bGVzLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBwZW9wbGU6IGRldGVybWluZVNvdW5kKGRtUnVsZXMpLFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpdml0eToge1xuICAgICAgICAgICAgYm90X25vdGljZXM6ICFpc011dGVkKFtzdGFuZGFyZFJ1bGVzLmdldChSdWxlSWQuU3VwcHJlc3NOb3RpY2VzKV0pLFxuICAgICAgICAgICAgaW52aXRlOiBzaG91bGROb3RpZnkoW3N0YW5kYXJkUnVsZXMuZ2V0KFJ1bGVJZC5JbnZpdGVUb1NlbGYpXSksXG4gICAgICAgICAgICBzdGF0dXNfZXZlbnQ6IHNob3VsZE5vdGlmeShbc3RhbmRhcmRSdWxlcy5nZXQoUnVsZUlkLk1lbWJlckV2ZW50KSwgc3RhbmRhcmRSdWxlcy5nZXQoUnVsZUlkLlRvbWJzdG9uZSldKSxcbiAgICAgICAgfSxcbiAgICAgICAgbWVudGlvbnM6IHtcbiAgICAgICAgICAgIHVzZXI6IHNob3VsZE5vdGlmeShbXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNJbnRlbnRpb25hbE1lbnRpb25zICYmIHN0YW5kYXJkUnVsZXMuZ2V0KFJ1bGVJZC5Jc1VzZXJNZW50aW9uKSxcbiAgICAgICAgICAgICAgICBzdGFuZGFyZFJ1bGVzLmdldChSdWxlSWQuQ29udGFpbnNVc2VyTmFtZSksXG4gICAgICAgICAgICAgICAgc3RhbmRhcmRSdWxlcy5nZXQoUnVsZUlkLkNvbnRhaW5zRGlzcGxheU5hbWUpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICByb29tOiBzaG91bGROb3RpZnkoW1xuICAgICAgICAgICAgICAgIHN1cHBvcnRzSW50ZW50aW9uYWxNZW50aW9ucyAmJiBzdGFuZGFyZFJ1bGVzLmdldChSdWxlSWQuSXNSb29tTWVudGlvbiksXG4gICAgICAgICAgICAgICAgc3RhbmRhcmRSdWxlcy5nZXQoUnVsZUlkLkF0Um9vbU5vdGlmaWNhdGlvbiksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBzaG91bGROb3RpZnkoY29udGVudFJ1bGVzKSxcbiAgICAgICAgfSxcbiAgICAgICAga2V5d29yZHM6IGNvbnRlbnRSdWxlcy5tYXAoKGl0KSA9PiBpdC5wYXR0ZXJuISksXG4gICAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBUUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsY0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBYkE7QUFDQTtBQUNBO0FBQ0E7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