UNPKG

matrix-react-sdk

Version:
82 lines (78 loc) 10.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.PROPERTY_UPDATED = exports.GenericEchoChamber = void 0; exports.implicitlyReverted = implicitlyReverted; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _events = require("events"); var _EchoTransaction = require("./EchoTransaction"); /* Copyright 2024 New Vector Ltd. Copyright 2020 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. */ async function implicitlyReverted() { // do nothing :D } const PROPERTY_UPDATED = exports.PROPERTY_UPDATED = "property_updated"; class GenericEchoChamber extends _events.EventEmitter { constructor(context, lookupFn) { super(); (0, _defineProperty2.default)(this, "cache", new Map()); (0, _defineProperty2.default)(this, "matrixClient", null); this.context = context; this.lookupFn = lookupFn; } setClient(client) { const oldClient = this.matrixClient; this.matrixClient = client; this.onClientChanged(oldClient, client); } /** * Gets a value. If the key is in flight, the cached value will be returned. If * the key is not in flight then the lookupFn provided to this class will be * called instead. * @param key The key to look up. * @returns The value for the key. */ getValue(key) { return this.cache.has(key) ? this.cache.get(key).val : this.lookupFn(key); } cacheVal(key, val, txn) { this.cache.set(key, { txn, val }); this.emit(PROPERTY_UPDATED, key); } decacheKey(key) { if (this.cache.has(key)) { this.context.disownTransaction(this.cache.get(key).txn); this.cache.delete(key); this.emit(PROPERTY_UPDATED, key); } } markEchoReceived(key) { if (this.cache.has(key)) { const txn = this.cache.get(key).txn; this.context.disownTransaction(txn); txn.cancel(); } this.decacheKey(key); } setValue(auditName, key, targetVal, runFn, revertFn) { // Cancel any pending transactions for the same key if (this.cache.has(key)) { this.cache.get(key).txn.cancel(); } const ctxn = this.context.beginTransaction(auditName, runFn); this.cacheVal(key, targetVal, ctxn); // set the cache now as it won't be updated by the .when() ladder below. ctxn.when(_EchoTransaction.TransactionStatus.Pending, () => this.cacheVal(key, targetVal, ctxn)).when(_EchoTransaction.TransactionStatus.Error, () => revertFn()); ctxn.run(); } } exports.GenericEchoChamber = GenericEchoChamber; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9FY2hvVHJhbnNhY3Rpb24iLCJpbXBsaWNpdGx5UmV2ZXJ0ZWQiLCJQUk9QRVJUWV9VUERBVEVEIiwiZXhwb3J0cyIsIkdlbmVyaWNFY2hvQ2hhbWJlciIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiY29udGV4dCIsImxvb2t1cEZuIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJNYXAiLCJzZXRDbGllbnQiLCJjbGllbnQiLCJvbGRDbGllbnQiLCJtYXRyaXhDbGllbnQiLCJvbkNsaWVudENoYW5nZWQiLCJnZXRWYWx1ZSIsImtleSIsImNhY2hlIiwiaGFzIiwiZ2V0IiwidmFsIiwiY2FjaGVWYWwiLCJ0eG4iLCJzZXQiLCJlbWl0IiwiZGVjYWNoZUtleSIsImRpc293blRyYW5zYWN0aW9uIiwiZGVsZXRlIiwibWFya0VjaG9SZWNlaXZlZCIsImNhbmNlbCIsInNldFZhbHVlIiwiYXVkaXROYW1lIiwidGFyZ2V0VmFsIiwicnVuRm4iLCJyZXZlcnRGbiIsImN0eG4iLCJiZWdpblRyYW5zYWN0aW9uIiwid2hlbiIsIlRyYW5zYWN0aW9uU3RhdHVzIiwiUGVuZGluZyIsIkVycm9yIiwicnVuIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3Jlcy9sb2NhbC1lY2hvL0dlbmVyaWNFY2hvQ2hhbWJlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBNYXRyaXhDbGllbnQgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiZXZlbnRzXCI7XG5cbmltcG9ydCB7IEVjaG9Db250ZXh0IH0gZnJvbSBcIi4vRWNob0NvbnRleHRcIjtcbmltcG9ydCB7IEVjaG9UcmFuc2FjdGlvbiwgUnVuRm4sIFRyYW5zYWN0aW9uU3RhdHVzIH0gZnJvbSBcIi4vRWNob1RyYW5zYWN0aW9uXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbXBsaWNpdGx5UmV2ZXJ0ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gZG8gbm90aGluZyA6RFxufVxuXG5leHBvcnQgY29uc3QgUFJPUEVSVFlfVVBEQVRFRCA9IFwicHJvcGVydHlfdXBkYXRlZFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VuZXJpY0VjaG9DaGFtYmVyPEMgZXh0ZW5kcyBFY2hvQ29udGV4dCwgSywgVj4gZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIHByaXZhdGUgY2FjaGUgPSBuZXcgTWFwPEssIHsgdHhuOiBFY2hvVHJhbnNhY3Rpb247IHZhbDogViB9PigpO1xuICAgIHByb3RlY3RlZCBtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgY29udGV4dDogQyxcbiAgICAgICAgcHJpdmF0ZSBsb29rdXBGbjogKGtleTogSykgPT4gVixcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q2xpZW50KGNsaWVudDogTWF0cml4Q2xpZW50IHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvbGRDbGllbnQgPSB0aGlzLm1hdHJpeENsaWVudDtcbiAgICAgICAgdGhpcy5tYXRyaXhDbGllbnQgPSBjbGllbnQ7XG4gICAgICAgIHRoaXMub25DbGllbnRDaGFuZ2VkKG9sZENsaWVudCwgY2xpZW50KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb25DbGllbnRDaGFuZ2VkKG9sZENsaWVudDogTWF0cml4Q2xpZW50IHwgbnVsbCwgbmV3Q2xpZW50OiBNYXRyaXhDbGllbnQgfCBudWxsKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEdldHMgYSB2YWx1ZS4gSWYgdGhlIGtleSBpcyBpbiBmbGlnaHQsIHRoZSBjYWNoZWQgdmFsdWUgd2lsbCBiZSByZXR1cm5lZC4gSWZcbiAgICAgKiB0aGUga2V5IGlzIG5vdCBpbiBmbGlnaHQgdGhlbiB0aGUgbG9va3VwRm4gcHJvdmlkZWQgdG8gdGhpcyBjbGFzcyB3aWxsIGJlXG4gICAgICogY2FsbGVkIGluc3RlYWQuXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIGxvb2sgdXAuXG4gICAgICogQHJldHVybnMgVGhlIHZhbHVlIGZvciB0aGUga2V5LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRWYWx1ZShrZXk6IEspOiBWIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuaGFzKGtleSkgPyB0aGlzLmNhY2hlLmdldChrZXkpIS52YWwgOiB0aGlzLmxvb2t1cEZuKGtleSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWNoZVZhbChrZXk6IEssIHZhbDogViwgdHhuOiBFY2hvVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB7IHR4biwgdmFsIH0pO1xuICAgICAgICB0aGlzLmVtaXQoUFJPUEVSVFlfVVBEQVRFRCwga2V5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlY2FjaGVLZXkoa2V5OiBLKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlzb3duVHJhbnNhY3Rpb24odGhpcy5jYWNoZS5nZXQoa2V5KSEudHhuKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICB0aGlzLmVtaXQoUFJPUEVSVFlfVVBEQVRFRCwga2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBtYXJrRWNob1JlY2VpdmVkKGtleTogSyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkge1xuICAgICAgICAgICAgY29uc3QgdHhuID0gdGhpcy5jYWNoZS5nZXQoa2V5KSEudHhuO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpc293blRyYW5zYWN0aW9uKHR4bik7XG4gICAgICAgICAgICB0eG4uY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWNhY2hlS2V5KGtleSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZhbHVlKGF1ZGl0TmFtZTogc3RyaW5nLCBrZXk6IEssIHRhcmdldFZhbDogViwgcnVuRm46IFJ1bkZuLCByZXZlcnRGbjogUnVuRm4pOiB2b2lkIHtcbiAgICAgICAgLy8gQ2FuY2VsIGFueSBwZW5kaW5nIHRyYW5zYWN0aW9ucyBmb3IgdGhlIHNhbWUga2V5XG4gICAgICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLmdldChrZXkpIS50eG4uY2FuY2VsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdHhuID0gdGhpcy5jb250ZXh0LmJlZ2luVHJhbnNhY3Rpb24oYXVkaXROYW1lLCBydW5Gbik7XG4gICAgICAgIHRoaXMuY2FjaGVWYWwoa2V5LCB0YXJnZXRWYWwsIGN0eG4pOyAvLyBzZXQgdGhlIGNhY2hlIG5vdyBhcyBpdCB3b24ndCBiZSB1cGRhdGVkIGJ5IHRoZSAud2hlbigpIGxhZGRlciBiZWxvdy5cblxuICAgICAgICBjdHhuLndoZW4oVHJhbnNhY3Rpb25TdGF0dXMuUGVuZGluZywgKCkgPT4gdGhpcy5jYWNoZVZhbChrZXksIHRhcmdldFZhbCwgY3R4bikpLndoZW4oXG4gICAgICAgICAgICBUcmFuc2FjdGlvblN0YXR1cy5FcnJvcixcbiAgICAgICAgICAgICgpID0+IHJldmVydEZuKCksXG4gICAgICAgICk7XG5cbiAgICAgICAgY3R4bi5ydW4oKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVNBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUdBLElBQUFDLGdCQUFBLEdBQUFELE9BQUE7QUFaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFRTyxlQUFlRSxrQkFBa0JBLENBQUEsRUFBa0I7RUFDdEQ7QUFBQTtBQUdHLE1BQU1DLGdCQUFnQixHQUFBQyxPQUFBLENBQUFELGdCQUFBLEdBQUcsa0JBQWtCO0FBRTNDLE1BQWVFLGtCQUFrQixTQUFzQ0Msb0JBQVksQ0FBQztFQUk3RUMsV0FBV0EsQ0FDREMsT0FBVSxFQUNsQkMsUUFBdUIsRUFDakM7SUFDRSxLQUFLLENBQUMsQ0FBQztJQUFDLElBQUFDLGdCQUFBLENBQUFDLE9BQUEsaUJBUEksSUFBSUMsR0FBRyxDQUFzQyxDQUFDO0lBQUEsSUFBQUYsZ0JBQUEsQ0FBQUMsT0FBQSx3QkFDaEIsSUFBSTtJQUFBLEtBRzlCSCxPQUFVLEdBQVZBLE9BQVU7SUFBQSxLQUNsQkMsUUFBdUIsR0FBdkJBLFFBQXVCO0VBR25DO0VBRU9JLFNBQVNBLENBQUNDLE1BQTJCLEVBQVE7SUFDaEQsTUFBTUMsU0FBUyxHQUFHLElBQUksQ0FBQ0MsWUFBWTtJQUNuQyxJQUFJLENBQUNBLFlBQVksR0FBR0YsTUFBTTtJQUMxQixJQUFJLENBQUNHLGVBQWUsQ0FBQ0YsU0FBUyxFQUFFRCxNQUFNLENBQUM7RUFDM0M7RUFJQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNXSSxRQUFRQSxDQUFDQyxHQUFNLEVBQUs7SUFDdkIsT0FBTyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsR0FBRyxDQUFDRixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUNDLEtBQUssQ0FBQ0UsR0FBRyxDQUFDSCxHQUFHLENBQUMsQ0FBRUksR0FBRyxHQUFHLElBQUksQ0FBQ2QsUUFBUSxDQUFDVSxHQUFHLENBQUM7RUFDOUU7RUFFUUssUUFBUUEsQ0FBQ0wsR0FBTSxFQUFFSSxHQUFNLEVBQUVFLEdBQW9CLEVBQVE7SUFDekQsSUFBSSxDQUFDTCxLQUFLLENBQUNNLEdBQUcsQ0FBQ1AsR0FBRyxFQUFFO01BQUVNLEdBQUc7TUFBRUY7SUFBSSxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDSSxJQUFJLENBQUN4QixnQkFBZ0IsRUFBRWdCLEdBQUcsQ0FBQztFQUNwQztFQUVRUyxVQUFVQSxDQUFDVCxHQUFNLEVBQVE7SUFDN0IsSUFBSSxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsR0FBRyxDQUFDRixHQUFHLENBQUMsRUFBRTtNQUNyQixJQUFJLENBQUNYLE9BQU8sQ0FBQ3FCLGlCQUFpQixDQUFDLElBQUksQ0FBQ1QsS0FBSyxDQUFDRSxHQUFHLENBQUNILEdBQUcsQ0FBQyxDQUFFTSxHQUFHLENBQUM7TUFDeEQsSUFBSSxDQUFDTCxLQUFLLENBQUNVLE1BQU0sQ0FBQ1gsR0FBRyxDQUFDO01BQ3RCLElBQUksQ0FBQ1EsSUFBSSxDQUFDeEIsZ0JBQWdCLEVBQUVnQixHQUFHLENBQUM7SUFDcEM7RUFDSjtFQUVVWSxnQkFBZ0JBLENBQUNaLEdBQU0sRUFBUTtJQUNyQyxJQUFJLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxHQUFHLENBQUNGLEdBQUcsQ0FBQyxFQUFFO01BQ3JCLE1BQU1NLEdBQUcsR0FBRyxJQUFJLENBQUNMLEtBQUssQ0FBQ0UsR0FBRyxDQUFDSCxHQUFHLENBQUMsQ0FBRU0sR0FBRztNQUNwQyxJQUFJLENBQUNqQixPQUFPLENBQUNxQixpQkFBaUIsQ0FBQ0osR0FBRyxDQUFDO01BQ25DQSxHQUFHLENBQUNPLE1BQU0sQ0FBQyxDQUFDO0lBQ2hCO0lBQ0EsSUFBSSxDQUFDSixVQUFVLENBQUNULEdBQUcsQ0FBQztFQUN4QjtFQUVPYyxRQUFRQSxDQUFDQyxTQUFpQixFQUFFZixHQUFNLEVBQUVnQixTQUFZLEVBQUVDLEtBQVksRUFBRUMsUUFBZSxFQUFRO0lBQzFGO0lBQ0EsSUFBSSxJQUFJLENBQUNqQixLQUFLLENBQUNDLEdBQUcsQ0FBQ0YsR0FBRyxDQUFDLEVBQUU7TUFDckIsSUFBSSxDQUFDQyxLQUFLLENBQUNFLEdBQUcsQ0FBQ0gsR0FBRyxDQUFDLENBQUVNLEdBQUcsQ0FBQ08sTUFBTSxDQUFDLENBQUM7SUFDckM7SUFFQSxNQUFNTSxJQUFJLEdBQUcsSUFBSSxDQUFDOUIsT0FBTyxDQUFDK0IsZ0JBQWdCLENBQUNMLFNBQVMsRUFBRUUsS0FBSyxDQUFDO0lBQzVELElBQUksQ0FBQ1osUUFBUSxDQUFDTCxHQUFHLEVBQUVnQixTQUFTLEVBQUVHLElBQUksQ0FBQyxDQUFDLENBQUM7O0lBRXJDQSxJQUFJLENBQUNFLElBQUksQ0FBQ0Msa0NBQWlCLENBQUNDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQ2xCLFFBQVEsQ0FBQ0wsR0FBRyxFQUFFZ0IsU0FBUyxFQUFFRyxJQUFJLENBQUMsQ0FBQyxDQUFDRSxJQUFJLENBQ2hGQyxrQ0FBaUIsQ0FBQ0UsS0FBSyxFQUN2QixNQUFNTixRQUFRLENBQUMsQ0FDbkIsQ0FBQztJQUVEQyxJQUFJLENBQUNNLEdBQUcsQ0FBQyxDQUFDO0VBQ2Q7QUFDSjtBQUFDeEMsT0FBQSxDQUFBQyxrQkFBQSxHQUFBQSxrQkFBQSIsImlnbm9yZUxpc3QiOltdfQ==