matrix-react-sdk
Version:
SDK for matrix.org using React
82 lines (78 loc) • 10.8 kB
JavaScript
"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==