import { SmrtCollection } from '@happyvertical/smrt-core'; import { ChatParticipant } from '../models/ChatParticipant.js'; export declare class ChatParticipantCollection extends SmrtCollection { static readonly _itemClass: typeof ChatParticipant; getByRoom(roomId: string): Promise; getByProfile(profileId: string): Promise; findMembership(roomId: string, profileId: string, tenantId?: string): Promise; /** * Returns the participant row only if the profile is an ACTIVE member of the * room (not left/kicked/banned). Used by ChatService to gate sends and reads * on room membership (S5 #1392, IDOR hardening). * * `tenantId` is REQUIRED and always bound into the WHERE clause so a membership * lookup can never resolve a row belonging to another tenant, even when no ALS * tenant context is active to drive the tenancy interceptor (defense in depth). * Making it a required parameter (rather than optional) closes the hole where a * caller could omit it and silently drop the tenant predicate from the query. */ findActiveMembership(roomId: string, profileId: string, tenantId: string): Promise; /** True when the profile is an active member of the room (tenant-bound). */ isActiveMember(roomId: string, profileId: string, tenantId: string): Promise; getOnlineInRoom(roomId: string): Promise; getAdminsInRoom(roomId: string): Promise; countInRoom(roomId: string): Promise; } //# sourceMappingURL=ChatParticipantCollection.d.ts.map