@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/CHANGELOG.md +20 -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/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,
|
|
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
|
|
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,
|
|
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
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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
|
|
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
|
-
|
|
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 (
|
|
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
|
|
460
|
+
const said = await serverSentence(response);
|
|
425
461
|
throw new MeetError(
|
|
426
462
|
"cancelled",
|
|
427
|
-
|
|
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
|
-
|
|
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: { [
|
|
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:
|
|
967
|
-
cohost:
|
|
1011
|
+
host: 4,
|
|
1012
|
+
cohost: 3,
|
|
1013
|
+
presenter: 2,
|
|
968
1014
|
participant: 1,
|
|
969
|
-
|
|
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,
|
|
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:
|
|
1531
|
-
...
|
|
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", "
|
|
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", "
|
|
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,
|
|
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:
|
|
4682
|
-
...
|
|
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
|
|
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 : { [
|
|
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
|
|
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
|
|
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
|
|
6413
|
-
const canAdmit =
|
|
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,
|