UNPKG

matrix-react-sdk

Version:
94 lines (89 loc) 12.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _MatrixClientBackedController = _interopRequireDefault(require("./MatrixClientBackedController")); var _SettingsStore = _interopRequireDefault(require("../SettingsStore")); /* 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. */ /** * Disables a given setting if the server unstable feature it requires is not supported * When a setting gets disabled or enabled from this controller it notifies the given WatchManager */ class ServerSupportUnstableFeatureController extends _MatrixClientBackedController.default { /** * Construct a new ServerSupportUnstableFeatureController. * * @param unstableFeatureGroups - If any one of the feature groups is satisfied, * then the setting is considered enabled. A feature group is satisfied if all of * the features in the group are supported (all features in a group are required). */ constructor(settingName, watchers, unstableFeatureGroups, stableVersion, disabledMessage, forcedValue = false) { super(); // Starts off as `undefined` so when we first compare the `newDisabledValue`, it sees // it as a change and updates the watchers. (0, _defineProperty2.default)(this, "enabled", void 0); this.settingName = settingName; this.watchers = watchers; this.unstableFeatureGroups = unstableFeatureGroups; this.stableVersion = stableVersion; this.disabledMessage = disabledMessage; this.forcedValue = forcedValue; } get disabled() { return !this.enabled; } set disabled(newDisabledValue) { if (!newDisabledValue === this.enabled) return; this.enabled = !newDisabledValue; const level = _SettingsStore.default.firstSupportedLevel(this.settingName); if (!level) return; const settingValue = _SettingsStore.default.getValue(this.settingName, null); this.watchers.notifyUpdate(this.settingName, null, level, settingValue); } async initMatrixClient() { // Check for stable version support first if (this.stableVersion && (await this.client.isVersionSupported(this.stableVersion))) { this.disabled = false; return; } // Otherwise, only one of the unstable feature groups needs to be satisfied in // order for this setting overall to be enabled let isEnabled = false; for (const featureGroup of this.unstableFeatureGroups) { const featureSupportList = await Promise.all(featureGroup.map(async feature => { const isFeatureSupported = await this.client.doesServerSupportUnstableFeature(feature); return isFeatureSupported; })); // Every feature in a feature group is required in order // for this setting overall to be enabled. const isFeatureGroupSatisfied = featureSupportList.every(isFeatureSupported => isFeatureSupported); if (isFeatureGroupSatisfied) { isEnabled = true; break; } } this.disabled = !isEnabled; } getValueOverride(level, roomId, calculatedValue, calculatedAtLevel) { if (this.settingDisabled) { return this.forcedValue; } return null; // no override } get settingDisabled() { if (this.disabled) { return this.disabledMessage ?? true; } return false; } } exports.default = ServerSupportUnstableFeatureController; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfTWF0cml4Q2xpZW50QmFja2VkQ29udHJvbGxlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX1NldHRpbmdzU3RvcmUiLCJTZXJ2ZXJTdXBwb3J0VW5zdGFibGVGZWF0dXJlQ29udHJvbGxlciIsIk1hdHJpeENsaWVudEJhY2tlZENvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsInNldHRpbmdOYW1lIiwid2F0Y2hlcnMiLCJ1bnN0YWJsZUZlYXR1cmVHcm91cHMiLCJzdGFibGVWZXJzaW9uIiwiZGlzYWJsZWRNZXNzYWdlIiwiZm9yY2VkVmFsdWUiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsImRpc2FibGVkIiwiZW5hYmxlZCIsIm5ld0Rpc2FibGVkVmFsdWUiLCJsZXZlbCIsIlNldHRpbmdzU3RvcmUiLCJmaXJzdFN1cHBvcnRlZExldmVsIiwic2V0dGluZ1ZhbHVlIiwiZ2V0VmFsdWUiLCJub3RpZnlVcGRhdGUiLCJpbml0TWF0cml4Q2xpZW50IiwiY2xpZW50IiwiaXNWZXJzaW9uU3VwcG9ydGVkIiwiaXNFbmFibGVkIiwiZmVhdHVyZUdyb3VwIiwiZmVhdHVyZVN1cHBvcnRMaXN0IiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImZlYXR1cmUiLCJpc0ZlYXR1cmVTdXBwb3J0ZWQiLCJkb2VzU2VydmVyU3VwcG9ydFVuc3RhYmxlRmVhdHVyZSIsImlzRmVhdHVyZUdyb3VwU2F0aXNmaWVkIiwiZXZlcnkiLCJnZXRWYWx1ZU92ZXJyaWRlIiwicm9vbUlkIiwiY2FsY3VsYXRlZFZhbHVlIiwiY2FsY3VsYXRlZEF0TGV2ZWwiLCJzZXR0aW5nRGlzYWJsZWQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NldHRpbmdzL2NvbnRyb2xsZXJzL1NlcnZlclN1cHBvcnRVbnN0YWJsZUZlYXR1cmVDb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIzIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IFNldHRpbmdMZXZlbCB9IGZyb20gXCIuLi9TZXR0aW5nTGV2ZWxcIjtcbmltcG9ydCBNYXRyaXhDbGllbnRCYWNrZWRDb250cm9sbGVyIGZyb20gXCIuL01hdHJpeENsaWVudEJhY2tlZENvbnRyb2xsZXJcIjtcbmltcG9ydCB7IFdhdGNoTWFuYWdlciB9IGZyb20gXCIuLi9XYXRjaE1hbmFnZXJcIjtcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gXCIuLi9TZXR0aW5nc1N0b3JlXCI7XG5cbi8qKlxuICogRGlzYWJsZXMgYSBnaXZlbiBzZXR0aW5nIGlmIHRoZSBzZXJ2ZXIgdW5zdGFibGUgZmVhdHVyZSBpdCByZXF1aXJlcyBpcyBub3Qgc3VwcG9ydGVkXG4gKiBXaGVuIGEgc2V0dGluZyBnZXRzIGRpc2FibGVkIG9yIGVuYWJsZWQgZnJvbSB0aGlzIGNvbnRyb2xsZXIgaXQgbm90aWZpZXMgdGhlIGdpdmVuIFdhdGNoTWFuYWdlclxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXJ2ZXJTdXBwb3J0VW5zdGFibGVGZWF0dXJlQ29udHJvbGxlciBleHRlbmRzIE1hdHJpeENsaWVudEJhY2tlZENvbnRyb2xsZXIge1xuICAgIC8vIFN0YXJ0cyBvZmYgYXMgYHVuZGVmaW5lZGAgc28gd2hlbiB3ZSBmaXJzdCBjb21wYXJlIHRoZSBgbmV3RGlzYWJsZWRWYWx1ZWAsIGl0IHNlZXNcbiAgICAvLyBpdCBhcyBhIGNoYW5nZSBhbmQgdXBkYXRlcyB0aGUgd2F0Y2hlcnMuXG4gICAgcHJpdmF0ZSBlbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0IGEgbmV3IFNlcnZlclN1cHBvcnRVbnN0YWJsZUZlYXR1cmVDb250cm9sbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVuc3RhYmxlRmVhdHVyZUdyb3VwcyAtIElmIGFueSBvbmUgb2YgdGhlIGZlYXR1cmUgZ3JvdXBzIGlzIHNhdGlzZmllZCxcbiAgICAgKiB0aGVuIHRoZSBzZXR0aW5nIGlzIGNvbnNpZGVyZWQgZW5hYmxlZC4gQSBmZWF0dXJlIGdyb3VwIGlzIHNhdGlzZmllZCBpZiBhbGwgb2ZcbiAgICAgKiB0aGUgZmVhdHVyZXMgaW4gdGhlIGdyb3VwIGFyZSBzdXBwb3J0ZWQgKGFsbCBmZWF0dXJlcyBpbiBhIGdyb3VwIGFyZSByZXF1aXJlZCkuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdOYW1lOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgd2F0Y2hlcnM6IFdhdGNoTWFuYWdlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1bnN0YWJsZUZlYXR1cmVHcm91cHM6IHN0cmluZ1tdW10sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhYmxlVmVyc2lvbj86IHN0cmluZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaXNhYmxlZE1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZm9yY2VkVmFsdWU6IGFueSA9IGZhbHNlLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5lbmFibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQobmV3RGlzYWJsZWRWYWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIW5ld0Rpc2FibGVkVmFsdWUgPT09IHRoaXMuZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSAhbmV3RGlzYWJsZWRWYWx1ZTtcbiAgICAgICAgY29uc3QgbGV2ZWwgPSBTZXR0aW5nc1N0b3JlLmZpcnN0U3VwcG9ydGVkTGV2ZWwodGhpcy5zZXR0aW5nTmFtZSk7XG4gICAgICAgIGlmICghbGV2ZWwpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2V0dGluZ1ZhbHVlID0gU2V0dGluZ3NTdG9yZS5nZXRWYWx1ZSh0aGlzLnNldHRpbmdOYW1lLCBudWxsKTtcbiAgICAgICAgdGhpcy53YXRjaGVycy5ub3RpZnlVcGRhdGUodGhpcy5zZXR0aW5nTmFtZSwgbnVsbCwgbGV2ZWwsIHNldHRpbmdWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGluaXRNYXRyaXhDbGllbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIENoZWNrIGZvciBzdGFibGUgdmVyc2lvbiBzdXBwb3J0IGZpcnN0XG4gICAgICAgIGlmICh0aGlzLnN0YWJsZVZlcnNpb24gJiYgKGF3YWl0IHRoaXMuY2xpZW50IS5pc1ZlcnNpb25TdXBwb3J0ZWQodGhpcy5zdGFibGVWZXJzaW9uKSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgb25seSBvbmUgb2YgdGhlIHVuc3RhYmxlIGZlYXR1cmUgZ3JvdXBzIG5lZWRzIHRvIGJlIHNhdGlzZmllZCBpblxuICAgICAgICAvLyBvcmRlciBmb3IgdGhpcyBzZXR0aW5nIG92ZXJhbGwgdG8gYmUgZW5hYmxlZFxuICAgICAgICBsZXQgaXNFbmFibGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZUdyb3VwIG9mIHRoaXMudW5zdGFibGVGZWF0dXJlR3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlU3VwcG9ydExpc3QgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICBmZWF0dXJlR3JvdXAubWFwKGFzeW5jIChmZWF0dXJlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRmVhdHVyZVN1cHBvcnRlZCA9IGF3YWl0IHRoaXMuY2xpZW50IS5kb2VzU2VydmVyU3VwcG9ydFVuc3RhYmxlRmVhdHVyZShmZWF0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzRmVhdHVyZVN1cHBvcnRlZDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIEV2ZXJ5IGZlYXR1cmUgaW4gYSBmZWF0dXJlIGdyb3VwIGlzIHJlcXVpcmVkIGluIG9yZGVyXG4gICAgICAgICAgICAvLyBmb3IgdGhpcyBzZXR0aW5nIG92ZXJhbGwgdG8gYmUgZW5hYmxlZC5cbiAgICAgICAgICAgIGNvbnN0IGlzRmVhdHVyZUdyb3VwU2F0aXNmaWVkID0gZmVhdHVyZVN1cHBvcnRMaXN0LmV2ZXJ5KChpc0ZlYXR1cmVTdXBwb3J0ZWQpID0+IGlzRmVhdHVyZVN1cHBvcnRlZCk7XG4gICAgICAgICAgICBpZiAoaXNGZWF0dXJlR3JvdXBTYXRpc2ZpZWQpIHtcbiAgICAgICAgICAgICAgICBpc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9ICFpc0VuYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlT3ZlcnJpZGUoXG4gICAgICAgIGxldmVsOiBTZXR0aW5nTGV2ZWwsXG4gICAgICAgIHJvb21JZDogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgY2FsY3VsYXRlZFZhbHVlOiBhbnksXG4gICAgICAgIGNhbGN1bGF0ZWRBdExldmVsOiBTZXR0aW5nTGV2ZWwgfCBudWxsLFxuICAgICk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdEaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yY2VkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7IC8vIG5vIG92ZXJyaWRlXG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZXR0aW5nRGlzYWJsZWQoKTogYm9vbGVhbiB8IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZE1lc3NhZ2UgPz8gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVNBLElBQUFBLDZCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxjQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLE1BQU1FLHNDQUFzQyxTQUFTQyxxQ0FBNEIsQ0FBQztFQUs3RjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNXQyxXQUFXQSxDQUNHQyxXQUFtQixFQUNuQkMsUUFBc0IsRUFDdEJDLHFCQUFpQyxFQUNqQ0MsYUFBc0IsRUFDdEJDLGVBQXdCLEVBQ3hCQyxXQUFnQixHQUFHLEtBQUssRUFDM0M7SUFDRSxLQUFLLENBQUMsQ0FBQztJQW5CWDtJQUNBO0lBQUEsSUFBQUMsZ0JBQUEsQ0FBQUMsT0FBQTtJQUFBLEtBV3FCUCxXQUFtQixHQUFuQkEsV0FBbUI7SUFBQSxLQUNuQkMsUUFBc0IsR0FBdEJBLFFBQXNCO0lBQUEsS0FDdEJDLHFCQUFpQyxHQUFqQ0EscUJBQWlDO0lBQUEsS0FDakNDLGFBQXNCLEdBQXRCQSxhQUFzQjtJQUFBLEtBQ3RCQyxlQUF3QixHQUF4QkEsZUFBd0I7SUFBQSxLQUN4QkMsV0FBZ0IsR0FBaEJBLFdBQWdCO0VBR3JDO0VBRUEsSUFBV0csUUFBUUEsQ0FBQSxFQUFZO0lBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUNDLE9BQU87RUFDeEI7RUFFQSxJQUFXRCxRQUFRQSxDQUFDRSxnQkFBeUIsRUFBRTtJQUMzQyxJQUFJLENBQUNBLGdCQUFnQixLQUFLLElBQUksQ0FBQ0QsT0FBTyxFQUFFO0lBQ3hDLElBQUksQ0FBQ0EsT0FBTyxHQUFHLENBQUNDLGdCQUFnQjtJQUNoQyxNQUFNQyxLQUFLLEdBQUdDLHNCQUFhLENBQUNDLG1CQUFtQixDQUFDLElBQUksQ0FBQ2IsV0FBVyxDQUFDO0lBQ2pFLElBQUksQ0FBQ1csS0FBSyxFQUFFO0lBQ1osTUFBTUcsWUFBWSxHQUFHRixzQkFBYSxDQUFDRyxRQUFRLENBQUMsSUFBSSxDQUFDZixXQUFXLEVBQUUsSUFBSSxDQUFDO0lBQ25FLElBQUksQ0FBQ0MsUUFBUSxDQUFDZSxZQUFZLENBQUMsSUFBSSxDQUFDaEIsV0FBVyxFQUFFLElBQUksRUFBRVcsS0FBSyxFQUFFRyxZQUFZLENBQUM7RUFDM0U7RUFFQSxNQUFnQkcsZ0JBQWdCQSxDQUFBLEVBQWtCO0lBQzlDO0lBQ0EsSUFBSSxJQUFJLENBQUNkLGFBQWEsS0FBSyxNQUFNLElBQUksQ0FBQ2UsTUFBTSxDQUFFQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUNoQixhQUFhLENBQUMsQ0FBQyxFQUFFO01BQ25GLElBQUksQ0FBQ0ssUUFBUSxHQUFHLEtBQUs7TUFDckI7SUFDSjs7SUFFQTtJQUNBO0lBQ0EsSUFBSVksU0FBUyxHQUFHLEtBQUs7SUFDckIsS0FBSyxNQUFNQyxZQUFZLElBQUksSUFBSSxDQUFDbkIscUJBQXFCLEVBQUU7TUFDbkQsTUFBTW9CLGtCQUFrQixHQUFHLE1BQU1DLE9BQU8sQ0FBQ0MsR0FBRyxDQUN4Q0gsWUFBWSxDQUFDSSxHQUFHLENBQUMsTUFBT0MsT0FBTyxJQUFLO1FBQ2hDLE1BQU1DLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDVCxNQUFNLENBQUVVLGdDQUFnQyxDQUFDRixPQUFPLENBQUM7UUFDdkYsT0FBT0Msa0JBQWtCO01BQzdCLENBQUMsQ0FDTCxDQUFDOztNQUVEO01BQ0E7TUFDQSxNQUFNRSx1QkFBdUIsR0FBR1Asa0JBQWtCLENBQUNRLEtBQUssQ0FBRUgsa0JBQWtCLElBQUtBLGtCQUFrQixDQUFDO01BQ3BHLElBQUlFLHVCQUF1QixFQUFFO1FBQ3pCVCxTQUFTLEdBQUcsSUFBSTtRQUNoQjtNQUNKO0lBQ0o7SUFFQSxJQUFJLENBQUNaLFFBQVEsR0FBRyxDQUFDWSxTQUFTO0VBQzlCO0VBRU9XLGdCQUFnQkEsQ0FDbkJwQixLQUFtQixFQUNuQnFCLE1BQXFCLEVBQ3JCQyxlQUFvQixFQUNwQkMsaUJBQXNDLEVBQ25DO0lBQ0gsSUFBSSxJQUFJLENBQUNDLGVBQWUsRUFBRTtNQUN0QixPQUFPLElBQUksQ0FBQzlCLFdBQVc7SUFDM0I7SUFDQSxPQUFPLElBQUksQ0FBQyxDQUFDO0VBQ2pCO0VBRUEsSUFBVzhCLGVBQWVBLENBQUEsRUFBcUI7SUFDM0MsSUFBSSxJQUFJLENBQUMzQixRQUFRLEVBQUU7TUFDZixPQUFPLElBQUksQ0FBQ0osZUFBZSxJQUFJLElBQUk7SUFDdkM7SUFDQSxPQUFPLEtBQUs7RUFDaEI7QUFDSjtBQUFDZ0MsT0FBQSxDQUFBN0IsT0FBQSxHQUFBVixzQ0FBQSIsImlnbm9yZUxpc3QiOltdfQ==