import type { Room } from "../Room"; import type { StateEvent } from "../../storage/types"; import type { Transaction } from "../../storage/idb/Transaction"; import type { ILogItem } from "../../../logging/types"; import type { MemberChange } from "../members/RoomMember"; import type { MemberSync } from "../timeline/persistence/MemberWriter"; /** used for Session.observeRoomState, which observes in all room, but without loading from storage * It receives the sync write transaction, so other stores can be updated as part of the same transaction. */ export interface RoomStateHandler { handleRoomState(room: Room, stateEvent: StateEvent, memberSync: MemberSync, syncWriteTxn: Transaction, log: ILogItem): Promise; updateRoomMembers(room: Room, memberChanges: Map): void; } /** * used for Room.observeStateType and Room.observeStateTypeAndKey * @internal * */ export interface StateObserver { handleStateEvent(event: StateEvent): any; load(roomId: string, txn: Transaction): Promise; setRemoveCallback(callback: () => void): any; }