matrix-react-sdk
Version:
SDK for matrix.org using React
79 lines (76 loc) • 10.4 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ReadyWatchingStore = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _events = require("events");
var _MatrixClientPeg = require("../MatrixClientPeg");
var _actions = require("../dispatcher/actions");
/*
* Copyright 2024 New Vector Ltd.
* Copyright 2021, 2022 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.
*/
class ReadyWatchingStore extends _events.EventEmitter {
constructor(dispatcher) {
super();
(0, _defineProperty2.default)(this, "matrixClient", null);
(0, _defineProperty2.default)(this, "dispatcherRef", null);
(0, _defineProperty2.default)(this, "onAction", async payload => {
this.onDispatcherAction(payload);
if (payload.action === "MatrixActions.sync") {
// Only set the client on the transition into the PREPARED state.
// Everything after this is unnecessary (we only need to know once we have a client)
// and we intentionally don't set the client before this point to avoid stores
// updating for every event emitted during the cached sync.
if (payload.prevState !== _matrix.SyncState.Prepared && payload.state === _matrix.SyncState.Prepared && this.matrixClient !== payload.matrixClient) {
if (this.matrixClient) {
await this.onNotReady();
}
this.matrixClient = payload.matrixClient;
await this.onReady();
}
} else if (payload.action === "on_client_not_viable" || payload.action === _actions.Action.OnLoggedOut) {
if (this.matrixClient) {
await this.onNotReady();
this.matrixClient = null;
}
}
});
this.dispatcher = dispatcher;
}
async start() {
this.dispatcherRef = this.dispatcher.register(this.onAction);
// MatrixClientPeg can be undefined in tests because of circular dependencies with other stores
const matrixClient = _MatrixClientPeg.MatrixClientPeg?.get();
if (matrixClient) {
this.matrixClient = matrixClient;
await this.onReady();
}
}
get mxClient() {
return this.matrixClient; // for external readonly access
}
useUnitTestClient(cli) {
this.matrixClient = cli;
}
destroy() {
if (this.dispatcherRef !== null) this.dispatcher.unregister(this.dispatcherRef);
}
async onReady() {
// Default implementation is to do nothing.
}
async onNotReady() {
// Default implementation is to do nothing.
}
onDispatcherAction(payload) {
// Default implementation is to do nothing.
}
}
exports.ReadyWatchingStore = ReadyWatchingStore;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl9ldmVudHMiLCJfTWF0cml4Q2xpZW50UGVnIiwiX2FjdGlvbnMiLCJSZWFkeVdhdGNoaW5nU3RvcmUiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImRpc3BhdGNoZXIiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsInBheWxvYWQiLCJvbkRpc3BhdGNoZXJBY3Rpb24iLCJhY3Rpb24iLCJwcmV2U3RhdGUiLCJTeW5jU3RhdGUiLCJQcmVwYXJlZCIsInN0YXRlIiwibWF0cml4Q2xpZW50Iiwib25Ob3RSZWFkeSIsIm9uUmVhZHkiLCJBY3Rpb24iLCJPbkxvZ2dlZE91dCIsInN0YXJ0IiwiZGlzcGF0Y2hlclJlZiIsInJlZ2lzdGVyIiwib25BY3Rpb24iLCJNYXRyaXhDbGllbnRQZWciLCJnZXQiLCJteENsaWVudCIsInVzZVVuaXRUZXN0Q2xpZW50IiwiY2xpIiwiZGVzdHJveSIsInVucmVnaXN0ZXIiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3Jlcy9SZWFkeVdhdGNoaW5nU3RvcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuICogQ29weXJpZ2h0IDIwMjEsIDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcbiAqIFBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4gKi9cblxuaW1wb3J0IHsgTWF0cml4Q2xpZW50LCBTeW5jU3RhdGUgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiZXZlbnRzXCI7XG5cbmltcG9ydCB7IE1hdHJpeENsaWVudFBlZyB9IGZyb20gXCIuLi9NYXRyaXhDbGllbnRQZWdcIjtcbmltcG9ydCB7IEFjdGlvblBheWxvYWQgfSBmcm9tIFwiLi4vZGlzcGF0Y2hlci9wYXlsb2Fkc1wiO1xuaW1wb3J0IHsgSURlc3Ryb3lhYmxlIH0gZnJvbSBcIi4uL3V0aWxzL0lEZXN0cm95YWJsZVwiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uL2Rpc3BhdGNoZXIvYWN0aW9uc1wiO1xuaW1wb3J0IHsgTWF0cml4RGlzcGF0Y2hlciB9IGZyb20gXCIuLi9kaXNwYXRjaGVyL2Rpc3BhdGNoZXJcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlYWR5V2F0Y2hpbmdTdG9yZSBleHRlbmRzIEV2ZW50RW1pdHRlciBpbXBsZW1lbnRzIElEZXN0cm95YWJsZSB7XG4gICAgcHJvdGVjdGVkIG1hdHJpeENsaWVudDogTWF0cml4Q2xpZW50IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBkaXNwYXRjaGVyUmVmOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgZGlzcGF0Y2hlcjogTWF0cml4RGlzcGF0Y2hlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyUmVmID0gdGhpcy5kaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMub25BY3Rpb24pO1xuXG4gICAgICAgIC8vIE1hdHJpeENsaWVudFBlZyBjYW4gYmUgdW5kZWZpbmVkIGluIHRlc3RzIGJlY2F1c2Ugb2YgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHdpdGggb3RoZXIgc3RvcmVzXG4gICAgICAgIGNvbnN0IG1hdHJpeENsaWVudCA9IE1hdHJpeENsaWVudFBlZz8uZ2V0KCk7XG4gICAgICAgIGlmIChtYXRyaXhDbGllbnQpIHtcbiAgICAgICAgICAgIHRoaXMubWF0cml4Q2xpZW50ID0gbWF0cml4Q2xpZW50O1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5vblJlYWR5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG14Q2xpZW50KCk6IE1hdHJpeENsaWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXRyaXhDbGllbnQ7IC8vIGZvciBleHRlcm5hbCByZWFkb25seSBhY2Nlc3NcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlVW5pdFRlc3RDbGllbnQoY2xpOiBNYXRyaXhDbGllbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tYXRyaXhDbGllbnQgPSBjbGk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc3BhdGNoZXJSZWYgIT09IG51bGwpIHRoaXMuZGlzcGF0Y2hlci51bnJlZ2lzdGVyKHRoaXMuZGlzcGF0Y2hlclJlZik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIG9uUmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgdG8gZG8gbm90aGluZy5cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgb25Ob3RSZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB0byBkbyBub3RoaW5nLlxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkRpc3BhdGNoZXJBY3Rpb24ocGF5bG9hZDogQWN0aW9uUGF5bG9hZCk6IHZvaWQge1xuICAgICAgICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHRvIGRvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFjdGlvbiA9IGFzeW5jIChwYXlsb2FkOiBBY3Rpb25QYXlsb2FkKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIHRoaXMub25EaXNwYXRjaGVyQWN0aW9uKHBheWxvYWQpO1xuXG4gICAgICAgIGlmIChwYXlsb2FkLmFjdGlvbiA9PT0gXCJNYXRyaXhBY3Rpb25zLnN5bmNcIikge1xuICAgICAgICAgICAgLy8gT25seSBzZXQgdGhlIGNsaWVudCBvbiB0aGUgdHJhbnNpdGlvbiBpbnRvIHRoZSBQUkVQQVJFRCBzdGF0ZS5cbiAgICAgICAgICAgIC8vIEV2ZXJ5dGhpbmcgYWZ0ZXIgdGhpcyBpcyB1bm5lY2Vzc2FyeSAod2Ugb25seSBuZWVkIHRvIGtub3cgb25jZSB3ZSBoYXZlIGEgY2xpZW50KVxuICAgICAgICAgICAgLy8gYW5kIHdlIGludGVudGlvbmFsbHkgZG9uJ3Qgc2V0IHRoZSBjbGllbnQgYmVmb3JlIHRoaXMgcG9pbnQgdG8gYXZvaWQgc3RvcmVzXG4gICAgICAgICAgICAvLyB1cGRhdGluZyBmb3IgZXZlcnkgZXZlbnQgZW1pdHRlZCBkdXJpbmcgdGhlIGNhY2hlZCBzeW5jLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHBheWxvYWQucHJldlN0YXRlICE9PSBTeW5jU3RhdGUuUHJlcGFyZWQgJiZcbiAgICAgICAgICAgICAgICBwYXlsb2FkLnN0YXRlID09PSBTeW5jU3RhdGUuUHJlcGFyZWQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHJpeENsaWVudCAhPT0gcGF5bG9hZC5tYXRyaXhDbGllbnRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdHJpeENsaWVudCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uTm90UmVhZHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRyaXhDbGllbnQgPSBwYXlsb2FkLm1hdHJpeENsaWVudDtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uUmVhZHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkLmFjdGlvbiA9PT0gXCJvbl9jbGllbnRfbm90X3ZpYWJsZVwiIHx8IHBheWxvYWQuYWN0aW9uID09PSBBY3Rpb24uT25Mb2dnZWRPdXQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1hdHJpeENsaWVudCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25Ob3RSZWFkeSgpO1xuICAgICAgICAgICAgICAgIHRoaXMubWF0cml4Q2xpZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsZ0JBQUEsR0FBQUYsT0FBQTtBQUdBLElBQUFHLFFBQUEsR0FBQUgsT0FBQTtBQWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQVdPLE1BQWVJLGtCQUFrQixTQUFTQyxvQkFBWSxDQUF5QjtFQUkzRUMsV0FBV0EsQ0FBb0JDLFVBQTRCLEVBQUU7SUFDaEUsS0FBSyxDQUFDLENBQUM7SUFBQyxJQUFBQyxnQkFBQSxDQUFBQyxPQUFBLHdCQUprQyxJQUFJO0lBQUEsSUFBQUQsZ0JBQUEsQ0FBQUMsT0FBQSx5QkFDWCxJQUFJO0lBQUEsSUFBQUQsZ0JBQUEsQ0FBQUMsT0FBQSxvQkF5Q3hCLE1BQU9DLE9BQXNCLElBQW9CO01BQ2hFLElBQUksQ0FBQ0Msa0JBQWtCLENBQUNELE9BQU8sQ0FBQztNQUVoQyxJQUFJQSxPQUFPLENBQUNFLE1BQU0sS0FBSyxvQkFBb0IsRUFBRTtRQUN6QztRQUNBO1FBQ0E7UUFDQTtRQUNBLElBQ0lGLE9BQU8sQ0FBQ0csU0FBUyxLQUFLQyxpQkFBUyxDQUFDQyxRQUFRLElBQ3hDTCxPQUFPLENBQUNNLEtBQUssS0FBS0YsaUJBQVMsQ0FBQ0MsUUFBUSxJQUNwQyxJQUFJLENBQUNFLFlBQVksS0FBS1AsT0FBTyxDQUFDTyxZQUFZLEVBQzVDO1VBQ0UsSUFBSSxJQUFJLENBQUNBLFlBQVksRUFBRTtZQUNuQixNQUFNLElBQUksQ0FBQ0MsVUFBVSxDQUFDLENBQUM7VUFDM0I7VUFDQSxJQUFJLENBQUNELFlBQVksR0FBR1AsT0FBTyxDQUFDTyxZQUFZO1VBQ3hDLE1BQU0sSUFBSSxDQUFDRSxPQUFPLENBQUMsQ0FBQztRQUN4QjtNQUNKLENBQUMsTUFBTSxJQUFJVCxPQUFPLENBQUNFLE1BQU0sS0FBSyxzQkFBc0IsSUFBSUYsT0FBTyxDQUFDRSxNQUFNLEtBQUtRLGVBQU0sQ0FBQ0MsV0FBVyxFQUFFO1FBQzNGLElBQUksSUFBSSxDQUFDSixZQUFZLEVBQUU7VUFDbkIsTUFBTSxJQUFJLENBQUNDLFVBQVUsQ0FBQyxDQUFDO1VBQ3ZCLElBQUksQ0FBQ0QsWUFBWSxHQUFHLElBQUk7UUFDNUI7TUFDSjtJQUNKLENBQUM7SUFBQSxLQWhFcUNWLFVBQTRCLEdBQTVCQSxVQUE0QjtFQUVsRTtFQUVBLE1BQWFlLEtBQUtBLENBQUEsRUFBa0I7SUFDaEMsSUFBSSxDQUFDQyxhQUFhLEdBQUcsSUFBSSxDQUFDaEIsVUFBVSxDQUFDaUIsUUFBUSxDQUFDLElBQUksQ0FBQ0MsUUFBUSxDQUFDOztJQUU1RDtJQUNBLE1BQU1SLFlBQVksR0FBR1MsZ0NBQWUsRUFBRUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsSUFBSVYsWUFBWSxFQUFFO01BQ2QsSUFBSSxDQUFDQSxZQUFZLEdBQUdBLFlBQVk7TUFDaEMsTUFBTSxJQUFJLENBQUNFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCO0VBQ0o7RUFFQSxJQUFXUyxRQUFRQSxDQUFBLEVBQXdCO0lBQ3ZDLE9BQU8sSUFBSSxDQUFDWCxZQUFZLENBQUMsQ0FBQztFQUM5QjtFQUVPWSxpQkFBaUJBLENBQUNDLEdBQWlCLEVBQVE7SUFDOUMsSUFBSSxDQUFDYixZQUFZLEdBQUdhLEdBQUc7RUFDM0I7RUFFT0MsT0FBT0EsQ0FBQSxFQUFTO0lBQ25CLElBQUksSUFBSSxDQUFDUixhQUFhLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQ2hCLFVBQVUsQ0FBQ3lCLFVBQVUsQ0FBQyxJQUFJLENBQUNULGFBQWEsQ0FBQztFQUNuRjtFQUVBLE1BQWdCSixPQUFPQSxDQUFBLEVBQWtCO0lBQ3JDO0VBQUE7RUFHSixNQUFnQkQsVUFBVUEsQ0FBQSxFQUFrQjtJQUN4QztFQUFBO0VBR01QLGtCQUFrQkEsQ0FBQ0QsT0FBc0IsRUFBUTtJQUN2RDtFQUFBO0FBNkJSO0FBQUN1QixPQUFBLENBQUE3QixrQkFBQSxHQUFBQSxrQkFBQSIsImlnbm9yZUxpc3QiOltdfQ==