@ai-matrx/meet 0.11.44 → 0.11.46
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-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 +70 -10
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +33 -9
- package/dist/core.d.ts +33 -9
- package/dist/core.js +70 -10
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +70 -10
- 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 +70 -10
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +197 -30
- 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 +197 -30
- package/dist/react.js.map +1 -1
- package/dist/skins/meet.cjs +131 -28
- 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 +131 -28
- package/dist/skins/meet.js.map +1 -1
- package/dist/styles.css +16 -0
- package/package.json +5 -5
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);
|
|
@@ -784,10 +800,10 @@ var MEET_ROUTES = {
|
|
|
784
800
|
recordingStop: "/api/v1/meet/recording/stop",
|
|
785
801
|
noteTakerStart: "/api/v1/meet/agent/start",
|
|
786
802
|
noteTakerStop: "/api/v1/meet/agent/stop",
|
|
787
|
-
/** In-meeting Q&A. Streams NDJSON; body is `{meeting_id, question}` only. */
|
|
788
|
-
intelligenceAsk: "/api/v1/meet/intelligence/ask",
|
|
789
803
|
/** Anyone in the meeting (guests with the room pass included) asks for captions for themselves. */
|
|
790
804
|
noteTakerCaptions: "/api/v1/meet/agent/captions",
|
|
805
|
+
/** In-meeting Q&A. Streams NDJSON; body is `{meeting_id, question}` only. */
|
|
806
|
+
intelligenceAsk: "/api/v1/meet/intelligence/ask",
|
|
791
807
|
/** A host ends the meeting for everyone. Served by MRI-A6. */
|
|
792
808
|
meetingEnd: "/api/v1/meet/end",
|
|
793
809
|
/**
|
|
@@ -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) {
|
|
@@ -4367,11 +4416,15 @@ function createMeetingSession(options) {
|
|
|
4367
4416
|
}
|
|
4368
4417
|
let policyTimer = null;
|
|
4369
4418
|
let policyReading = false;
|
|
4419
|
+
let policyInFlight = null;
|
|
4370
4420
|
async function readLivePolicy() {
|
|
4371
4421
|
const meeting = store.snapshot().meeting;
|
|
4372
4422
|
const pass = options.resolvePass?.() ?? null;
|
|
4373
|
-
if (meeting === null || pass === null
|
|
4423
|
+
if (meeting === null || pass === null) return;
|
|
4424
|
+
if (policyReading) return policyInFlight ?? void 0;
|
|
4374
4425
|
policyReading = true;
|
|
4426
|
+
let done = () => void 0;
|
|
4427
|
+
policyInFlight = new Promise((resolve) => done = resolve);
|
|
4375
4428
|
try {
|
|
4376
4429
|
const response = await options.api.request({
|
|
4377
4430
|
path: `${MEET_ROUTES.state}?meeting_id=${encodeURIComponent(meeting.id)}`,
|
|
@@ -4392,6 +4445,8 @@ function createMeetingSession(options) {
|
|
|
4392
4445
|
} catch {
|
|
4393
4446
|
} finally {
|
|
4394
4447
|
policyReading = false;
|
|
4448
|
+
policyInFlight = null;
|
|
4449
|
+
done();
|
|
4395
4450
|
}
|
|
4396
4451
|
}
|
|
4397
4452
|
function syncLivePolicyTimer() {
|
|
@@ -4690,6 +4745,7 @@ function createMeetingSession(options) {
|
|
|
4690
4745
|
},
|
|
4691
4746
|
stopWaiting,
|
|
4692
4747
|
readState: readState2,
|
|
4748
|
+
readLivePolicy,
|
|
4693
4749
|
async readExit(connection, held) {
|
|
4694
4750
|
const meeting = store.snapshot().meeting;
|
|
4695
4751
|
const pass = held ?? options.resolvePass?.() ?? null;
|
|
@@ -4727,6 +4783,17 @@ function createMeetingSession(options) {
|
|
|
4727
4783
|
async askAgain() {
|
|
4728
4784
|
await options.rejoin?.();
|
|
4729
4785
|
},
|
|
4786
|
+
async meetingRule(key) {
|
|
4787
|
+
const meeting = requireMeeting("meet.meetingRule");
|
|
4788
|
+
return repository.meetingRule(meeting.id, key);
|
|
4789
|
+
},
|
|
4790
|
+
async setMeetingRule(key, value) {
|
|
4791
|
+
requireHostUser("meet.setMeetingRule");
|
|
4792
|
+
const meeting = requireMeeting("meet.setMeetingRule");
|
|
4793
|
+
const effective = await repository.setMeetingRule(meeting.id, key, value);
|
|
4794
|
+
hint();
|
|
4795
|
+
return effective;
|
|
4796
|
+
},
|
|
4730
4797
|
async setLock(locked) {
|
|
4731
4798
|
const by = requireHostUser("meet.setLock");
|
|
4732
4799
|
const meeting = requireMeeting("meet.setLock");
|
|
@@ -5506,6 +5573,7 @@ var STATES = [
|
|
|
5506
5573
|
"ended"
|
|
5507
5574
|
];
|
|
5508
5575
|
function readState(value) {
|
|
5576
|
+
if (value === "dispatching") return "joining";
|
|
5509
5577
|
return typeof value === "string" && STATES.includes(value) ? value : null;
|
|
5510
5578
|
}
|
|
5511
5579
|
function isNoteTaker(participant) {
|
|
@@ -5994,7 +6062,7 @@ function createRoomEngine(options) {
|
|
|
5994
6062
|
const { secondDevice: _answered, ...rest } = lastRequest;
|
|
5995
6063
|
lastRequest = rest;
|
|
5996
6064
|
}
|
|
5997
|
-
options.tabClaim?.inRoom(String(request.roomName), String(token.identity));
|
|
6065
|
+
options.tabClaim?.inRoom(String(request.roomName), String(token.identity), token.secondDeviceRule ?? null);
|
|
5998
6066
|
current = token;
|
|
5999
6067
|
lastServerUrl = token.serverUrl;
|
|
6000
6068
|
connectionPolicy = token.connectionPolicy ?? DEFAULT_CONNECTION_POLICY;
|
|
@@ -6306,10 +6374,12 @@ function createRoomEngine(options) {
|
|
|
6306
6374
|
if (claim === void 0 || userId === null) return false;
|
|
6307
6375
|
const before = store.snapshot();
|
|
6308
6376
|
if (before.phase !== "prejoin" || before.secondDevice !== null) return false;
|
|
6309
|
-
|
|
6377
|
+
const person = `user:${String(userId)}`;
|
|
6378
|
+
const found = claim.presenceElsewhere !== void 0 ? await claim.presenceElsewhere(String(roomName), person) : await claim.presentElsewhere(String(roomName), person) ? { rule: null } : null;
|
|
6379
|
+
if (found === null || found.rule === "allow_both") return false;
|
|
6310
6380
|
const now2 = store.snapshot();
|
|
6311
6381
|
if (now2.phase !== "prejoin" || now2.secondDevice !== null) return false;
|
|
6312
|
-
store.patch({ secondDevice: { rule: "ask_switch_or_join" } });
|
|
6382
|
+
store.patch({ secondDevice: { rule: found.rule ?? "ask_switch_or_join" } });
|
|
6313
6383
|
report("info", "meet: this browser already has you in this meeting \u2014 offering the choice before Join");
|
|
6314
6384
|
return true;
|
|
6315
6385
|
},
|
|
@@ -6565,6 +6635,7 @@ function createInRoomClient(options) {
|
|
|
6565
6635
|
action: request.action,
|
|
6566
6636
|
...request.identity != null ? { identity: request.identity } : {},
|
|
6567
6637
|
...request.name !== void 0 ? { name: request.name } : {},
|
|
6638
|
+
...request.value !== void 0 ? { value: request.value } : {},
|
|
6568
6639
|
...request.reason !== void 0 ? { reason: request.reason } : {}
|
|
6569
6640
|
},
|
|
6570
6641
|
...hdrs !== void 0 ? { headers: hdrs } : {}
|
|
@@ -8940,7 +9011,10 @@ function useEndMeeting() {
|
|
|
8940
9011
|
function useConsentNotice() {
|
|
8941
9012
|
const snapshot = useMeetSnapshot();
|
|
8942
9013
|
const agent = noteTakerParticipant(snapshot?.participants ?? []);
|
|
8943
|
-
if (agent === null)
|
|
9014
|
+
if (agent === null) {
|
|
9015
|
+
const state = noteTakerStatus({ meeting: snapshot?.meeting ?? null, participants: [] }).state;
|
|
9016
|
+
return state === "joining" ? "AI notes started. The note-taker is joining this meeting." : null;
|
|
9017
|
+
}
|
|
8944
9018
|
return `AI notes are on. ${agent.displayName} is in this meeting, transcribing what is said and writing notes everyone here can read.`;
|
|
8945
9019
|
}
|
|
8946
9020
|
function useMediaSupervisor() {
|
|
@@ -10114,6 +10188,10 @@ function actionsFor(host) {
|
|
|
10114
10188
|
leave: () => engine.leave(),
|
|
10115
10189
|
backToPrejoin: () => engine.backToPrejoin(),
|
|
10116
10190
|
retry: () => {
|
|
10191
|
+
if (RETRYABLE_REFUSALS.has(store.snapshot().phase)) {
|
|
10192
|
+
void engine.rejoin().catch(() => void 0);
|
|
10193
|
+
return;
|
|
10194
|
+
}
|
|
10117
10195
|
store.dispatch({ type: "retry", click: true });
|
|
10118
10196
|
},
|
|
10119
10197
|
resolved: () => {
|
|
@@ -11833,6 +11911,7 @@ function ControlBar({ onLeave }) {
|
|
|
11833
11911
|
]
|
|
11834
11912
|
}
|
|
11835
11913
|
),
|
|
11914
|
+
/* @__PURE__ */ jsx6(WaitingRoomRule, {}),
|
|
11836
11915
|
queue.length > 0 ? /* @__PURE__ */ jsxs4(
|
|
11837
11916
|
MenuItem,
|
|
11838
11917
|
{
|
|
@@ -12052,6 +12131,58 @@ function MenuItem({
|
|
|
12052
12131
|
}
|
|
12053
12132
|
);
|
|
12054
12133
|
}
|
|
12134
|
+
var LOBBY_BYPASS_CHOICES = [
|
|
12135
|
+
{ value: "everyone", label: "Everyone" },
|
|
12136
|
+
{ value: "org_and_invited", label: "Your organization and invited people" },
|
|
12137
|
+
{ value: "org", label: "Your organization" },
|
|
12138
|
+
{ value: "invited", label: "Invited people" },
|
|
12139
|
+
{ value: "host_only", label: "Only hosts" }
|
|
12140
|
+
];
|
|
12141
|
+
function WaitingRoomRule() {
|
|
12142
|
+
const host = useRequiredMeetHost();
|
|
12143
|
+
const [open, setOpen] = useState5(false);
|
|
12144
|
+
const [value, setValue] = useState5(null);
|
|
12145
|
+
const [notice, setNotice] = useState5(null);
|
|
12146
|
+
useEffect6(() => {
|
|
12147
|
+
let live = true;
|
|
12148
|
+
void host.meetings.meetingRule("lobby_bypass").then((rule) => {
|
|
12149
|
+
if (live) setValue(typeof rule === "string" ? rule : null);
|
|
12150
|
+
}).catch(() => void 0);
|
|
12151
|
+
return () => {
|
|
12152
|
+
live = false;
|
|
12153
|
+
};
|
|
12154
|
+
}, [host]);
|
|
12155
|
+
const current = LOBBY_BYPASS_CHOICES.find((choice) => choice.value === value)?.label ?? null;
|
|
12156
|
+
return /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
12157
|
+
/* @__PURE__ */ jsxs4(MenuItem, { onSelect: () => setOpen(!open), children: [
|
|
12158
|
+
/* @__PURE__ */ jsx6(LockIcon, { width: 16, height: 16 }),
|
|
12159
|
+
" Who can skip the waiting room",
|
|
12160
|
+
current !== null ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__menu-value", children: current }) : null
|
|
12161
|
+
] }),
|
|
12162
|
+
open ? /* @__PURE__ */ jsxs4("div", { role: "group", "aria-label": "Who can skip the waiting room", "data-meet-rule": "lobby_bypass", children: [
|
|
12163
|
+
LOBBY_BYPASS_CHOICES.map((choice) => /* @__PURE__ */ jsxs4(
|
|
12164
|
+
"button",
|
|
12165
|
+
{
|
|
12166
|
+
type: "button",
|
|
12167
|
+
role: "menuitemradio",
|
|
12168
|
+
"aria-checked": choice.value === value,
|
|
12169
|
+
className: "mx-meet__menu-item mx-meet__menu-item--sub",
|
|
12170
|
+
onClick: () => {
|
|
12171
|
+
setNotice(null);
|
|
12172
|
+
void host.meetings.setMeetingRule("lobby_bypass", choice.value).then(() => setValue(choice.value)).catch((error) => setNotice(error instanceof Error ? error.message : String(error)));
|
|
12173
|
+
},
|
|
12174
|
+
children: [
|
|
12175
|
+
choice.value === value ? /* @__PURE__ */ jsx6(CheckIcon, { width: 14, height: 14 }) : null,
|
|
12176
|
+
" ",
|
|
12177
|
+
choice.label
|
|
12178
|
+
]
|
|
12179
|
+
},
|
|
12180
|
+
choice.value
|
|
12181
|
+
)),
|
|
12182
|
+
notice !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__menu-note", role: "status", children: notice }) : null
|
|
12183
|
+
] }) : null
|
|
12184
|
+
] });
|
|
12185
|
+
}
|
|
12055
12186
|
function Toast({ text: text3, failed, onDone }) {
|
|
12056
12187
|
useEffect6(() => {
|
|
12057
12188
|
const timer = setTimeout(onDone, failed ? 7e3 : 4e3);
|
|
@@ -12365,6 +12496,17 @@ function ChatPanel({
|
|
|
12365
12496
|
const snapshot = useMeetSnapshot();
|
|
12366
12497
|
const room = useRoom();
|
|
12367
12498
|
const live = useLivePolicy();
|
|
12499
|
+
const host = useMeetHost();
|
|
12500
|
+
const [rulesChecked, setRulesChecked] = useState5(false);
|
|
12501
|
+
useEffect6(() => {
|
|
12502
|
+
let alive = true;
|
|
12503
|
+
const done = () => alive && setRulesChecked(true);
|
|
12504
|
+
if (host === null) done();
|
|
12505
|
+
else void host.meetings.readLivePolicy().then(done, done);
|
|
12506
|
+
return () => {
|
|
12507
|
+
alive = false;
|
|
12508
|
+
};
|
|
12509
|
+
}, [host]);
|
|
12368
12510
|
const [draft, setDraft] = useState5("");
|
|
12369
12511
|
const [recipient, setRecipient] = useState5(to);
|
|
12370
12512
|
const listRef = useRef6(null);
|
|
@@ -12389,7 +12531,7 @@ function ChatPanel({
|
|
|
12389
12531
|
snapshot?.chatLoaded !== true && messages.length === 0 ? /* @__PURE__ */ jsx6("li", { className: "mx-meet__panel-note", children: "Reading earlier messages\u2026" }) : messages.length === 0 && snapshot?.chatHistoryError == null ? /* @__PURE__ */ jsx6("li", { className: "mx-meet__panel-note", children: "No messages yet. Messages to everyone stay with the meeting, so people who join later see them." }) : null,
|
|
12390
12532
|
messages.map((message) => /* @__PURE__ */ jsx6(ChatLine, { message, local, people }, message.id))
|
|
12391
12533
|
] }),
|
|
12392
|
-
!live.canChat ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", role: "status", "data-meet-notice": "chat-restricted", children: live.chatMode === "off" ? "Chat is turned off for this meeting." : "Chat is limited to the host and co-hosts in this meeting." }) : /* @__PURE__ */ jsxs4(
|
|
12534
|
+
!rulesChecked ? null : !live.canChat ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", role: "status", "data-meet-notice": "chat-restricted", children: live.chatMode === "off" ? "Chat is turned off for this meeting." : "Chat is limited to the host and co-hosts in this meeting." }) : /* @__PURE__ */ jsxs4(
|
|
12393
12535
|
"form",
|
|
12394
12536
|
{
|
|
12395
12537
|
className: "mx-meet__composer mx-meet__composer--chat",
|
|
@@ -13140,7 +13282,11 @@ function WaitingList({ lobby }) {
|
|
|
13140
13282
|
/* @__PURE__ */ jsx6(Avatar, { name: entry.displayName, url: entry.avatarUrl, size: 32 }),
|
|
13141
13283
|
/* @__PURE__ */ jsxs4("span", { className: "mx-meet__person-name", children: [
|
|
13142
13284
|
entry.displayName,
|
|
13143
|
-
entry.userId === null ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Guest" }) : null
|
|
13285
|
+
entry.userId === null ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Guest" }) : null,
|
|
13286
|
+
entry.flag === "previously_removed" ? (
|
|
13287
|
+
// `mod-removed-bypass`: advice for the host, never a block — Admit stays.
|
|
13288
|
+
/* @__PURE__ */ jsx6("span", { className: "mx-meet__badge mx-meet__badge--warn", "data-meet-notice": "knock-flagged", children: "Previously removed" })
|
|
13289
|
+
) : null
|
|
13144
13290
|
] }),
|
|
13145
13291
|
/* @__PURE__ */ jsx6(ControlButton, { label: `Admit ${entry.displayName}`, onClick: () => void lobby.admit(entry), children: /* @__PURE__ */ jsx6(CheckIcon, { width: 16, height: 16 }) }),
|
|
13146
13292
|
/* @__PURE__ */ jsx6(
|
|
@@ -13765,7 +13911,20 @@ function ExitScreen({ onLeave }) {
|
|
|
13765
13911
|
const { phase, reason, host, snapshot, actions, call, connection } = useMeetCore();
|
|
13766
13912
|
const [busy, setBusy] = useState5(false);
|
|
13767
13913
|
const failure = snapshot?.failure ?? null;
|
|
13768
|
-
const retryLeft = useCountdown(
|
|
13914
|
+
const retryLeft = useCountdown(
|
|
13915
|
+
phase === "refused:lobby_rejects" || phase === "refused:too_early" ? failure?.retryAt ?? null : null
|
|
13916
|
+
);
|
|
13917
|
+
const reaskedAtZero = useRef6(false);
|
|
13918
|
+
useEffect6(() => {
|
|
13919
|
+
if (phase !== "refused:too_early") {
|
|
13920
|
+
reaskedAtZero.current = false;
|
|
13921
|
+
return;
|
|
13922
|
+
}
|
|
13923
|
+
if (retryLeft === 0 && !reaskedAtZero.current) {
|
|
13924
|
+
reaskedAtZero.current = true;
|
|
13925
|
+
actions.retry();
|
|
13926
|
+
}
|
|
13927
|
+
}, [phase, retryLeft, actions]);
|
|
13769
13928
|
const rejoin = /* @__PURE__ */ jsx6(
|
|
13770
13929
|
Button,
|
|
13771
13930
|
{
|
|
@@ -13803,11 +13962,19 @@ function ExitScreen({ onLeave }) {
|
|
|
13803
13962
|
if (phase.startsWith("refused:")) {
|
|
13804
13963
|
const code = phase.slice("refused:".length);
|
|
13805
13964
|
title = REFUSED_TITLES[code] ?? "You can't join this meeting";
|
|
13806
|
-
line = code === "too_early" || code === "registration_required" || code === "cancelled" ? failure?.remedy ?? null : null;
|
|
13965
|
+
line = code === "too_early" || code === "registration_required" || code === "cancelled" || code === "wrong_account" ? failure?.remedy ?? null : null;
|
|
13966
|
+
if (code === "too_early" && retryLeft !== null && retryLeft > 0) line = `Opens in ${clockText(retryLeft)}`;
|
|
13807
13967
|
actionsNode = /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
13808
13968
|
/* @__PURE__ */ jsx6(Button, { type: "button", variant: "outline", onClick: actions.retry, children: "Try again" }),
|
|
13809
13969
|
home
|
|
13810
13970
|
] });
|
|
13971
|
+
if (code === "sign_in_required" || code === "wrong_account") {
|
|
13972
|
+
const back = typeof window === "undefined" ? "/" : `${window.location.pathname}${window.location.search}`;
|
|
13973
|
+
actionsNode = /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
13974
|
+
/* @__PURE__ */ jsx6(Button, { asChild: true, children: /* @__PURE__ */ jsx6("a", { href: `/login?redirectTo=${encodeURIComponent(back)}`, children: code === "sign_in_required" ? "Sign in" : "Switch account" }) }),
|
|
13975
|
+
home
|
|
13976
|
+
] });
|
|
13977
|
+
}
|
|
13811
13978
|
if (code === "lobby_rejects") {
|
|
13812
13979
|
if (retryLeft !== null && retryLeft > 0) {
|
|
13813
13980
|
line = `You can ask again in ${clockText(retryLeft)}`;
|