matrix-react-sdk
Version:
SDK for matrix.org using React
67 lines (59 loc) • 2.21 kB
text/typescript
/*
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.
*/
import { MatrixClient, IPushRule, PushRuleAction, PushRuleKind } from "matrix-js-sdk/src/matrix";
import { PushProcessor } from "matrix-js-sdk/src/pushprocessor";
/**
* Sets the actions for a given push rule id and kind
* When actions are falsy, disables the rule
* @param matrixClient - cli
* @param ruleId - rule id to update
* @param kind - PushRuleKind
* @param actions - push rule actions to set for rule
*/
export const updatePushRuleActions = async (
matrixClient: MatrixClient,
ruleId: IPushRule["rule_id"],
kind: PushRuleKind,
actions?: PushRuleAction[],
): Promise<void> => {
if (!actions) {
await matrixClient.setPushRuleEnabled("global", kind, ruleId, false);
} else {
await matrixClient.setPushRuleActions("global", kind, ruleId, actions);
await matrixClient.setPushRuleEnabled("global", kind, ruleId, true);
}
};
interface PushRuleAndKind {
rule: IPushRule;
kind: PushRuleKind;
}
/**
* Update push rules with given actions
* Where they already exist for current user
* Rules are updated sequentially and stop at first error
* @param matrixClient - cli
* @param ruleIds - RuleIds of push rules to attempt to set actions for
* @param actions - push rule actions to set for rule
* @returns resolves when all rules have been updated
* @returns rejects when a rule update fails
*/
export const updateExistingPushRulesWithActions = async (
matrixClient: MatrixClient,
ruleIds?: IPushRule["rule_id"][],
actions?: PushRuleAction[],
): Promise<void> => {
const pushProcessor = new PushProcessor(matrixClient);
const rules: PushRuleAndKind[] | undefined = ruleIds
?.map((ruleId) => pushProcessor.getPushRuleAndKindById(ruleId))
.filter((n: PushRuleAndKind | null): n is PushRuleAndKind => Boolean(n));
if (!rules?.length) {
return;
}
for (const { kind, rule } of rules) {
await updatePushRuleActions(matrixClient, rule.rule_id, kind, actions);
}
};