@ai-matrx/meet 0.11.42 → 0.11.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/core.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { P as ParticipantIdentity, e as ParticipantRole, k as AdmissionState, a1 as NoteTakerState, a as MeetParticipant, M as MeetingRecord, R as RoomName, d as CallInvite, a6 as ParticipantStanding, a3 as ObserversVisibleTo, S as StageLayout, L as LobbyEntry, aa as RecordingState, U as UserId, aE as RecordingSource, ae as TranscriptSegment, g as MeetingNote, W as WrapUpAnnouncement, j as CollabSnapshot, p as ConnectionQuality, h as MeetingId, b as MeetApi, f as CallMode, O as OrganizationId, m as CallId, n as CallState, Z as MeetingKind, a8 as RecordingPolicy, V as MeetingAttendee, a9 as RecordingRecord, a0 as MeetingSettings, X as MeetingChanges, a4 as OccurrenceOverride, $ as MeetingOccurrence, af as UpcomingOccurrence, Y as MeetingInvitee, I as InviteeInput, q as InviteeRole, ab as RsvpAnswer, ac as RsvpInvitation, c as MeetIdentity, C as CollabPanel } from './collab-Bf5evcLO.cjs';
2
- export { A as AccessTokenSource, l as CAPTION_LANGUAGES, o as CallablePerson, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, J as JsonObject, r as JsonValue, s as MeetApiOptions, t as MeetApiRequest, u as MeetAppFocus, v as MeetBreakoutBroadcast, w as MeetBreakoutPlan, x as MeetBreakoutRoom, y as MeetCollabSettings, z as MeetFileMedia, B as MeetPoll, D as MeetPollOption, G as MeetPollState, H as MeetQuestion, K as MeetQuestionState, N as MeetStroke, Q as MeetingActivities, i as MeetingAppPanel, _ as MeetingNoteKind, a2 as ORGANIZATION_HEADER, a5 as OccurrenceState, a7 as ROLE_RANK, ad as RsvpState, T as TranscriptSource, ag as appPanelOf, ah as applyCollabPacket, ai as asCallId, aj as asMeetingId, ak as asOrganizationId, al as asParticipantIdentity, am as asRoomName, an as asUserId, ao as assignedRoom, ap as autoAssign, aq as breakoutRemainingMs, ar as captureHeldOf, as as collabFromState, at as createMeetApi, au as defaultCaptionLanguage, av as fileDownloadPath, aw as focusFromRow, ax as isGuest, ay as isHostRole, az as isLinkFollower, aA as isObserverRole, aB as loadMeetingActivities, aC as scheduleSettingsPatch, aD as withItem } from './collab-Bf5evcLO.cjs';
1
+ import { P as ParticipantIdentity, e as ParticipantRole, k as AdmissionState, a1 as NoteTakerState, a as MeetParticipant, M as MeetingRecord, R as RoomName, d as CallInvite, a6 as ParticipantStanding, a3 as ObserversVisibleTo, S as StageLayout, L as LobbyEntry, aa as RecordingState, U as UserId, aF as RecordingSource, ae as TranscriptSegment, g as MeetingNote, W as WrapUpAnnouncement, j as CollabSnapshot, p as ConnectionQuality, h as MeetingId, b as MeetApi, f as CallMode, O as OrganizationId, m as CallId, n as CallState, Z as MeetingKind, a8 as RecordingPolicy, V as MeetingAttendee, a9 as RecordingRecord, a0 as MeetingSettings, X as MeetingChanges, a4 as OccurrenceOverride, $ as MeetingOccurrence, af as UpcomingOccurrence, Y as MeetingInvitee, I as InviteeInput, q as InviteeRole, ab as RsvpAnswer, ac as RsvpInvitation, c as MeetIdentity, C as CollabPanel } from './collab-BNJNgXFB.cjs';
2
+ export { A as AccessTokenSource, l as CAPTION_LANGUAGES, o as CallablePerson, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, J as JsonObject, r as JsonValue, s as MeetApiOptions, t as MeetApiRequest, u as MeetAppFocus, v as MeetBreakoutBroadcast, w as MeetBreakoutPlan, x as MeetBreakoutRoom, y as MeetCollabSettings, z as MeetFileMedia, B as MeetPoll, D as MeetPollOption, G as MeetPollState, H as MeetQuestion, K as MeetQuestionState, N as MeetStroke, Q as MeetingActivities, i as MeetingAppPanel, _ as MeetingNoteKind, a2 as ORGANIZATION_HEADER, a5 as OccurrenceState, a7 as ROLE_RANK, ad as RsvpState, T as TranscriptSource, ag as appPanelOf, ah as applyCollabPacket, ai as asCallId, aj as asMeetingId, ak as asOrganizationId, al as asParticipantIdentity, am as asRoomName, an as asUserId, ao as assignedRoom, ap as autoAssign, aq as breakoutClosingMs, ar as breakoutRemainingMs, as as captureHeldOf, at as collabFromState, au as createMeetApi, av as defaultCaptionLanguage, aw as fileDownloadPath, ax as focusFromRow, ay as isGuest, az as isHostRole, aA as isLinkFollower, aB as isObserverRole, aC as loadMeetingActivities, aD as scheduleSettingsPatch, aE as withItem } from './collab-BNJNgXFB.cjs';
3
3
  import { RealtimeManager } from '@ai-matrx/realtime';
4
4
  import { MessagingSupabaseClient, ActionHandler } from '@ai-matrx/messaging';
5
5
  import { RoomOptions, ConnectionQuality as ConnectionQuality$1, Participant } from 'livekit-client';
@@ -158,6 +158,29 @@ declare function leaveChoices(args: {
158
158
  readonly othersPresent: boolean;
159
159
  }): readonly LeaveChoice[];
160
160
 
161
+ /**
162
+ * THE RULES A SCREEN REDRAWS FROM WHILE THE CALL IS RUNNING (P1: chat-restrictions,
163
+ * mod-attendee-av-disabled, time-limit-warning, rec-consent-gate).
164
+ *
165
+ * The host can change a meeting's rules mid-call through the meeting's own rules door, which
166
+ * never talks to the room. The server's state read answers the live values (`live_policy`), and
167
+ * the room reads it on a short timer while the person is in the call — so a rule changed at
168
+ * second 40 is on every screen within one poll. Pure functions here; the timer lives in
169
+ * `meetings.ts`.
170
+ */
171
+
172
+ type ChatMode = "everyone" | "hosts_only" | "off";
173
+ type AvLock = "off" | "mic" | "camera" | "both";
174
+ type RecordingConsent = "notice" | "ok_or_leave" | "view_only_until_agree";
175
+ interface LivePolicy {
176
+ readonly chatMode: ChatMode;
177
+ readonly avLock: AvLock;
178
+ /** 0 = no limit. */
179
+ readonly timeLimitMinutes: number;
180
+ readonly timeLimitWarningMinutes: number;
181
+ readonly recordingConsent: RecordingConsent;
182
+ }
183
+
161
184
  /**
162
185
  * LISTEN-ONLY ATTENDANCE — being IN the room is never contingent on a device.
163
186
  *
@@ -237,6 +260,20 @@ interface MediaRegionState {
237
260
  readonly audioOutput: "ok" | "blocked";
238
261
  readonly notice: DeviceNotice | null;
239
262
  readonly offer: DeviceOffer | null;
263
+ /**
264
+ * THE PRE-JOIN CHECK per kind (P1 `perm-prompt-pending`, `perm-blocked-site`, `device-none-found`,
265
+ * `device-busy`): what the preview found BEFORE the room exists. `prompting` = the browser was
266
+ * asked and has not answered (Join stays usable); `unavailable` carries the classified refusal.
267
+ */
268
+ readonly preview: {
269
+ readonly microphone: DevicePreview;
270
+ readonly camera: DevicePreview;
271
+ };
272
+ }
273
+ /** One kind's pre-join check. `idle` = nothing was tried (or the person turned it off before). */
274
+ interface DevicePreview {
275
+ readonly state: "idle" | "prompting" | "on" | "off" | "unavailable";
276
+ readonly unavailable: MediaUnavailable | null;
240
277
  }
241
278
  declare const IDLE_MEDIA_REGION: MediaRegionState;
