@ai-matrx/meet 0.8.1 → 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/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- export { ATTENDANCE_CSV_HEADER, AnnounceResult, ApplyRoomEventArgs, AskArgs, AttendanceKind, AttendanceRow, AudioProcessing, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, CallCenter, CallCenterOptions, CallInviteHandlerOptions, CallInvitePayload, CollabAction, CollabRequest, CollabResult, CollabRuntime, CollabStoreLike, CreateCallInviteInput, CreateMeetingInput, DATA_TOPICS, DEFAULT_EFFECTS, DEFAULT_PAGE_SIZE, DataTopic, DeviceKind, DeviceManager, DeviceManagerOptions, DeviceSnapshot, 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, GuestRecordAccessResolution, GuestRecordAccessSetting, IDLE_MEDIA, IDLE_TRACK, InRoomClient, InRoomClientOptions, JoinRequest, LISTEN_ONLY_NOTICE, LibraryRecording, LiveKitDriverOptions, LocalMediaState, 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, MediaEffects, MediaUnavailable, MeetAi, MeetAiAnswer, MeetAiOptions, MeetAnswerCoverage, MeetDevice, MeetError, MeetErrorCode, MeetEvent, MeetGrants, MeetObservation, MeetRepository, MeetRoomDriver, MeetSnapshot, MeetStore, MeetingChatHistory, MeetingInviteHandlerOptions, MeetingInvitePayload, MeetingRecordAnswer, MeetingRecordBundle, MeetingRecordCache, MeetingRecordChange, MeetingRecordFailure, MeetingRecordParts, MeetingRecordRestriction, MeetingRecordRestrictionNotice, MeetingRecordState, MeetingSearchHit, MeetingSearchSource, MeetingSession, MeetingSessionOptions, ModerationAction, ModerationNotice, ModerationRequest, ModerationResult, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NameBook, NoteTakerDispatch, NoteTakerRefusal, NoteTakerStatus, ObserveInput, ObservedConnection, ObservedPhase, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, REACTION_TTL_MS, REFUSED_ABSENCE, ROOM_EVENTS, ROOM_EVENT_PREFIX, ROOM_TOKEN_HEADER, RPCS, RecordingController, RecordingControllerOptions, RepositoryOptions, RoomChatMessage, RoomDriverFactory, RoomDriverHandlers, RoomEngine, RoomEngineOptions, RoomEventOutcome, RoomEventTopic, RoomReaction, RoomToken, RoomTokenStorage, ScheduleMeetingInput, Stage, StageArgs, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, TokenClient, 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, 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, roleOf, roomTopic, rootAttributes, searchTranscript, sendFollowUp, setCaptionLanguage, setGuestRecordAccess, settingsPatch, snapshotParticipant, snippetRuns, staticObservation, summarizeMeetingRecordRestrictions, takeMoveRequest, takePanelRequest, transcriptDocument, unavailableFrom, uniqueAttendees, untranslatedLines, userTopic, wasRefused, wrapUpStatus } from './core.cjs';
2
- export { A as AccessTokenSource, j as AdmissionState, k as CAPTION_LANGUAGES, l as CallId, d as CallInvite, f as CallMode, m as CallState, n as CallablePerson, C as CollabPanel, i as CollabSnapshot, o as ConnectionQuality, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, I as InviteeInput, p as InviteeRole, J as JsonObject, q as JsonValue, L as LobbyEntry, b as MeetApi, r as MeetApiOptions, s as MeetApiRequest, t as MeetBreakoutBroadcast, u as MeetBreakoutPlan, v as MeetBreakoutRoom, w as MeetCollabSettings, x as MeetFileMedia, c as MeetIdentity, a as MeetParticipant, 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, h as MeetingId, V as MeetingInvitee, X as MeetingKind, g as MeetingNote, Y as MeetingNoteKind, Z as MeetingOccurrence, M as MeetingRecord, _ as MeetingSettings, $ as NoteTakerState, a0 as ORGANIZATION_HEADER, a1 as OccurrenceOverride, a2 as OccurrenceState, O as OrganizationId, P as ParticipantIdentity, e as ParticipantRole, a3 as ROLE_RANK, a4 as RecordingPolicy, a5 as RecordingRecord, a6 as RecordingState, R as RoomName, a7 as RoomPhase, a8 as RsvpAnswer, a9 as RsvpInvitation, aa as RsvpState, S as StageLayout, ab as TranscriptSegment, T as TranscriptSource, ac as UpcomingOccurrence, U as UserId, W as WrapUpAnnouncement, ad as applyCollabPacket, ae as asCallId, af as asMeetingId, ag as asOrganizationId, ah as asParticipantIdentity, ai as asRoomName, aj as asUserId, ak as assignedRoom, al as autoAssign, am as breakoutRemainingMs, an as collabFromState, ao as createMeetApi, ap as defaultCaptionLanguage, aq as fileDownloadPath, ar as isGuest, as as isHostRole, at as loadMeetingActivities, au as withItem } from './collab-Bss-_Jfp.cjs';
1
+ export { ATTENDANCE_CSV_HEADER, AnnounceResult, ApplyRoomEventArgs, AskArgs, AttendanceKind, AttendanceRow, AudioProcessing, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, CallCenter, CallCenterOptions, CallInviteHandlerOptions, CallInvitePayload, CollabAction, CollabRequest, CollabResult, CollabRuntime, CollabStoreLike, CreateCallInviteInput, CreateMeetingInput, DATA_TOPICS, DEFAULT_EFFECTS, DEFAULT_PAGE_SIZE, DataTopic, DeviceKind, DeviceManager, DeviceManagerOptions, DeviceSnapshot, 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, GuestRecordAccessResolution, GuestRecordAccessSetting, IDLE_MEDIA, IDLE_TRACK, InRoomClient, InRoomClientOptions, JoinRequest, LISTEN_ONLY_NOTICE, LibraryRecording, LiveKitDriverOptions, LocalMediaState, 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, MediaEffects, MediaUnavailable, MeetAi, MeetAiAnswer, MeetAiOptions, MeetAnswerCoverage, MeetDevice, MeetError, MeetErrorCode, MeetEvent, MeetGrants, MeetObservation, MeetRepository, MeetRoomDriver, MeetSnapshot, MeetStore, MeetingChatHistory, MeetingInviteHandlerOptions, MeetingInvitePayload, MeetingRecordAnswer, MeetingRecordBundle, MeetingRecordCache, MeetingRecordChange, MeetingRecordFailure, MeetingRecordParts, MeetingRecordRestriction, MeetingRecordRestrictionNotice, MeetingRecordState, MeetingSearchHit, MeetingSearchSource, MeetingSession, MeetingSessionOptions, ModerationAction, ModerationNotice, ModerationRequest, ModerationResult, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NameBook, NoteTakerDispatch, NoteTakerRefusal, NoteTakerStatus, ObserveInput, ObservedConnection, ObservedPhase, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, REACTION_TTL_MS, REFUSED_ABSENCE, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, RecordingController, RecordingControllerOptions, RepositoryOptions, RoomChatMessage, RoomDriverFactory, RoomDriverHandlers, RoomEngine, RoomEngineOptions, RoomEventOutcome, RoomEventTopic, RoomReaction, RoomToken, RoomTokenStorage, ScheduleMeetingInput, Stage, StageArgs, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, TokenClient, 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';
2
+ export { A as AccessTokenSource, j as AdmissionState, k as CAPTION_LANGUAGES, l as CallId, d as CallInvite, f as CallMode, m as CallState, n as CallablePerson, C as CollabPanel, i as CollabSnapshot, o as ConnectionQuality, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, I as InviteeInput, p as InviteeRole, J as JsonObject, q as JsonValue, L as LobbyEntry, b as MeetApi, r as MeetApiOptions, s as MeetApiRequest, t as MeetBreakoutBroadcast, u as MeetBreakoutPlan, v as MeetBreakoutRoom, w as MeetCollabSettings, x as MeetFileMedia, c as MeetIdentity, a as MeetParticipant, 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, h as MeetingId, V as MeetingInvitee, X as MeetingKind, g as MeetingNote, Y as MeetingNoteKind, Z as MeetingOccurrence, M as MeetingRecord, _ as MeetingSettings, $ as NoteTakerState, a0 as ORGANIZATION_HEADER, a1 as OccurrenceOverride, a2 as OccurrenceState, O as OrganizationId, P as ParticipantIdentity, e as ParticipantRole, a3 as ParticipantStanding, a4 as ROLE_RANK, a5 as RecordingPolicy, a6 as RecordingRecord, a7 as RecordingState, R as RoomName, a8 as RoomPhase, a9 as RsvpAnswer, aa as RsvpInvitation, ab as RsvpState, S as StageLayout, ac as TranscriptSegment, T as TranscriptSource, ad as UpcomingOccurrence, U as UserId, W as WrapUpAnnouncement, 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';
3
3
  import '@ai-matrx/realtime';
4
4
  import '@ai-matrx/messaging';
5
5
  import 'livekit-client';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export { ATTENDANCE_CSV_HEADER, AnnounceResult, ApplyRoomEventArgs, AskArgs, AttendanceKind, AttendanceRow, AudioProcessing, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, CallCenter, CallCenterOptions, CallInviteHandlerOptions, CallInvitePayload, CollabAction, CollabRequest, CollabResult, CollabRuntime, CollabStoreLike, CreateCallInviteInput, CreateMeetingInput, DATA_TOPICS, DEFAULT_EFFECTS, DEFAULT_PAGE_SIZE, DataTopic, DeviceKind, DeviceManager, DeviceManagerOptions, DeviceSnapshot, 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, GuestRecordAccessResolution, GuestRecordAccessSetting, IDLE_MEDIA, IDLE_TRACK, InRoomClient, InRoomClientOptions, JoinRequest, LISTEN_ONLY_NOTICE, LibraryRecording, LiveKitDriverOptions, LocalMediaState, 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, MediaEffects, MediaUnavailable, MeetAi, MeetAiAnswer, MeetAiOptions, MeetAnswerCoverage, MeetDevice, MeetError, MeetErrorCode, MeetEvent, MeetGrants, MeetObservation, MeetRepository, MeetRoomDriver, MeetSnapshot, MeetStore, MeetingChatHistory, MeetingInviteHandlerOptions, MeetingInvitePayload, MeetingRecordAnswer, MeetingRecordBundle, MeetingRecordCache, MeetingRecordChange, MeetingRecordFailure, MeetingRecordParts, MeetingRecordRestriction, MeetingRecordRestrictionNotice, MeetingRecordState, MeetingSearchHit, MeetingSearchSource, MeetingSession, MeetingSessionOptions, ModerationAction, ModerationNotice, ModerationRequest, ModerationResult, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NameBook, NoteTakerDispatch, NoteTakerRefusal, NoteTakerStatus, ObserveInput, ObservedConnection, ObservedPhase, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, REACTION_TTL_MS, REFUSED_ABSENCE, ROOM_EVENTS, ROOM_EVENT_PREFIX, ROOM_TOKEN_HEADER, RPCS, RecordingController, RecordingControllerOptions, RepositoryOptions, RoomChatMessage, RoomDriverFactory, RoomDriverHandlers, RoomEngine, RoomEngineOptions, RoomEventOutcome, RoomEventTopic, RoomReaction, RoomToken, RoomTokenStorage, ScheduleMeetingInput, Stage, StageArgs, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, TokenClient, 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, 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, roleOf, roomTopic, rootAttributes, searchTranscript, sendFollowUp, setCaptionLanguage, setGuestRecordAccess, settingsPatch, snapshotParticipant, snippetRuns, staticObservation, summarizeMeetingRecordRestrictions, takeMoveRequest, takePanelRequest, transcriptDocument, unavailableFrom, uniqueAttendees, untranslatedLines, userTopic, wasRefused, wrapUpStatus } from './core.js';
2
- export { A as AccessTokenSource, j as AdmissionState, k as CAPTION_LANGUAGES, l as CallId, d as CallInvite, f as CallMode, m as CallState, n as CallablePerson, C as CollabPanel, i as CollabSnapshot, o as ConnectionQuality, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, I as InviteeInput, p as InviteeRole, J as JsonObject, q as JsonValue, L as LobbyEntry, b as MeetApi, r as MeetApiOptions, s as MeetApiRequest, t as MeetBreakoutBroadcast, u as MeetBreakoutPlan, v as MeetBreakoutRoom, w as MeetCollabSettings, x as MeetFileMedia, c as MeetIdentity, a as MeetParticipant, 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, h as MeetingId, V as MeetingInvitee, X as MeetingKind, g as MeetingNote, Y as MeetingNoteKind, Z as MeetingOccurrence, M as MeetingRecord, _ as MeetingSettings, $ as NoteTakerState, a0 as ORGANIZATION_HEADER, a1 as OccurrenceOverride, a2 as OccurrenceState, O as OrganizationId, P as ParticipantIdentity, e as ParticipantRole, a3 as ROLE_RANK, a4 as RecordingPolicy, a5 as RecordingRecord, a6 as RecordingState, R as RoomName, a7 as RoomPhase, a8 as RsvpAnswer, a9 as RsvpInvitation, aa as RsvpState, S as StageLayout, ab as TranscriptSegment, T as TranscriptSource, ac as UpcomingOccurrence, U as UserId, W as WrapUpAnnouncement, ad as applyCollabPacket, ae as asCallId, af as asMeetingId, ag as asOrganizationId, ah as asParticipantIdentity, ai as asRoomName, aj as asUserId, ak as assignedRoom, al as autoAssign, am as breakoutRemainingMs, an as collabFromState, ao as createMeetApi, ap as defaultCaptionLanguage, aq as fileDownloadPath, ar as isGuest, as as isHostRole, at as loadMeetingActivities, au as withItem } from './collab-Bss-_Jfp.js';
1
+ export { ATTENDANCE_CSV_HEADER, AnnounceResult, ApplyRoomEventArgs, AskArgs, AttendanceKind, AttendanceRow, AudioProcessing, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, CallCenter, CallCenterOptions, CallInviteHandlerOptions, CallInvitePayload, CollabAction, CollabRequest, CollabResult, CollabRuntime, CollabStoreLike, CreateCallInviteInput, CreateMeetingInput, DATA_TOPICS, DEFAULT_EFFECTS, DEFAULT_PAGE_SIZE, DataTopic, DeviceKind, DeviceManager, DeviceManagerOptions, DeviceSnapshot, 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, GuestRecordAccessResolution, GuestRecordAccessSetting, IDLE_MEDIA, IDLE_TRACK, InRoomClient, InRoomClientOptions, JoinRequest, LISTEN_ONLY_NOTICE, LibraryRecording, LiveKitDriverOptions, LocalMediaState, 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, MediaEffects, MediaUnavailable, MeetAi, MeetAiAnswer, MeetAiOptions, MeetAnswerCoverage, MeetDevice, MeetError, MeetErrorCode, MeetEvent, MeetGrants, MeetObservation, MeetRepository, MeetRoomDriver, MeetSnapshot, MeetStore, MeetingChatHistory, MeetingInviteHandlerOptions, MeetingInvitePayload, MeetingRecordAnswer, MeetingRecordBundle, MeetingRecordCache, MeetingRecordChange, MeetingRecordFailure, MeetingRecordParts, MeetingRecordRestriction, MeetingRecordRestrictionNotice, MeetingRecordState, MeetingSearchHit, MeetingSearchSource, MeetingSession, MeetingSessionOptions, ModerationAction, ModerationNotice, ModerationRequest, ModerationResult, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NameBook, NoteTakerDispatch, NoteTakerRefusal, NoteTakerStatus, ObserveInput, ObservedConnection, ObservedPhase, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, REACTION_TTL_MS, REFUSED_ABSENCE, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, RecordingController, RecordingControllerOptions, RepositoryOptions, RoomChatMessage, RoomDriverFactory, RoomDriverHandlers, RoomEngine, RoomEngineOptions, RoomEventOutcome, RoomEventTopic, RoomReaction, RoomToken, RoomTokenStorage, ScheduleMeetingInput, Stage, StageArgs, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, TokenClient, 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';
2
+ export { A as AccessTokenSource, j as AdmissionState, k as CAPTION_LANGUAGES, l as CallId, d as CallInvite, f as CallMode, m as CallState, n as CallablePerson, C as CollabPanel, i as CollabSnapshot, o as ConnectionQuality, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, I as InviteeInput, p as InviteeRole, J as JsonObject, q as JsonValue, L as LobbyEntry, b as MeetApi, r as MeetApiOptions, s as MeetApiRequest, t as MeetBreakoutBroadcast, u as MeetBreakoutPlan, v as MeetBreakoutRoom, w as MeetCollabSettings, x as MeetFileMedia, c as MeetIdentity, a as MeetParticipant, 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, h as MeetingId, V as MeetingInvitee, X as MeetingKind, g as MeetingNote, Y as MeetingNoteKind, Z as MeetingOccurrence, M as MeetingRecord, _ as MeetingSettings, $ as NoteTakerState, a0 as ORGANIZATION_HEADER, a1 as OccurrenceOverride, a2 as OccurrenceState, O as OrganizationId, P as ParticipantIdentity, e as ParticipantRole, a3 as ParticipantStanding, a4 as ROLE_RANK, a5 as RecordingPolicy, a6 as RecordingRecord, a7 as RecordingState, R as RoomName, a8 as RoomPhase, a9 as RsvpAnswer, aa as RsvpInvitation, ab as RsvpState, S as StageLayout, ac as TranscriptSegment, T as TranscriptSource, ad as UpcomingOccurrence, U as UserId, W as WrapUpAnnouncement, 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';
3
3
  import '@ai-matrx/realtime';
4
4
  import '@ai-matrx/messaging';
5
5
  import 'livekit-client';
package/dist/index.js CHANGED
@@ -7,11 +7,18 @@ var MeetError = class extends Error {
7
7
  /** What to DO. Rendered to the user for the device codes. */
8
8
  remedy;
9
9
  cause;
10
- constructor(code, message, remedy, cause) {
10
+ /**
11
+ * The join gate's reason code (CORE-DESIGN §2.5) when the server named one: `not_found`,
12
+ * `cancelled`, `ended`, `locked`, `removed`, `lobby_rejects`, `not_invited`… The phase
13
+ * renders `refused:<reason>` (or `ended`) from it — never from the HTTP status.
14
+ */
15
+ reason;
16
+ constructor(code, message, remedy, cause, reason) {
11
17
  super(message);
12
18
  this.name = "MeetError";
13
19
  this.code = code;
14
20
  this.remedy = remedy;
21
+ this.reason = reason ?? null;
15
22
  if (cause !== void 0) this.cause = cause;
16
23
  }
17
24
  /** True when retrying after the host re-establishes a session is the fix. */
@@ -229,6 +236,17 @@ function createWebRoomTokenStorage(onDiagnostic) {
229
236
  }
230
237
  };
231
238
  }
239
+ function rememberedMeetingPass(roomName, storage = createWebRoomTokenStorage()) {
240
+ const raw = storage.read(roomName);
241
+ if (raw === null) return null;
242
+ try {
243
+ const parsed = JSON.parse(raw);
244
+ if (parsed.standing !== "guest") return null;
245
+ return typeof parsed.meetingPass === "string" && parsed.meetingPass.length > 0 ? parsed.meetingPass : null;
246
+ } catch {
247
+ return null;
248
+ }
249
+ }
232
250
  var MEET_ROUTES = {
233
251
  token: "/api/v1/meet/token",
234
252
  recordingStart: "/api/v1/meet/recording/start",
@@ -242,7 +260,7 @@ var MEET_ROUTES = {
242
260
  /**
243
261
  * THE POST-MEETING RECORD FOR A READER WITH NO DATABASE (MRF-1). A `GET`,
244
262
  * authorized by the room token this device already holds, carried in the
245
- * `x-meet-room-token` header — never a query parameter, because a bearer
263
+ * `x-meet-pass` header — never a query parameter, because a bearer
246
264
  * credential in a URL lands in access logs, referrers and history.
247
265
  */
248
266
  record: "/api/v1/meet/record",
@@ -250,7 +268,7 @@ var MEET_ROUTES = {
250
268
  recordAccess: "/api/v1/meet/record/access",
251
269
  /**
252
270
  * KEEP YOUR NOTES (2026-10-01): a guest who just created an account presents
253
- * their kept pass in `x-meet-room-token` with their new session, and the
271
+ * their kept pass in `x-meet-pass` with their new session, and the
254
272
  * meeting they attended becomes theirs to read. Idempotent; never a grant.
255
273
  */
256
274
  claim: "/api/v1/meet/claim",
@@ -272,7 +290,7 @@ var MEET_ROUTES = {
272
290
  * Meet wave 2: EVERY in-meeting host power (mute, stop video, mute all, ask to
273
291
  * unmute, spotlight, lower hands, co-host, hand over, rename, remove, report).
274
292
  * Decided by the server from the meeting itself; a guest's pass rides
275
- * `x-meet-room-token`.
293
+ * `x-meet-pass`.
276
294
  */
277
295
  moderate: "/api/v1/meet/moderate",
278
296
  /** Meet wave 2: the SAVED chat — `POST` sends to everyone, `GET ?meeting_id=` reads history. */
@@ -288,7 +306,11 @@ var MEET_ROUTES = {
288
306
  function meetingPath(template, meetingId) {
289
307
  return template.replace("{meeting_id}", encodeURIComponent(meetingId));
290
308
  }
291
- var ROOM_TOKEN_HEADER = "x-meet-room-token";
309
+ var MEETING_PASS_HEADER = "x-meet-pass";
310
+ function meetingPassHeaders(token) {
311
+ const pass = token?.meetingPass ?? null;
312
+ return pass !== null && pass.length > 0 ? { [MEETING_PASS_HEADER]: pass } : {};
313
+ }
292
314
  var REFRESH_RATIO = 0.8;
293
315
  function readString(source, key) {
294
316
  const value = source[key];
@@ -298,7 +320,12 @@ function readBoolean(source, key, fallback) {
298
320
  const value = source[key];
299
321
  return typeof value === "boolean" ? value : fallback;
300
322
  }
301
- var TOKEN_ROLES = ["host", "cohost", "participant", "guest"];
323
+ var TOKEN_STANDINGS = ["member", "invited", "outsider", "guest"];
324
+ function readStanding(source, key) {
325
+ const value = source[key];
326
+ return TOKEN_STANDINGS.includes(value) ? value : null;
327
+ }
328
+ var TOKEN_ROLES = ["host", "cohost", "presenter", "participant", "viewer"];
302
329
  function readRole(source, key) {
303
330
  const value = source[key];
304
331
  return TOKEN_ROLES.includes(value) ? value : null;
@@ -341,7 +368,12 @@ function parseRoomToken(body, roomName) {
341
368
  // Deriving the role from what DID arrive keeps a host a host against a
342
369
  // server that has not landed MRI-A11 — and never invents a host from
343
370
  // silence, because both fallbacks below grant nothing.
344
- role: readRole(payload, "role") ?? (isHost ? "host" : identity.startsWith("guest:") ? "guest" : "participant"),
371
+ // A word this package does not know grants nothing: `participant`, never a host.
372
+ role: readRole(payload, "role") ?? (isHost ? "host" : "participant"),
373
+ standing: readStanding(payload, "standing"),
374
+ meetingPass: readString(payload, "meeting_pass"),
375
+ meetingPassExpiresAt: readString(payload, "meeting_pass_expires_at"),
376
+ sessionId: readString(payload, "session_id"),
345
377
  lobby: readBoolean(payload, "lobby", false),
346
378
  breakoutRoomId: readString(payload, "breakout_room_id") ?? null
347
379
  };
@@ -352,7 +384,7 @@ function createTokenClient(options) {
352
384
  const storage = options.storage;
353
385
  function remember(token) {
354
386
  if (storage === void 0) return;
355
- if (!token.identity.startsWith("guest:")) return;
387
+ if (token.standing !== "guest") return;
356
388
  storage.write(token.roomName, JSON.stringify(token));
357
389
  }
358
390
  function recall(roomName) {
@@ -410,22 +442,28 @@ function createTokenClient(options) {
410
442
  throw new MeetError(
411
443
  "forbidden",
412
444
  said?.message ?? "You can't join this meeting.",
413
- said?.remedy ?? "Ask the person who shared the link to let you in, then open the link again."
445
+ said?.remedy ?? "Ask the person who shared the link to let you in, then open the link again.",
446
+ void 0,
447
+ said?.reason ?? null
414
448
  );
415
449
  }
416
450
  if (response.status === 404) {
417
451
  throw new MeetError(
418
452
  "not-found",
419
453
  "meet.token: no such meeting",
420
- "The link is wrong or the meeting was deleted. Show the 'meeting not found' screen; a durable link that 404s is never a retry."
454
+ "The link is wrong or the meeting was deleted. Show the 'meeting not found' screen; a durable link that 404s is never a retry.",
455
+ void 0,
456
+ "not_found"
421
457
  );
422
458
  }
423
459
  if (response.status === 410) {
424
- const reason = (await serverSentence(response))?.message ?? "This meeting was cancelled.";
460
+ const said = await serverSentence(response);
425
461
  throw new MeetError(
426
462
  "cancelled",
427
- reason,
428
- "Nobody can join a cancelled meeting. Show the cancelled screen with this sentence; ask the host to schedule a new one."
463
+ said?.message ?? "This meeting was cancelled.",
464
+ "Nobody can join a cancelled meeting. Show the cancelled screen with this sentence; ask the host to schedule a new one.",
465
+ void 0,
466
+ said?.reason ?? "cancelled"
429
467
  );
430
468
  }
431
469
  if (response.status === 423) {
@@ -433,7 +471,9 @@ function createTokenClient(options) {
433
471
  throw new MeetError(
434
472
  "room-locked",
435
473
  said?.message ?? "The meeting is locked.",
436
- said?.remedy ?? "The host locked the room. Ask them to unlock it, then join again."
474
+ said?.remedy ?? "The host locked the room. Ask them to unlock it, then join again.",
475
+ void 0,
476
+ said?.reason ?? "locked"
437
477
  );
438
478
  }
439
479
  if (response.status === 503) {
@@ -502,6 +542,10 @@ function placeholder(roomName) {
502
542
  canRecord: false,
503
543
  isHost: false,
504
544
  role: "participant",
545
+ standing: null,
546
+ meetingPass: null,
547
+ meetingPassExpiresAt: null,
548
+ sessionId: null,
505
549
  lobby: false,
506
550
  breakoutRoomId: null
507
551
  };
@@ -514,7 +558,8 @@ async function serverSentence(response) {
514
558
  const message = typeof source.user_message === "string" && source.user_message.trim() !== "" ? source.user_message : typeof source.message === "string" && source.message.trim() !== "" ? source.message : null;
515
559
  if (message === null) return null;
516
560
  const remedy = typeof source.remedy === "string" && source.remedy.trim() !== "" ? source.remedy : void 0;
517
- return { message, remedy };
561
+ const reason = typeof source.reason === "string" && source.reason !== "" ? source.reason : null;
562
+ return { message, remedy, reason };
518
563
  } catch {
519
564
  return null;
520
565
  }
@@ -703,7 +748,7 @@ function createMeetAi(options) {
703
748
  operation: "meet.ai.ask",
704
749
  // A GUEST MAY ASK. The server decides whether it can answer.
705
750
  requireAuth: false,
706
- ...roomToken !== null ? { headers: { [ROOM_TOKEN_HEADER]: roomToken } } : {},
751
+ ...roomToken !== null ? { headers: { [MEETING_PASS_HEADER]: roomToken } } : {},
707
752
  ...signal !== void 0 ? { signal } : {}
708
753
  });
709
754
  if (!response.ok) {
@@ -963,11 +1008,15 @@ function isGuest(identity) {
963
1008
  return identity.userId === null;
964
1009
  }
965
1010
  var ROLE_RANK = {
966
- host: 3,
967
- cohost: 2,
1011
+ host: 4,
1012
+ cohost: 3,
1013
+ presenter: 2,
968
1014
  participant: 1,
969
- guest: 0
1015
+ viewer: 0
970
1016
  };
1017
+ function isLinkFollower(standing) {
1018
+ return standing === "guest" || standing === "outsider";
1019
+ }
971
1020
  function isHostRole(role) {
972
1021
  return role === "host" || role === "cohost";
973
1022
  }
@@ -1520,15 +1569,15 @@ var CAPTION_LANGUAGES = [
1520
1569
  { tag: "id", name: "Indonesian" },
1521
1570
  { tag: "sv", name: "Swedish" }
1522
1571
  ];
1523
- async function loadMeetingActivities(api, meetingId, roomToken = null) {
1572
+ async function loadMeetingActivities(api, meetingId, meetingPass = null) {
1524
1573
  let response;
1525
1574
  try {
1526
1575
  response = await api.request({
1527
1576
  path: `${MEET_ROUTES.collab}?meeting_id=${encodeURIComponent(meetingId)}`,
1528
1577
  method: "GET",
1529
1578
  operation: "meet.loadMeetingActivities",
1530
- requireAuth: roomToken === null,
1531
- ...roomToken !== null ? { headers: { [ROOM_TOKEN_HEADER]: roomToken } } : {}
1579
+ requireAuth: meetingPass === null,
1580
+ ...meetingPass !== null ? { headers: { [MEETING_PASS_HEADER]: meetingPass } } : {}
1532
1581
  });
1533
1582
  } catch (error) {
1534
1583
  return {
@@ -1585,7 +1634,6 @@ var RPCS = {
1585
1634
  meetingBySlug: "meet_meeting_by_slug",
1586
1635
  admit: "meet_admit_participant",
1587
1636
  setLock: "meet_set_lock",
1588
- endMeeting: "meet_end_meeting",
1589
1637
  recordConsent: "meet_record_consent",
1590
1638
  /*
1591
1639
  * ── MEET WAVE 1 — management (0.8). Every write is a SECURITY DEFINER door
@@ -1999,7 +2047,7 @@ function createMeetRepository(options) {
1999
2047
  const operation = "meet.projectAttendee";
2000
2048
  const role = text(row, "role");
2001
2049
  const admission = text(row, "admission_state");
2002
- const known = ["host", "cohost", "participant", "guest"];
2050
+ const known = ["host", "cohost", "presenter", "participant", "viewer"];
2003
2051
  const states = ["knocking", "admitted", "denied", "removed"];
2004
2052
  const userId = text(row, "participant_user_id");
2005
2053
  const identity = requireText(row, "identity", operation);
@@ -2314,16 +2362,6 @@ function createMeetRepository(options) {
2314
2362
  );
2315
2363
  return projectMeeting(row);
2316
2364
  },
2317
- async endMeeting(meetingId, byUserId) {
2318
- const row = await guard(
2319
- "meet.endMeeting",
2320
- () => db.rpc(RPCS.endMeeting, {
2321
- p_meeting_id: meetingId,
2322
- p_by_user_id: byUserId
2323
- })
2324
- );
2325
- return projectMeeting(row);
2326
- },
2327
2365
  async transcript(meetingId, limit = 1e3) {
2328
2366
  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);
2329
2367
  if (response.error !== null) throw normalizeMeetError(response.error, "meet.transcript");
@@ -2652,6 +2690,7 @@ var DEFAULT_EFFECTS = {
2652
2690
  };
2653
2691
  var NO_GRANTS = {
2654
2692
  role: "participant",
2693
+ standing: null,
2655
2694
  canRecord: false,
2656
2695
  canPublish: false,
2657
2696
  canSubscribe: false
@@ -2698,6 +2737,11 @@ function effectiveRole(snapshot) {
2698
2737
  const fromToken = snapshot.grants.role;
2699
2738
  return ROLE_RANK[fromRoster] >= ROLE_RANK[fromToken] ? fromRoster : fromToken;
2700
2739
  }
2740
+ function effectiveStanding(snapshot) {
2741
+ if (snapshot.grants.standing != null) return snapshot.grants.standing;
2742
+ const me = snapshot.participants.find((p) => p.identity === snapshot.localIdentity);
2743
+ return me?.standing ?? null;
2744
+ }
2701
2745
  var REACTION_TTL_MS = 5e3;
2702
2746
  var CHAT_LIMIT = 200;
2703
2747
  function createMeetStore(initial = {}) {
@@ -3190,7 +3234,7 @@ function applyModeration(store, payload, now) {
3190
3234
  return ignored(`a moderation kind this version does not know: ${String(kind)}`);
3191
3235
  }
3192
3236
  }
3193
- var ROLES = ["host", "cohost", "participant", "guest"];
3237
+ var ROLES = ["host", "cohost", "presenter", "participant", "viewer"];
3194
3238
 
3195
3239
  // src/core/devices.ts
3196
3240
  var KINDS = ["audioinput", "videoinput", "audiooutput"];
@@ -4385,7 +4429,6 @@ function kindOf(person) {
4385
4429
  if (person.isAgent) return "assistant";
4386
4430
  if (person.role === "host") return "host";
4387
4431
  if (person.role === "cohost") return "cohost";
4388
- if (person.role === "guest") return person.userId !== null ? "signed-in guest" : "guest";
4389
4432
  if (person.userId === null) return "guest";
4390
4433
  return "member";
4391
4434
  }
@@ -4670,7 +4713,7 @@ function meetingLength(meeting) {
4670
4713
  if (start === null || end === null || end < start) return null;
4671
4714
  return formatDurationMs(end - start, { style: "long" });
4672
4715
  }
4673
- async function loadMeetingChat(api, meetingId, roomToken = null) {
4716
+ async function loadMeetingChat(api, meetingId, meetingPass = null) {
4674
4717
  const operation = "meet.loadMeetingChat";
4675
4718
  let response;
4676
4719
  try {
@@ -4678,8 +4721,8 @@ async function loadMeetingChat(api, meetingId, roomToken = null) {
4678
4721
  path: `${MEET_ROUTES.chat}?meeting_id=${encodeURIComponent(meetingId)}`,
4679
4722
  method: "GET",
4680
4723
  operation,
4681
- requireAuth: roomToken === null,
4682
- ...roomToken !== null ? { headers: { [ROOM_TOKEN_HEADER]: roomToken } } : {}
4724
+ requireAuth: meetingPass === null,
4725
+ ...meetingPass !== null ? { headers: { [MEETING_PASS_HEADER]: meetingPass } } : {}
4683
4726
  });
4684
4727
  } catch (error) {
4685
4728
  return {
@@ -4823,7 +4866,12 @@ async function pushMeetingToGoogleCalendar(api, meetingId, target) {
4823
4866
  // src/core/room.ts
4824
4867
  var PARTICIPANT_ROLE_ATTRIBUTE = "matrx.participant.role";
4825
4868
  var PARTICIPANT_CAN_RECORD_ATTRIBUTE = "matrx.participant.can_record";
4826
- var KNOWN_ROLES = ["host", "cohost", "participant", "guest"];
4869
+ var PARTICIPANT_STANDING_ATTRIBUTE = "matrx.participant.standing";
4870
+ var KNOWN_STANDINGS = ["member", "invited", "outsider", "guest"];
4871
+ function parseStanding(value) {
4872
+ return KNOWN_STANDINGS.includes(value) ? value : null;
4873
+ }
4874
+ var KNOWN_ROLES = ["host", "cohost", "presenter", "participant", "viewer"];
4827
4875
  function parseRole(value) {
4828
4876
  return KNOWN_ROLES.includes(value) ? value : "participant";
4829
4877
  }
@@ -4857,6 +4905,9 @@ function projectParticipant(driver, joinedAt) {
4857
4905
  // ATTRIBUTE FIRST, metadata second — see the constants above. Both are the
4858
4906
  // server's; the attribute is simply the one that always arrives.
4859
4907
  role: parseRole(driver.attributes[PARTICIPANT_ROLE_ATTRIBUTE] ?? metadata.role),
4908
+ standing: parseStanding(
4909
+ driver.attributes[PARTICIPANT_STANDING_ATTRIBUTE] ?? metadata.standing
4910
+ ),
4860
4911
  canRecord: driver.attributes[PARTICIPANT_CAN_RECORD_ATTRIBUTE] === "true" || metadata.can_record === true,
4861
4912
  isLocal: driver.isLocal,
4862
4913
  isAgent: metadata.is_agent === true,
@@ -4929,7 +4980,7 @@ function createRoomEngine(options) {
4929
4980
  const normalized = normalizeMeetError(error, operation);
4930
4981
  store.patch({
4931
4982
  phase: "failed",
4932
- failure: { message: normalized.message, remedy: normalized.remedy }
4983
+ failure: { message: normalized.message, remedy: normalized.remedy, reason: normalized.reason }
4933
4984
  });
4934
4985
  report(
4935
4986
  normalized.code === "session-unavailable" ? "warn" : "error",
@@ -5133,6 +5184,7 @@ function createRoomEngine(options) {
5133
5184
  breakoutRoomId: token.breakoutRoomId ?? null,
5134
5185
  grants: {
5135
5186
  role: token.role,
5187
+ standing: token.standing,
5136
5188
  canRecord: token.canRecord,
5137
5189
  canPublish: token.canPublish,
5138
5190
  canSubscribe: token.canSubscribe
@@ -5478,7 +5530,7 @@ function createInRoomClient(options) {
5478
5530
  }
5479
5531
  function headers() {
5480
5532
  const token = options.resolveRoomToken();
5481
- return token === null ? void 0 : { [ROOM_TOKEN_HEADER]: token };
5533
+ return token === null ? void 0 : { [MEETING_PASS_HEADER]: token };
5482
5534
  }
5483
5535
  function refusal2(response, operation, remedy) {
5484
5536
  return refusalFromResponse(response, operation, remedy);
@@ -5959,7 +6011,7 @@ function summarizeMeetingRecordRestrictions(restrictions) {
5959
6011
  async function loadGuestMeetingRecord(args) {
5960
6012
  const { api, repository, meetingId, meeting, roomToken } = args;
5961
6013
  const session = args.session === true;
5962
- if (roomToken === null && !session) {
6014
+ if (roomToken?.meetingPass == null && !session) {
5963
6015
  return refusedBundle(
5964
6016
  meeting,
5965
6017
  "This meeting's record is only readable by the people who were in it.",
@@ -5969,12 +6021,12 @@ async function loadGuestMeetingRecord(args) {
5969
6021
  let response;
5970
6022
  try {
5971
6023
  response = await api.request({
5972
- path: `${MEET_ROUTES.record}?meeting_id=${encodeURIComponent(meetingId)}`,
6024
+ path: `${MEET_ROUTES.record}?meeting_id=${encodeURIComponent(meetingId)}` + (args.sessionId ? `&session_id=${encodeURIComponent(args.sessionId)}` : ""),
5973
6025
  method: "GET",
5974
6026
  // A GUEST HAS NO SESSION AND IS STILL A FIRST-CLASS READER (D6).
5975
6027
  requireAuth: session,
5976
6028
  operation: "meet.record",
5977
- headers: roomToken === null ? {} : { [ROOM_TOKEN_HEADER]: roomToken.token }
6029
+ headers: roomToken?.meetingPass != null ? { [MEETING_PASS_HEADER]: roomToken.meetingPass } : {}
5978
6030
  });
5979
6031
  } catch (error) {
5980
6032
  return refusedBundle(
@@ -6362,6 +6414,10 @@ function takeMoveRequest(store) {
6362
6414
  }
6363
6415
 
6364
6416
  // src/core/observation.ts
6417
+ function observedRole(role, standing) {
6418
+ if (role === "host" || role === "cohost") return role;
6419
+ return isLinkFollower(standing) ? "guest" : "participant";
6420
+ }
6365
6421
  function observedDevice(track) {
6366
6422
  if (track.enabled) return "on";
6367
6423
  const refused = track.unavailable;
@@ -6389,6 +6445,8 @@ function observedPhase(input) {
6389
6445
  const raw = snapshot.phase;
6390
6446
  const live = raw === "connected" || raw === "reconnecting";
6391
6447
  if (endedRecord(snapshot, input.meeting ?? null) && !live) return "ended";
6448
+ const reason = raw === "failed" ? snapshot.failure?.reason ?? null : null;
6449
+ if (reason !== null) return reason === "ended" ? "ended" : `refused:${reason}`;
6392
6450
  switch (raw) {
6393
6451
  case "idle":
6394
6452
  case "failed":
@@ -6409,12 +6467,13 @@ function observe(input) {
6409
6467
  const { snapshot } = input;
6410
6468
  const phase = observedPhase(input);
6411
6469
  const inCall = phase === "in_call";
6412
- const role = inCall && snapshot !== null ? effectiveRole(snapshot) : "none";
6413
- const canAdmit = role !== "none" && ADMITTER_ROLES.has(role);
6470
+ const actual = inCall && snapshot !== null ? effectiveRole(snapshot) : "none";
6471
+ const canAdmit = actual !== "none" && ADMITTER_ROLES.has(actual);
6472
+ const role = actual === "none" || snapshot === null ? "none" : observedRole(actual, effectiveStanding(snapshot));
6414
6473
  const deviceInPlay = phase === "joining" || inCall;
6415
6474
  return {
6416
6475
  phase,
6417
- reason: null,
6476
+ reason: phase.startsWith("refused:") ? phase.slice("refused:".length) : null,
6418
6477
  role,
6419
6478
  connection: snapshot?.phase === "reconnecting" ? "reconnecting" : "stable",
6420
6479
  hostPresent: inCall && snapshot !== null ? snapshot.participants.some((p) => ADMITTER_ROLES.has(p.role)) : null,
@@ -6480,7 +6539,7 @@ function participantAttributes(p) {
6480
6539
  "data-meet-participant": "",
6481
6540
  "data-meet-participant-identity": p.identity,
6482
6541
  "data-meet-participant-name": p.displayName,
6483
- "data-meet-participant-role": p.role,
6542
+ "data-meet-participant-role": observedRole(p.role, p.standing),
6484
6543
  "data-meet-participant-self": String(p.isLocal)
6485
6544
  };
6486
6545
  const quality = observedQuality(p.quality);
@@ -6513,6 +6572,7 @@ export {
6513
6572
  LISTEN_ONLY_NOTICE,
6514
6573
  MEETING_INVITE_KIND,
6515
6574
  MEETING_INVITE_VERSION,
6575
+ MEETING_PASS_HEADER,
6516
6576
  MEETING_RECORD_GRACE_MS,
6517
6577
  MEET_ANSWER_CONTEXT_EVENT,
6518
6578
  MEET_ANSWER_EVENTS,
@@ -6528,12 +6588,12 @@ export {
6528
6588
  ORGANIZATION_HEADER,
6529
6589
  PARTICIPANT_CAN_RECORD_ATTRIBUTE,
6530
6590
  PARTICIPANT_ROLE_ATTRIBUTE,
6591
+ PARTICIPANT_STANDING_ATTRIBUTE,
6531
6592
  REACTION_TTL_MS,
6532
6593
  REFUSED_ABSENCE,
6533
6594
  ROLE_RANK,
6534
6595
  ROOM_EVENTS,
6535
6596
  ROOM_EVENT_PREFIX,
6536
- ROOM_TOKEN_HEADER,
6537
6597
  RPCS,
6538
6598
  TABLES,
6539
6599
  TRANSCRIPTION_ATTRIBUTES,
@@ -6604,6 +6664,7 @@ export {
6604
6664
  isGuest,
6605
6665
  isGuestIdentity,
6606
6666
  isHostRole,
6667
+ isLinkFollower,
6607
6668
  isListenOnly,
6608
6669
  isNoteTaker,
6609
6670
  isRealName,
@@ -6622,6 +6683,7 @@ export {
6622
6683
  meetingInviteAction,
6623
6684
  meetingLength,
6624
6685
  meetingLink,
6686
+ meetingPassHeaders,
6625
6687
  meetingPath,
6626
6688
  meetingSlug,
6627
6689
  meetingTopic,
@@ -6665,6 +6727,7 @@ export {
6665
6727
  recordingLabel,
6666
6728
  recordingNotice,
6667
6729
  recordingOffsetMs,
6730
+ rememberedMeetingPass,
6668
6731
  roleOf,
6669
6732
  roomTopic,
6670
6733
  rootAttributes,