import { EventDecoder, SHA256HashStore } from "matrix-protection-suite";
import { RoomAuditLog } from "../protections/RoomTakedown/RoomAuditLog";
import { SqliteRoomStateBackingStore } from "./better-sqlite3/SqliteRoomStateBackingStore";
import { UserRestrictionAuditLog } from "../protections/HomeserverUserPolicyApplication/UserRestrictionAuditLog";
export type TopLevelStores = {
    hashStore?: SHA256HashStore;
    roomAuditLog?: RoomAuditLog | undefined;
    roomStateBackingStore?: SqliteRoomStateBackingStore | undefined;
    userRestrictionAuditLog?: UserRestrictionAuditLog | undefined;
    dispose(): void;
};
/**
 * These stores will usually be created at the entrypoint of the draupnir
 * application or attenuated for each draupnir.
 *
 * No i don't like it. Some of these stores ARE specific to the draupnir
 * such as the hasStore's event emitter... that just can't be mixed.
 *
 * We could create a wrapper that disposes of only the stores that
 * have been attenuated... but i don't know about it.
 */
export type DraupnirStores = {
    hashStore?: SHA256HashStore | undefined;
    roomAuditLog?: RoomAuditLog | undefined;
    userRestrictionAuditLog?: UserRestrictionAuditLog | undefined;
    /**
     * Dispose of stores relevant to a specific draupnir instance.
     * For example, the hash store is usually specific to a single draupnir.
     */
    dispose(): void;
};
export declare function createDraupnirStores(topLevelStores: TopLevelStores): DraupnirStores;
export declare function makeTopLevelStores(storagePath: string, eventDecoder: EventDecoder, { isRoomStateBackingStoreEnabled, }: {
    isRoomStateBackingStoreEnabled: boolean;
}): TopLevelStores;
//# sourceMappingURL=DraupnirStores.d.ts.map