@ai-matrx/meet 0.8.0 → 0.9.0
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 +26 -0
- package/dist/{collab-Bss-_Jfp.d.cts → collab-B6scmSST.d.cts} +18 -12
- package/dist/{collab-Bss-_Jfp.d.ts → collab-B6scmSST.d.ts} +18 -12
- package/dist/{components-BOUmOiPj.d.cts → components-BeCQ9h0h.d.cts} +1 -1
- package/dist/{components-BmgstFx_.d.ts → components-D0TqyeiY.d.ts} +1 -1
- package/dist/core.cjs +113 -50
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +55 -19
- package/dist/core.d.ts +55 -19
- package/dist/core.js +113 -50
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +113 -50
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +113 -50
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +129 -57
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +4 -4
- package/dist/react.d.ts +4 -4
- package/dist/react.js +129 -57
- package/dist/react.js.map +1 -1
- package/dist/skins/meet.cjs +47 -15
- 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 +47 -15
- package/dist/skins/meet.js.map +1 -1
- package/package.json +4 -4
package/dist/react.d.cts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ReactNode } 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, JoinRequest, MeetingRecordCache, LocalMediaState, ModerationNotice, Stage, CollabRequest } from './core.cjs';
|
|
4
|
-
export { ATTENDANCE_CSV_HEADER, AnnounceResult, ApplyRoomEventArgs, AskArgs, AttendanceKind, AttendanceRow, AudioProcessing, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, CallCenterOptions, CallInviteHandlerOptions, CallInvitePayload, CollabAction, CollabResult, CollabRuntime, CollabStoreLike, CreateCallInviteInput, CreateMeetingInput, DATA_TOPICS, DEFAULT_EFFECTS, DEFAULT_PAGE_SIZE, DataTopic, DeviceKind, DeviceManagerOptions, DeviceStorage, DriverConnectionState, DriverParticipant, DriverTrackKind, DriverTranscription, END_MEETING_NOT_SERVED, EffectsStorage, EndMeetingResult, FollowUpDraft, FollowUpRecipient, FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, GuestRecordAccess, IDLE_MEDIA, IDLE_TRACK, InRoomClientOptions, LISTEN_ONLY_NOTICE, LibraryRecording, LiveKitDriverOptions, LocalTrackState, MEETING_INVITE_KIND, MEETING_INVITE_VERSION, MEETING_RECORD_GRACE_MS, MEET_ANSWER_CONTEXT_EVENT, MEET_ANSWER_EVENTS, MEET_EVENTS, MEET_REACTIONS, MEET_ROUTES, MEET_SCHEMA, MODERATION_ACTIONS, MediaDevicesLike, MediaUnavailable, MeetAiAnswer, MeetAiOptions, MeetDevice, MeetError, MeetErrorCode, MeetEvent, MeetGrants, 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, NameBook, NoteTakerDispatch, NoteTakerRefusal, ObserveInput, ObservedConnection, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, REACTION_TTL_MS, REFUSED_ABSENCE, ROOM_EVENTS, ROOM_EVENT_PREFIX,
|
|
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, R as RoomName, g as MeetingNote, W as WrapUpAnnouncement, S as StageLayout, h as MeetingId, O as OrganizationId, i as CollabSnapshot, C as CollabPanel } from './collab-
|
|
6
|
-
export { j as AdmissionState, k as CAPTION_LANGUAGES, l as CallId, m as CallState, n as CallablePerson, o as ConnectionQuality, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, I as InviteeInput, p as InviteeRole, J as JsonObject, q as JsonValue, r as MeetApiOptions, s as MeetApiRequest, t as MeetBreakoutBroadcast, u as MeetBreakoutPlan, v as MeetBreakoutRoom, w as MeetCollabSettings, x as MeetFileMedia, y as MeetPoll, z as MeetPollOption, B as MeetPollState, D as MeetQuestion, G as MeetQuestionState, H as MeetStroke, K as MeetingActivities, N as MeetingAttendee, Q as MeetingChanges, V as MeetingInvitee, X as MeetingKind, Y as MeetingNoteKind, Z as MeetingOccurrence, _ as MeetingSettings, $ as NoteTakerState, a0 as ORGANIZATION_HEADER, a1 as OccurrenceOverride, a2 as OccurrenceState, a3 as
|
|
7
|
-
export { G as GuestRecordAccessControl } from './components-
|
|
4
|
+
export { ATTENDANCE_CSV_HEADER, AnnounceResult, ApplyRoomEventArgs, AskArgs, AttendanceKind, AttendanceRow, AudioProcessing, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, CallCenterOptions, CallInviteHandlerOptions, CallInvitePayload, CollabAction, CollabResult, CollabRuntime, CollabStoreLike, CreateCallInviteInput, CreateMeetingInput, DATA_TOPICS, DEFAULT_EFFECTS, DEFAULT_PAGE_SIZE, DataTopic, DeviceKind, DeviceManagerOptions, DeviceStorage, DriverConnectionState, DriverParticipant, DriverTrackKind, DriverTranscription, END_MEETING_NOT_SERVED, EffectsStorage, EndMeetingResult, FollowUpDraft, FollowUpRecipient, FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, GuestRecordAccess, IDLE_MEDIA, IDLE_TRACK, InRoomClientOptions, LISTEN_ONLY_NOTICE, 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, MediaUnavailable, MeetAiAnswer, MeetAiOptions, MeetDevice, MeetError, MeetErrorCode, MeetEvent, MeetGrants, 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, NameBook, NoteTakerDispatch, NoteTakerRefusal, ObserveInput, ObservedConnection, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, REACTION_TTL_MS, REFUSED_ABSENCE, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, RecordingControllerOptions, RepositoryOptions, RoomChatMessage, RoomDriverHandlers, RoomEngineOptions, RoomEventOutcome, RoomEventTopic, RoomReaction, RoomToken, RoomTokenStorage, ScheduleMeetingInput, StageArgs, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, TokenClientOptions, TokenRequest, TranscriptBlock, TranscriptFormat, TranscriptMatch, VideoEffect, WrapUpStatus, absenceSentence, activeWrapUpSummary, activityAttention, announceMeeting, applyRoomEvent, assembleMeetingRecord, attendanceCsv, attendanceReport, attendanceTotals, attendeeKey, availableActivities, callInviteAction, callInviteText, callStateLabel, canModerate, canModerateParticipant, canTransition, captionSegment, changesPatch, clockPosition, computeStage, countLabel, createCallCenter, createCallInviteHandler, createDeviceManager, createInRoomClient, createLiveKitDriver, createMeetAi, createMeetRepository, createMeetStore, createMeetingInviteHandler, createMeetingRecordCache, createMeetingSession, createMemoryDeviceStorage, createRecordingController, createRoomEngine, createTokenClient, createWebDeviceStorage, createWebEffectsStorage, createWebRoomTokenStorage, displayNameFor, gridColumns, groupTranscript, guestRecordAccessExplanation, guestRecordAccessLabel, guestRecordAccessSetting, hasEnded, hostUserIds, invalidResponse, isGuestIdentity, isListenOnly, isNoteTaker, isRealName, isRoomEventTopic, learnName, learnNames, listenOnlyNotice, loadFollowUpDraft, loadGuestMeetingRecord, loadMeetingChat, loadMeetingRecord, loadMeetingRecordParts, mapConnectionState, mapQuality, meetingInviteAction, meetingLength, meetingLink, meetingPassHeaders, meetingPath, meetingSlug, meetingTopic, meetingWhen, mergeCaption, mergeRecord, microphoneNoticeCode, moveToRoom, 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, recordingLabel, recordingNotice, recordingOffsetMs, rememberedMeetingPass, roleOf, roomTopic, rootAttributes, searchTranscript, sendFollowUp, setCaptionLanguage, setGuestRecordAccess, settingsPatch, snapshotParticipant, snippetRuns, staticObservation, summarizeMeetingRecordRestrictions, takeMoveRequest, takePanelRequest, transcriptDocument, unavailableFrom, uniqueAttendees, untranslatedLines, userTopic, wasRefused, 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, R as RoomName, g as MeetingNote, W as WrapUpAnnouncement, S as StageLayout, h as MeetingId, O as OrganizationId, i as CollabSnapshot, C as CollabPanel } from './collab-B6scmSST.cjs';
|
|
6
|
+
export { j as AdmissionState, k as CAPTION_LANGUAGES, l as CallId, m as CallState, n as CallablePerson, o as ConnectionQuality, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, I as InviteeInput, p as InviteeRole, J as JsonObject, q as JsonValue, r as MeetApiOptions, s as MeetApiRequest, t as MeetBreakoutBroadcast, u as MeetBreakoutPlan, v as MeetBreakoutRoom, w as MeetCollabSettings, x as MeetFileMedia, y as MeetPoll, z as MeetPollOption, B as MeetPollState, D as MeetQuestion, G as MeetQuestionState, H as MeetStroke, K as MeetingActivities, N as MeetingAttendee, Q as MeetingChanges, V as MeetingInvitee, X as MeetingKind, Y as MeetingNoteKind, Z as MeetingOccurrence, _ as MeetingSettings, $ as NoteTakerState, a0 as ORGANIZATION_HEADER, a1 as OccurrenceOverride, a2 as OccurrenceState, a3 as ParticipantStanding, a4 as ROLE_RANK, a5 as RecordingPolicy, a6 as RecordingRecord, a7 as RecordingState, a8 as RoomPhase, a9 as RsvpAnswer, aa as RsvpInvitation, ab as RsvpState, ac as TranscriptSegment, ad as UpcomingOccurrence, ae as applyCollabPacket, af as asCallId, ag as asMeetingId, ah as asOrganizationId, ai as asParticipantIdentity, aj as asRoomName, ak as asUserId, al as assignedRoom, am as autoAssign, an as breakoutRemainingMs, ao as collabFromState, ap as createMeetApi, aq as defaultCaptionLanguage, ar as fileDownloadPath, as as isGuest, at as isHostRole, au as isLinkFollower, av as loadMeetingActivities, aw as withItem } from './collab-B6scmSST.cjs';
|
|
7
|
+
export { G as GuestRecordAccessControl } from './components-BeCQ9h0h.cjs';
|
|
8
8
|
import '@ai-matrx/realtime';
|
|
9
9
|
import 'livekit-client';
|
|
10
10
|
|
package/dist/react.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ReactNode } 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, JoinRequest, MeetingRecordCache, LocalMediaState, ModerationNotice, Stage, CollabRequest } from './core.js';
|
|
4
|
-
export { ATTENDANCE_CSV_HEADER, AnnounceResult, ApplyRoomEventArgs, AskArgs, AttendanceKind, AttendanceRow, AudioProcessing, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, CallCenterOptions, CallInviteHandlerOptions, CallInvitePayload, CollabAction, CollabResult, CollabRuntime, CollabStoreLike, CreateCallInviteInput, CreateMeetingInput, DATA_TOPICS, DEFAULT_EFFECTS, DEFAULT_PAGE_SIZE, DataTopic, DeviceKind, DeviceManagerOptions, DeviceStorage, DriverConnectionState, DriverParticipant, DriverTrackKind, DriverTranscription, END_MEETING_NOT_SERVED, EffectsStorage, EndMeetingResult, FollowUpDraft, FollowUpRecipient, FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, GuestRecordAccess, IDLE_MEDIA, IDLE_TRACK, InRoomClientOptions, LISTEN_ONLY_NOTICE, LibraryRecording, LiveKitDriverOptions, LocalTrackState, MEETING_INVITE_KIND, MEETING_INVITE_VERSION, MEETING_RECORD_GRACE_MS, MEET_ANSWER_CONTEXT_EVENT, MEET_ANSWER_EVENTS, MEET_EVENTS, MEET_REACTIONS, MEET_ROUTES, MEET_SCHEMA, MODERATION_ACTIONS, MediaDevicesLike, MediaUnavailable, MeetAiAnswer, MeetAiOptions, MeetDevice, MeetError, MeetErrorCode, MeetEvent, MeetGrants, 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, NameBook, NoteTakerDispatch, NoteTakerRefusal, ObserveInput, ObservedConnection, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, REACTION_TTL_MS, REFUSED_ABSENCE, ROOM_EVENTS, ROOM_EVENT_PREFIX,
|
|
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, R as RoomName, g as MeetingNote, W as WrapUpAnnouncement, S as StageLayout, h as MeetingId, O as OrganizationId, i as CollabSnapshot, C as CollabPanel } from './collab-
|
|
6
|
-
export { j as AdmissionState, k as CAPTION_LANGUAGES, l as CallId, m as CallState, n as CallablePerson, o as ConnectionQuality, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, I as InviteeInput, p as InviteeRole, J as JsonObject, q as JsonValue, r as MeetApiOptions, s as MeetApiRequest, t as MeetBreakoutBroadcast, u as MeetBreakoutPlan, v as MeetBreakoutRoom, w as MeetCollabSettings, x as MeetFileMedia, y as MeetPoll, z as MeetPollOption, B as MeetPollState, D as MeetQuestion, G as MeetQuestionState, H as MeetStroke, K as MeetingActivities, N as MeetingAttendee, Q as MeetingChanges, V as MeetingInvitee, X as MeetingKind, Y as MeetingNoteKind, Z as MeetingOccurrence, _ as MeetingSettings, $ as NoteTakerState, a0 as ORGANIZATION_HEADER, a1 as OccurrenceOverride, a2 as OccurrenceState, a3 as
|
|
7
|
-
export { G as GuestRecordAccessControl } from './components-
|
|
4
|
+
export { ATTENDANCE_CSV_HEADER, AnnounceResult, ApplyRoomEventArgs, AskArgs, AttendanceKind, AttendanceRow, AudioProcessing, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, CallCenterOptions, CallInviteHandlerOptions, CallInvitePayload, CollabAction, CollabResult, CollabRuntime, CollabStoreLike, CreateCallInviteInput, CreateMeetingInput, DATA_TOPICS, DEFAULT_EFFECTS, DEFAULT_PAGE_SIZE, DataTopic, DeviceKind, DeviceManagerOptions, DeviceStorage, DriverConnectionState, DriverParticipant, DriverTrackKind, DriverTranscription, END_MEETING_NOT_SERVED, EffectsStorage, EndMeetingResult, FollowUpDraft, FollowUpRecipient, FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, GuestRecordAccess, IDLE_MEDIA, IDLE_TRACK, InRoomClientOptions, LISTEN_ONLY_NOTICE, 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, MediaUnavailable, MeetAiAnswer, MeetAiOptions, MeetDevice, MeetError, MeetErrorCode, MeetEvent, MeetGrants, 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, NameBook, NoteTakerDispatch, NoteTakerRefusal, ObserveInput, ObservedConnection, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, REACTION_TTL_MS, REFUSED_ABSENCE, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, RecordingControllerOptions, RepositoryOptions, RoomChatMessage, RoomDriverHandlers, RoomEngineOptions, RoomEventOutcome, RoomEventTopic, RoomReaction, RoomToken, RoomTokenStorage, ScheduleMeetingInput, StageArgs, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, TokenClientOptions, TokenRequest, TranscriptBlock, TranscriptFormat, TranscriptMatch, VideoEffect, WrapUpStatus, absenceSentence, activeWrapUpSummary, activityAttention, announceMeeting, applyRoomEvent, assembleMeetingRecord, attendanceCsv, attendanceReport, attendanceTotals, attendeeKey, availableActivities, callInviteAction, callInviteText, callStateLabel, canModerate, canModerateParticipant, canTransition, captionSegment, changesPatch, clockPosition, computeStage, countLabel, createCallCenter, createCallInviteHandler, createDeviceManager, createInRoomClient, createLiveKitDriver, createMeetAi, createMeetRepository, createMeetStore, createMeetingInviteHandler, createMeetingRecordCache, createMeetingSession, createMemoryDeviceStorage, createRecordingController, createRoomEngine, createTokenClient, createWebDeviceStorage, createWebEffectsStorage, createWebRoomTokenStorage, displayNameFor, gridColumns, groupTranscript, guestRecordAccessExplanation, guestRecordAccessLabel, guestRecordAccessSetting, hasEnded, hostUserIds, invalidResponse, isGuestIdentity, isListenOnly, isNoteTaker, isRealName, isRoomEventTopic, learnName, learnNames, listenOnlyNotice, loadFollowUpDraft, loadGuestMeetingRecord, loadMeetingChat, loadMeetingRecord, loadMeetingRecordParts, mapConnectionState, mapQuality, meetingInviteAction, meetingLength, meetingLink, meetingPassHeaders, meetingPath, meetingSlug, meetingTopic, meetingWhen, mergeCaption, mergeRecord, microphoneNoticeCode, moveToRoom, 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, recordingLabel, recordingNotice, recordingOffsetMs, rememberedMeetingPass, roleOf, roomTopic, rootAttributes, searchTranscript, sendFollowUp, setCaptionLanguage, setGuestRecordAccess, settingsPatch, snapshotParticipant, snippetRuns, staticObservation, summarizeMeetingRecordRestrictions, takeMoveRequest, takePanelRequest, transcriptDocument, unavailableFrom, uniqueAttendees, untranslatedLines, userTopic, wasRefused, 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, R as RoomName, g as MeetingNote, W as WrapUpAnnouncement, S as StageLayout, h as MeetingId, O as OrganizationId, i as CollabSnapshot, C as CollabPanel } from './collab-B6scmSST.js';
|
|
6
|
+
export { j as AdmissionState, k as CAPTION_LANGUAGES, l as CallId, m as CallState, n as CallablePerson, o as ConnectionQuality, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, I as InviteeInput, p as InviteeRole, J as JsonObject, q as JsonValue, r as MeetApiOptions, s as MeetApiRequest, t as MeetBreakoutBroadcast, u as MeetBreakoutPlan, v as MeetBreakoutRoom, w as MeetCollabSettings, x as MeetFileMedia, y as MeetPoll, z as MeetPollOption, B as MeetPollState, D as MeetQuestion, G as MeetQuestionState, H as MeetStroke, K as MeetingActivities, N as MeetingAttendee, Q as MeetingChanges, V as MeetingInvitee, X as MeetingKind, Y as MeetingNoteKind, Z as MeetingOccurrence, _ as MeetingSettings, $ as NoteTakerState, a0 as ORGANIZATION_HEADER, a1 as OccurrenceOverride, a2 as OccurrenceState, a3 as ParticipantStanding, a4 as ROLE_RANK, a5 as RecordingPolicy, a6 as RecordingRecord, a7 as RecordingState, a8 as RoomPhase, a9 as RsvpAnswer, aa as RsvpInvitation, ab as RsvpState, ac as TranscriptSegment, ad as UpcomingOccurrence, ae as applyCollabPacket, af as asCallId, ag as asMeetingId, ah as asOrganizationId, ai as asParticipantIdentity, aj as asRoomName, ak as asUserId, al as assignedRoom, am as autoAssign, an as breakoutRemainingMs, ao as collabFromState, ap as createMeetApi, aq as defaultCaptionLanguage, ar as fileDownloadPath, as as isGuest, at as isHostRole, au as isLinkFollower, av as loadMeetingActivities, aw as withItem } from './collab-B6scmSST.js';
|
|
7
|
+
export { G as GuestRecordAccessControl } from './components-D0TqyeiY.js';
|
|
8
8
|
import '@ai-matrx/realtime';
|
|
9
9
|
import 'livekit-client';
|
|
10
10
|
|
package/dist/react.js
CHANGED
|
@@ -28,11 +28,18 @@ var MeetError = class extends Error {
|
|
|
28
28
|
/** What to DO. Rendered to the user for the device codes. */
|
|
29
29
|
remedy;
|
|
30
30
|
cause;
|
|
31
|
-
|
|
31
|
+
/**
|
|
32
|
+
* The join gate's reason code (CORE-DESIGN §2.5) when the server named one: `not_found`,
|
|
33
|
+
* `cancelled`, `ended`, `locked`, `removed`, `lobby_rejects`, `not_invited`… The phase
|
|
34
|
+
* renders `refused:<reason>` (or `ended`) from it — never from the HTTP status.
|
|
35
|
+
*/
|
|
36
|
+
reason;
|
|
37
|
+
constructor(code, message, remedy, cause, reason) {
|
|
32
38
|
super(message);
|
|
33
39
|
this.name = "MeetError";
|
|
34
40
|
this.code = code;
|
|
35
41
|
this.remedy = remedy;
|
|
42
|
+
this.reason = reason ?? null;
|
|
36
43
|
if (cause !== void 0) this.cause = cause;
|
|
37
44
|
}
|
|
38
45
|
/** True when retrying after the host re-establishes a session is the fix. */
|
|
@@ -250,6 +257,17 @@ function createWebRoomTokenStorage(onDiagnostic) {
|
|
|
250
257
|
}
|
|
251
258
|
};
|
|
252
259
|
}
|
|
260
|
+
function rememberedMeetingPass(roomName, storage = createWebRoomTokenStorage()) {
|
|
261
|
+
const raw = storage.read(roomName);
|
|
262
|
+
if (raw === null) return null;
|
|
263
|
+
try {
|
|
264
|
+
const parsed = JSON.parse(raw);
|
|
265
|
+
if (parsed.standing !== "guest") return null;
|
|
266
|
+
return typeof parsed.meetingPass === "string" && parsed.meetingPass.length > 0 ? parsed.meetingPass : null;
|
|
267
|
+
} catch {
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
253
271
|
var MEET_ROUTES = {
|
|
254
272
|
token: "/api/v1/meet/token",
|
|
255
273
|
recordingStart: "/api/v1/meet/recording/start",
|
|
@@ -263,7 +281,7 @@ var MEET_ROUTES = {
|
|
|
263
281
|
/**
|
|
264
282
|
* THE POST-MEETING RECORD FOR A READER WITH NO DATABASE (MRF-1). A `GET`,
|
|
265
283
|
* authorized by the room token this device already holds, carried in the
|
|
266
|
-
* `x-meet-
|
|
284
|
+
* `x-meet-pass` header — never a query parameter, because a bearer
|
|
267
285
|
* credential in a URL lands in access logs, referrers and history.
|
|
268
286
|
*/
|
|
269
287
|
record: "/api/v1/meet/record",
|
|
@@ -271,7 +289,7 @@ var MEET_ROUTES = {
|
|
|
271
289
|
recordAccess: "/api/v1/meet/record/access",
|
|
272
290
|
/**
|
|
273
291
|
* KEEP YOUR NOTES (2026-10-01): a guest who just created an account presents
|
|
274
|
-
* their kept pass in `x-meet-
|
|
292
|
+
* their kept pass in `x-meet-pass` with their new session, and the
|
|
275
293
|
* meeting they attended becomes theirs to read. Idempotent; never a grant.
|
|
276
294
|
*/
|
|
277
295
|
claim: "/api/v1/meet/claim",
|
|
@@ -293,7 +311,7 @@ var MEET_ROUTES = {
|
|
|
293
311
|
* Meet wave 2: EVERY in-meeting host power (mute, stop video, mute all, ask to
|
|
294
312
|
* unmute, spotlight, lower hands, co-host, hand over, rename, remove, report).
|
|
295
313
|
* Decided by the server from the meeting itself; a guest's pass rides
|
|
296
|
-
* `x-meet-
|
|
314
|
+
* `x-meet-pass`.
|
|
297
315
|
*/
|
|
298
316
|
moderate: "/api/v1/meet/moderate",
|
|
299
317
|
/** Meet wave 2: the SAVED chat — `POST` sends to everyone, `GET ?meeting_id=` reads history. */
|
|
@@ -309,7 +327,11 @@ var MEET_ROUTES = {
|
|
|
309
327
|
function meetingPath(template, meetingId) {
|
|
310
328
|
return template.replace("{meeting_id}", encodeURIComponent(meetingId));
|
|
311
329
|
}
|
|
312
|
-
var
|
|
330
|
+
var MEETING_PASS_HEADER = "x-meet-pass";
|
|
331
|
+
function meetingPassHeaders(token) {
|
|
332
|
+
const pass = token?.meetingPass ?? null;
|
|
333
|
+
return pass !== null && pass.length > 0 ? { [MEETING_PASS_HEADER]: pass } : {};
|
|
334
|
+
}
|
|
313
335
|
var REFRESH_RATIO = 0.8;
|
|
314
336
|
function readString(source, key) {
|
|
315
337
|
const value = source[key];
|
|
@@ -319,7 +341,12 @@ function readBoolean(source, key, fallback) {
|
|
|
319
341
|
const value = source[key];
|
|
320
342
|
return typeof value === "boolean" ? value : fallback;
|
|
321
343
|
}
|
|
322
|
-
var
|
|
344
|
+
var TOKEN_STANDINGS = ["member", "invited", "outsider", "guest"];
|
|
345
|
+
function readStanding(source, key) {
|
|
346
|
+
const value = source[key];
|
|
347
|
+
return TOKEN_STANDINGS.includes(value) ? value : null;
|
|
348
|
+
}
|
|
349
|
+
var TOKEN_ROLES = ["host", "cohost", "presenter", "participant", "viewer"];
|
|
323
350
|
function readRole(source, key) {
|
|
324
351
|
const value = source[key];
|
|
325
352
|
return TOKEN_ROLES.includes(value) ? value : null;
|
|
@@ -362,7 +389,12 @@ function parseRoomToken(body, roomName) {
|
|
|
362
389
|
// Deriving the role from what DID arrive keeps a host a host against a
|
|
363
390
|
// server that has not landed MRI-A11 — and never invents a host from
|
|
364
391
|
// silence, because both fallbacks below grant nothing.
|
|
365
|
-
|
|
392
|
+
// A word this package does not know grants nothing: `participant`, never a host.
|
|
393
|
+
role: readRole(payload, "role") ?? (isHost ? "host" : "participant"),
|
|
394
|
+
standing: readStanding(payload, "standing"),
|
|
395
|
+
meetingPass: readString(payload, "meeting_pass"),
|
|
396
|
+
meetingPassExpiresAt: readString(payload, "meeting_pass_expires_at"),
|
|
397
|
+
sessionId: readString(payload, "session_id"),
|
|
366
398
|
lobby: readBoolean(payload, "lobby", false),
|
|
367
399
|
breakoutRoomId: readString(payload, "breakout_room_id") ?? null
|
|
368
400
|
};
|
|
@@ -373,7 +405,7 @@ function createTokenClient(options) {
|
|
|
373
405
|
const storage = options.storage;
|
|
374
406
|
function remember(token) {
|
|
375
407
|
if (storage === void 0) return;
|
|
376
|
-
if (
|
|
408
|
+
if (token.standing !== "guest") return;
|
|
377
409
|
storage.write(token.roomName, JSON.stringify(token));
|
|
378
410
|
}
|
|
379
411
|
function recall(roomName) {
|
|
@@ -431,22 +463,28 @@ function createTokenClient(options) {
|
|
|
431
463
|
throw new MeetError(
|
|
432
464
|
"forbidden",
|
|
433
465
|
said?.message ?? "You can't join this meeting.",
|
|
434
|
-
said?.remedy ?? "Ask the person who shared the link to let you in, then open the link again."
|
|
466
|
+
said?.remedy ?? "Ask the person who shared the link to let you in, then open the link again.",
|
|
467
|
+
void 0,
|
|
468
|
+
said?.reason ?? null
|
|
435
469
|
);
|
|
436
470
|
}
|
|
437
471
|
if (response.status === 404) {
|
|
438
472
|
throw new MeetError(
|
|
439
473
|
"not-found",
|
|
440
474
|
"meet.token: no such meeting",
|
|
441
|
-
"The link is wrong or the meeting was deleted. Show the 'meeting not found' screen; a durable link that 404s is never a retry."
|
|
475
|
+
"The link is wrong or the meeting was deleted. Show the 'meeting not found' screen; a durable link that 404s is never a retry.",
|
|
476
|
+
void 0,
|
|
477
|
+
"not_found"
|
|
442
478
|
);
|
|
443
479
|
}
|
|
444
480
|
if (response.status === 410) {
|
|
445
|
-
const
|
|
481
|
+
const said = await serverSentence(response);
|
|
446
482
|
throw new MeetError(
|
|
447
483
|
"cancelled",
|
|
448
|
-
|
|
449
|
-
"Nobody can join a cancelled meeting. Show the cancelled screen with this sentence; ask the host to schedule a new one."
|
|
484
|
+
said?.message ?? "This meeting was cancelled.",
|
|
485
|
+
"Nobody can join a cancelled meeting. Show the cancelled screen with this sentence; ask the host to schedule a new one.",
|
|
486
|
+
void 0,
|
|
487
|
+
said?.reason ?? "cancelled"
|
|
450
488
|
);
|
|
451
489
|
}
|
|
452
490
|
if (response.status === 423) {
|
|
@@ -454,7 +492,9 @@ function createTokenClient(options) {
|
|
|
454
492
|
throw new MeetError(
|
|
455
493
|
"room-locked",
|
|
456
494
|
said?.message ?? "The meeting is locked.",
|
|
457
|
-
said?.remedy ?? "The host locked the room. Ask them to unlock it, then join again."
|
|
495
|
+
said?.remedy ?? "The host locked the room. Ask them to unlock it, then join again.",
|
|
496
|
+
void 0,
|
|
497
|
+
said?.reason ?? "locked"
|
|
458
498
|
);
|
|
459
499
|
}
|
|
460
500
|
if (response.status === 503) {
|
|
@@ -523,6 +563,10 @@ function placeholder(roomName) {
|
|
|
523
563
|
canRecord: false,
|
|
524
564
|
isHost: false,
|
|
525
565
|
role: "participant",
|
|
566
|
+
standing: null,
|
|
567
|
+
meetingPass: null,
|
|
568
|
+
meetingPassExpiresAt: null,
|
|
569
|
+
sessionId: null,
|
|
526
570
|
lobby: false,
|
|
527
571
|
breakoutRoomId: null
|
|
528
572
|
};
|
|
@@ -535,7 +579,8 @@ async function serverSentence(response) {
|
|
|
535
579
|
const message = typeof source.user_message === "string" && source.user_message.trim() !== "" ? source.user_message : typeof source.message === "string" && source.message.trim() !== "" ? source.message : null;
|
|
536
580
|
if (message === null) return null;
|
|
537
581
|
const remedy = typeof source.remedy === "string" && source.remedy.trim() !== "" ? source.remedy : void 0;
|
|
538
|
-
|
|
582
|
+
const reason = typeof source.reason === "string" && source.reason !== "" ? source.reason : null;
|
|
583
|
+
return { message, remedy, reason };
|
|
539
584
|
} catch {
|
|
540
585
|
return null;
|
|
541
586
|
}
|
|
@@ -724,7 +769,7 @@ function createMeetAi(options) {
|
|
|
724
769
|
operation: "meet.ai.ask",
|
|
725
770
|
// A GUEST MAY ASK. The server decides whether it can answer.
|
|
726
771
|
requireAuth: false,
|
|
727
|
-
...roomToken !== null ? { headers: { [
|
|
772
|
+
...roomToken !== null ? { headers: { [MEETING_PASS_HEADER]: roomToken } } : {},
|
|
728
773
|
...signal !== void 0 ? { signal } : {}
|
|
729
774
|
});
|
|
730
775
|
if (!response.ok) {
|
|
@@ -959,11 +1004,15 @@ function isGuest(identity) {
|
|
|
959
1004
|
return identity.userId === null;
|
|
960
1005
|
}
|
|
961
1006
|
var ROLE_RANK = {
|
|
962
|
-
host:
|
|
963
|
-
cohost:
|
|
1007
|
+
host: 4,
|
|
1008
|
+
cohost: 3,
|
|
1009
|
+
presenter: 2,
|
|
964
1010
|
participant: 1,
|
|
965
|
-
|
|
1011
|
+
viewer: 0
|
|
966
1012
|
};
|
|
1013
|
+
function isLinkFollower(standing) {
|
|
1014
|
+
return standing === "guest" || standing === "outsider";
|
|
1015
|
+
}
|
|
967
1016
|
function isHostRole(role) {
|
|
968
1017
|
return role === "host" || role === "cohost";
|
|
969
1018
|
}
|
|
@@ -1870,15 +1919,15 @@ var CAPTION_LANGUAGES = [
|
|
|
1870
1919
|
{ tag: "id", name: "Indonesian" },
|
|
1871
1920
|
{ tag: "sv", name: "Swedish" }
|
|
1872
1921
|
];
|
|
1873
|
-
async function loadMeetingActivities(api, meetingId,
|
|
1922
|
+
async function loadMeetingActivities(api, meetingId, meetingPass = null) {
|
|
1874
1923
|
let response;
|
|
1875
1924
|
try {
|
|
1876
1925
|
response = await api.request({
|
|
1877
1926
|
path: `${MEET_ROUTES.collab}?meeting_id=${encodeURIComponent(meetingId)}`,
|
|
1878
1927
|
method: "GET",
|
|
1879
1928
|
operation: "meet.loadMeetingActivities",
|
|
1880
|
-
requireAuth:
|
|
1881
|
-
...
|
|
1929
|
+
requireAuth: meetingPass === null,
|
|
1930
|
+
...meetingPass !== null ? { headers: { [MEETING_PASS_HEADER]: meetingPass } } : {}
|
|
1882
1931
|
});
|
|
1883
1932
|
} catch (error) {
|
|
1884
1933
|
return {
|
|
@@ -1975,6 +2024,7 @@ var DEFAULT_EFFECTS = {
|
|
|
1975
2024
|
};
|
|
1976
2025
|
var NO_GRANTS = {
|
|
1977
2026
|
role: "participant",
|
|
2027
|
+
standing: null,
|
|
1978
2028
|
canRecord: false,
|
|
1979
2029
|
canPublish: false,
|
|
1980
2030
|
canSubscribe: false
|
|
@@ -2021,6 +2071,11 @@ function effectiveRole(snapshot) {
|
|
|
2021
2071
|
const fromToken = snapshot.grants.role;
|
|
2022
2072
|
return ROLE_RANK[fromRoster] >= ROLE_RANK[fromToken] ? fromRoster : fromToken;
|
|
2023
2073
|
}
|
|
2074
|
+
function effectiveStanding(snapshot) {
|
|
2075
|
+
if (snapshot.grants.standing != null) return snapshot.grants.standing;
|
|
2076
|
+
const me = snapshot.participants.find((p) => p.identity === snapshot.localIdentity);
|
|
2077
|
+
return me?.standing ?? null;
|
|
2078
|
+
}
|
|
2024
2079
|
var REACTION_TTL_MS = 5e3;
|
|
2025
2080
|
var CHAT_LIMIT = 200;
|
|
2026
2081
|
function createMeetStore(initial = {}) {
|
|
@@ -2614,7 +2669,6 @@ var RPCS = {
|
|
|
2614
2669
|
meetingBySlug: "meet_meeting_by_slug",
|
|
2615
2670
|
admit: "meet_admit_participant",
|
|
2616
2671
|
setLock: "meet_set_lock",
|
|
2617
|
-
endMeeting: "meet_end_meeting",
|
|
2618
2672
|
recordConsent: "meet_record_consent",
|
|
2619
2673
|
/*
|
|
2620
2674
|
* ── MEET WAVE 1 — management (0.8). Every write is a SECURITY DEFINER door
|
|
@@ -3028,7 +3082,7 @@ function createMeetRepository(options) {
|
|
|
3028
3082
|
const operation = "meet.projectAttendee";
|
|
3029
3083
|
const role = text(row, "role");
|
|
3030
3084
|
const admission = text(row, "admission_state");
|
|
3031
|
-
const known = ["host", "cohost", "participant", "
|
|
3085
|
+
const known = ["host", "cohost", "presenter", "participant", "viewer"];
|
|
3032
3086
|
const states = ["knocking", "admitted", "denied", "removed"];
|
|
3033
3087
|
const userId = text(row, "participant_user_id");
|
|
3034
3088
|
const identity = requireText(row, "identity", operation);
|
|
@@ -3343,16 +3397,6 @@ function createMeetRepository(options) {
|
|
|
3343
3397
|
);
|
|
3344
3398
|
return projectMeeting(row);
|
|
3345
3399
|
},
|
|
3346
|
-
async endMeeting(meetingId, byUserId) {
|
|
3347
|
-
const row = await guard(
|
|
3348
|
-
"meet.endMeeting",
|
|
3349
|
-
() => db.rpc(RPCS.endMeeting, {
|
|
3350
|
-
p_meeting_id: meetingId,
|
|
3351
|
-
p_by_user_id: byUserId
|
|
3352
|
-
})
|
|
3353
|
-
);
|
|
3354
|
-
return projectMeeting(row);
|
|
3355
|
-
},
|
|
3356
3400
|
async transcript(meetingId, limit = 1e3) {
|
|
3357
3401
|
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);
|
|
3358
3402
|
if (response.error !== null) throw normalizeMeetError(response.error, "meet.transcript");
|
|
@@ -3798,7 +3842,7 @@ function applyModeration(store, payload, now) {
|
|
|
3798
3842
|
return ignored(`a moderation kind this version does not know: ${String(kind)}`);
|
|
3799
3843
|
}
|
|
3800
3844
|
}
|
|
3801
|
-
var ROLES = ["host", "cohost", "participant", "
|
|
3845
|
+
var ROLES = ["host", "cohost", "presenter", "participant", "viewer"];
|
|
3802
3846
|
|
|
3803
3847
|
// src/core/note-taker.ts
|
|
3804
3848
|
var NOTE_TAKER_IDENTITY_PREFIX = "agent:note_taker:";
|
|
@@ -3883,7 +3927,12 @@ var TRANSCRIPTION_ATTRIBUTES = {
|
|
|
3883
3927
|
// src/core/room.ts
|
|
3884
3928
|
var PARTICIPANT_ROLE_ATTRIBUTE = "matrx.participant.role";
|
|
3885
3929
|
var PARTICIPANT_CAN_RECORD_ATTRIBUTE = "matrx.participant.can_record";
|
|
3886
|
-
var
|
|
3930
|
+
var PARTICIPANT_STANDING_ATTRIBUTE = "matrx.participant.standing";
|
|
3931
|
+
var KNOWN_STANDINGS = ["member", "invited", "outsider", "guest"];
|
|
3932
|
+
function parseStanding(value) {
|
|
3933
|
+
return KNOWN_STANDINGS.includes(value) ? value : null;
|
|
3934
|
+
}
|
|
3935
|
+
var KNOWN_ROLES = ["host", "cohost", "presenter", "participant", "viewer"];
|
|
3887
3936
|
function parseRole(value) {
|
|
3888
3937
|
return KNOWN_ROLES.includes(value) ? value : "participant";
|
|
3889
3938
|
}
|
|
@@ -3917,6 +3966,9 @@ function projectParticipant(driver, joinedAt) {
|
|
|
3917
3966
|
// ATTRIBUTE FIRST, metadata second — see the constants above. Both are the
|
|
3918
3967
|
// server's; the attribute is simply the one that always arrives.
|
|
3919
3968
|
role: parseRole(driver.attributes[PARTICIPANT_ROLE_ATTRIBUTE] ?? metadata.role),
|
|
3969
|
+
standing: parseStanding(
|
|
3970
|
+
driver.attributes[PARTICIPANT_STANDING_ATTRIBUTE] ?? metadata.standing
|
|
3971
|
+
),
|
|
3920
3972
|
canRecord: driver.attributes[PARTICIPANT_CAN_RECORD_ATTRIBUTE] === "true" || metadata.can_record === true,
|
|
3921
3973
|
isLocal: driver.isLocal,
|
|
3922
3974
|
isAgent: metadata.is_agent === true,
|
|
@@ -3989,7 +4041,7 @@ function createRoomEngine(options) {
|
|
|
3989
4041
|
const normalized = normalizeMeetError(error, operation);
|
|
3990
4042
|
store.patch({
|
|
3991
4043
|
phase: "failed",
|
|
3992
|
-
failure: { message: normalized.message, remedy: normalized.remedy }
|
|
4044
|
+
failure: { message: normalized.message, remedy: normalized.remedy, reason: normalized.reason }
|
|
3993
4045
|
});
|
|
3994
4046
|
report(
|
|
3995
4047
|
normalized.code === "session-unavailable" ? "warn" : "error",
|
|
@@ -4193,6 +4245,7 @@ function createRoomEngine(options) {
|
|
|
4193
4245
|
breakoutRoomId: token.breakoutRoomId ?? null,
|
|
4194
4246
|
grants: {
|
|
4195
4247
|
role: token.role,
|
|
4248
|
+
standing: token.standing,
|
|
4196
4249
|
canRecord: token.canRecord,
|
|
4197
4250
|
canPublish: token.canPublish,
|
|
4198
4251
|
canSubscribe: token.canSubscribe
|
|
@@ -4538,7 +4591,7 @@ function createInRoomClient(options) {
|
|
|
4538
4591
|
}
|
|
4539
4592
|
function headers() {
|
|
4540
4593
|
const token = options.resolveRoomToken();
|
|
4541
|
-
return token === null ? void 0 : { [
|
|
4594
|
+
return token === null ? void 0 : { [MEETING_PASS_HEADER]: token };
|
|
4542
4595
|
}
|
|
4543
4596
|
function refusal2(response, operation, remedy) {
|
|
4544
4597
|
return refusalFromResponse(response, operation, remedy);
|
|
@@ -5299,8 +5352,8 @@ function MeetRuntime(props) {
|
|
|
5299
5352
|
const roomName = store.snapshot().meeting?.roomName;
|
|
5300
5353
|
if (roomName === void 0) return null;
|
|
5301
5354
|
const active = engine.token();
|
|
5302
|
-
if (active?.roomName === roomName && active.
|
|
5303
|
-
return tokens.remembered(roomName)?.
|
|
5355
|
+
if (active?.roomName === roomName && active.meetingPass) return active.meetingPass;
|
|
5356
|
+
return tokens.remembered(roomName)?.meetingPass ?? null;
|
|
5304
5357
|
};
|
|
5305
5358
|
const ai = createMeetAi({ api, store, resolveRoomToken });
|
|
5306
5359
|
const inRoom = createInRoomClient({ api, store, resolveRoomToken });
|
|
@@ -5472,6 +5525,10 @@ function useLocalUserId() {
|
|
|
5472
5525
|
import { useEffect as useEffect2, useMemo as useMemo2, useRef as useRef2 } from "react";
|
|
5473
5526
|
|
|
5474
5527
|
// src/core/observation.ts
|
|
5528
|
+
function observedRole(role, standing) {
|
|
5529
|
+
if (role === "host" || role === "cohost") return role;
|
|
5530
|
+
return isLinkFollower(standing) ? "guest" : "participant";
|
|
5531
|
+
}
|
|
5475
5532
|
function observedDevice(track) {
|
|
5476
5533
|
if (track.enabled) return "on";
|
|
5477
5534
|
const refused = track.unavailable;
|
|
@@ -5499,6 +5556,8 @@ function observedPhase(input) {
|
|
|
5499
5556
|
const raw = snapshot.phase;
|
|
5500
5557
|
const live = raw === "connected" || raw === "reconnecting";
|
|
5501
5558
|
if (endedRecord(snapshot, input.meeting ?? null) && !live) return "ended";
|
|
5559
|
+
const reason = raw === "failed" ? snapshot.failure?.reason ?? null : null;
|
|
5560
|
+
if (reason !== null) return reason === "ended" ? "ended" : `refused:${reason}`;
|
|
5502
5561
|
switch (raw) {
|
|
5503
5562
|
case "idle":
|
|
5504
5563
|
case "failed":
|
|
@@ -5519,12 +5578,13 @@ function observe(input) {
|
|
|
5519
5578
|
const { snapshot } = input;
|
|
5520
5579
|
const phase = observedPhase(input);
|
|
5521
5580
|
const inCall = phase === "in_call";
|
|
5522
|
-
const
|
|
5523
|
-
const canAdmit =
|
|
5581
|
+
const actual = inCall && snapshot !== null ? effectiveRole(snapshot) : "none";
|
|
5582
|
+
const canAdmit = actual !== "none" && ADMITTER_ROLES.has(actual);
|
|
5583
|
+
const role = actual === "none" || snapshot === null ? "none" : observedRole(actual, effectiveStanding(snapshot));
|
|
5524
5584
|
const deviceInPlay = phase === "joining" || inCall;
|
|
5525
5585
|
return {
|
|
5526
5586
|
phase,
|
|
5527
|
-
reason: null,
|
|
5587
|
+
reason: phase.startsWith("refused:") ? phase.slice("refused:".length) : null,
|
|
5528
5588
|
role,
|
|
5529
5589
|
connection: snapshot?.phase === "reconnecting" ? "reconnecting" : "stable",
|
|
5530
5590
|
hostPresent: inCall && snapshot !== null ? snapshot.participants.some((p) => ADMITTER_ROLES.has(p.role)) : null,
|
|
@@ -5590,7 +5650,7 @@ function participantAttributes(p) {
|
|
|
5590
5650
|
"data-meet-participant": "",
|
|
5591
5651
|
"data-meet-participant-identity": p.identity,
|
|
5592
5652
|
"data-meet-participant-name": p.displayName,
|
|
5593
|
-
"data-meet-participant-role": p.role,
|
|
5653
|
+
"data-meet-participant-role": observedRole(p.role, p.standing),
|
|
5594
5654
|
"data-meet-participant-self": String(p.isLocal)
|
|
5595
5655
|
};
|
|
5596
5656
|
const quality = observedQuality(p.quality);
|
|
@@ -5919,7 +5979,7 @@ function summarizeMeetingRecordRestrictions(restrictions) {
|
|
|
5919
5979
|
async function loadGuestMeetingRecord(args) {
|
|
5920
5980
|
const { api, repository, meetingId, meeting, roomToken } = args;
|
|
5921
5981
|
const session = args.session === true;
|
|
5922
|
-
if (roomToken
|
|
5982
|
+
if (roomToken?.meetingPass == null && !session) {
|
|
5923
5983
|
return refusedBundle(
|
|
5924
5984
|
meeting,
|
|
5925
5985
|
"This meeting's record is only readable by the people who were in it.",
|
|
@@ -5929,12 +5989,12 @@ async function loadGuestMeetingRecord(args) {
|
|
|
5929
5989
|
let response;
|
|
5930
5990
|
try {
|
|
5931
5991
|
response = await api.request({
|
|
5932
|
-
path: `${MEET_ROUTES.record}?meeting_id=${encodeURIComponent(meetingId)}
|
|
5992
|
+
path: `${MEET_ROUTES.record}?meeting_id=${encodeURIComponent(meetingId)}` + (args.sessionId ? `&session_id=${encodeURIComponent(args.sessionId)}` : ""),
|
|
5933
5993
|
method: "GET",
|
|
5934
5994
|
// A GUEST HAS NO SESSION AND IS STILL A FIRST-CLASS READER (D6).
|
|
5935
5995
|
requireAuth: session,
|
|
5936
5996
|
operation: "meet.record",
|
|
5937
|
-
headers: roomToken
|
|
5997
|
+
headers: roomToken?.meetingPass != null ? { [MEETING_PASS_HEADER]: roomToken.meetingPass } : {}
|
|
5938
5998
|
});
|
|
5939
5999
|
} catch (error) {
|
|
5940
6000
|
return refusedBundle(
|
|
@@ -7141,7 +7201,6 @@ function kindOf(person) {
|
|
|
7141
7201
|
if (person.isAgent) return "assistant";
|
|
7142
7202
|
if (person.role === "host") return "host";
|
|
7143
7203
|
if (person.role === "cohost") return "cohost";
|
|
7144
|
-
if (person.role === "guest") return person.userId !== null ? "signed-in guest" : "guest";
|
|
7145
7204
|
if (person.userId === null) return "guest";
|
|
7146
7205
|
return "member";
|
|
7147
7206
|
}
|
|
@@ -7426,7 +7485,7 @@ function meetingLength(meeting) {
|
|
|
7426
7485
|
if (start === null || end === null || end < start) return null;
|
|
7427
7486
|
return formatDurationMs2(end - start, { style: "long" });
|
|
7428
7487
|
}
|
|
7429
|
-
async function loadMeetingChat(api, meetingId,
|
|
7488
|
+
async function loadMeetingChat(api, meetingId, meetingPass = null) {
|
|
7430
7489
|
const operation = "meet.loadMeetingChat";
|
|
7431
7490
|
let response;
|
|
7432
7491
|
try {
|
|
@@ -7434,8 +7493,8 @@ async function loadMeetingChat(api, meetingId, roomToken = null) {
|
|
|
7434
7493
|
path: `${MEET_ROUTES.chat}?meeting_id=${encodeURIComponent(meetingId)}`,
|
|
7435
7494
|
method: "GET",
|
|
7436
7495
|
operation,
|
|
7437
|
-
requireAuth:
|
|
7438
|
-
...
|
|
7496
|
+
requireAuth: meetingPass === null,
|
|
7497
|
+
...meetingPass !== null ? { headers: { [MEETING_PASS_HEADER]: meetingPass } } : {}
|
|
7439
7498
|
});
|
|
7440
7499
|
} catch (error) {
|
|
7441
7500
|
return {
|
|
@@ -8908,10 +8967,13 @@ function RecordingIndicator() {
|
|
|
8908
8967
|
}
|
|
8909
8968
|
);
|
|
8910
8969
|
}
|
|
8911
|
-
function RoleBadge({
|
|
8970
|
+
function RoleBadge({
|
|
8971
|
+
role,
|
|
8972
|
+
standing
|
|
8973
|
+
}) {
|
|
8912
8974
|
if (role === "host") return /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Host" });
|
|
8913
8975
|
if (role === "cohost") return /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Co-host" });
|
|
8914
|
-
if (
|
|
8976
|
+
if (isLinkFollower(standing)) return /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Guest" });
|
|
8915
8977
|
return null;
|
|
8916
8978
|
}
|
|
8917
8979
|
function ParticipantTile({
|
|
@@ -8961,7 +9023,7 @@ function ParticipantTile({
|
|
|
8961
9023
|
participant.displayName,
|
|
8962
9024
|
participant.isLocal ? " (you)" : "",
|
|
8963
9025
|
participant.isAgent ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "AI" }) : null,
|
|
8964
|
-
/* @__PURE__ */ jsx5(RoleBadge, { role: participant.role })
|
|
9026
|
+
/* @__PURE__ */ jsx5(RoleBadge, { role: participant.role, standing: participant.standing })
|
|
8965
9027
|
] }),
|
|
8966
9028
|
!participant.micEnabled ? /* @__PURE__ */ jsx5(MicOffIcon, { width: 14, height: 14 }) : null,
|
|
8967
9029
|
/* @__PURE__ */ jsx5(QualityBars, { quality: participant.quality })
|
|
@@ -9700,7 +9762,13 @@ function PeoplePanel({
|
|
|
9700
9762
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__person-name", children: [
|
|
9701
9763
|
participant.displayName,
|
|
9702
9764
|
participant.identity === local ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__you", children: " (you)" }) : null,
|
|
9703
|
-
/* @__PURE__ */ jsx5(
|
|
9765
|
+
/* @__PURE__ */ jsx5(
|
|
9766
|
+
RoleBadge,
|
|
9767
|
+
{
|
|
9768
|
+
role: participant.identity === local ? myRole : participant.role,
|
|
9769
|
+
standing: participant.standing
|
|
9770
|
+
}
|
|
9771
|
+
),
|
|
9704
9772
|
isNoteTaker(participant) ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Meeting assistant" }) : null,
|
|
9705
9773
|
snapshot?.spotlight === participant.identity ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Spotlight" }) : null
|
|
9706
9774
|
] }),
|
|
@@ -10862,7 +10930,7 @@ function MeetingRecordBody({
|
|
|
10862
10930
|
/* @__PURE__ */ jsxs4("span", { className: "mx-meet__person-name", children: [
|
|
10863
10931
|
displayNameFor(bundle.names, person.identity, person.displayName),
|
|
10864
10932
|
person.role === "host" ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Host" }) : null,
|
|
10865
|
-
person.
|
|
10933
|
+
person.userId === null && !person.isAgent ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Guest" }) : null,
|
|
10866
10934
|
person.isAgent ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Meeting assistant" }) : null
|
|
10867
10935
|
] })
|
|
10868
10936
|
] }, person.id)) })
|
|
@@ -11381,6 +11449,7 @@ export {
|
|
|
11381
11449
|
LISTEN_ONLY_NOTICE,
|
|
11382
11450
|
MEETING_INVITE_KIND,
|
|
11383
11451
|
MEETING_INVITE_VERSION,
|
|
11452
|
+
MEETING_PASS_HEADER,
|
|
11384
11453
|
MEETING_RECORD_GRACE_MS,
|
|
11385
11454
|
MEET_ANSWER_CONTEXT_EVENT,
|
|
11386
11455
|
MEET_ANSWER_EVENTS,
|
|
@@ -11401,12 +11470,12 @@ export {
|
|
|
11401
11470
|
ORGANIZATION_HEADER,
|
|
11402
11471
|
PARTICIPANT_CAN_RECORD_ATTRIBUTE,
|
|
11403
11472
|
PARTICIPANT_ROLE_ATTRIBUTE,
|
|
11473
|
+
PARTICIPANT_STANDING_ATTRIBUTE,
|
|
11404
11474
|
REACTION_TTL_MS,
|
|
11405
11475
|
REFUSED_ABSENCE,
|
|
11406
11476
|
ROLE_RANK,
|
|
11407
11477
|
ROOM_EVENTS,
|
|
11408
11478
|
ROOM_EVENT_PREFIX,
|
|
11409
|
-
ROOM_TOKEN_HEADER,
|
|
11410
11479
|
RPCS,
|
|
11411
11480
|
RecordingPlayer,
|
|
11412
11481
|
TABLES,
|
|
@@ -11478,6 +11547,7 @@ export {
|
|
|
11478
11547
|
isGuest,
|
|
11479
11548
|
isGuestIdentity,
|
|
11480
11549
|
isHostRole,
|
|
11550
|
+
isLinkFollower,
|
|
11481
11551
|
isListenOnly,
|
|
11482
11552
|
isNoteTaker,
|
|
11483
11553
|
isRealName,
|
|
@@ -11496,6 +11566,7 @@ export {
|
|
|
11496
11566
|
meetingInviteAction,
|
|
11497
11567
|
meetingLength,
|
|
11498
11568
|
meetingLink,
|
|
11569
|
+
meetingPassHeaders,
|
|
11499
11570
|
meetingPath,
|
|
11500
11571
|
meetingRecordCache,
|
|
11501
11572
|
meetingSlug,
|
|
@@ -11540,6 +11611,7 @@ export {
|
|
|
11540
11611
|
recordingLabel,
|
|
11541
11612
|
recordingNotice,
|
|
11542
11613
|
recordingOffsetMs,
|
|
11614
|
+
rememberedMeetingPass,
|
|
11543
11615
|
roleOf,
|
|
11544
11616
|
roomTopic,
|
|
11545
11617
|
rootAttributes,
|