raiden-ts
Version:
Raiden Light Client Typescript/Javascript SDK
38 lines • 1.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.matrixLeaveUnknownRoomsEpic = void 0;
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
const rx_1 = require("../../utils/rx");
/**
* Leave any (new or invited) room
*
* @param action$ - Observable of RaidenActions
* @param state$ - Observable of RaidenStates
* @param deps - RaidenEpicDeps members
* @param deps.log - Logger instance
* @param deps.matrix$ - MatrixClient async subject
* @param deps.config$ - Config observable
* @returns Empty observable (whole side-effect on matrix instance)
*/
function matrixLeaveUnknownRoomsEpic({}, state$, { log, matrix$, config$ }) {
return matrix$.pipe(
// when matrix finishes initialization, register to matrix Room events
(0, rx_1.withMergeFrom)((matrix) => (0, rxjs_1.fromEvent)(matrix, 'Room')), (0, operators_1.withLatestFrom)(config$),
// this room may become known later for some reason, so wait a little
(0, operators_1.delayWhen)(([, { httpTimeout }]) => (0, rxjs_1.timer)(Math.round((0.5 + 0.5 * Math.random()) * httpTimeout))), (0, rx_1.completeWith)(state$),
// filter for leave events to us
(0, operators_1.filter)(([[, room]]) => {
const myMembership = room.getMyMembership();
if (!myMembership || myMembership === 'leave')
return false; // room already gone while waiting
return true;
}), (0, operators_1.mergeMap)(async ([[matrix, room]]) => {
log.warn('Unknown room in matrix, leaving', room.roomId);
return matrix
.leave(room.roomId)
.catch((err) => log.error('Error leaving unknown room, ignoring', err));
}), (0, operators_1.ignoreElements)());
}
exports.matrixLeaveUnknownRoomsEpic = matrixLeaveUnknownRoomsEpic;
//# sourceMappingURL=rooms.js.map