@ai-matrx/meet 0.11.44 → 0.11.45
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 +6 -0
- package/dist/{collab-BNJNgXFB.d.cts → collab-D1TX5uf9.d.cts} +7 -0
- package/dist/{collab-BNJNgXFB.d.ts → collab-D1TX5uf9.d.ts} +7 -0
- package/dist/{components-BDtGzHf4.d.ts → components-CNwBgmYU.d.ts} +1 -1
- package/dist/{components-BxK993iW.d.cts → components-CkyDos0f.d.cts} +1 -1
- package/dist/core.cjs +58 -7
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +25 -3
- package/dist/core.d.ts +25 -3
- package/dist/core.js +58 -7
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +58 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +58 -7
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +169 -25
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +3 -3
- package/dist/react.d.ts +3 -3
- package/dist/react.js +169 -25
- package/dist/react.js.map +1 -1
- package/dist/skins/meet.cjs +112 -24
- package/dist/skins/meet.cjs.map +1 -1
- package/dist/skins/meet.d.cts +2 -2
- package/dist/skins/meet.d.ts +2 -2
- package/dist/skins/meet.js +112 -24
- package/dist/skins/meet.js.map +1 -1
- package/dist/styles.css +16 -0
- package/package.json +4 -4
package/dist/react.d.cts
CHANGED
|
@@ -2,9 +2,9 @@ import { ReactNode, ComponentType } from 'react';
|
|
|
2
2
|
import { MessagingSupabaseClient } from '@ai-matrx/messaging';
|
|
3
3
|
import { MeetStore, RoomEngine, CallCenter, MeetingSession, InRoomClient, RecordingController, DeviceManager, MeetRepository, TokenClient, MeetAi, RoomDriverFactory, DeviceSnapshot, MeetSnapshot, ObservedPhase, MeetObservation, GuestRecordAccessSetting, GuestRecordAccessResolution, ModerationRequest, ModerationResult, MediaEffects, NoteTakerStatus, MeetAnswerCoverage, MeetingRecordBundle, MeetPhase, JoinRequest, MeetingRecordCache, LeaveChoice, LeavePolicy, LocalMediaState, ModerationNotice, Stage, CollabRequest, ConnectionRegion, ShareRegion } from './core.cjs';
|
|
4
4
|
export { ATTENDANCE_CSV_HEADER, AnnounceResult, ApplyRoomEventArgs, AskArgs, AttendanceKind, AttendanceRow, AudioProcessing, BrowserFamily, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, CallCenterOptions, CallInviteHandlerOptions, CallInvitePayload, CallOutcomePhase, CollabAction, CollabResult, CollabRuntime, CollabStoreLike, ConnectionPolicy, ConnectionSupervisor, ConnectionSupervisorOptions, CreateCallInviteInput, CreateMeetingInput, DATA_TOPICS, DEFAULT_CONNECTION_POLICY, DEFAULT_EFFECTS, DEFAULT_LEAVE_POLICY, DEFAULT_PAGE_SIZE, DataTopic, DeviceKind, DeviceManagerOptions, DeviceNotice, DeviceOffer, DeviceStorage, DeviceUnavailableReason, DriverConnectionState, DriverParticipant, DriverTrackKind, DriverTranscription, END_MEETING_NOT_SERVED, EffectsStorage, EndMeetingResult, ExitInput, ExitPhase, ExitResolution, ExitServerWord, FollowUpDraft, FollowUpRecipient, FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, Ghost, GuestRecordAccess, HostLeavePrompt, IDLE_MEDIA, IDLE_MEDIA_REGION, IDLE_PHASES, IDLE_TRACK, InRoomClientOptions, JOIN_REFUSAL_REASONS, JoinRefusalReason, LISTEN_ONLY_NOTICE, LIVEKIT_BASE_DELAYS_MS, LIVE_PHASES, LibraryRecording, LiveKitDriverOptions, 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, MediaDevicesLike, MediaKind, MediaPlatform, MediaRegionState, MediaSupervisor, MediaSupervisorOptions, MediaUnavailable, MeetAiAnswer, MeetAiOptions, MeetCapabilities, MeetDevice, MeetError, MeetErrorCode, MeetEvent, MeetGrants, MeetPatch, MeetRoomDriver, MeetingChatHistory, MeetingInviteHandlerOptions, MeetingInvitePayload, MeetingRecordAnswer, MeetingRecordChange, MeetingRecordFailure, MeetingRecordParts, MeetingRecordRestriction, MeetingRecordRestrictionNotice, MeetingRecordState, MeetingSearchHit, MeetingSearchSource, MeetingSessionOptions, ModerationAction, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NO_SHARE, NameBook, NetworkPort, NoteTakerDispatch, NoteTakerRefusal, ObserveInput, ObservedConnection, OsFamily, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_HAND_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, PermissionReading, PhaseEvent, PhaseEventType, PlatformDevice, REACTION_TTL_MS, REFUSED_ABSENCE, RESUME_WINDOW_MS, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, ReconnectPolicyLike, ReconnectPolicyOptions, RecordingControllerOptions, RepositoryOptions, ResumeMarker, ResumeStorage, RoomChatMessage, RoomDriverHandlers, RoomEngineOptions, RoomEventOutcome, RoomEventTopic, RoomReaction, RoomToken, RoomTokenStorage, ScheduleMeetingInput, SpeakingWhileMutedDetector, SpeakingWhileMutedOptions, StageArgs, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, TokenClientOptions, TokenRequest, TranscriptBlock, TranscriptFormat, TranscriptMatch, UnsupportedReason, VideoEffect, WAITING_PHASES, 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, 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 } from './core.cjs';
|
|
5
|
-
import { b as MeetApi, c as MeetIdentity, A as AccessTokenSource, d as CallInvite, U as UserId, e as ParticipantRole, M as MeetingRecord, P as ParticipantIdentity, T as TranscriptSource, f as CallMode, a as MeetParticipant, L as LobbyEntry, g as MeetingNote, W as WrapUpAnnouncement, R as RoomName, S as StageLayout, h as MeetingId, O as OrganizationId, i as MeetingAppPanel, j as CollabSnapshot, C as CollabPanel } from './collab-
|
|
6
|
-
export { k as AdmissionState, l as CAPTION_LANGUAGES, m as CallId, n as CallState, o as CallablePerson, p as ConnectionQuality, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, I as InviteeInput, q as InviteeRole, 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, V as MeetingAttendee, X as MeetingChanges, Y as MeetingInvitee, Z as MeetingKind, _ as MeetingNoteKind, $ as MeetingOccurrence, a0 as MeetingSettings, a1 as NoteTakerState, a2 as ORGANIZATION_HEADER, a3 as ObserversVisibleTo, a4 as OccurrenceOverride, a5 as OccurrenceState, a6 as ParticipantStanding, a7 as ROLE_RANK, a8 as RecordingPolicy, a9 as RecordingRecord, aa as RecordingState, ab as RsvpAnswer, ac as RsvpInvitation, ad as RsvpState, ae as TranscriptSegment, af as UpcomingOccurrence, 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-
|
|
7
|
-
export { G as GuestRecordAccessControl } from './components-
|
|
5
|
+
import { b as MeetApi, c as MeetIdentity, A as AccessTokenSource, d as CallInvite, U as UserId, e as ParticipantRole, M as MeetingRecord, P as ParticipantIdentity, T as TranscriptSource, f as CallMode, a as MeetParticipant, L as LobbyEntry, g as MeetingNote, W as WrapUpAnnouncement, R as RoomName, S as StageLayout, h as MeetingId, O as OrganizationId, i as MeetingAppPanel, j as CollabSnapshot, C as CollabPanel } from './collab-D1TX5uf9.cjs';
|
|
6
|
+
export { k as AdmissionState, l as CAPTION_LANGUAGES, m as CallId, n as CallState, o as CallablePerson, p as ConnectionQuality, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, I as InviteeInput, q as InviteeRole, 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, V as MeetingAttendee, X as MeetingChanges, Y as MeetingInvitee, Z as MeetingKind, _ as MeetingNoteKind, $ as MeetingOccurrence, a0 as MeetingSettings, a1 as NoteTakerState, a2 as ORGANIZATION_HEADER, a3 as ObserversVisibleTo, a4 as OccurrenceOverride, a5 as OccurrenceState, a6 as ParticipantStanding, a7 as ROLE_RANK, a8 as RecordingPolicy, a9 as RecordingRecord, aa as RecordingState, ab as RsvpAnswer, ac as RsvpInvitation, ad as RsvpState, ae as TranscriptSegment, af as UpcomingOccurrence, 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-D1TX5uf9.cjs';
|
|
7
|
+
export { G as GuestRecordAccessControl } from './components-CkyDos0f.cjs';
|
|
8
8
|
import '@ai-matrx/realtime';
|
|
9
9
|
import 'livekit-client';
|
|
10
10
|
|
package/dist/react.d.ts
CHANGED
|
@@ -2,9 +2,9 @@ import { ReactNode, ComponentType } from 'react';
|
|
|
2
2
|
import { MessagingSupabaseClient } from '@ai-matrx/messaging';
|
|
3
3
|
import { MeetStore, RoomEngine, CallCenter, MeetingSession, InRoomClient, RecordingController, DeviceManager, MeetRepository, TokenClient, MeetAi, RoomDriverFactory, DeviceSnapshot, MeetSnapshot, ObservedPhase, MeetObservation, GuestRecordAccessSetting, GuestRecordAccessResolution, ModerationRequest, ModerationResult, MediaEffects, NoteTakerStatus, MeetAnswerCoverage, MeetingRecordBundle, MeetPhase, JoinRequest, MeetingRecordCache, LeaveChoice, LeavePolicy, LocalMediaState, ModerationNotice, Stage, CollabRequest, ConnectionRegion, ShareRegion } from './core.js';
|
|
4
4
|
export { ATTENDANCE_CSV_HEADER, AnnounceResult, ApplyRoomEventArgs, AskArgs, AttendanceKind, AttendanceRow, AudioProcessing, BrowserFamily, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, CallCenterOptions, CallInviteHandlerOptions, CallInvitePayload, CallOutcomePhase, CollabAction, CollabResult, CollabRuntime, CollabStoreLike, ConnectionPolicy, ConnectionSupervisor, ConnectionSupervisorOptions, CreateCallInviteInput, CreateMeetingInput, DATA_TOPICS, DEFAULT_CONNECTION_POLICY, DEFAULT_EFFECTS, DEFAULT_LEAVE_POLICY, DEFAULT_PAGE_SIZE, DataTopic, DeviceKind, DeviceManagerOptions, DeviceNotice, DeviceOffer, DeviceStorage, DeviceUnavailableReason, DriverConnectionState, DriverParticipant, DriverTrackKind, DriverTranscription, END_MEETING_NOT_SERVED, EffectsStorage, EndMeetingResult, ExitInput, ExitPhase, ExitResolution, ExitServerWord, FollowUpDraft, FollowUpRecipient, FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, Ghost, GuestRecordAccess, HostLeavePrompt, IDLE_MEDIA, IDLE_MEDIA_REGION, IDLE_PHASES, IDLE_TRACK, InRoomClientOptions, JOIN_REFUSAL_REASONS, JoinRefusalReason, LISTEN_ONLY_NOTICE, LIVEKIT_BASE_DELAYS_MS, LIVE_PHASES, LibraryRecording, LiveKitDriverOptions, 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, MediaDevicesLike, MediaKind, MediaPlatform, MediaRegionState, MediaSupervisor, MediaSupervisorOptions, MediaUnavailable, MeetAiAnswer, MeetAiOptions, MeetCapabilities, MeetDevice, MeetError, MeetErrorCode, MeetEvent, MeetGrants, MeetPatch, MeetRoomDriver, MeetingChatHistory, MeetingInviteHandlerOptions, MeetingInvitePayload, MeetingRecordAnswer, MeetingRecordChange, MeetingRecordFailure, MeetingRecordParts, MeetingRecordRestriction, MeetingRecordRestrictionNotice, MeetingRecordState, MeetingSearchHit, MeetingSearchSource, MeetingSessionOptions, ModerationAction, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NO_SHARE, NameBook, NetworkPort, NoteTakerDispatch, NoteTakerRefusal, ObserveInput, ObservedConnection, OsFamily, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_HAND_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, PermissionReading, PhaseEvent, PhaseEventType, PlatformDevice, REACTION_TTL_MS, REFUSED_ABSENCE, RESUME_WINDOW_MS, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, ReconnectPolicyLike, ReconnectPolicyOptions, RecordingControllerOptions, RepositoryOptions, ResumeMarker, ResumeStorage, RoomChatMessage, RoomDriverHandlers, RoomEngineOptions, RoomEventOutcome, RoomEventTopic, RoomReaction, RoomToken, RoomTokenStorage, ScheduleMeetingInput, SpeakingWhileMutedDetector, SpeakingWhileMutedOptions, StageArgs, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, TokenClientOptions, TokenRequest, TranscriptBlock, TranscriptFormat, TranscriptMatch, UnsupportedReason, VideoEffect, WAITING_PHASES, 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, 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 } from './core.js';
|
|
5
|
-
import { b as MeetApi, c as MeetIdentity, A as AccessTokenSource, d as CallInvite, U as UserId, e as ParticipantRole, M as MeetingRecord, P as ParticipantIdentity, T as TranscriptSource, f as CallMode, a as MeetParticipant, L as LobbyEntry, g as MeetingNote, W as WrapUpAnnouncement, R as RoomName, S as StageLayout, h as MeetingId, O as OrganizationId, i as MeetingAppPanel, j as CollabSnapshot, C as CollabPanel } from './collab-
|
|
6
|
-
export { k as AdmissionState, l as CAPTION_LANGUAGES, m as CallId, n as CallState, o as CallablePerson, p as ConnectionQuality, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, I as InviteeInput, q as InviteeRole, 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, V as MeetingAttendee, X as MeetingChanges, Y as MeetingInvitee, Z as MeetingKind, _ as MeetingNoteKind, $ as MeetingOccurrence, a0 as MeetingSettings, a1 as NoteTakerState, a2 as ORGANIZATION_HEADER, a3 as ObserversVisibleTo, a4 as OccurrenceOverride, a5 as OccurrenceState, a6 as ParticipantStanding, a7 as ROLE_RANK, a8 as RecordingPolicy, a9 as RecordingRecord, aa as RecordingState, ab as RsvpAnswer, ac as RsvpInvitation, ad as RsvpState, ae as TranscriptSegment, af as UpcomingOccurrence, 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-
|
|
7
|
-
export { G as GuestRecordAccessControl } from './components-
|
|
5
|
+
import { b as MeetApi, c as MeetIdentity, A as AccessTokenSource, d as CallInvite, U as UserId, e as ParticipantRole, M as MeetingRecord, P as ParticipantIdentity, T as TranscriptSource, f as CallMode, a as MeetParticipant, L as LobbyEntry, g as MeetingNote, W as WrapUpAnnouncement, R as RoomName, S as StageLayout, h as MeetingId, O as OrganizationId, i as MeetingAppPanel, j as CollabSnapshot, C as CollabPanel } from './collab-D1TX5uf9.js';
|
|
6
|
+
export { k as AdmissionState, l as CAPTION_LANGUAGES, m as CallId, n as CallState, o as CallablePerson, p as ConnectionQuality, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, I as InviteeInput, q as InviteeRole, 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, V as MeetingAttendee, X as MeetingChanges, Y as MeetingInvitee, Z as MeetingKind, _ as MeetingNoteKind, $ as MeetingOccurrence, a0 as MeetingSettings, a1 as NoteTakerState, a2 as ORGANIZATION_HEADER, a3 as ObserversVisibleTo, a4 as OccurrenceOverride, a5 as OccurrenceState, a6 as ParticipantStanding, a7 as ROLE_RANK, a8 as RecordingPolicy, a9 as RecordingRecord, aa as RecordingState, ab as RsvpAnswer, ac as RsvpInvitation, ad as RsvpState, ae as TranscriptSegment, af as UpcomingOccurrence, 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-D1TX5uf9.js';
|
|
7
|
+
export { G as GuestRecordAccessControl } from './components-CNwBgmYU.js';
|
|
8
8
|
import '@ai-matrx/realtime';
|
|
9
9
|
import 'livekit-client';
|
|
10
10
|
|
package/dist/react.js
CHANGED
|
@@ -18,7 +18,14 @@ function createTabClaim(platform = webTabPlatform()) {
|
|
|
18
18
|
if (message.kind === "tab-alive?" && mine !== null && message.tabId === mine && message.from !== self) {
|
|
19
19
|
platform.bus?.post({ kind: "tab-alive", tabId: mine });
|
|
20
20
|
} else if (message.kind === "who-is-in?" && current !== null && mine !== null && message.from !== self && message.room === current.room && message.person === current.person) {
|
|
21
|
-
platform.bus?.post({
|
|
21
|
+
platform.bus?.post({
|
|
22
|
+
kind: "in-room",
|
|
23
|
+
room: current.room,
|
|
24
|
+
person: current.person,
|
|
25
|
+
tabId: mine,
|
|
26
|
+
to: message.from,
|
|
27
|
+
rule: current.rule
|
|
28
|
+
});
|
|
22
29
|
}
|
|
23
30
|
}) ?? (() => {
|
|
24
31
|
});
|
|
@@ -48,28 +55,32 @@ function createTabClaim(platform = webTabPlatform()) {
|
|
|
48
55
|
return candidate;
|
|
49
56
|
}
|
|
50
57
|
const tabId = claim();
|
|
58
|
+
async function presence(room, person) {
|
|
59
|
+
const bus = platform.bus;
|
|
60
|
+
if (bus === null) return null;
|
|
61
|
+
let seen = null;
|
|
62
|
+
const stop = bus.subscribe((message) => {
|
|
63
|
+
if (message.kind === "in-room" && message.to === self && message.room === room && message.person === person) {
|
|
64
|
+
seen = { rule: seen?.rule ?? message.rule ?? null };
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
bus.post({ kind: "who-is-in?", room, person, from: self });
|
|
68
|
+
await wait(TAB_ANSWER_MS);
|
|
69
|
+
stop();
|
|
70
|
+
return seen;
|
|
71
|
+
}
|
|
51
72
|
return {
|
|
52
73
|
tabId,
|
|
53
|
-
inRoom(room, person) {
|
|
54
|
-
current = { room, person };
|
|
74
|
+
inRoom(room, person, rule) {
|
|
75
|
+
current = { room, person, rule: rule ?? null };
|
|
55
76
|
},
|
|
56
77
|
left() {
|
|
57
78
|
current = null;
|
|
58
79
|
},
|
|
59
80
|
async presentElsewhere(room, person) {
|
|
60
|
-
|
|
61
|
-
if (bus === null) return false;
|
|
62
|
-
let seen = false;
|
|
63
|
-
const stop = bus.subscribe((message) => {
|
|
64
|
-
if (message.kind === "in-room" && message.to === self && message.room === room && message.person === person) {
|
|
65
|
-
seen = true;
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
bus.post({ kind: "who-is-in?", room, person, from: self });
|
|
69
|
-
await wait(TAB_ANSWER_MS);
|
|
70
|
-
stop();
|
|
71
|
-
return seen;
|
|
81
|
+
return await presence(room, person) !== null;
|
|
72
82
|
},
|
|
83
|
+
presenceElsewhere: (room, person) => presence(room, person),
|
|
73
84
|
dispose() {
|
|
74
85
|
unsubscribe();
|
|
75
86
|
}
|
|
@@ -247,7 +258,8 @@ function createWebResumeStorage() {
|
|
|
247
258
|
}
|
|
248
259
|
};
|
|
249
260
|
}
|
|
250
|
-
var CLEARS_RESUME = (phase) => phase === "left" || phase === "removed" || phase === "superseded" || phase === "inactive" || phase === "ended" || phase === "record" || phase === "prejoin" || phase
|
|
261
|
+
var CLEARS_RESUME = (phase) => phase === "left" || phase === "removed" || phase === "superseded" || phase === "inactive" || phase === "ended" || phase === "record" || phase === "prejoin" || phase === "denied" || phase === "knock_expired" || phase.startsWith("refused:");
|
|
262
|
+
var WAITING_RESUMES = (phase) => phase.startsWith("waiting:");
|
|
251
263
|
function autoRejoinDelayMs(attempt, random = Math.random) {
|
|
252
264
|
const base = Math.min(15e3, 1e3 * 2 ** Math.max(0, attempt));
|
|
253
265
|
return Math.round(base * (0.5 + random()));
|
|
@@ -379,6 +391,10 @@ function createConnectionSupervisor(options) {
|
|
|
379
391
|
rejoinAttempts = 0;
|
|
380
392
|
stopRejoin();
|
|
381
393
|
saveMarker(true);
|
|
394
|
+
} else if (WAITING_RESUMES(phase)) {
|
|
395
|
+
stopRejoin();
|
|
396
|
+
driverRegion = null;
|
|
397
|
+
saveMarker(true);
|
|
382
398
|
} else if (phase === "disconnected") {
|
|
383
399
|
driverRegion = null;
|
|
384
400
|
saveMarker(true);
|
|
@@ -912,6 +928,7 @@ function parseRoomToken(body, roomName) {
|
|
|
912
928
|
connectionIdentity: readString(payload, "connection_identity") ?? personKey,
|
|
913
929
|
connectionKind: readString(payload, "connection_kind") === "companion" ? "companion" : "main",
|
|
914
930
|
secondDeviceChoice,
|
|
931
|
+
secondDeviceRule: readString(payload, "second_device_rule"),
|
|
915
932
|
displayName: readString(payload, "display_name") ?? readString(payload, "displayName") ?? identity,
|
|
916
933
|
expiresAt,
|
|
917
934
|
canPublish: readBoolean(payload, "can_publish", true),
|
|
@@ -1625,6 +1642,12 @@ var JOINABLE_FROM = /* @__PURE__ */ new Set([
|
|
|
1625
1642
|
// allows the press; the server's gate decides whether it knocks or is refused again.
|
|
1626
1643
|
"refused:lobby_rejects"
|
|
1627
1644
|
]);
|
|
1645
|
+
var RETRYABLE_REFUSALS = /* @__PURE__ */ new Set([
|
|
1646
|
+
"refused:locked",
|
|
1647
|
+
"refused:too_early",
|
|
1648
|
+
"refused:meeting_full",
|
|
1649
|
+
"refused:platform_capacity"
|
|
1650
|
+
]);
|
|
1628
1651
|
var NOT_ENDABLE = /* @__PURE__ */ new Set([
|
|
1629
1652
|
"ended",
|
|
1630
1653
|
"record",
|
|
@@ -1690,7 +1713,7 @@ function nextPhase(from, event) {
|
|
|
1690
1713
|
case "link_state":
|
|
1691
1714
|
return from === "resolving" && event.reason !== null && isJoinRefusalReason(event.reason) ? refusalPhase(event.reason) : null;
|
|
1692
1715
|
case "join":
|
|
1693
|
-
return JOINABLE_FROM.has(from) ? "joining" : null;
|
|
1716
|
+
return JOINABLE_FROM.has(from) || RETRYABLE_REFUSALS.has(from) ? "joining" : null;
|
|
1694
1717
|
case "auto_rejoin":
|
|
1695
1718
|
return from === "disconnected" ? "joining" : null;
|
|
1696
1719
|
case "resumed":
|
|
@@ -2532,6 +2555,10 @@ var RPCS = {
|
|
|
2532
2555
|
admitAll: "meet_admit_all",
|
|
2533
2556
|
setLock: "meet_set_lock",
|
|
2534
2557
|
recordConsent: "meet_record_consent",
|
|
2558
|
+
/** One meeting rule as the gate obeys it (the knob ladder, this meeting's rung included). */
|
|
2559
|
+
meetingRule: "meet_policy",
|
|
2560
|
+
/** A host sets one rule for THIS meeting (the `meet_meeting` rung); refusals come back as `{ok:false}`. */
|
|
2561
|
+
setMeetingRule: "meet_policy_set",
|
|
2535
2562
|
/*
|
|
2536
2563
|
* ── MEET WAVE 1 — management (0.8). Every write is a SECURITY DEFINER door
|
|
2537
2564
|
* authorized by the meeting's host or a real iam grant (editor to change,
|
|
@@ -2578,7 +2605,7 @@ var INVITEE_COLUMNS = "id,meeting_id,invitee_user_id,email,display_name,role,rsv
|
|
|
2578
2605
|
var RECORDING_COLUMNS = "id,meeting_id,state,started_at,ended_at,started_by,file_id,failure_reason";
|
|
2579
2606
|
var SEGMENT_COLUMNS = "id,meeting_id,identity,speaker,text,started_at,is_final,metadata";
|
|
2580
2607
|
var NOTE_COLUMNS = "id,meeting_id,text,kind,assignee_user_id,created_at,metadata";
|
|
2581
|
-
var ATTENDEE_COLUMNS = "id,meeting_id,identity,participant_user_id,display_name,avatar_url,role,admission_state,knocked_at,knock_expires_at,is_agent,joined_at,left_at,sessions:metadata->sessions";
|
|
2608
|
+
var ATTENDEE_COLUMNS = "id,meeting_id,identity,participant_user_id,display_name,avatar_url,role,admission_state,knocked_at,knock_expires_at,is_agent,joined_at,left_at,sessions:metadata->sessions,knock_flag:metadata->>knock_flag";
|
|
2582
2609
|
function projectStays(value) {
|
|
2583
2610
|
if (!Array.isArray(value)) return [];
|
|
2584
2611
|
const stays = [];
|
|
@@ -2978,6 +3005,8 @@ function createMeetRepository(options) {
|
|
|
2978
3005
|
admissionState: states.includes(admission) ? admission : "admitted",
|
|
2979
3006
|
knockedAt: text(row, "knocked_at"),
|
|
2980
3007
|
knockExpiresAt: text(row, "knock_expires_at"),
|
|
3008
|
+
// The list read selects `metadata->>knock_flag`; a Postgres Changes row carries `metadata`.
|
|
3009
|
+
knockFlag: text(row, "knock_flag") ?? (typeof row["metadata"] === "object" && row["metadata"] !== null ? text(row["metadata"], "knock_flag") : null),
|
|
2981
3010
|
isAgent: bool(row, "is_agent", false),
|
|
2982
3011
|
joinedAt: text(row, "joined_at"),
|
|
2983
3012
|
leftAt: text(row, "left_at"),
|
|
@@ -3301,6 +3330,25 @@ function createMeetRepository(options) {
|
|
|
3301
3330
|
);
|
|
3302
3331
|
return projectMeeting(row);
|
|
3303
3332
|
},
|
|
3333
|
+
async meetingRule(meetingId, key) {
|
|
3334
|
+
const response = await db.rpc(RPCS.meetingRule, { p_meeting_id: meetingId, p_key: key });
|
|
3335
|
+
if (response.error !== null) throw normalizeMeetError(response.error, "meet.meetingRule");
|
|
3336
|
+
return response.data;
|
|
3337
|
+
},
|
|
3338
|
+
async setMeetingRule(meetingId, key, value) {
|
|
3339
|
+
const response = await db.rpc(RPCS.setMeetingRule, { p_meeting_id: meetingId, p_key: key, p_value: value });
|
|
3340
|
+
if (response.error !== null) throw normalizeMeetError(response.error, "meet.setMeetingRule");
|
|
3341
|
+
const answer = response.data ?? {};
|
|
3342
|
+
if (answer["ok"] !== true) {
|
|
3343
|
+
throw new MeetError(
|
|
3344
|
+
"forbidden",
|
|
3345
|
+
typeof answer["detail"] === "string" ? answer["detail"] : "This meeting's rule was not changed.",
|
|
3346
|
+
"Only the meeting's host or a co-host sets its rules; an organization can lock a rule for everyone.",
|
|
3347
|
+
answer
|
|
3348
|
+
);
|
|
3349
|
+
}
|
|
3350
|
+
return answer["effective_value"];
|
|
3351
|
+
},
|
|
3304
3352
|
async transcript(meetingId, limit = 1e3) {
|
|
3305
3353
|
const response = await db.from(TABLES.transcripts).select(SEGMENT_COLUMNS).eq("meeting_id", meetingId).order("started_at", { ascending: true }).order("id", { ascending: true }).limit(limit);
|
|
3306
3354
|
if (response.error !== null) throw normalizeMeetError(response.error, "meet.transcript");
|
|
@@ -4195,7 +4243,8 @@ function lobbyEntryFrom(attendee, now = Date.now()) {
|
|
|
4195
4243
|
knockedAt: attendee.knockedAt ?? attendee.joinedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
|
|
4196
4244
|
knockExpiresAt: attendee.knockExpiresAt ?? null,
|
|
4197
4245
|
decidedAt: null,
|
|
4198
|
-
decidedBy: null
|
|
4246
|
+
decidedBy: null,
|
|
4247
|
+
flag: attendee.knockFlag ?? null
|
|
4199
4248
|
};
|
|
4200
4249
|
}
|
|
4201
4250
|
function deniedEntryFrom(attendee) {
|
|
@@ -4727,6 +4776,17 @@ function createMeetingSession(options) {
|
|
|
4727
4776
|
async askAgain() {
|
|
4728
4777
|
await options.rejoin?.();
|
|
4729
4778
|
},
|
|
4779
|
+
async meetingRule(key) {
|
|
4780
|
+
const meeting = requireMeeting("meet.meetingRule");
|
|
4781
|
+
return repository.meetingRule(meeting.id, key);
|
|
4782
|
+
},
|
|
4783
|
+
async setMeetingRule(key, value) {
|
|
4784
|
+
requireHostUser("meet.setMeetingRule");
|
|
4785
|
+
const meeting = requireMeeting("meet.setMeetingRule");
|
|
4786
|
+
const effective = await repository.setMeetingRule(meeting.id, key, value);
|
|
4787
|
+
hint();
|
|
4788
|
+
return effective;
|
|
4789
|
+
},
|
|
4730
4790
|
async setLock(locked) {
|
|
4731
4791
|
const by = requireHostUser("meet.setLock");
|
|
4732
4792
|
const meeting = requireMeeting("meet.setLock");
|
|
@@ -5994,7 +6054,7 @@ function createRoomEngine(options) {
|
|
|
5994
6054
|
const { secondDevice: _answered, ...rest } = lastRequest;
|
|
5995
6055
|
lastRequest = rest;
|
|
5996
6056
|
}
|
|
5997
|
-
options.tabClaim?.inRoom(String(request.roomName), String(token.identity));
|
|
6057
|
+
options.tabClaim?.inRoom(String(request.roomName), String(token.identity), token.secondDeviceRule ?? null);
|
|
5998
6058
|
current = token;
|
|
5999
6059
|
lastServerUrl = token.serverUrl;
|
|
6000
6060
|
connectionPolicy = token.connectionPolicy ?? DEFAULT_CONNECTION_POLICY;
|
|
@@ -6306,10 +6366,12 @@ function createRoomEngine(options) {
|
|
|
6306
6366
|
if (claim === void 0 || userId === null) return false;
|
|
6307
6367
|
const before = store.snapshot();
|
|
6308
6368
|
if (before.phase !== "prejoin" || before.secondDevice !== null) return false;
|
|
6309
|
-
|
|
6369
|
+
const person = `user:${String(userId)}`;
|
|
6370
|
+
const found = claim.presenceElsewhere !== void 0 ? await claim.presenceElsewhere(String(roomName), person) : await claim.presentElsewhere(String(roomName), person) ? { rule: null } : null;
|
|
6371
|
+
if (found === null || found.rule === "allow_both") return false;
|
|
6310
6372
|
const now2 = store.snapshot();
|
|
6311
6373
|
if (now2.phase !== "prejoin" || now2.secondDevice !== null) return false;
|
|
6312
|
-
store.patch({ secondDevice: { rule: "ask_switch_or_join" } });
|
|
6374
|
+
store.patch({ secondDevice: { rule: found.rule ?? "ask_switch_or_join" } });
|
|
6313
6375
|
report("info", "meet: this browser already has you in this meeting \u2014 offering the choice before Join");
|
|
6314
6376
|
return true;
|
|
6315
6377
|
},
|
|
@@ -10114,6 +10176,10 @@ function actionsFor(host) {
|
|
|
10114
10176
|
leave: () => engine.leave(),
|
|
10115
10177
|
backToPrejoin: () => engine.backToPrejoin(),
|
|
10116
10178
|
retry: () => {
|
|
10179
|
+
if (RETRYABLE_REFUSALS.has(store.snapshot().phase)) {
|
|
10180
|
+
void engine.rejoin().catch(() => void 0);
|
|
10181
|
+
return;
|
|
10182
|
+
}
|
|
10117
10183
|
store.dispatch({ type: "retry", click: true });
|
|
10118
10184
|
},
|
|
10119
10185
|
resolved: () => {
|
|
@@ -11833,6 +11899,7 @@ function ControlBar({ onLeave }) {
|
|
|
11833
11899
|
]
|
|
11834
11900
|
}
|
|
11835
11901
|
),
|
|
11902
|
+
/* @__PURE__ */ jsx6(WaitingRoomRule, {}),
|
|
11836
11903
|
queue.length > 0 ? /* @__PURE__ */ jsxs4(
|
|
11837
11904
|
MenuItem,
|
|
11838
11905
|
{
|
|
@@ -12052,6 +12119,58 @@ function MenuItem({
|
|
|
12052
12119
|
}
|
|
12053
12120
|
);
|
|
12054
12121
|
}
|
|
12122
|
+
var LOBBY_BYPASS_CHOICES = [
|
|
12123
|
+
{ value: "everyone", label: "Everyone" },
|
|
12124
|
+
{ value: "org_and_invited", label: "Your organization and invited people" },
|
|
12125
|
+
{ value: "org", label: "Your organization" },
|
|
12126
|
+
{ value: "invited", label: "Invited people" },
|
|
12127
|
+
{ value: "host_only", label: "Only hosts" }
|
|
12128
|
+
];
|
|
12129
|
+
function WaitingRoomRule() {
|
|
12130
|
+
const host = useRequiredMeetHost();
|
|
12131
|
+
const [open, setOpen] = useState5(false);
|
|
12132
|
+
const [value, setValue] = useState5(null);
|
|
12133
|
+
const [notice, setNotice] = useState5(null);
|
|
12134
|
+
useEffect6(() => {
|
|
12135
|
+
let live = true;
|
|
12136
|
+
void host.meetings.meetingRule("lobby_bypass").then((rule) => {
|
|
12137
|
+
if (live) setValue(typeof rule === "string" ? rule : null);
|
|
12138
|
+
}).catch(() => void 0);
|
|
12139
|
+
return () => {
|
|
12140
|
+
live = false;
|
|
12141
|
+
};
|
|
12142
|
+
}, [host]);
|
|
12143
|
+
const current = LOBBY_BYPASS_CHOICES.find((choice) => choice.value === value)?.label ?? null;
|
|
12144
|
+
return /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
12145
|
+
/* @__PURE__ */ jsxs4(MenuItem, { onSelect: () => setOpen(!open), children: [
|
|
12146
|
+
/* @__PURE__ */ jsx6(LockIcon, { width: 16, height: 16 }),
|
|
12147
|
+
" Who can skip the waiting room",
|
|
12148
|
+
current !== null ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__menu-value", children: current }) : null
|
|
12149
|
+
] }),
|
|
12150
|
+
open ? /* @__PURE__ */ jsxs4("div", { role: "group", "aria-label": "Who can skip the waiting room", "data-meet-rule": "lobby_bypass", children: [
|
|
12151
|
+
LOBBY_BYPASS_CHOICES.map((choice) => /* @__PURE__ */ jsxs4(
|
|
12152
|
+
"button",
|
|
12153
|
+
{
|
|
12154
|
+
type: "button",
|
|
12155
|
+
role: "menuitemradio",
|
|
12156
|
+
"aria-checked": choice.value === value,
|
|
12157
|
+
className: "mx-meet__menu-item mx-meet__menu-item--sub",
|
|
12158
|
+
onClick: () => {
|
|
12159
|
+
setNotice(null);
|
|
12160
|
+
void host.meetings.setMeetingRule("lobby_bypass", choice.value).then(() => setValue(choice.value)).catch((error) => setNotice(error instanceof Error ? error.message : String(error)));
|
|
12161
|
+
},
|
|
12162
|
+
children: [
|
|
12163
|
+
choice.value === value ? /* @__PURE__ */ jsx6(CheckIcon, { width: 14, height: 14 }) : null,
|
|
12164
|
+
" ",
|
|
12165
|
+
choice.label
|
|
12166
|
+
]
|
|
12167
|
+
},
|
|
12168
|
+
choice.value
|
|
12169
|
+
)),
|
|
12170
|
+
notice !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__menu-note", role: "status", children: notice }) : null
|
|
12171
|
+
] }) : null
|
|
12172
|
+
] });
|
|
12173
|
+
}
|
|
12055
12174
|
function Toast({ text: text3, failed, onDone }) {
|
|
12056
12175
|
useEffect6(() => {
|
|
12057
12176
|
const timer = setTimeout(onDone, failed ? 7e3 : 4e3);
|
|
@@ -13140,7 +13259,11 @@ function WaitingList({ lobby }) {
|
|
|
13140
13259
|
/* @__PURE__ */ jsx6(Avatar, { name: entry.displayName, url: entry.avatarUrl, size: 32 }),
|
|
13141
13260
|
/* @__PURE__ */ jsxs4("span", { className: "mx-meet__person-name", children: [
|
|
13142
13261
|
entry.displayName,
|
|
13143
|
-
entry.userId === null ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Guest" }) : null
|
|
13262
|
+
entry.userId === null ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Guest" }) : null,
|
|
13263
|
+
entry.flag === "previously_removed" ? (
|
|
13264
|
+
// `mod-removed-bypass`: advice for the host, never a block — Admit stays.
|
|
13265
|
+
/* @__PURE__ */ jsx6("span", { className: "mx-meet__badge mx-meet__badge--warn", "data-meet-notice": "knock-flagged", children: "Previously removed" })
|
|
13266
|
+
) : null
|
|
13144
13267
|
] }),
|
|
13145
13268
|
/* @__PURE__ */ jsx6(ControlButton, { label: `Admit ${entry.displayName}`, onClick: () => void lobby.admit(entry), children: /* @__PURE__ */ jsx6(CheckIcon, { width: 16, height: 16 }) }),
|
|
13146
13269
|
/* @__PURE__ */ jsx6(
|
|
@@ -13765,7 +13888,20 @@ function ExitScreen({ onLeave }) {
|
|
|
13765
13888
|
const { phase, reason, host, snapshot, actions, call, connection } = useMeetCore();
|
|
13766
13889
|
const [busy, setBusy] = useState5(false);
|
|
13767
13890
|
const failure = snapshot?.failure ?? null;
|
|
13768
|
-
const retryLeft = useCountdown(
|
|
13891
|
+
const retryLeft = useCountdown(
|
|
13892
|
+
phase === "refused:lobby_rejects" || phase === "refused:too_early" ? failure?.retryAt ?? null : null
|
|
13893
|
+
);
|
|
13894
|
+
const reaskedAtZero = useRef6(false);
|
|
13895
|
+
useEffect6(() => {
|
|
13896
|
+
if (phase !== "refused:too_early") {
|
|
13897
|
+
reaskedAtZero.current = false;
|
|
13898
|
+
return;
|
|
13899
|
+
}
|
|
13900
|
+
if (retryLeft === 0 && !reaskedAtZero.current) {
|
|
13901
|
+
reaskedAtZero.current = true;
|
|
13902
|
+
actions.retry();
|
|
13903
|
+
}
|
|
13904
|
+
}, [phase, retryLeft, actions]);
|
|
13769
13905
|
const rejoin = /* @__PURE__ */ jsx6(
|
|
13770
13906
|
Button,
|
|
13771
13907
|
{
|
|
@@ -13803,11 +13939,19 @@ function ExitScreen({ onLeave }) {
|
|
|
13803
13939
|
if (phase.startsWith("refused:")) {
|
|
13804
13940
|
const code = phase.slice("refused:".length);
|
|
13805
13941
|
title = REFUSED_TITLES[code] ?? "You can't join this meeting";
|
|
13806
|
-
line = code === "too_early" || code === "registration_required" || code === "cancelled" ? failure?.remedy ?? null : null;
|
|
13942
|
+
line = code === "too_early" || code === "registration_required" || code === "cancelled" || code === "wrong_account" ? failure?.remedy ?? null : null;
|
|
13943
|
+
if (code === "too_early" && retryLeft !== null && retryLeft > 0) line = `Opens in ${clockText(retryLeft)}`;
|
|
13807
13944
|
actionsNode = /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
13808
13945
|
/* @__PURE__ */ jsx6(Button, { type: "button", variant: "outline", onClick: actions.retry, children: "Try again" }),
|
|
13809
13946
|
home
|
|
13810
13947
|
] });
|
|
13948
|
+
if (code === "sign_in_required" || code === "wrong_account") {
|
|
13949
|
+
const back = typeof window === "undefined" ? "/" : `${window.location.pathname}${window.location.search}`;
|
|
13950
|
+
actionsNode = /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
13951
|
+
/* @__PURE__ */ jsx6(Button, { asChild: true, children: /* @__PURE__ */ jsx6("a", { href: `/login?redirectTo=${encodeURIComponent(back)}`, children: code === "sign_in_required" ? "Sign in" : "Switch account" }) }),
|
|
13952
|
+
home
|
|
13953
|
+
] });
|
|
13954
|
+
}
|
|
13811
13955
|
if (code === "lobby_rejects") {
|
|
13812
13956
|
if (retryLeft !== null && retryLeft > 0) {
|
|
13813
13957
|
line = `You can ask again in ${clockText(retryLeft)}`;
|