77 lines
3.3 KiB
TypeScript
77 lines
3.3 KiB
TypeScript
|
|
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
|