242
279
  interface LocalTrackState {
@@ -593,7 +630,7 @@ interface RoomChatMessage {
593
630
  * packet, addressed to this participant. Rendered once, dismissible, in words.
594
631
  */
595
632
  interface ModerationNotice {
596
- readonly kind: "muted" | "ask-unmute" | "removed" | "role";
633
+ readonly kind: "muted" | "ask-unmute" | "removed" | "role" | "locked" | "capability";
597
634
  readonly text: string;
598
635
  readonly at: number;
599
636
  }
@@ -664,6 +701,8 @@ interface ShareRegion {
664
701
  /** The fix, in the core's words (system setting, administrator policy, …), or null. */
665
702
  readonly remedy: string | null;
666
703
  readonly at: number;
704
+ /** While presenting: whether the share carries sound (`share-audio`). Absent = not known. */
705
+ readonly audio?: boolean;
667
706
  }
668
707
  declare const NO_SHARE: ShareRegion;
669
708
  interface MeetSnapshot {
@@ -760,6 +799,16 @@ interface MeetSnapshot {
760
799
  readonly waitingCount: number;
761
800
  /** S8: what the host's Leave offers in this meeting (from the token's `leave_policy`). */
762
801
  readonly leavePolicy: LeavePolicy;
802
+ /** The meeting's rules as they are RIGHT NOW (chat mode, attendee lock, time limit), read live while in the call. */
803
+ readonly livePolicy: LivePolicy;
804
+ /** host-reclaim: this person is the meeting's owner and may take the host powers back (Zoom rules). */
805
+ readonly canReclaim: boolean;
806
+ /** rec-consent-gate: this person agreed to the recording that is running. */
807
+ readonly recordingConsentGiven: boolean;
808
+ /** When this run started (epoch ms), so every screen counts a time limit down together. */
809
+ readonly sessionStartedAt: number | null;
810
+ /** True from the moment a host muted THIS microphone until the person turns it on themselves. */
811
+ readonly mutedByHost: boolean;
763
812
  /** The last thing a host did to THIS participant, in words. Dismissible. */
764
813
  readonly moderationNotice: ModerationNotice | null;
765
814
  /**
@@ -821,6 +870,10 @@ interface MeetSnapshot {
821
870
  * last device change and an offered new device. Written only by `media-supervisor.ts`.
822
871
  */
823
872
  readonly mediaRegion: MediaRegionState;
873
+ /** `captions-toggle`: THIS viewer wants captions. Local to the viewer; never sent to the room. */
874
+ readonly captionsOn: boolean;
875
+ /** Why asking for captions failed, in the server's words (`captions-unavailable`). */
876
+ readonly captionsRefusal: NoteTakerRefusal | null;
824
877
  /** The last failure, with its remedy. Never null-and-hoping. */
825
878
  readonly failure: {
826
879
  readonly message: string;
@@ -832,6 +885,11 @@ interface MeetSnapshot {
832
885
  * ask again. Absent for every refusal that does not lift (CORE-DESIGN §11 `wr-denied-reknock`).
833
886
  */
834
887
  readonly retryAt?: number | null;
888
+ /**
889
+ * `join` = the person never got into the call this time (`net-cannot-connect`): a network or
890
+ * server failure on the way IN is "can't connect", not "lost your connection".
891
+ */
892
+ readonly stage?: "join";
835
893
  } | null;
836
894
  /**
837
895
  * Meet wave 5: polls, Q&A, the shared whiteboard and the breakout plan — what the
@@ -976,6 +1034,14 @@ interface MeetAi {
976
1034
  meetingId: MeetingId;
977
1035
  roomName: RoomName;
978
1036
  }): Promise<NoteTakerDispatch>;
1037
+ /**
1038
+ * Make sure the note-taker (the speech-to-text) is in the room because THIS viewer turned
1039
+ * captions on. Open to everyone in the meeting, guests included. Never throws: a refusal
1040
+ * is stored as `captionsRefusal` in the server's own words.
1041
+ */
1042
+ requestCaptions(args: {
1043
+ meetingId: MeetingId;
1044
+ }): Promise<void>;
979
1045
  /** Dismiss it. Nothing automatic brings a dismissed note-taker back (D9). */
980
1046
  stopNoteTaker(args: {
981
1047
  meetingId: MeetingId;
@@ -2030,6 +2096,8 @@ interface MeetRoomDriver {
2030
2096
  supportsVideoEffects?(): boolean;
2031
2097
  /** Whether this browser can share a screen at all (iOS cannot). Absent = assume yes. */
2032
2098
  supportsScreenShare?(): boolean;
2099
+ /** The screen share being published carries sound (`share-audio`). */
2100
+ screenShareHasAudio?(): boolean;
2033
2101
  /**
2034
2102
  * Attach a participant's track to a media element. Returns the detach
2035
2103
  * function — returning it (rather than exposing `detach`) is what makes a
@@ -2411,6 +2479,14 @@ interface MediaSupervisor {
2411
2479
  onDisconnected(): void;
2412
2480
  /** "Enable sound" — call from inside the person's click. */
2413
2481
  enableAudio(): Promise<void>;
2482
+ /**
2483
+ * The pre-join preview's outcome for one kind: `prompting` when it asks the browser, `on` / `off`
2484
+ * when it settles or is turned off, or the error it was refused with (classified here, against
2485
+ * the permission store, exactly as an in-room refusal is).
2486
+ */
2487
+ preview(kind: MediaKind, outcome: "prompting" | "on" | "off" | {
2488
+ readonly error: unknown;
2489
+ }): Promise<void>;
2414
2490
  /** Use the offered new device. */
2415
2491
  acceptOffer(): Promise<void>;
2416
2492
  dismissOffer(): void;
@@ -2592,6 +2668,10 @@ interface RoomEngine {
2592
2668
  /** S6c: "Enable sound" — resume remote audio the autoplay policy holds. Call inside the click. */
2593
2669
  enableAudio(): Promise<void>;
2594
2670
  /** S6c: switch to the device the supervisor offered (a new one was plugged in). */
2671
+ /** The pre-join preview's outcome for one kind (the media supervisor classifies a refusal). */
2672
+ previewDevice(kind: "microphone" | "camera", outcome: "prompting" | "on" | "off" | {
2673
+ readonly error: unknown;
2674
+ }): Promise<void>;
2595
2675
  acceptDeviceOffer(): Promise<void>;
2596
2676
  dismissDeviceOffer(): void;
2597
2677
  dismissDeviceNotice(): void;
@@ -2876,6 +2956,8 @@ interface RoomToken {
2876
2956
  readonly connectionPolicy?: ConnectionPolicy | undefined;
2877
2957
  /** S8: what the host's Leave offers for this meeting (`host_leave_prompt`, `end_confirm`). */
2878
2958
  readonly leavePolicy?: LeavePolicy | undefined;
2959
+ /** host-reclaim (`host_reclaim = prompt`): the returning owner may take the host powers back. */
2960
+ readonly canReclaim?: boolean | undefined;
2879
2961
  }
2880
2962
 
2881
2963
  interface TokenClientOptions {
@@ -2976,6 +3058,8 @@ declare const MEET_ROUTES: {
2976
3058
  readonly noteTakerStop: "/api/v1/meet/agent/stop";
2977
3059
  /** In-meeting Q&A. Streams NDJSON; body is `{meeting_id, question}` only. */
2978
3060
  readonly intelligenceAsk: "/api/v1/meet/intelligence/ask";
3061
+ /** Anyone in the meeting (guests with the room pass included) asks for captions for themselves. */
3062
+ readonly noteTakerCaptions: "/api/v1/meet/agent/captions";
2979
3063
  /** A host ends the meeting for everyone. Served by MRI-A6. */
2980
3064
  readonly meetingEnd: "/api/v1/meet/end";
2981
3065
  /**
@@ -3589,12 +3673,13 @@ declare function createWebEffectsStorage(key?: string): EffectsStorage;
3589
3673
  */
3590
3674
 
3591
3675
  /** Every host power the server performs. One vocabulary with `services/meet/moderation.py`. */
3592
- type ModerationAction = "mute" | "stop_video" | "stop_screen" | "mute_all" | "ask_unmute" | "ask_all_unmute" | "spotlight" | "sync_presenter" | "raise_hand" | "lower_hand" | "lower_all_hands" | "make_cohost" | "revoke_cohost" | "transfer_host" | "rename" | "remove" | "report";
3676
+ type ModerationAction = "mute" | "stop_video" | "stop_screen" | "mute_all" | "ask_unmute" | "ask_all_unmute" | "spotlight" | "sync_presenter" | "raise_hand" | "lower_hand" | "lower_all_hands" | "make_cohost" | "make_presenter" | "revoke_presenter" | "set_av_lock" | "revoke_cohost" | "transfer_host" | "reclaim_host" | "rename" | "remove" | "report";
3593
3677
  declare const MODERATION_ACTIONS: readonly ModerationAction[];
3594
3678
  interface ModerationRequest {
3595
3679
  readonly action: ModerationAction;
3596
3680
  readonly identity?: ParticipantIdentity | null | undefined;
3597
3681
  readonly name?: string | undefined;
3682
+ readonly value?: string | undefined;
3598
3683
  readonly reason?: string | undefined;
3599
3684
  }
3600
3685
  interface ModerationResult {
@@ -3869,7 +3954,7 @@ declare function takeMoveRequest(store: CollabStoreLike): {
3869
3954
  * a link follower whose role is `participant` renders `guest` (CORE-DESIGN §2.1); `presenter` /
3870
3955
  * `viewer` render `participant` until the contract adopts them (§3.7 C3).
3871
3956
  */
3872
- type ObservedRole = "host" | "cohost" | "participant" | "guest";
3957
+ type ObservedRole = "host" | "cohost" | "presenter" | "participant" | "guest";
3873
3958
  /** `data-meet-phase` — the core's phase IS the contract value (S6a: no translation layer). */
3874
3959
  type ObservedPhase = MeetPhase;
3875
3960
  type ObservedConnection = ConnectionRegion;
@@ -3898,7 +3983,7 @@ interface ObserveInput {
3898
3983
  * The reason comes from the media supervisor (S6c), which reads the browser's permission store: a
3899
3984
  * kind the browser denies is `unavailable:denied` even when nothing tried to open it.
3900
3985
  */
3901
- declare function observedDevice(track: LocalTrackState, permission?: PermissionReading): string;
3986
+ declare function observedDevice(track: LocalTrackState, permission?: PermissionReading, held?: "locked" | "muted_by_host" | null): string;
3902
3987
  /**
3903
3988
  * The phase the person is looking at: the store's phase, verbatim (CORE-DESIGN §3.1). The one
3904
3989
  * derivation left is the ended meeting: a row that says it is over renders `ended` for anyone not
@@ -3917,4 +4002,64 @@ declare function participantAttributes(p: MeetParticipant): Record<string, strin
3917
4002
  /** The listen-only notice's contract code, from why the microphone is off. */
3918
4003
  declare function microphoneNoticeCode(track: LocalTrackState, permission?: PermissionReading): "mic-blocked" | "device-lost" | null;
3919
4004
 
3920
- export { ATTENDANCE_CSV_HEADER, AdmissionState, type AnnounceResult, type ApplyRoomEventArgs, type AskArgs, type AttendanceKind, type AttendanceRow, type AudioProcessing, type BrowserFamily, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, type CallCenter, type CallCenterOptions, CallId, CallInvite, type CallInviteHandlerOptions, type CallInvitePayload, CallMode, type CallOutcomePhase, CallState, type CollabAction, CollabPanel, type CollabRequest, type CollabResult, type CollabRuntime, CollabSnapshot, type CollabStoreLike, type ConnectionPolicy, ConnectionQuality, type ConnectionRegion, type ConnectionSupervisor, type ConnectionSupervisorOptions, type CreateCallInviteInput, type CreateMeetingInput, DATA_TOPICS, DEFAULT_CONNECTION_POLICY, DEFAULT_EFFECTS, DEFAULT_LEAVE_POLICY, DEFAULT_PAGE_SIZE, type DataTopic, type DeviceKind, type DeviceManager, type DeviceManagerOptions, type DeviceNotice, type DeviceOffer, type DeviceSnapshot, type DeviceStorage, type DeviceUnavailableReason, type DriverConnectionState, type DriverParticipant, type DriverTrackKind, type DriverTranscription, END_MEETING_NOT_SERVED, type EffectsStorage, type EndMeetingResult, type ExitInput, type ExitPhase, type ExitResolution, type ExitServerWord, type FollowUpDraft, type FollowUpRecipient, type FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, type Ghost, type GuestRecordAccess, type GuestRecordAccessResolution, type GuestRecordAccessSetting, type HostLeavePrompt, IDLE_MEDIA, IDLE_MEDIA_REGION, IDLE_PHASES, IDLE_TRACK, type InRoomClient, type InRoomClientOptions, InviteeInput, InviteeRole, JOIN_REFUSAL_REASONS, type JoinRefusalReason, type JoinRequest, LISTEN_ONLY_NOTICE, LIVEKIT_BASE_DELAYS_MS, LIVE_PHASES, type LeaveChoice, type LeavePolicy, type LibraryRecording, type LiveKitDriverOptions, LobbyEntry, type LocalMediaState, type LocalTrackState, MEETING_INVITE_KIND, MEETING_INVITE_VERSION, MEETING_PASS_HEADER, MEETING_RECORD_GRACE_MS, MEET_ANSWER_CONTEXT_EVENT, MEET_ANSWER_EVENTS, MEET_EVENTS, MEET_REACTIONS, MEET_ROUTES, MEET_SCHEMA, MODERATION_ACTIONS, type MediaDevicesLike, type MediaEffects, type MediaKind, type MediaPlatform, type MediaRegionState, type MediaSupervisor, type MediaSupervisorOptions, type MediaUnavailable, type MeetAi, type MeetAiAnswer, type MeetAiOptions, type MeetAnswerCoverage, MeetApi, type MeetDevice, MeetError, type MeetErrorCode, type MeetEvent, type MeetGrants, MeetIdentity, type MeetObservation, MeetParticipant, type MeetPatch, type MeetPhase, type MeetRepository, type MeetRoomDriver, type MeetSnapshot, type MeetStore, MeetingAttendee, MeetingChanges, type MeetingChatHistory, MeetingId, type MeetingInviteHandlerOptions, type MeetingInvitePayload, MeetingInvitee, MeetingKind, MeetingNote, MeetingOccurrence, MeetingRecord, type MeetingRecordAnswer, type MeetingRecordBundle, type MeetingRecordCache, type MeetingRecordChange, type MeetingRecordFailure, type MeetingRecordParts, type MeetingRecordRestriction, type MeetingRecordRestrictionNotice, type MeetingRecordState, type MeetingSearchHit, type MeetingSearchSource, type MeetingSession, type MeetingSessionOptions, MeetingSettings, type ModerationAction, type ModerationNotice, type ModerationRequest, type ModerationResult, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NO_SHARE, type NameBook, type NetworkPort, type NoteTakerDispatch, type NoteTakerRefusal, NoteTakerState, type NoteTakerStatus, type ObserveInput, type ObservedConnection, type ObservedPhase, ObserversVisibleTo, OccurrenceOverride, OrganizationId, type OsFamily, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_HAND_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, ParticipantIdentity, ParticipantRole, ParticipantStanding, type PermissionReading, type PhaseEvent, type PhaseEventType, type PlatformDevice, REACTION_TTL_MS, REFUSED_ABSENCE, RESUME_WINDOW_MS, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, type ReconnectPolicyLike, type ReconnectPolicyOptions, type RecordingController, type RecordingControllerOptions, RecordingPolicy, RecordingRecord, RecordingState, type RepositoryOptions, type ResumeMarker, type ResumeStorage, type RoomChatMessage, type RoomDriverFactory, type RoomDriverHandlers, type RoomEngine, type RoomEngineOptions, type RoomEventOutcome, type RoomEventTopic, RoomName, type RoomReaction, type RoomToken, type RoomTokenStorage, RsvpAnswer, RsvpInvitation, type ScheduleMeetingInput, type ShareRegion, type Stage, type StageArgs, StageLayout, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, type TokenClient, type TokenClientOptions, type TokenRequest, type TranscriptBlock, type TranscriptFormat, type TranscriptMatch, TranscriptSegment, UpcomingOccurrence, UserId, type VideoEffect, WAITING_PHASES, WrapUpAnnouncement, type WrapUpStatus, absenceSentence, activeWrapUpSummary, activityAttention, admissionPhase, announceMeeting, applyRoomEvent, assembleMeetingRecord, attendanceCsv, attendanceReport, attendanceTotals, attendeeKey, autoRejoinDelayMs, availableActivities, callInviteAction, callInviteText, callStateLabel, canModerate, canModerateParticipant, canTransition, captionSegment, changesPatch, classifyDeviceFailure, clockPosition, computeStage, connectionPolicyFrom, countLabel, createCallCenter, createCallInviteHandler, createConnectionSupervisor, createDeviceManager, createInRoomClient, createLiveKitDriver, createMediaSupervisor, createMeetAi, createMeetRepository, createMeetStore, createMeetingInviteHandler, createMeetingRecordCache, createMeetingSession, createMemoryDeviceStorage, createReachabilityProbe, createReconnectPolicy, createRecordingController, createRoomEngine, createTokenClient, createWebDeviceStorage, createWebEffectsStorage, createWebNetworkPort, createWebResumeStorage, createWebRoomTokenStorage, detectBrowser, detectOs, deviceChipLabel, deviceFixSteps, deviceNoticeCode, deviceUnavailableReason, displayNameFor, gridColumns, groupTranscript, guestRecordAccessExplanation, guestRecordAccessLabel, guestRecordAccessSetting, hasEnded, hostUserIds, httpUrlOf, invalidResponse, isGuestIdentity, isJoinRefusalReason, isListenOnly, isLivePhase, isNoteTaker, isRealName, isRefusedPhase, isRoomEventTopic, isUnannouncedDeparture, isWaitingPhase, learnName, learnNames, leaveChoices, leavePolicyFrom, listenOnlyNotice, loadFollowUpDraft, loadGuestMeetingRecord, loadMeetingChat, loadMeetingRecord, loadMeetingRecordParts, mapConnectionState, mapQuality, meetingInviteAction, meetingLength, meetingLink, meetingPassHeaders, meetingPath, meetingSlug, meetingTopic, meetingWhen, mergeCaption, mergeGhosts, mergeRecord, microphoneNoticeCode, moveToRoom, nextPhase, nextTranslationBatch, normalizeDeviceError, normalizeMeetError, normalizeSpoken, noteTakerIdentity, noteTakerLabel, noteTakerParticipant, noteTakerStatus, notesDocument, observe as observeMeeting, observedDevice, observedPhase, observedQuality, orderParticipants, parseRoomToken, participantAttributes, participantSummary, performCollab, playableRecordingFileId, projectInvitee, projectLibraryRecording, projectNote, projectOccurrence, projectOverride, projectParticipant, projectRsvpInvitation, projectSearchHit, projectSegment, projectUpcoming, pushMeetingToGoogleCalendar, readServerRefusal, readableTranscript, reasonOf, recordingLabel, recordingNotice, recordingOffsetMs, refusalPhase, rememberedMeetingPass, resolveExit, roleOf, roomTopic, rootAttributes, searchTranscript, sendFollowUp, setCaptionLanguage, setGuestRecordAccess, settingsPatch, snapshotParticipant, snippetRuns, staticObservation, summarizeMeetingRecordRestrictions, takeMoveRequest, takePanelRequest, transcriptDocument, unavailableFrom, uniqueAttendees, untranslatedLines, userTopic, wasRefused, webMediaPlatform, wrapUpStatus };
4005
+ /**
4006
+ * CG — WHAT THIS BROWSER CAN DO, probed before anything else (CORE-DESIGN §11 `browser-unsupported`,
4007
+ * `share-unsupported-mobile`). Pure over an injected scope so the rules are the tests; the web
4008
+ * reading is `detectCapabilities()` with no argument. Never touches LiveKit.
4009
+ */
4010
+ type UnsupportedReason = "no_webrtc";
4011
+ interface MeetCapabilities {
4012
+ /** False only when a call cannot run here at all (no WebRTC: an in-app webview, an old browser). */
4013
+ readonly canJoin: boolean;
4014
+ readonly reason: UnsupportedReason | null;
4015
+ /** The in-app browser this looks like (Instagram, Facebook, LinkedIn…), or null. */
4016
+ readonly inAppBrowser: string | null;
4017
+ /** A phone or tablet: no screen sharing from the browser there. */
4018
+ readonly mobile: boolean;
4019
+ /** `getDisplayMedia` exists AND this is not a phone/tablet. */
4020
+ readonly canShareScreen: boolean;
4021
+ }
4022
+ interface ScopeLike {
4023
+ readonly RTCPeerConnection?: unknown;
4024
+ readonly webkitRTCPeerConnection?: unknown;
4025
+ readonly navigator?: {
4026
+ readonly userAgent?: string;
4027
+ readonly maxTouchPoints?: number;
4028
+ readonly mediaDevices?: {
4029
+ readonly getDisplayMedia?: unknown;
4030
+ };
4031
+ };
4032
+ }
4033
+ declare function isMobileUserAgent(userAgent: string, maxTouchPoints?: number): boolean;
4034
+ declare function detectCapabilities(scope?: ScopeLike | null): MeetCapabilities;
4035
+ /** The words for a browser that cannot join: what to open instead. Short lines (layout, not prose). */
4036
+ declare function unsupportedWords(capabilities: MeetCapabilities): {
4037
+ readonly title: string;
4038
+ readonly body: string;
4039
+ };
4040
+
4041
+ /**
4042
+ * MS — SPEAKING WHILE MUTED (CORE-DESIGN §11 `speaking-while-muted`). A pure detector fed the local
4043
+ * microphone level while the person muted themselves: sound that lasts `holdMs` (gaps shorter than
4044
+ * `gapMs` do not break it) fires ONCE, then stays quiet for `cooldownMs` so the nudge never nags.
4045
+ * The level source is the platform's (a browser analyser in the web skin); the rule lives here.
4046
+ */
4047
+ interface SpeakingWhileMutedOptions {
4048
+ /** Peak level 0..1 that counts as speech. */
4049
+ readonly threshold?: number;
4050
+ /** How long speech must last before the nudge. */
4051
+ readonly holdMs?: number;
4052
+ /** A pause shorter than this does not end the speech. */
4053
+ readonly gapMs?: number;
4054
+ /** After a nudge, no second one for this long. */
4055
+ readonly cooldownMs?: number;
4056
+ }
4057
+ interface SpeakingWhileMutedDetector {
4058
+ /** One level reading at time `at` (ms). True exactly when the nudge should show now. */
4059
+ feed(level: number, at: number): boolean;
4060
+ /** The person unmuted (or left): start over, cooldown included. */
4061
+ reset(): void;
4062
+ }
4063
+ declare function createSpeakingWhileMutedDetector(options?: SpeakingWhileMutedOptions): SpeakingWhileMutedDetector;
4064
+
4065
+ export { ATTENDANCE_CSV_HEADER, AdmissionState, type AnnounceResult, type ApplyRoomEventArgs, type AskArgs, type AttendanceKind, type AttendanceRow, type AudioProcessing, type BrowserFamily, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, type CallCenter, type CallCenterOptions, CallId, CallInvite, type CallInviteHandlerOptions, type CallInvitePayload, CallMode, type CallOutcomePhase, CallState, type CollabAction, CollabPanel, type CollabRequest, type CollabResult, type CollabRuntime, CollabSnapshot, type CollabStoreLike, type ConnectionPolicy, ConnectionQuality, type ConnectionRegion, type ConnectionSupervisor, type ConnectionSupervisorOptions, type CreateCallInviteInput, type CreateMeetingInput, DATA_TOPICS, DEFAULT_CONNECTION_POLICY, DEFAULT_EFFECTS, DEFAULT_LEAVE_POLICY, DEFAULT_PAGE_SIZE, type DataTopic, type DeviceKind, type DeviceManager, type DeviceManagerOptions, type DeviceNotice, type DeviceOffer, type DeviceSnapshot, type DeviceStorage, type DeviceUnavailableReason, type DriverConnectionState, type DriverParticipant, type DriverTrackKind, type DriverTranscription, END_MEETING_NOT_SERVED, type EffectsStorage, type EndMeetingResult, type ExitInput, type ExitPhase, type ExitResolution, type ExitServerWord, type FollowUpDraft, type FollowUpRecipient, type FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, type Ghost, type GuestRecordAccess, type GuestRecordAccessResolution, type GuestRecordAccessSetting, type HostLeavePrompt, IDLE_MEDIA, IDLE_MEDIA_REGION, IDLE_PHASES, IDLE_TRACK, type InRoomClient, type InRoomClientOptions, InviteeInput, InviteeRole, JOIN_REFUSAL_REASONS, type JoinRefusalReason, type JoinRequest, LISTEN_ONLY_NOTICE, LIVEKIT_BASE_DELAYS_MS, LIVE_PHASES, type LeaveChoice, type LeavePolicy, type LibraryRecording, type LiveKitDriverOptions, LobbyEntry, type LocalMediaState, type LocalTrackState, MEETING_INVITE_KIND, MEETING_INVITE_VERSION, MEETING_PASS_HEADER, MEETING_RECORD_GRACE_MS, MEET_ANSWER_CONTEXT_EVENT, MEET_ANSWER_EVENTS, MEET_EVENTS, MEET_REACTIONS, MEET_ROUTES, MEET_SCHEMA, MODERATION_ACTIONS, type MediaDevicesLike, type MediaEffects, type MediaKind, type MediaPlatform, type MediaRegionState, type MediaSupervisor, type MediaSupervisorOptions, type MediaUnavailable, type MeetAi, type MeetAiAnswer, type MeetAiOptions, type MeetAnswerCoverage, MeetApi, type MeetCapabilities, type MeetDevice, MeetError, type MeetErrorCode, type MeetEvent, type MeetGrants, MeetIdentity, type MeetObservation, MeetParticipant, type MeetPatch, type MeetPhase, type MeetRepository, type MeetRoomDriver, type MeetSnapshot, type MeetStore, MeetingAttendee, MeetingChanges, type MeetingChatHistory, MeetingId, type MeetingInviteHandlerOptions, type MeetingInvitePayload, MeetingInvitee, MeetingKind, MeetingNote, MeetingOccurrence, MeetingRecord, type MeetingRecordAnswer, type MeetingRecordBundle, type MeetingRecordCache, type MeetingRecordChange, type MeetingRecordFailure, type MeetingRecordParts, type MeetingRecordRestriction, type MeetingRecordRestrictionNotice, type MeetingRecordState, type MeetingSearchHit, type MeetingSearchSource, type MeetingSession, type MeetingSessionOptions, MeetingSettings, type ModerationAction, type ModerationNotice, type ModerationRequest, type ModerationResult, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NO_SHARE, type NameBook, type NetworkPort, type NoteTakerDispatch, type NoteTakerRefusal, NoteTakerState, type NoteTakerStatus, type ObserveInput, type ObservedConnection, type ObservedPhase, ObserversVisibleTo, OccurrenceOverride, OrganizationId, type OsFamily, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_HAND_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, ParticipantIdentity, ParticipantRole, ParticipantStanding, type PermissionReading, type PhaseEvent, type PhaseEventType, type PlatformDevice, REACTION_TTL_MS, REFUSED_ABSENCE, RESUME_WINDOW_MS, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, type ReconnectPolicyLike, type ReconnectPolicyOptions, type RecordingController, type RecordingControllerOptions, RecordingPolicy, RecordingRecord, RecordingState, type RepositoryOptions, type ResumeMarker, type ResumeStorage, type RoomChatMessage, type RoomDriverFactory, type RoomDriverHandlers, type RoomEngine, type RoomEngineOptions, type RoomEventOutcome, type RoomEventTopic, RoomName, type RoomReaction, type RoomToken, type RoomTokenStorage, RsvpAnswer, RsvpInvitation, type ScheduleMeetingInput, type ShareRegion, type SpeakingWhileMutedDetector, type SpeakingWhileMutedOptions, type Stage, type StageArgs, StageLayout, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, type TokenClient, type TokenClientOptions, type TokenRequest, type TranscriptBlock, type TranscriptFormat, type TranscriptMatch, TranscriptSegment, type UnsupportedReason, UpcomingOccurrence, UserId, type VideoEffect, WAITING_PHASES, WrapUpAnnouncement, type WrapUpStatus, absenceSentence, activeWrapUpSummary, activityAttention, admissionPhase, announceMeeting, applyRoomEvent, assembleMeetingRecord, attendanceCsv, attendanceReport, attendanceTotals, attendeeKey, autoRejoinDelayMs, availableActivities, callInviteAction, callInviteText, callStateLabel, canModerate, canModerateParticipant, canTransition, captionSegment, changesPatch, classifyDeviceFailure, clockPosition, computeStage, connectionPolicyFrom, countLabel, createCallCenter, createCallInviteHandler, createConnectionSupervisor, createDeviceManager, createInRoomClient, createLiveKitDriver, createMediaSupervisor, createMeetAi, createMeetRepository, createMeetStore, createMeetingInviteHandler, createMeetingRecordCache, createMeetingSession, createMemoryDeviceStorage, createReachabilityProbe, createReconnectPolicy, createRecordingController, createRoomEngine, createSpeakingWhileMutedDetector, createTokenClient, createWebDeviceStorage, createWebEffectsStorage, createWebNetworkPort, createWebResumeStorage, createWebRoomTokenStorage, detectBrowser, detectCapabilities, detectOs, deviceChipLabel, deviceFixSteps, deviceNoticeCode, deviceUnavailableReason, displayNameFor, gridColumns, groupTranscript, guestRecordAccessExplanation, guestRecordAccessLabel, guestRecordAccessSetting, hasEnded, hostUserIds, httpUrlOf, invalidResponse, isGuestIdentity, isJoinRefusalReason, isListenOnly, isLivePhase, isMobileUserAgent, isNoteTaker, isRealName, isRefusedPhase, isRoomEventTopic, isUnannouncedDeparture, isWaitingPhase, learnName, learnNames, leaveChoices, leavePolicyFrom, listenOnlyNotice, loadFollowUpDraft, loadGuestMeetingRecord, loadMeetingChat, loadMeetingRecord, loadMeetingRecordParts, mapConnectionState, mapQuality, meetingInviteAction, meetingLength, meetingLink, meetingPassHeaders, meetingPath, meetingSlug, meetingTopic, meetingWhen, mergeCaption, mergeGhosts, mergeRecord, microphoneNoticeCode, moveToRoom, nextPhase, nextTranslationBatch, normalizeDeviceError, normalizeMeetError, normalizeSpoken, noteTakerIdentity, noteTakerLabel, noteTakerParticipant, noteTakerStatus, notesDocument, observe as observeMeeting, observedDevice, observedPhase, observedQuality, orderParticipants, parseRoomToken, participantAttributes, participantSummary, performCollab, playableRecordingFileId, projectInvitee, projectLibraryRecording, projectNote, projectOccurrence, projectOverride, projectParticipant, projectRsvpInvitation, projectSearchHit, projectSegment, projectUpcoming, pushMeetingToGoogleCalendar, readServerRefusal, readableTranscript, reasonOf, recordingLabel, recordingNotice, recordingOffsetMs, refusalPhase, rememberedMeetingPass, resolveExit, roleOf, roomTopic, rootAttributes, searchTranscript, sendFollowUp, setCaptionLanguage, setGuestRecordAccess, settingsPatch, snapshotParticipant, snippetRuns, staticObservation, summarizeMeetingRecordRestrictions, takeMoveRequest, takePanelRequest, transcriptDocument, unavailableFrom, uniqueAttendees, unsupportedWords, untranslatedLines, userTopic, wasRefused, webMediaPlatform, wrapUpStatus };
package/dist/core.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { P as ParticipantIdentity, e as ParticipantRole, k as AdmissionState, a1 as NoteTakerState, a as MeetParticipant, M as MeetingRecord, R as RoomName, d as CallInvite, a6 as ParticipantStanding, a3 as ObserversVisibleTo, S as StageLayout, L as LobbyEntry, aa as RecordingState, U as UserId, aE as RecordingSource, ae as TranscriptSegment, g as MeetingNote, W as WrapUpAnnouncement, j as CollabSnapshot, p as ConnectionQuality, h as MeetingId, b as MeetApi, f as CallMode, O as OrganizationId, m as CallId, n as CallState, Z as MeetingKind, a8 as RecordingPolicy, V as MeetingAttendee, a9 as RecordingRecord, a0 as MeetingSettings, X as MeetingChanges, a4 as OccurrenceOverride, $ as MeetingOccurrence, af as UpcomingOccurrence, Y as MeetingInvitee, I as InviteeInput, q as InviteeRole, ab as RsvpAnswer, ac as RsvpInvitation, c as MeetIdentity, C as CollabPanel } from './collab-Bf5evcLO.js';
2
- export { A as AccessTokenSource, l as CAPTION_LANGUAGES, o as CallablePerson, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, J as JsonObject, r as JsonValue, s as MeetApiOptions, t as MeetApiRequest, u as MeetAppFocus, v as MeetBreakoutBroadcast, w as MeetBreakoutPlan, x as MeetBreakoutRoom, y as MeetCollabSettings, z as MeetFileMedia, B as MeetPoll, D as MeetPollOption, G as MeetPollState, H as MeetQuestion, K as MeetQuestionState, N as MeetStroke, Q as MeetingActivities, i as MeetingAppPanel, _ as MeetingNoteKind, a2 as ORGANIZATION_HEADER, a5 as OccurrenceState, a7 as ROLE_RANK, ad as RsvpState, T as TranscriptSource, ag as appPanelOf, ah as applyCollabPacket, ai as asCallId, aj as asMeetingId, ak as asOrganizationId, al as asParticipantIdentity, am as asRoomName, an as asUserId, ao as assignedRoom, ap as autoAssign, aq as breakoutRemainingMs, ar as captureHeldOf, as as collabFromState, at as createMeetApi, au as defaultCaptionLanguage, av as fileDownloadPath, aw as focusFromRow, ax as isGuest, ay as isHostRole, az as isLinkFollower, aA as isObserverRole, aB as loadMeetingActivities, aC as scheduleSettingsPatch, aD as withItem } from './collab-Bf5evcLO.js';
1
+ import { P as ParticipantIdentity, e as ParticipantRole, k as AdmissionState, a1 as NoteTakerState, a as MeetParticipant, M as MeetingRecord, R as RoomName, d as CallInvite, a6 as ParticipantStanding, a3 as ObserversVisibleTo, S as StageLayout, L as LobbyEntry, aa as RecordingState, U as UserId, aF as RecordingSource, ae as TranscriptSegment, g as MeetingNote, W as WrapUpAnnouncement, j as CollabSnapshot, p as ConnectionQuality, h as MeetingId, b as MeetApi, f as CallMode, O as OrganizationId, m as CallId, n as CallState, Z as MeetingKind, a8 as RecordingPolicy, V as MeetingAttendee, a9 as RecordingRecord, a0 as MeetingSettings, X as MeetingChanges, a4 as OccurrenceOverride, $ as MeetingOccurrence, af as UpcomingOccurrence, Y as MeetingInvitee, I as InviteeInput, q as InviteeRole, ab as RsvpAnswer, ac as RsvpInvitation, c as MeetIdentity, C as CollabPanel } from './collab-BNJNgXFB.js';
2
+ export { A as AccessTokenSource, l as CAPTION_LANGUAGES, o as CallablePerson, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, J as JsonObject, r as JsonValue, s as MeetApiOptions, t as MeetApiRequest, u as MeetAppFocus, v as MeetBreakoutBroadcast, w as MeetBreakoutPlan, x as MeetBreakoutRoom, y as MeetCollabSettings, z as MeetFileMedia, B as MeetPoll, D as MeetPollOption, G as MeetPollState, H as MeetQuestion, K as MeetQuestionState, N as MeetStroke, Q as MeetingActivities, i as MeetingAppPanel, _ as MeetingNoteKind, a2 as ORGANIZATION_HEADER, a5 as OccurrenceState, a7 as ROLE_RANK, ad as RsvpState, T as TranscriptSource, ag as appPanelOf, ah as applyCollabPacket, ai as asCallId, aj as asMeetingId, ak as asOrganizationId, al as asParticipantIdentity, am as asRoomName, an as asUserId, ao as assignedRoom, ap as autoAssign, aq as breakoutClosingMs, ar as breakoutRemainingMs, as as captureHeldOf, at as collabFromState, au as createMeetApi, av as defaultCaptionLanguage, aw as fileDownloadPath, ax as focusFromRow, ay as isGuest, az as isHostRole, aA as isLinkFollower, aB as isObserverRole, aC as loadMeetingActivities, aD as scheduleSettingsPatch, aE as withItem } from './collab-BNJNgXFB.js';
3
3
  import { RealtimeManager } from '@ai-matrx/realtime';
4
4
  import { MessagingSupabaseClient, ActionHandler } from '@ai-matrx/messaging';
5
5
  import { RoomOptions, ConnectionQuality as ConnectionQuality$1, Participant } from 'livekit-client';
@@ -158,6 +158,29 @@ declare function leaveChoices(args: {
158
158
  readonly othersPresent: boolean;
159
159
  }): readonly LeaveChoice[];
160
160
 
161
+ /**
162
+ * THE RULES A SCREEN REDRAWS FROM WHILE THE CALL IS RUNNING (P1: chat-restrictions,
163
+ * mod-attendee-av-disabled, time-limit-warning, rec-consent-gate).
164
+ *
165
+ * The host can change a meeting's rules mid-call through the meeting's own rules door, which
166
+ * never talks to the room. The server's state read answers the live values (`live_policy`), and
167
+ * the room reads it on a short timer while the person is in the call — so a rule changed at
168
+ * second 40 is on every screen within one poll. Pure functions here; the timer lives in
169
+ * `meetings.ts`.
170
+ */
171
+
172
+ type ChatMode = "everyone" | "hosts_only" | "off";
173
+ type AvLock = "off" | "mic" | "camera" | "both";
174
+ type RecordingConsent = "notice" | "ok_or_leave" | "view_only_until_agree";
175
+ interface LivePolicy {
176
+ readonly chatMode: ChatMode;
177
+ readonly avLock: AvLock;
178
+ /** 0 = no limit. */
179
+ readonly timeLimitMinutes: number;
180
+ readonly timeLimitWarningMinutes: number;
181
+ readonly recordingConsent: RecordingConsent;
182
+ }
183
+
161
184
  /**
162
185
  * LISTEN-ONLY ATTENDANCE — being IN the room is never contingent on a device.
163
186
  *
@@ -237,6 +260,20 @@ interface MediaRegionState {
237
260
  readonly audioOutput: "ok" | "blocked";
238
261
  readonly notice: DeviceNotice | null;
239
262
  readonly offer: DeviceOffer | null;
263
+ /**
264
+ * THE PRE-JOIN CHECK per kind (P1 `perm-prompt-pending`, `perm-blocked-site`, `device-none-found`,
265
+ * `device-busy`): what the preview found BEFORE the room exists. `prompting` = the browser was
266
+ * asked and has not answered (Join stays usable); `unavailable` carries the classified refusal.
267
+ */
268
+ readonly preview: {
269
+ readonly microphone: DevicePreview;
270
+ readonly camera: DevicePreview;
271
+ };
272
+ }
273
+ /** One kind's pre-join check. `idle` = nothing was tried (or the person turned it off before). */
274
+ interface DevicePreview {
275
+ readonly state: "idle" | "prompting" | "on" | "off" | "unavailable";
276
+ readonly unavailable: MediaUnavailable | null;
240
277
  }
241
278
  declare const IDLE_MEDIA_REGION: MediaRegionState;
242
279
  interface LocalTrackState {
@@ -593,7 +630,7 @@ interface RoomChatMessage {
593
630
  * packet, addressed to this participant. Rendered once, dismissible, in words.
594
631
  */
595
632
  interface ModerationNotice {
596
- readonly kind: "muted" | "ask-unmute" | "removed" | "role";
633
+ readonly kind: "muted" | "ask-unmute" | "removed" | "role" | "locked" | "capability";
597
634
  readonly text: string;
598
635
  readonly at: number;
599
636
  }
@@ -664,6 +701,8 @@ interface ShareRegion {
664
701
  /** The fix, in the core's words (system setting, administrator policy, …), or null. */
665
702
  readonly remedy: string | null;
666
703
  readonly at: number;
704
+ /** While presenting: whether the share carries sound (`share-audio`). Absent = not known. */
705
+ readonly audio?: boolean;
667
706
  }
668
707
  declare const NO_SHARE: ShareRegion;
669
708
  interface MeetSnapshot {
@@ -760,6 +799,16 @@ interface MeetSnapshot {
760
799
  readonly waitingCount: number;
761
800
  /** S8: what the host's Leave offers in this meeting (from the token's `leave_policy`). */
762
801
  readonly leavePolicy: LeavePolicy;
802
+ /** The meeting's rules as they are RIGHT NOW (chat mode, attendee lock, time limit), read live while in the call. */
803
+ readonly livePolicy: LivePolicy;
804
+ /** host-reclaim: this person is the meeting's owner and may take the host powers back (Zoom rules). */
805
+ readonly canReclaim: boolean;
806
+ /** rec-consent-gate: this person agreed to the recording that is running. */
807
+ readonly recordingConsentGiven: boolean;
808
+ /** When this run started (epoch ms), so every screen counts a time limit down together. */
809
+ readonly sessionStartedAt: number | null;
810
+ /** True from the moment a host muted THIS microphone until the person turns it on themselves. */
811
+ readonly mutedByHost: boolean;
763
812
  /** The last thing a host did to THIS participant, in words. Dismissible. */
764
813
  readonly moderationNotice: ModerationNotice | null;
765
814
  /**
@@ -821,6 +870,10 @@ interface MeetSnapshot {
821
870
  * last device change and an offered new device. Written only by `media-supervisor.ts`.
822
871
  */
823
872
  readonly mediaRegion: MediaRegionState;
873
+ /** `captions-toggle`: THIS viewer wants captions. Local to the viewer; never sent to the room. */
874
+ readonly captionsOn: boolean;
875
+ /** Why asking for captions failed, in the server's words (`captions-unavailable`). */
876
+ readonly captionsRefusal: NoteTakerRefusal | null;
824
877
  /** The last failure, with its remedy. Never null-and-hoping. */
825
878
  readonly failure: {
826
879
  readonly message: string;
@@ -832,6 +885,11 @@ interface MeetSnapshot {
832
885
  * ask again. Absent for every refusal that does not lift (CORE-DESIGN §11 `wr-denied-reknock`).
833
886
  */
834
887
  readonly retryAt?: number | null;
888
+ /**
889
+ * `join` = the person never got into the call this time (`net-cannot-connect`): a network or
890
+ * server failure on the way IN is "can't connect", not "lost your connection".
891
+ */
892
+ readonly stage?: "join";
835
893
  } | null;
836
894
  /**
837
895
  * Meet wave 5: polls, Q&A, the shared whiteboard and the breakout plan — what the
@@ -976,6 +1034,14 @@ interface MeetAi {
976
1034
  meetingId: MeetingId;
977
1035
  roomName: RoomName;
978
1036
  }): Promise<NoteTakerDispatch>;
1037
+ /**
1038
+ * Make sure the note-taker (the speech-to-text) is in the room because THIS viewer turned
1039
+ * captions on. Open to everyone in the meeting, guests included. Never throws: a refusal
1040
+ * is stored as `captionsRefusal` in the server's own words.
1041
+ */
1042
+ requestCaptions(args: {
1043
+ meetingId: MeetingId;
1044
+ }): Promise<void>;
979
1045
  /** Dismiss it. Nothing automatic brings a dismissed note-taker back (D9). */
980
1046
  stopNoteTaker(args: {
981
1047
  meetingId: MeetingId;
@@ -2030,6 +2096,8 @@ interface MeetRoomDriver {
2030
2096
  supportsVideoEffects?(): boolean;
2031
2097
  /** Whether this browser can share a screen at all (iOS cannot). Absent = assume yes. */
2032
2098
  supportsScreenShare?(): boolean;
2099
+ /** The screen share being published carries sound (`share-audio`). */
2100
+ screenShareHasAudio?(): boolean;
2033
2101
  /**
2034
2102
  * Attach a participant's track to a media element. Returns the detach
2035
2103
  * function — returning it (rather than exposing `detach`) is what makes a
@@ -2411,6 +2479,14 @@ interface MediaSupervisor {
2411
2479
  onDisconnected(): void;
2412
2480
  /** "Enable sound" — call from inside the person's click. */
2413
2481
  enableAudio(): Promise<void>;
2482
+ /**
2483
+ * The pre-join preview's outcome for one kind: `prompting` when it asks the browser, `on` / `off`
2484
+ * when it settles or is turned off, or the error it was refused with (classified here, against
2485
+ * the permission store, exactly as an in-room refusal is).
2486
+ */
2487
+ preview(kind: MediaKind, outcome: "prompting" | "on" | "off" | {
2488
+ readonly error: unknown;
2489
+ }): Promise<void>;
2414
2490
  /** Use the offered new device. */
2415
2491
  acceptOffer(): Promise<void>;
2416
2492
  dismissOffer(): void;
@@ -2592,6 +2668,10 @@ interface RoomEngine {
2592
2668
  /** S6c: "Enable sound" — resume remote audio the autoplay policy holds. Call inside the click. */
2593
2669
  enableAudio(): Promise<void>;
2594
2670
  /** S6c: switch to the device the supervisor offered (a new one was plugged in). */
2671
+ /** The pre-join preview's outcome for one kind (the media supervisor classifies a refusal). */
2672
+ previewDevice(kind: "microphone" | "camera", outcome: "prompting" | "on" | "off" | {
2673
+ readonly error: unknown;
2674
+ }): Promise<void>;
2595
2675
  acceptDeviceOffer(): Promise<void>;
2596
2676
  dismissDeviceOffer(): void;
2597
2677
  dismissDeviceNotice(): void;
@@ -2876,6 +2956,8 @@ interface RoomToken {
2876
2956
  readonly connectionPolicy?: ConnectionPolicy | undefined;
2877
2957
  /** S8: what the host's Leave offers for this meeting (`host_leave_prompt`, `end_confirm`). */
2878
2958
  readonly leavePolicy?: LeavePolicy | undefined;
2959
+ /** host-reclaim (`host_reclaim = prompt`): the returning owner may take the host powers back. */
2960
+ readonly canReclaim?: boolean | undefined;
2879
2961
  }
2880
2962
 
2881
2963
  interface TokenClientOptions {
@@ -2976,6 +3058,8 @@ declare const MEET_ROUTES: {
2976
3058
  readonly noteTakerStop: "/api/v1/meet/agent/stop";
2977
3059
  /** In-meeting Q&A. Streams NDJSON; body is `{meeting_id, question}` only. */
2978
3060
  readonly intelligenceAsk: "/api/v1/meet/intelligence/ask";
3061
+ /** Anyone in the meeting (guests with the room pass included) asks for captions for themselves. */
3062
+ readonly noteTakerCaptions: "/api/v1/meet/agent/captions";
2979
3063
  /** A host ends the meeting for everyone. Served by MRI-A6. */
2980
3064
  readonly meetingEnd: "/api/v1/meet/end";
2981
3065
  /**
@@ -3589,12 +3673,13 @@ declare function createWebEffectsStorage(key?: string): EffectsStorage;
3589
3673
  */
3590
3674
 
3591
3675
  /** Every host power the server performs. One vocabulary with `services/meet/moderation.py`. */
3592
- type ModerationAction = "mute" | "stop_video" | "stop_screen" | "mute_all" | "ask_unmute" | "ask_all_unmute" | "spotlight" | "sync_presenter" | "raise_hand" | "lower_hand" | "lower_all_hands" | "make_cohost" | "revoke_cohost" | "transfer_host" | "rename" | "remove" | "report";
3676
+ type ModerationAction = "mute" | "stop_video" | "stop_screen" | "mute_all" | "ask_unmute" | "ask_all_unmute" | "spotlight" | "sync_presenter" | "raise_hand" | "lower_hand" | "lower_all_hands" | "make_cohost" | "make_presenter" | "revoke_presenter" | "set_av_lock" | "revoke_cohost" | "transfer_host" | "reclaim_host" | "rename" | "remove" | "report";
3593
3677
  declare const MODERATION_ACTIONS: readonly ModerationAction[];
3594
3678
  interface ModerationRequest {
3595
3679
  readonly action: ModerationAction;
3596
3680
  readonly identity?: ParticipantIdentity | null | undefined;
3597
3681
  readonly name?: string | undefined;
3682
+ readonly value?: string | undefined;
3598
3683
  readonly reason?: string | undefined;
3599
3684
  }
3600
3685
  interface ModerationResult {
@@ -3869,7 +3954,7 @@ declare function takeMoveRequest(store: CollabStoreLike): {
3869
3954
  * a link follower whose role is `participant` renders `guest` (CORE-DESIGN §2.1); `presenter` /
3870
3955
  * `viewer` render `participant` until the contract adopts them (§3.7 C3).
3871
3956
  */
3872
- type ObservedRole = "host" | "cohost" | "participant" | "guest";
3957
+ type ObservedRole = "host" | "cohost" | "presenter" | "participant" | "guest";
3873
3958
  /** `data-meet-phase` — the core's phase IS the contract value (S6a: no translation layer). */
3874
3959
  type ObservedPhase = MeetPhase;
3875
3960
  type ObservedConnection = ConnectionRegion;
@@ -3898,7 +3983,7 @@ interface ObserveInput {
3898
3983
  * The reason comes from the media supervisor (S6c), which reads the browser's permission store: a
3899
3984
  * kind the browser denies is `unavailable:denied` even when nothing tried to open it.
3900
3985
  */
3901
- declare function observedDevice(track: LocalTrackState, permission?: PermissionReading): string;
3986
+ declare function observedDevice(track: LocalTrackState, permission?: PermissionReading, held?: "locked" | "muted_by_host" | null): string;
3902
3987
  /**
3903
3988
  * The phase the person is looking at: the store's phase, verbatim (CORE-DESIGN §3.1). The one
3904
3989
  * derivation left is the ended meeting: a row that says it is over renders `ended` for anyone not
@@ -3917,4 +4002,64 @@ declare function participantAttributes(p: MeetParticipant): Record<string, strin
3917
4002
  /** The listen-only notice's contract code, from why the microphone is off. */
3918
4003
  declare function microphoneNoticeCode(track: LocalTrackState, permission?: PermissionReading): "mic-blocked" | "device-lost" | null;
3919
4004
 
3920
- export { ATTENDANCE_CSV_HEADER, AdmissionState, type AnnounceResult, type ApplyRoomEventArgs, type AskArgs, type AttendanceKind, type AttendanceRow, type AudioProcessing, type BrowserFamily, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, type CallCenter, type CallCenterOptions, CallId, CallInvite, type CallInviteHandlerOptions, type CallInvitePayload, CallMode, type CallOutcomePhase, CallState, type CollabAction, CollabPanel, type CollabRequest, type CollabResult, type CollabRuntime, CollabSnapshot, type CollabStoreLike, type ConnectionPolicy, ConnectionQuality, type ConnectionRegion, type ConnectionSupervisor, type ConnectionSupervisorOptions, type CreateCallInviteInput, type CreateMeetingInput, DATA_TOPICS, DEFAULT_CONNECTION_POLICY, DEFAULT_EFFECTS, DEFAULT_LEAVE_POLICY, DEFAULT_PAGE_SIZE, type DataTopic, type DeviceKind, type DeviceManager, type DeviceManagerOptions, type DeviceNotice, type DeviceOffer, type DeviceSnapshot, type DeviceStorage, type DeviceUnavailableReason, type DriverConnectionState, type DriverParticipant, type DriverTrackKind, type DriverTranscription, END_MEETING_NOT_SERVED, type EffectsStorage, type EndMeetingResult, type ExitInput, type ExitPhase, type ExitResolution, type ExitServerWord, type FollowUpDraft, type FollowUpRecipient, type FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, type Ghost, type GuestRecordAccess, type GuestRecordAccessResolution, type GuestRecordAccessSetting, type HostLeavePrompt, IDLE_MEDIA, IDLE_MEDIA_REGION, IDLE_PHASES, IDLE_TRACK, type InRoomClient, type InRoomClientOptions, InviteeInput, InviteeRole, JOIN_REFUSAL_REASONS, type JoinRefusalReason, type JoinRequest, LISTEN_ONLY_NOTICE, LIVEKIT_BASE_DELAYS_MS, LIVE_PHASES, type LeaveChoice, type LeavePolicy, type LibraryRecording, type LiveKitDriverOptions, LobbyEntry, type LocalMediaState, type LocalTrackState, MEETING_INVITE_KIND, MEETING_INVITE_VERSION, MEETING_PASS_HEADER, MEETING_RECORD_GRACE_MS, MEET_ANSWER_CONTEXT_EVENT, MEET_ANSWER_EVENTS, MEET_EVENTS, MEET_REACTIONS, MEET_ROUTES, MEET_SCHEMA, MODERATION_ACTIONS, type MediaDevicesLike, type MediaEffects, type MediaKind, type MediaPlatform, type MediaRegionState, type MediaSupervisor, type MediaSupervisorOptions, type MediaUnavailable, type MeetAi, type MeetAiAnswer, type MeetAiOptions, type MeetAnswerCoverage, MeetApi, type MeetDevice, MeetError, type MeetErrorCode, type MeetEvent, type MeetGrants, MeetIdentity, type MeetObservation, MeetParticipant, type MeetPatch, type MeetPhase, type MeetRepository, type MeetRoomDriver, type MeetSnapshot, type MeetStore, MeetingAttendee, MeetingChanges, type MeetingChatHistory, MeetingId, type MeetingInviteHandlerOptions, type MeetingInvitePayload, MeetingInvitee, MeetingKind, MeetingNote, MeetingOccurrence, MeetingRecord, type MeetingRecordAnswer, type MeetingRecordBundle, type MeetingRecordCache, type MeetingRecordChange, type MeetingRecordFailure, type MeetingRecordParts, type MeetingRecordRestriction, type MeetingRecordRestrictionNotice, type MeetingRecordState, type MeetingSearchHit, type MeetingSearchSource, type MeetingSession, type MeetingSessionOptions, MeetingSettings, type ModerationAction, type ModerationNotice, type ModerationRequest, type ModerationResult, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NO_SHARE, type NameBook, type NetworkPort, type NoteTakerDispatch, type NoteTakerRefusal, NoteTakerState, type NoteTakerStatus, type ObserveInput, type ObservedConnection, type ObservedPhase, ObserversVisibleTo, OccurrenceOverride, OrganizationId, type OsFamily, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_HAND_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, ParticipantIdentity, ParticipantRole, ParticipantStanding, type PermissionReading, type PhaseEvent, type PhaseEventType, type PlatformDevice, REACTION_TTL_MS, REFUSED_ABSENCE, RESUME_WINDOW_MS, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, type ReconnectPolicyLike, type ReconnectPolicyOptions, type RecordingController, type RecordingControllerOptions, RecordingPolicy, RecordingRecord, RecordingState, type RepositoryOptions, type ResumeMarker, type ResumeStorage, type RoomChatMessage, type RoomDriverFactory, type RoomDriverHandlers, type RoomEngine, type RoomEngineOptions, type RoomEventOutcome, type RoomEventTopic, RoomName, type RoomReaction, type RoomToken, type RoomTokenStorage, RsvpAnswer, RsvpInvitation, type ScheduleMeetingInput, type ShareRegion, type Stage, type StageArgs, StageLayout, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, type TokenClient, type TokenClientOptions, type TokenRequest, type TranscriptBlock, type TranscriptFormat, type TranscriptMatch, TranscriptSegment, UpcomingOccurrence, UserId, type VideoEffect, WAITING_PHASES, WrapUpAnnouncement, type WrapUpStatus, absenceSentence, activeWrapUpSummary, activityAttention, admissionPhase, announceMeeting, applyRoomEvent, assembleMeetingRecord, attendanceCsv, attendanceReport, attendanceTotals, attendeeKey, autoRejoinDelayMs, availableActivities, callInviteAction, callInviteText, callStateLabel, canModerate, canModerateParticipant, canTransition, captionSegment, changesPatch, classifyDeviceFailure, clockPosition, computeStage, connectionPolicyFrom, countLabel, createCallCenter, createCallInviteHandler, createConnectionSupervisor, createDeviceManager, createInRoomClient, createLiveKitDriver, createMediaSupervisor, createMeetAi, createMeetRepository, createMeetStore, createMeetingInviteHandler, createMeetingRecordCache, createMeetingSession, createMemoryDeviceStorage, createReachabilityProbe, createReconnectPolicy, createRecordingController, createRoomEngine, createTokenClient, createWebDeviceStorage, createWebEffectsStorage, createWebNetworkPort, createWebResumeStorage, createWebRoomTokenStorage, detectBrowser, detectOs, deviceChipLabel, deviceFixSteps, deviceNoticeCode, deviceUnavailableReason, displayNameFor, gridColumns, groupTranscript, guestRecordAccessExplanation, guestRecordAccessLabel, guestRecordAccessSetting, hasEnded, hostUserIds, httpUrlOf, invalidResponse, isGuestIdentity, isJoinRefusalReason, isListenOnly, isLivePhase, isNoteTaker, isRealName, isRefusedPhase, isRoomEventTopic, isUnannouncedDeparture, isWaitingPhase, learnName, learnNames, leaveChoices, leavePolicyFrom, listenOnlyNotice, loadFollowUpDraft, loadGuestMeetingRecord, loadMeetingChat, loadMeetingRecord, loadMeetingRecordParts, mapConnectionState, mapQuality, meetingInviteAction, meetingLength, meetingLink, meetingPassHeaders, meetingPath, meetingSlug, meetingTopic, meetingWhen, mergeCaption, mergeGhosts, mergeRecord, microphoneNoticeCode, moveToRoom, nextPhase, nextTranslationBatch, normalizeDeviceError, normalizeMeetError, normalizeSpoken, noteTakerIdentity, noteTakerLabel, noteTakerParticipant, noteTakerStatus, notesDocument, observe as observeMeeting, observedDevice, observedPhase, observedQuality, orderParticipants, parseRoomToken, participantAttributes, participantSummary, performCollab, playableRecordingFileId, projectInvitee, projectLibraryRecording, projectNote, projectOccurrence, projectOverride, projectParticipant, projectRsvpInvitation, projectSearchHit, projectSegment, projectUpcoming, pushMeetingToGoogleCalendar, readServerRefusal, readableTranscript, reasonOf, recordingLabel, recordingNotice, recordingOffsetMs, refusalPhase, rememberedMeetingPass, resolveExit, roleOf, roomTopic, rootAttributes, searchTranscript, sendFollowUp, setCaptionLanguage, setGuestRecordAccess, settingsPatch, snapshotParticipant, snippetRuns, staticObservation, summarizeMeetingRecordRestrictions, takeMoveRequest, takePanelRequest, transcriptDocument, unavailableFrom, uniqueAttendees, untranslatedLines, userTopic, wasRefused, webMediaPlatform, wrapUpStatus };
4005
+ /**
4006
+ * CG — WHAT THIS BROWSER CAN DO, probed before anything else (CORE-DESIGN §11 `browser-unsupported`,
4007
+ * `share-unsupported-mobile`). Pure over an injected scope so the rules are the tests; the web
4008
+ * reading is `detectCapabilities()` with no argument. Never touches LiveKit.
4009
+ */
4010
+ type UnsupportedReason = "no_webrtc";
4011
+ interface MeetCapabilities {
4012
+ /** False only when a call cannot run here at all (no WebRTC: an in-app webview, an old browser). */
4013
+ readonly canJoin: boolean;
4014
+ readonly reason: UnsupportedReason | null;
4015
+ /** The in-app browser this looks like (Instagram, Facebook, LinkedIn…), or null. */
4016
+ readonly inAppBrowser: string | null;
4017
+ /** A phone or tablet: no screen sharing from the browser there. */
4018
+ readonly mobile: boolean;
4019
+ /** `getDisplayMedia` exists AND this is not a phone/tablet. */
4020
+ readonly canShareScreen: boolean;
4021
+ }
4022
+ interface ScopeLike {
4023
+ readonly RTCPeerConnection?: unknown;
4024
+ readonly webkitRTCPeerConnection?: unknown;
4025
+ readonly navigator?: {
4026
+ readonly userAgent?: string;
4027
+ readonly maxTouchPoints?: number;
4028
+ readonly mediaDevices?: {
4029
+ readonly getDisplayMedia?: unknown;
4030
+ };
4031
+ };
4032
+ }
4033
+ declare function isMobileUserAgent(userAgent: string, maxTouchPoints?: number): boolean;
4034
+ declare function detectCapabilities(scope?: ScopeLike | null): MeetCapabilities;
4035
+ /** The words for a browser that cannot join: what to open instead. Short lines (layout, not prose). */
4036
+ declare function unsupportedWords(capabilities: MeetCapabilities): {
4037
+ readonly title: string;
4038
+ readonly body: string;
4039
+ };
4040
+
4041
+ /**
4042
+ * MS — SPEAKING WHILE MUTED (CORE-DESIGN §11 `speaking-while-muted`). A pure detector fed the local
4043
+ * microphone level while the person muted themselves: sound that lasts `holdMs` (gaps shorter than
4044
+ * `gapMs` do not break it) fires ONCE, then stays quiet for `cooldownMs` so the nudge never nags.
4045
+ * The level source is the platform's (a browser analyser in the web skin); the rule lives here.
4046
+ */
4047
+ interface SpeakingWhileMutedOptions {
4048
+ /** Peak level 0..1 that counts as speech. */
4049
+ readonly threshold?: number;
4050
+ /** How long speech must last before the nudge. */
4051
+ readonly holdMs?: number;
4052
+ /** A pause shorter than this does not end the speech. */
4053
+ readonly gapMs?: number;
4054
+ /** After a nudge, no second one for this long. */
4055
+ readonly cooldownMs?: number;
4056
+ }
4057
+ interface SpeakingWhileMutedDetector {
4058
+ /** One level reading at time `at` (ms). True exactly when the nudge should show now. */
4059
+ feed(level: number, at: number): boolean;
4060
+ /** The person unmuted (or left): start over, cooldown included. */
4061
+ reset(): void;
4062
+ }
4063
+ declare function createSpeakingWhileMutedDetector(options?: SpeakingWhileMutedOptions): SpeakingWhileMutedDetector;
4064
+
4065
+ export { ATTENDANCE_CSV_HEADER, AdmissionState, type AnnounceResult, type ApplyRoomEventArgs, type AskArgs, type AttendanceKind, type AttendanceRow, type AudioProcessing, type BrowserFamily, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, type CallCenter, type CallCenterOptions, CallId, CallInvite, type CallInviteHandlerOptions, type CallInvitePayload, CallMode, type CallOutcomePhase, CallState, type CollabAction, CollabPanel, type CollabRequest, type CollabResult, type CollabRuntime, CollabSnapshot, type CollabStoreLike, type ConnectionPolicy, ConnectionQuality, type ConnectionRegion, type ConnectionSupervisor, type ConnectionSupervisorOptions, type CreateCallInviteInput, type CreateMeetingInput, DATA_TOPICS, DEFAULT_CONNECTION_POLICY, DEFAULT_EFFECTS, DEFAULT_LEAVE_POLICY, DEFAULT_PAGE_SIZE, type DataTopic, type DeviceKind, type DeviceManager, type DeviceManagerOptions, type DeviceNotice, type DeviceOffer, type DeviceSnapshot, type DeviceStorage, type DeviceUnavailableReason, type DriverConnectionState, type DriverParticipant, type DriverTrackKind, type DriverTranscription, END_MEETING_NOT_SERVED, type EffectsStorage, type EndMeetingResult, type ExitInput, type ExitPhase, type ExitResolution, type ExitServerWord, type FollowUpDraft, type FollowUpRecipient, type FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, type Ghost, type GuestRecordAccess, type GuestRecordAccessResolution, type GuestRecordAccessSetting, type HostLeavePrompt, IDLE_MEDIA, IDLE_MEDIA_REGION, IDLE_PHASES, IDLE_TRACK, type InRoomClient, type InRoomClientOptions, InviteeInput, InviteeRole, JOIN_REFUSAL_REASONS, type JoinRefusalReason, type JoinRequest, LISTEN_ONLY_NOTICE, LIVEKIT_BASE_DELAYS_MS, LIVE_PHASES, type LeaveChoice, type LeavePolicy, type LibraryRecording, type LiveKitDriverOptions, LobbyEntry, type LocalMediaState, type LocalTrackState, MEETING_INVITE_KIND, MEETING_INVITE_VERSION, MEETING_PASS_HEADER, MEETING_RECORD_GRACE_MS, MEET_ANSWER_CONTEXT_EVENT, MEET_ANSWER_EVENTS, MEET_EVENTS, MEET_REACTIONS, MEET_ROUTES, MEET_SCHEMA, MODERATION_ACTIONS, type MediaDevicesLike, type MediaEffects, type MediaKind, type MediaPlatform, type MediaRegionState, type MediaSupervisor, type MediaSupervisorOptions, type MediaUnavailable, type MeetAi, type MeetAiAnswer, type MeetAiOptions, type MeetAnswerCoverage, MeetApi, type MeetCapabilities, type MeetDevice, MeetError, type MeetErrorCode, type MeetEvent, type MeetGrants, MeetIdentity, type MeetObservation, MeetParticipant, type MeetPatch, type MeetPhase, type MeetRepository, type MeetRoomDriver, type MeetSnapshot, type MeetStore, MeetingAttendee, MeetingChanges, type MeetingChatHistory, MeetingId, type MeetingInviteHandlerOptions, type MeetingInvitePayload, MeetingInvitee, MeetingKind, MeetingNote, MeetingOccurrence, MeetingRecord, type MeetingRecordAnswer, type MeetingRecordBundle, type MeetingRecordCache, type MeetingRecordChange, type MeetingRecordFailure, type MeetingRecordParts, type MeetingRecordRestriction, type MeetingRecordRestrictionNotice, type MeetingRecordState, type MeetingSearchHit, type MeetingSearchSource, type MeetingSession, type MeetingSessionOptions, MeetingSettings, type ModerationAction, type ModerationNotice, type ModerationRequest, type ModerationResult, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NO_SHARE, type NameBook, type NetworkPort, type NoteTakerDispatch, type NoteTakerRefusal, NoteTakerState, type NoteTakerStatus, type ObserveInput, type ObservedConnection, type ObservedPhase, ObserversVisibleTo, OccurrenceOverride, OrganizationId, type OsFamily, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_HAND_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, ParticipantIdentity, ParticipantRole, ParticipantStanding, type PermissionReading, type PhaseEvent, type PhaseEventType, type PlatformDevice, REACTION_TTL_MS, REFUSED_ABSENCE, RESUME_WINDOW_MS, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, type ReconnectPolicyLike, type ReconnectPolicyOptions, type RecordingController, type RecordingControllerOptions, RecordingPolicy, RecordingRecord, RecordingState, type RepositoryOptions, type ResumeMarker, type ResumeStorage, type RoomChatMessage, type RoomDriverFactory, type RoomDriverHandlers, type RoomEngine, type RoomEngineOptions, type RoomEventOutcome, type RoomEventTopic, RoomName, type RoomReaction, type RoomToken, type RoomTokenStorage, RsvpAnswer, RsvpInvitation, type ScheduleMeetingInput, type ShareRegion, type SpeakingWhileMutedDetector, type SpeakingWhileMutedOptions, type Stage, type StageArgs, StageLayout, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, type TokenClient, type TokenClientOptions, type TokenRequest, type TranscriptBlock, type TranscriptFormat, type TranscriptMatch, TranscriptSegment, type UnsupportedReason, UpcomingOccurrence, UserId, type VideoEffect, WAITING_PHASES, WrapUpAnnouncement, type WrapUpStatus, absenceSentence, activeWrapUpSummary, activityAttention, admissionPhase, announceMeeting, applyRoomEvent, assembleMeetingRecord, attendanceCsv, attendanceReport, attendanceTotals, attendeeKey, autoRejoinDelayMs, availableActivities, callInviteAction, callInviteText, callStateLabel, canModerate, canModerateParticipant, canTransition, captionSegment, changesPatch, classifyDeviceFailure, clockPosition, computeStage, connectionPolicyFrom, countLabel, createCallCenter, createCallInviteHandler, createConnectionSupervisor, createDeviceManager, createInRoomClient, createLiveKitDriver, createMediaSupervisor, createMeetAi, createMeetRepository, createMeetStore, createMeetingInviteHandler, createMeetingRecordCache, createMeetingSession, createMemoryDeviceStorage, createReachabilityProbe, createReconnectPolicy, createRecordingController, createRoomEngine, createSpeakingWhileMutedDetector, createTokenClient, createWebDeviceStorage, createWebEffectsStorage, createWebNetworkPort, createWebResumeStorage, createWebRoomTokenStorage, detectBrowser, detectCapabilities, detectOs, deviceChipLabel, deviceFixSteps, deviceNoticeCode, deviceUnavailableReason, displayNameFor, gridColumns, groupTranscript, guestRecordAccessExplanation, guestRecordAccessLabel, guestRecordAccessSetting, hasEnded, hostUserIds, httpUrlOf, invalidResponse, isGuestIdentity, isJoinRefusalReason, isListenOnly, isLivePhase, isMobileUserAgent, isNoteTaker, isRealName, isRefusedPhase, isRoomEventTopic, isUnannouncedDeparture, isWaitingPhase, learnName, learnNames, leaveChoices, leavePolicyFrom, listenOnlyNotice, loadFollowUpDraft, loadGuestMeetingRecord, loadMeetingChat, loadMeetingRecord, loadMeetingRecordParts, mapConnectionState, mapQuality, meetingInviteAction, meetingLength, meetingLink, meetingPassHeaders, meetingPath, meetingSlug, meetingTopic, meetingWhen, mergeCaption, mergeGhosts, mergeRecord, microphoneNoticeCode, moveToRoom, nextPhase, nextTranslationBatch, normalizeDeviceError, normalizeMeetError, normalizeSpoken, noteTakerIdentity, noteTakerLabel, noteTakerParticipant, noteTakerStatus, notesDocument, observe as observeMeeting, observedDevice, observedPhase, observedQuality, orderParticipants, parseRoomToken, participantAttributes, participantSummary, performCollab, playableRecordingFileId, projectInvitee, projectLibraryRecording, projectNote, projectOccurrence, projectOverride, projectParticipant, projectRsvpInvitation, projectSearchHit, projectSegment, projectUpcoming, pushMeetingToGoogleCalendar, readServerRefusal, readableTranscript, reasonOf, recordingLabel, recordingNotice, recordingOffsetMs, refusalPhase, rememberedMeetingPass, resolveExit, roleOf, roomTopic, rootAttributes, searchTranscript, sendFollowUp, setCaptionLanguage, setGuestRecordAccess, settingsPatch, snapshotParticipant, snippetRuns, staticObservation, summarizeMeetingRecordRestrictions, takeMoveRequest, takePanelRequest, transcriptDocument, unavailableFrom, uniqueAttendees, unsupportedWords, untranslatedLines, userTopic, wasRefused, webMediaPlatform, wrapUpStatus };