import { type IContent } from "../../matrix.ts"; import { type RTCCallIntent, type Transport } from "../types.ts"; /** * (MatrixRTC) session membership data. * This represents the *OLD* form of MSC4143, which uses state events to store membership. * Represents the `session` in the memberships section of an m.call.member event as it is on the wire. **/ export type SessionMembershipData = { /** * The RTC application defines the type of the RTC session. */ "application": string; /** * The id of this session. * A session can never span over multiple rooms so this id is to distinguish between * multiple session in one room. A room wide session that is not associated with a user, * and therefore immune to creation race conflicts, uses the `call_id: ""`. */ "call_id": string; /** * The Matrix device ID of this session. A single user can have multiple sessions on different devices. */ "device_id": string; /** * The focus selection system this user/membership is using. * NOTE: This is still included for legacy reasons, but not consumed by the SDK. */ "focus_active": { type: "livekit" | string; focus_selection: "oldest_membership" | "multi_sfu" | string; }; /** * A list of possible foci this user knows about. One of them might be used based on the focus_active * selection system. */ "foci_preferred": Transport[]; /** * Optional field that contains the creation of the session. If it is undefined the creation * is the `origin_server_ts` of the event itself. For updates to the event this property tracks * the `origin_server_ts` of the initial join event. * - If it is undefined it can be interpreted as a "Join". * - If it is defined it can be interpreted as an "Update" */ "created_ts"?: number; /** * If the `application` = `"m.call"` this defines if it is a room or user owned call. * There can always be one room scoped call but multiple user owned calls (breakout sessions) */ "scope"?: "m.room" | "m.user"; /** * Optionally we allow to define a delta to the `created_ts` that defines when the event is expired/invalid. * This should be set to multiple hours. The only reason it exist is to deal with failed delayed events. * (for example caused by a homeserver crashes) **/ "expires"?: number; /** * The intent of the call from the perspective of this user. This may be an audio call, video call or * something else. */ "m.call.intent"?: RTCCallIntent; /** * The id used on the media backend. * (With livekit this is the participant identity on the LK SFU) * This can be a UUID but right now it is `${this.matrixEventData.sender}:${data.device_id}`. * * It is compleatly valid to not set this field. Other clients will treat `undefined` as `${this.matrixEventData.sender}:${data.device_id}` */ "membershipID"?: string; }; /** * Validates that `data` matches the format expected by the legacy form of MSC4143. * @param data The event content. * @returns true if `data` is valid SessionMembershipData * @throws {MatrixRTCMembershipParseError} if the content is not valid */ export declare const checkSessionsMembershipData: (data: IContent) => data is SessionMembershipData; //# sourceMappingURL=session.d.ts.map