@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/CHANGELOG.md +12 -0
- package/dist/{collab-Bf5evcLO.d.cts → collab-BNJNgXFB.d.cts} +10 -1
- package/dist/{collab-Bf5evcLO.d.ts → collab-BNJNgXFB.d.ts} +10 -1
- package/dist/{components-Frpvls4N.d.ts → components-BDtGzHf4.d.ts} +4 -2
- package/dist/{components-roCEgyFH.d.cts → components-BxK993iW.d.cts} +4 -2
- package/dist/core.cjs +328 -25
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +152 -7
- package/dist/core.d.ts +152 -7
- package/dist/core.js +328 -25
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +328 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +328 -25
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +839 -77
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +22 -5
- package/dist/react.d.ts +22 -5
- package/dist/react.js +1225 -463
- package/dist/react.js.map +1 -1
- package/dist/skins/meet.cjs +581 -60
- package/dist/skins/meet.cjs.map +1 -1
- package/dist/skins/meet.d.cts +6 -3
- package/dist/skins/meet.d.ts +6 -3
- package/dist/skins/meet.js +908 -387
- package/dist/skins/meet.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +4 -4
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,
|
|
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
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
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 };
|