UNPKG

matrix-react-sdk

Version:
79 lines (76 loc) 10.4 kB
"use strict"; 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==