@ai-matrx/meet 0.7.2 → 0.7.5
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 +88 -0
- package/dist/index.cjs +1002 -69
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +484 -26
- package/dist/index.d.ts +484 -26
- package/dist/index.js +1002 -69
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +2385 -244
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +136 -12
- package/dist/react.d.ts +136 -12
- package/dist/react.js +2386 -245
- package/dist/react.js.map +1 -1
- package/dist/styles.css +522 -0
- package/package.json +5 -4
package/dist/index.d.ts
CHANGED
|
@@ -121,6 +121,12 @@ interface MeetParticipant {
|
|
|
121
121
|
readonly screenSharing: boolean;
|
|
122
122
|
readonly speaking: boolean;
|
|
123
123
|
readonly handRaised: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* When the hand went up (epoch ms), or null. The HAND QUEUE is ordered by it —
|
|
126
|
+
* first raised, first called on (Meet wave 2). Optional so a roster built by a
|
|
127
|
+
* host before 0.8 still type-checks.
|
|
128
|
+
*/
|
|
129
|
+
readonly handRaisedAt?: number | null | undefined;
|
|
124
130
|
readonly quality: ConnectionQuality;
|
|
125
131
|
readonly joinedAt: string;
|
|
126
132
|
/**
|
|
@@ -151,7 +157,135 @@ interface MeetingRecord {
|
|
|
151
157
|
readonly recordingPolicy: RecordingPolicy;
|
|
152
158
|
readonly aiEnabled: boolean;
|
|
153
159
|
readonly metadata: JsonObject;
|
|
154
|
-
|
|
160
|
+
/** IANA zone the meeting's wall-clock time is authored in (`America/Los_Angeles`). */
|
|
161
|
+
readonly timeZone?: string;
|
|
162
|
+
/** Description / agenda text. */
|
|
163
|
+
readonly agenda?: string | null;
|
|
164
|
+
/** RFC 5545 RRULE subset — one row and one durable link per series. */
|
|
165
|
+
readonly recurrenceRule?: string | null;
|
|
166
|
+
/** Signed-in members and invitees may enter before a host arrives. */
|
|
167
|
+
readonly joinBeforeHost?: boolean;
|
|
168
|
+
/** Cancel is a STATE: the link still resolves and says so; nobody can join. */
|
|
169
|
+
readonly cancelledAt?: string | null;
|
|
170
|
+
readonly cancellationReason?: string | null;
|
|
171
|
+
/** Archived (soft deleted). Restorable by the host or a co-host. */
|
|
172
|
+
readonly deletedAt?: string | null;
|
|
173
|
+
/** iCalendar SEQUENCE — bumped by the database on every reschedule and on cancel. */
|
|
174
|
+
readonly calendarSequence?: number;
|
|
175
|
+
/** Row version, for the compare-and-swap in `updateMeeting`. */
|
|
176
|
+
readonly version?: number;
|
|
177
|
+
}
|
|
178
|
+
/** An invitee's answer. `needs_action` = not answered yet (iCalendar NEEDS-ACTION). */
|
|
179
|
+
type RsvpState = "needs_action" | "accepted" | "declined" | "tentative";
|
|
180
|
+
/** The answers a person can give. */
|
|
181
|
+
type RsvpAnswer = Exclude<RsvpState, "needs_action">;
|
|
182
|
+
/** A co-host holds host moderation through a real `iam` admin grant on the meeting. */
|
|
183
|
+
type InviteeRole = "invitee" | "cohost";
|
|
184
|
+
/** One person a meeting was sent to (`communication.meet_invitees`). */
|
|
185
|
+
interface MeetingInvitee {
|
|
186
|
+
readonly id: string;
|
|
187
|
+
readonly meetingId: MeetingId;
|
|
188
|
+
/** Set when the person has an account — they skip the waiting room and answer in-app. */
|
|
189
|
+
readonly userId: UserId | null;
|
|
190
|
+
readonly email: string | null;
|
|
191
|
+
readonly displayName: string | null;
|
|
192
|
+
readonly role: InviteeRole;
|
|
193
|
+
readonly rsvpState: RsvpState;
|
|
194
|
+
readonly respondedAt: string | null;
|
|
195
|
+
readonly rsvpNote: string | null;
|
|
196
|
+
/** The calendar_sequence of the last invitation they were sent; null = never told. */
|
|
197
|
+
readonly lastSentSequence: number | null;
|
|
198
|
+
readonly lastSentAt: string | null;
|
|
199
|
+
}
|
|
200
|
+
/** Who to invite: an account (`userId`) or an address (`email`), or both. */
|
|
201
|
+
interface InviteeInput {
|
|
202
|
+
readonly userId?: UserId | undefined;
|
|
203
|
+
readonly email?: string | undefined;
|
|
204
|
+
readonly displayName?: string | undefined;
|
|
205
|
+
/** Omit to keep an existing invitee's role; `cohost` needs the host or a co-host. */
|
|
206
|
+
readonly role?: InviteeRole | undefined;
|
|
207
|
+
}
|
|
208
|
+
/** Where one occurrence of a meeting stands. */
|
|
209
|
+
type OccurrenceState = "scheduled" | "moved" | "cancelled";
|
|
210
|
+
/** One occurrence — for a one-off meeting, the meeting itself. */
|
|
211
|
+
interface MeetingOccurrence {
|
|
212
|
+
readonly meetingId: MeetingId;
|
|
213
|
+
/** The start the rule generates (iCalendar RECURRENCE-ID). The key for exceptions. */
|
|
214
|
+
readonly originalStart: string;
|
|
215
|
+
/** When it actually happens (differs from `originalStart` only when `moved`). */
|
|
216
|
+
readonly occurrenceStart: string;
|
|
217
|
+
readonly durationMinutes: number | null;
|
|
218
|
+
readonly state: OccurrenceState;
|
|
219
|
+
readonly sequence: number;
|
|
220
|
+
}
|
|
221
|
+
/** One row of the Upcoming list — an occurrence plus what the list shows about its meeting. */
|
|
222
|
+
interface UpcomingOccurrence extends MeetingOccurrence {
|
|
223
|
+
readonly organizationId: OrganizationId;
|
|
224
|
+
readonly title: string;
|
|
225
|
+
readonly slug: string;
|
|
226
|
+
readonly kind: MeetingKind;
|
|
227
|
+
readonly hostUserId: UserId;
|
|
228
|
+
readonly timeZone: string;
|
|
229
|
+
readonly meetingCancelled: boolean;
|
|
230
|
+
/** The signed-in reader's own answer, when they are an invitee. */
|
|
231
|
+
readonly myRsvp: RsvpState | null;
|
|
232
|
+
/** `host`, `cohost` or `invitee` — null when the reader simply can see it (org member). */
|
|
233
|
+
readonly myRole: "host" | InviteeRole | null;
|
|
234
|
+
}
|
|
235
|
+
/** An exception row (`communication.meet_occurrence_overrides`). */
|
|
236
|
+
interface OccurrenceOverride {
|
|
237
|
+
readonly id: string;
|
|
238
|
+
readonly meetingId: MeetingId;
|
|
239
|
+
readonly originalStart: string;
|
|
240
|
+
readonly state: "cancelled" | "moved";
|
|
241
|
+
readonly newStart: string | null;
|
|
242
|
+
readonly newDurationMinutes: number | null;
|
|
243
|
+
readonly reason: string | null;
|
|
244
|
+
readonly calendarSequence: number;
|
|
245
|
+
/** Set when the exception was withdrawn (`restore`) and the occurrence is back on schedule. */
|
|
246
|
+
readonly deletedAt: string | null;
|
|
247
|
+
}
|
|
248
|
+
/** Settings a meeting carries; unset ones come from the person's / organization's knobs. */
|
|
249
|
+
interface MeetingSettings {
|
|
250
|
+
readonly lobbyEnabled?: boolean | undefined;
|
|
251
|
+
readonly recordingPolicy?: RecordingPolicy | undefined;
|
|
252
|
+
readonly aiEnabled?: boolean | undefined;
|
|
253
|
+
readonly joinBeforeHost?: boolean | undefined;
|
|
254
|
+
}
|
|
255
|
+
/** A partial edit. `null` clears a clearable field (agenda, recurrence rule, time). */
|
|
256
|
+
interface MeetingChanges extends MeetingSettings {
|
|
257
|
+
readonly title?: string | undefined;
|
|
258
|
+
readonly agenda?: string | null | undefined;
|
|
259
|
+
readonly timeZone?: string | undefined;
|
|
260
|
+
readonly scheduledFor?: string | null | undefined;
|
|
261
|
+
readonly scheduledDurationMinutes?: number | null | undefined;
|
|
262
|
+
readonly recurrenceRule?: string | null | undefined;
|
|
263
|
+
}
|
|
264
|
+
/** What the emailed RSVP link shows and answers (no account needed). */
|
|
265
|
+
type RsvpInvitation = {
|
|
266
|
+
readonly ok: true;
|
|
267
|
+
readonly meeting: {
|
|
268
|
+
readonly title: string;
|
|
269
|
+
readonly slug: string;
|
|
270
|
+
readonly scheduledFor: string | null;
|
|
271
|
+
readonly durationMinutes: number | null;
|
|
272
|
+
readonly timeZone: string;
|
|
273
|
+
readonly agenda: string | null;
|
|
274
|
+
readonly recurrenceRule: string | null;
|
|
275
|
+
readonly cancelledAt: string | null;
|
|
276
|
+
readonly cancellationReason: string | null;
|
|
277
|
+
readonly endedAt: string | null;
|
|
278
|
+
};
|
|
279
|
+
readonly invitee: {
|
|
280
|
+
readonly displayName: string | null;
|
|
281
|
+
readonly email: string | null;
|
|
282
|
+
readonly rsvpState: RsvpState;
|
|
283
|
+
readonly respondedAt: string | null;
|
|
284
|
+
};
|
|
285
|
+
} | {
|
|
286
|
+
readonly ok: false;
|
|
287
|
+
readonly message: string;
|
|
288
|
+
};
|
|
155
289
|
/** Org-configurable, never hardcoded taste (Law 6 / "opinions become knobs"). */
|
|
156
290
|
type RecordingPolicy = "disabled" | "host-controlled" | "always-on";
|
|
157
291
|
type RecordingState = "idle" | "starting" | "recording" | "stopping" | "processing" | "available"
|
|
@@ -549,7 +683,9 @@ declare function displayNameFor(book: NameBook, identity: ParticipantIdentity |
|
|
|
549
683
|
* "media-error" would make the UI say the wrong sentence three times out of
|
|
550
684
|
* four.
|
|
551
685
|
*/
|
|
552
|
-
type MeetErrorCode = "session-unavailable" | "forbidden" | "not-found" | "conflict" | "token" | "transport" | "invalid-response" | "misconfigured" | "permission-denied" | "device-not-found" | "device-in-use" | "insecure-context" | "media-unsupported" | "room-locked" | "lobby-denied" | "capacity"
|
|
686
|
+
type MeetErrorCode = "session-unavailable" | "forbidden" | "not-found" | "conflict" | "token" | "transport" | "invalid-response" | "misconfigured" | "permission-denied" | "device-not-found" | "device-in-use" | "insecure-context" | "media-unsupported" | "room-locked" | "lobby-denied" | "capacity"
|
|
687
|
+
/** Meet wave 1: the meeting was cancelled — its link resolves, its room never opens. */
|
|
688
|
+
| "cancelled" | "unknown";
|
|
553
689
|
declare class MeetError extends Error {
|
|
554
690
|
readonly code: MeetErrorCode;
|
|
555
691
|
/** What to DO. Rendered to the user for the device codes. */
|
|
@@ -751,7 +887,33 @@ interface RoomChatMessage {
|
|
|
751
887
|
readonly displayName: string;
|
|
752
888
|
readonly text: string;
|
|
753
889
|
readonly at: string;
|
|
890
|
+
/**
|
|
891
|
+
* Set for a PRIVATE message: the one identity it was addressed to (from the
|
|
892
|
+
* sender's side) or this participant (from the receiver's). Private messages
|
|
893
|
+
* travel the data plane only and are never saved (Meet wave 2).
|
|
894
|
+
*/
|
|
895
|
+
readonly to?: ParticipantIdentity | null | undefined;
|
|
896
|
+
/** True once the server has SAVED it — a message everyone sees, late joiners too. */
|
|
897
|
+
readonly saved?: boolean | undefined;
|
|
898
|
+
/** A send the server refused, with its sentence. The message stays visible, marked. */
|
|
899
|
+
readonly failed?: string | undefined;
|
|
900
|
+
}
|
|
901
|
+
/**
|
|
902
|
+
* A HOST ACTED ON *ME* (Meet wave 2) — the server's own `matrx.meet.moderation`
|
|
903
|
+
* packet, addressed to this participant. Rendered once, dismissible, in words.
|
|
904
|
+
*/
|
|
905
|
+
interface ModerationNotice {
|
|
906
|
+
readonly kind: "muted" | "ask-unmute" | "removed" | "role";
|
|
907
|
+
readonly text: string;
|
|
908
|
+
readonly at: number;
|
|
909
|
+
}
|
|
910
|
+
/** What this participant chose for their own media. Remembered per browser. */
|
|
911
|
+
interface MediaEffects {
|
|
912
|
+
readonly noiseSuppression: boolean;
|
|
913
|
+
readonly background: "none" | "blur" | "image";
|
|
914
|
+
readonly backgroundImage: string | null;
|
|
754
915
|
}
|
|
916
|
+
declare const DEFAULT_EFFECTS: MediaEffects;
|
|
755
917
|
interface RoomReaction {
|
|
756
918
|
readonly id: string;
|
|
757
919
|
readonly identity: ParticipantIdentity;
|
|
@@ -811,7 +973,27 @@ interface MeetSnapshot {
|
|
|
811
973
|
*/
|
|
812
974
|
readonly recordingId: string | null;
|
|
813
975
|
readonly chat: readonly RoomChatMessage[];
|
|
976
|
+
/** Whether the SAVED chat has been read for this meeting (late joiners see history). */
|
|
977
|
+
readonly chatLoaded: boolean;
|
|
814
978
|
readonly reactions: readonly RoomReaction[];
|
|
979
|
+
/**
|
|
980
|
+
* The participant a HOST spotlighted for everyone, from the room's metadata
|
|
981
|
+
* (server-set, delivered on join). A local pin outranks it on this screen only.
|
|
982
|
+
*/
|
|
983
|
+
readonly spotlight: ParticipantIdentity | null;
|
|
984
|
+
/** The last thing a host did to THIS participant, in words. Dismissible. */
|
|
985
|
+
readonly moderationNotice: ModerationNotice | null;
|
|
986
|
+
/**
|
|
987
|
+
* The server's answer to the last host action THIS participant took ("Muted 3
|
|
988
|
+
* people", or the refusal). One place, so whichever surface acted — a tile's
|
|
989
|
+
* menu, the People panel, More options — the sentence survives the menu closing.
|
|
990
|
+
*/
|
|
991
|
+
readonly actionNotice: {
|
|
992
|
+
readonly text: string;
|
|
993
|
+
readonly failed: boolean;
|
|
994
|
+
readonly at: number;
|
|
995
|
+
} | null;
|
|
996
|
+
readonly effects: MediaEffects;
|
|
815
997
|
/**
|
|
816
998
|
* Captions AND durable rows, reconciled into one list (D16). A record
|
|
817
999
|
* replaces the caption it supersedes; a caption never overwrites a record.
|
|
@@ -859,8 +1041,18 @@ interface MeetStore {
|
|
|
859
1041
|
setParticipants(participants: readonly MeetParticipant[]): void;
|
|
860
1042
|
setSpeaking(identities: readonly ParticipantIdentity[]): void;
|
|
861
1043
|
setQuality(identity: ParticipantIdentity, quality: ConnectionQuality): void;
|
|
862
|
-
|
|
1044
|
+
/**
|
|
1045
|
+
* Raise or lower a hand. `at` is WHEN it went up, which is the hand queue's
|
|
1046
|
+
* order — first raised, first called on, the way Meet orders it.
|
|
1047
|
+
*/
|
|
1048
|
+
setHand(identity: ParticipantIdentity, raised: boolean, at?: number): void;
|
|
863
1049
|
addChat(message: RoomChatMessage): void;
|
|
1050
|
+
/** The saved chat, read once per join. Merged with anything that arrived live. */
|
|
1051
|
+
loadChat(messages: readonly RoomChatMessage[]): void;
|
|
1052
|
+
/** Replace a pending message (by id) with what the server saved, or mark it failed. */
|
|
1053
|
+
settleChat(localId: string, next: RoomChatMessage | {
|
|
1054
|
+
failed: string;
|
|
1055
|
+
}): void;
|
|
864
1056
|
addReaction(reaction: RoomReaction): void;
|
|
865
1057
|
/** Drops reactions past their TTL. Called by the UI's animation frame. */
|
|
866
1058
|
expireReactions(now: number): void;
|
|
@@ -1105,6 +1297,10 @@ declare const TABLES: {
|
|
|
1105
1297
|
readonly recordings: "meet_recordings";
|
|
1106
1298
|
readonly transcripts: "meet_transcript_segments";
|
|
1107
1299
|
readonly notes: "meet_notes";
|
|
1300
|
+
/** Wave 1 (0.8): who a meeting was sent to, and what they answered. */
|
|
1301
|
+
readonly invitees: "meet_invitees";
|
|
1302
|
+
/** Wave 1 (0.8): one occurrence of a series cancelled or moved. */
|
|
1303
|
+
readonly occurrenceOverrides: "meet_occurrence_overrides";
|
|
1108
1304
|
};
|
|
1109
1305
|
declare const RPCS: {
|
|
1110
1306
|
/** Atomic: create the invite row and stamp its expiry in one statement. */
|
|
@@ -1121,6 +1317,29 @@ declare const RPCS: {
|
|
|
1121
1317
|
readonly setLock: "meet_set_lock";
|
|
1122
1318
|
readonly endMeeting: "meet_end_meeting";
|
|
1123
1319
|
readonly recordConsent: "meet_record_consent";
|
|
1320
|
+
/** Schedule with every setting at create; unset settings come from the knobs. */
|
|
1321
|
+
readonly scheduleMeeting: "meet_schedule_meeting";
|
|
1322
|
+
/** Edit / reschedule — a JSON patch with a version compare-and-swap. */
|
|
1323
|
+
readonly updateMeeting: "meet_update_meeting";
|
|
1324
|
+
/** Cancel is a state (`cancelled_at`); the link keeps resolving. */
|
|
1325
|
+
readonly cancelMeeting: "meet_cancel_meeting";
|
|
1326
|
+
/** Archive (soft delete) — the invitations and exceptions cascade. */
|
|
1327
|
+
readonly archiveMeeting: "meet_archive_meeting";
|
|
1328
|
+
readonly restoreMeeting: "meet_restore_meeting";
|
|
1329
|
+
/** Cancel, move or restore ONE occurrence of a series by its original start. */
|
|
1330
|
+
readonly setOccurrence: "meet_set_occurrence";
|
|
1331
|
+
readonly addInvitees: "meet_add_invitees";
|
|
1332
|
+
readonly setInviteeRole: "meet_set_invitee_role";
|
|
1333
|
+
readonly removeInvitee: "meet_remove_invitee";
|
|
1334
|
+
/** A signed-in invitee answers for themselves. */
|
|
1335
|
+
readonly respond: "meet_respond";
|
|
1336
|
+
/** The emailed RSVP link (no account): read and answer. */
|
|
1337
|
+
readonly invitationByToken: "meet_invitation_by_token";
|
|
1338
|
+
readonly respondByToken: "meet_respond_by_token";
|
|
1339
|
+
/** One meeting's occurrences between two instants (INVOKER — the reader's RLS). */
|
|
1340
|
+
readonly meetingOccurrences: "meet_meeting_occurrences";
|
|
1341
|
+
/** Every occurrence the reader can see between two instants — the Upcoming list. */
|
|
1342
|
+
readonly occurrencesBetween: "meet_occurrences_between";
|
|
1124
1343
|
};
|
|
1125
1344
|
type Row = Record<string, unknown>;
|
|
1126
1345
|
interface CreateCallInviteInput {
|
|
@@ -1207,6 +1426,58 @@ interface MeetRepository {
|
|
|
1207
1426
|
acknowledgedAt: string;
|
|
1208
1427
|
}): Promise<void>;
|
|
1209
1428
|
recordings(meetingId: MeetingId): Promise<readonly RecordingRecord[]>;
|
|
1429
|
+
scheduleMeeting(input: ScheduleMeetingInput): Promise<MeetingRecord>;
|
|
1430
|
+
/** `expectedVersion` from the row you edited; a stale one is a `conflict`. */
|
|
1431
|
+
updateMeeting(meetingId: MeetingId, changes: MeetingChanges, options?: {
|
|
1432
|
+
expectedVersion?: number | null;
|
|
1433
|
+
byUserId?: UserId | null;
|
|
1434
|
+
}): Promise<MeetingRecord>;
|
|
1435
|
+
cancelMeeting(meetingId: MeetingId, reason: string | null, byUserId?: UserId | null): Promise<MeetingRecord>;
|
|
1436
|
+
archiveMeeting(meetingId: MeetingId, byUserId?: UserId | null): Promise<MeetingRecord>;
|
|
1437
|
+
restoreMeeting(meetingId: MeetingId, byUserId?: UserId | null): Promise<MeetingRecord>;
|
|
1438
|
+
setOccurrence(args: {
|
|
1439
|
+
meetingId: MeetingId;
|
|
1440
|
+
originalStart: string;
|
|
1441
|
+
action: "cancel" | "move" | "restore";
|
|
1442
|
+
newStart?: string | null;
|
|
1443
|
+
newDurationMinutes?: number | null;
|
|
1444
|
+
reason?: string | null;
|
|
1445
|
+
byUserId?: UserId | null;
|
|
1446
|
+
}): Promise<OccurrenceOverride>;
|
|
1447
|
+
meetingOccurrences(meetingId: MeetingId, range: {
|
|
1448
|
+
from: string;
|
|
1449
|
+
to: string;
|
|
1450
|
+
limit?: number;
|
|
1451
|
+
}): Promise<readonly MeetingOccurrence[]>;
|
|
1452
|
+
/** The Upcoming list: every occurrence the reader may see. `organizationId` FILTERS; RLS decides. */
|
|
1453
|
+
occurrencesBetween(range: {
|
|
1454
|
+
from: string;
|
|
1455
|
+
to: string;
|
|
1456
|
+
organizationId?: OrganizationId | null;
|
|
1457
|
+
limit?: number;
|
|
1458
|
+
}): Promise<readonly UpcomingOccurrence[]>;
|
|
1459
|
+
invitees(meetingId: MeetingId): Promise<readonly MeetingInvitee[]>;
|
|
1460
|
+
addInvitees(meetingId: MeetingId, people: readonly InviteeInput[], byUserId?: UserId | null): Promise<readonly MeetingInvitee[]>;
|
|
1461
|
+
setInviteeRole(inviteeId: string, role: InviteeRole, byUserId?: UserId | null): Promise<MeetingInvitee>;
|
|
1462
|
+
removeInvitee(inviteeId: string, byUserId?: UserId | null): Promise<MeetingInvitee>;
|
|
1463
|
+
respond(meetingId: MeetingId, answer: RsvpAnswer, note?: string | null): Promise<MeetingInvitee>;
|
|
1464
|
+
invitationByToken(secret: string): Promise<RsvpInvitation>;
|
|
1465
|
+
respondByToken(secret: string, answer: RsvpAnswer, note?: string | null): Promise<RsvpInvitation>;
|
|
1466
|
+
projectInvitee(row: Row): MeetingInvitee;
|
|
1467
|
+
}
|
|
1468
|
+
interface ScheduleMeetingInput {
|
|
1469
|
+
readonly organizationId: OrganizationId;
|
|
1470
|
+
readonly hostUserId: UserId;
|
|
1471
|
+
readonly title: string;
|
|
1472
|
+
readonly scheduledFor: string | null;
|
|
1473
|
+
/** IANA zone, e.g. `America/Los_Angeles`. The wall-clock time a series keeps across DST. */
|
|
1474
|
+
readonly timeZone: string;
|
|
1475
|
+
/** Omit to use the person's `meet.default_duration_minutes`. */
|
|
1476
|
+
readonly durationMinutes?: number | null | undefined;
|
|
1477
|
+
readonly agenda?: string | null | undefined;
|
|
1478
|
+
/** RRULE subset: FREQ=DAILY|WEEKLY|MONTHLY, INTERVAL, BYDAY, BYMONTHDAY, COUNT, UNTIL. */
|
|
1479
|
+
readonly recurrenceRule?: string | null | undefined;
|
|
1480
|
+
readonly settings?: MeetingSettings | undefined;
|
|
1210
1481
|
}
|
|
1211
1482
|
interface RepositoryOptions {
|
|
1212
1483
|
/**
|
|
@@ -1234,6 +1505,19 @@ interface RepositoryOptions {
|
|
|
1234
1505
|
*/
|
|
1235
1506
|
declare function projectSegment(row: Row): TranscriptSegment;
|
|
1236
1507
|
declare function projectNote(row: Row): MeetingNote;
|
|
1508
|
+
declare function projectInvitee(row: Row): MeetingInvitee;
|
|
1509
|
+
declare function projectOccurrence(row: Row): MeetingOccurrence;
|
|
1510
|
+
declare function projectUpcoming(row: Row): UpcomingOccurrence;
|
|
1511
|
+
declare function projectOverride(row: Row): OccurrenceOverride;
|
|
1512
|
+
/** The jsonb the RSVP doors return, typed. A body that is neither shape is refused loudly. */
|
|
1513
|
+
declare function projectRsvpInvitation(body: unknown): RsvpInvitation;
|
|
1514
|
+
/** Settings → the door's snake_case object, carrying ONLY what was set. */
|
|
1515
|
+
declare function settingsPatch(settings: MeetingSettings): Record<string, unknown>;
|
|
1516
|
+
/**
|
|
1517
|
+
* A partial edit → the `meet_update_meeting` patch. `undefined` = leave alone,
|
|
1518
|
+
* `null` = clear — the difference a JSON patch exists to carry.
|
|
1519
|
+
*/
|
|
1520
|
+
declare function changesPatch(changes: MeetingChanges): Record<string, unknown>;
|
|
1237
1521
|
declare function createMeetRepository(options: RepositoryOptions): MeetRepository;
|
|
1238
1522
|
|
|
1239
1523
|
/**
|
|
@@ -1426,6 +1710,18 @@ declare const ROOM_EVENTS: {
|
|
|
1426
1710
|
* host recorded (MRI-C8).
|
|
1427
1711
|
*/
|
|
1428
1712
|
readonly recording: "matrx.meet.recording";
|
|
1713
|
+
/**
|
|
1714
|
+
* A chat message to everyone was SAVED (Meet wave 2). Payload
|
|
1715
|
+
* `{ message: { id, meeting_id, sender_identity, sender_name, body, created_at } }`.
|
|
1716
|
+
*/
|
|
1717
|
+
readonly chat: "matrx.meet.chat";
|
|
1718
|
+
/**
|
|
1719
|
+
* A host or co-host acted (Meet wave 2). Payload `{ meeting_id, kind, … }`:
|
|
1720
|
+
* `muted {source, by}` · `ask-unmute {by}` · `removed {by}` — addressed to the
|
|
1721
|
+
* person concerned; `lower-hands {identities: [...] | "*"}` · `role {identity,
|
|
1722
|
+
* role}` — to everyone.
|
|
1723
|
+
*/
|
|
1724
|
+
readonly moderation: "matrx.meet.moderation";
|
|
1429
1725
|
};
|
|
1430
1726
|
type RoomEventTopic = (typeof ROOM_EVENTS)[keyof typeof ROOM_EVENTS];
|
|
1431
1727
|
declare function isRoomEventTopic(topic: string): boolean;
|
|
@@ -1667,6 +1963,11 @@ interface StageArgs {
|
|
|
1667
1963
|
readonly layout: StageLayout;
|
|
1668
1964
|
readonly pinned: ParticipantIdentity | null;
|
|
1669
1965
|
readonly activeSpeakers: readonly ParticipantIdentity[];
|
|
1966
|
+
/**
|
|
1967
|
+
* The participant a HOST spotlighted for everyone (Meet wave 2). A local pin
|
|
1968
|
+
* outranks it on this screen; a screen share outranks both.
|
|
1969
|
+
*/
|
|
1970
|
+
readonly spotlight?: ParticipantIdentity | null | undefined;
|
|
1670
1971
|
/** How many tiles this viewport can honestly render. Default 12. */
|
|
1671
1972
|
readonly pageSize?: number;
|
|
1672
1973
|
readonly page?: number;
|
|
@@ -1767,6 +2068,29 @@ interface RoomDriverHandlers {
|
|
|
1767
2068
|
transcription(event: DriverTranscription): void;
|
|
1768
2069
|
/** The room ended for this client. `reason` is shown to the user verbatim. */
|
|
1769
2070
|
disconnected(reason: string | null): void;
|
|
2071
|
+
/**
|
|
2072
|
+
* The ROOM's metadata — set only by the server (`UpdateRoomMetadata`), and
|
|
2073
|
+
* delivered to every joiner ON JOIN, which is why the spotlight rides it: a
|
|
2074
|
+
* data packet reaches only the people already in the room. Called once after
|
|
2075
|
+
* connect and on every change. Optional so an older host driver still works.
|
|
2076
|
+
*/
|
|
2077
|
+
roomMetadata?(metadata: string): void;
|
|
2078
|
+
}
|
|
2079
|
+
/** A camera background effect. `image` replaces the background with `imageUrl`. */
|
|
2080
|
+
type VideoEffect = {
|
|
2081
|
+
readonly kind: "none";
|
|
2082
|
+
} | {
|
|
2083
|
+
readonly kind: "blur";
|
|
2084
|
+
readonly radius?: number;
|
|
2085
|
+
} | {
|
|
2086
|
+
readonly kind: "image";
|
|
2087
|
+
readonly imageUrl: string;
|
|
2088
|
+
};
|
|
2089
|
+
/** Microphone processing the browser applies before anything is sent. */
|
|
2090
|
+
interface AudioProcessing {
|
|
2091
|
+
readonly noiseSuppression: boolean;
|
|
2092
|
+
readonly echoCancellation: boolean;
|
|
2093
|
+
readonly autoGainControl: boolean;
|
|
1770
2094
|
}
|
|
1771
2095
|
interface MeetRoomDriver {
|
|
1772
2096
|
connect(serverUrl: string, token: string): Promise<void>;
|
|
@@ -1774,8 +2098,23 @@ interface MeetRoomDriver {
|
|
|
1774
2098
|
setMicrophoneEnabled(enabled: boolean): Promise<void>;
|
|
1775
2099
|
setCameraEnabled(enabled: boolean): Promise<void>;
|
|
1776
2100
|
setScreenShareEnabled(enabled: boolean): Promise<void>;
|
|
1777
|
-
/**
|
|
1778
|
-
|
|
2101
|
+
/**
|
|
2102
|
+
* Reliable, topic-addressed data. The in-room control plane. `to` addresses
|
|
2103
|
+
* named identities only (a private chat message); absent = everyone.
|
|
2104
|
+
*/
|
|
2105
|
+
publishData(topic: string, payload: string, to?: readonly string[]): Promise<void>;
|
|
2106
|
+
/**
|
|
2107
|
+
* Apply microphone processing to the live track and to every future one.
|
|
2108
|
+
* Optional: a driver without it makes the control ABSENT, never dead.
|
|
2109
|
+
*/
|
|
2110
|
+
setAudioProcessing?(processing: AudioProcessing): Promise<void>;
|
|
2111
|
+
/**
|
|
2112
|
+
* Apply a background effect to the live camera and to every future one.
|
|
2113
|
+
* Rejects with a sentence when this browser cannot run it.
|
|
2114
|
+
*/
|
|
2115
|
+
setVideoEffect?(effect: VideoEffect): Promise<void>;
|
|
2116
|
+
/** Whether this browser can run background effects at all. */
|
|
2117
|
+
supportsVideoEffects?(): boolean;
|
|
1779
2118
|
/**
|
|
1780
2119
|
* Attach a participant's track to a media element. Returns the detach
|
|
1781
2120
|
* function — returning it (rather than exposing `detach`) is what makes a
|
|
@@ -1793,7 +2132,6 @@ declare const DATA_TOPICS: {
|
|
|
1793
2132
|
readonly hand: "mx.hand";
|
|
1794
2133
|
readonly reaction: "mx.reaction";
|
|
1795
2134
|
readonly chat: "mx.chat";
|
|
1796
|
-
readonly hostAction: "mx.host";
|
|
1797
2135
|
};
|
|
1798
2136
|
/**
|
|
1799
2137
|
* 🚨 `mx.ai.note` and `mx.ai.transcript` WERE declared here and emitted by
|
|
@@ -2017,6 +2355,39 @@ declare function createRecordingController(options: RecordingControllerOptions):
|
|
|
2017
2355
|
/** The indicator's words. One definition, so no surface invents a softer one. */
|
|
2018
2356
|
declare function recordingLabel(state: RecordingState): string | null;
|
|
2019
2357
|
|
|
2358
|
+
/**
|
|
2359
|
+
* MEET WAVE 1 — the two server calls a management screen makes (0.8).
|
|
2360
|
+
*
|
|
2361
|
+
* Every WRITE (schedule, edit, reschedule, cancel, archive, occurrence change,
|
|
2362
|
+
* invite, answer) goes straight to the database through `MeetRepository` — the
|
|
2363
|
+
* database decides who may. What a browser cannot do is send an email with a
|
|
2364
|
+
* calendar object in it, so after any of those writes a screen calls
|
|
2365
|
+
* `announceMeeting`: the server tells each invitee exactly what they have not
|
|
2366
|
+
* been told (invitation, update or cancellation, each with its `.ics`), and
|
|
2367
|
+
* re-queues reminders. It is idempotent — call it after every save.
|
|
2368
|
+
*/
|
|
2369
|
+
|
|
2370
|
+
interface AnnounceResult {
|
|
2371
|
+
readonly invitations: number;
|
|
2372
|
+
readonly updates: number;
|
|
2373
|
+
readonly cancellations: number;
|
|
2374
|
+
readonly alreadyCurrent: number;
|
|
2375
|
+
readonly remindersQueued: number;
|
|
2376
|
+
readonly remindersCancelled: number;
|
|
2377
|
+
}
|
|
2378
|
+
/** Bring every invitee's inbox and calendar up to date. The host, a co-host or an editor. */
|
|
2379
|
+
declare function announceMeeting(api: MeetApi, meetingId: MeetingId): Promise<AnnounceResult>;
|
|
2380
|
+
/**
|
|
2381
|
+
* Put a one-off meeting on the caller's own connected Google Calendar. GATED by
|
|
2382
|
+
* the server to Google's review accounts while the Calendar scope is in review —
|
|
2383
|
+
* a refusal is a `forbidden` MeetError carrying the server's sentence. Everyone
|
|
2384
|
+
* already gets the meeting into any calendar through the invitation's `.ics`.
|
|
2385
|
+
*/
|
|
2386
|
+
declare function pushMeetingToGoogleCalendar(api: MeetApi, meetingId: MeetingId, target: {
|
|
2387
|
+
connectionId: string;
|
|
2388
|
+
calendarId?: string;
|
|
2389
|
+
}): Promise<Record<string, unknown>>;
|
|
2390
|
+
|
|
2020
2391
|
/**
|
|
2021
2392
|
* THE TOKEN FLOW — the ONLY authorization path into a room (R1).
|
|
2022
2393
|
*
|
|
@@ -2165,7 +2536,26 @@ declare const MEET_ROUTES: {
|
|
|
2165
2536
|
readonly record: "/api/v1/meet/record";
|
|
2166
2537
|
/** A host chooses what guests may read of ONE meeting (MRF-1). */
|
|
2167
2538
|
readonly recordAccess: "/api/v1/meet/record/access";
|
|
2539
|
+
/**
|
|
2540
|
+
* Meet wave 1 (0.8): bring every invitee up to date after a write — sends the
|
|
2541
|
+
* invitation / update / cancellation emails with their `.ics` and re-queues
|
|
2542
|
+
* reminders. Idempotent. `{meeting_id}` is substituted by `meetingPath`.
|
|
2543
|
+
*/
|
|
2544
|
+
readonly meetingAnnounce: "/api/v1/meet/meetings/{meeting_id}/announce";
|
|
2545
|
+
/** Put a one-off meeting on the caller's own Google Calendar (gated by the server). */
|
|
2546
|
+
readonly meetingGoogleCalendar: "/api/v1/meet/meetings/{meeting_id}/google-calendar";
|
|
2547
|
+
/**
|
|
2548
|
+
* Meet wave 2: EVERY in-meeting host power (mute, stop video, mute all, ask to
|
|
2549
|
+
* unmute, spotlight, lower hands, co-host, hand over, rename, remove, report).
|
|
2550
|
+
* Decided by the server from the meeting itself; a guest's pass rides
|
|
2551
|
+
* `x-meet-room-token`.
|
|
2552
|
+
*/
|
|
2553
|
+
readonly moderate: "/api/v1/meet/moderate";
|
|
2554
|
+
/** Meet wave 2: the SAVED chat — `POST` sends to everyone, `GET ?meeting_id=` reads history. */
|
|
2555
|
+
readonly chat: "/api/v1/meet/chat";
|
|
2168
2556
|
};
|
|
2557
|
+
/** A `MEET_ROUTES` template with its `{meeting_id}` filled in, URL-encoded. */
|
|
2558
|
+
declare function meetingPath(template: string, meetingId: string): string;
|
|
2169
2559
|
/** The header the guest's pass rides on. Pinned on both sides. */
|
|
2170
2560
|
declare const ROOM_TOKEN_HEADER = "x-meet-room-token";
|
|
2171
2561
|
declare function parseRoomToken(body: unknown, roomName: RoomName): RoomToken;
|
|
@@ -2223,6 +2613,15 @@ interface RoomEngineOptions {
|
|
|
2223
2613
|
/** Fired when the local participant leaves for any reason, including kicked. */
|
|
2224
2614
|
onLeft?: ((reason: string | null) => void) | undefined;
|
|
2225
2615
|
now?: (() => number) | undefined;
|
|
2616
|
+
/** Remembered noise suppression / background choice (Meet wave 2). */
|
|
2617
|
+
effectsStorage?: EffectsStorage | undefined;
|
|
2618
|
+
/**
|
|
2619
|
+
* The device the person PICKED for each kind (the pre-join pickers, the
|
|
2620
|
+
* settings panel). Applied before any track is created — through 0.7.x the
|
|
2621
|
+
* pickers stored a choice nothing ever read, so every join used the browser
|
|
2622
|
+
* default whatever the screen said.
|
|
2623
|
+
*/
|
|
2624
|
+
resolveDevice?: ((kind: "audioinput" | "videoinput" | "audiooutput") => string | null) | undefined;
|
|
2226
2625
|
}
|
|
2227
2626
|
interface RoomEngine {
|
|
2228
2627
|
join(request: JoinRequest): Promise<void>;
|
|
@@ -2243,31 +2642,33 @@ interface RoomEngine {
|
|
|
2243
2642
|
setScreenShareEnabled(enabled: boolean): Promise<void>;
|
|
2244
2643
|
raiseHand(raised: boolean): Promise<void>;
|
|
2245
2644
|
react(emoji: string): Promise<void>;
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2645
|
+
/**
|
|
2646
|
+
* A PRIVATE message to one person (Meet wave 2). Data plane only, addressed
|
|
2647
|
+
* to that identity, NEVER saved — see `core/chat.ts` for the saved,
|
|
2648
|
+
* everyone-chat, which goes through the server.
|
|
2649
|
+
*/
|
|
2650
|
+
sendPrivateChat(to: ParticipantIdentity, text: string): Promise<void>;
|
|
2651
|
+
/**
|
|
2652
|
+
* Change this participant's own media processing — noise suppression and the
|
|
2653
|
+
* camera background — on the live tracks, and remember it in this browser.
|
|
2654
|
+
* A refused effect is a diagnostic and a revert, never a lost camera.
|
|
2655
|
+
*/
|
|
2656
|
+
setEffects(next: Partial<MediaEffects>): Promise<void>;
|
|
2657
|
+
/** Whether this browser can run a background effect at all (absent, never dead). */
|
|
2658
|
+
supportsVideoEffects(): boolean;
|
|
2659
|
+
/** Choose the speaker (audio output) for this meeting. */
|
|
2660
|
+
switchDevice(kind: "audioinput" | "videoinput" | "audiooutput", deviceId: string): Promise<void>;
|
|
2249
2661
|
pin(identity: ParticipantIdentity | null): void;
|
|
2250
2662
|
setLayout(layout: StageLayout): void;
|
|
2251
2663
|
attach(identity: ParticipantIdentity, kind: "camera" | "microphone" | "screen", element: HTMLMediaElement): () => void;
|
|
2252
2664
|
token(): RoomToken | null;
|
|
2253
2665
|
dispose(): Promise<void>;
|
|
2254
2666
|
}
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
readonly identity: ParticipantIdentity;
|
|
2261
|
-
} | {
|
|
2262
|
-
readonly kind: "remove";
|
|
2263
|
-
readonly identity: ParticipantIdentity;
|
|
2264
|
-
} | {
|
|
2265
|
-
readonly kind: "spotlight";
|
|
2266
|
-
readonly identity: ParticipantIdentity | null;
|
|
2267
|
-
} | {
|
|
2268
|
-
readonly kind: "lock";
|
|
2269
|
-
readonly locked: boolean;
|
|
2270
|
-
};
|
|
2667
|
+
/** Where this browser keeps a participant's media choices. */
|
|
2668
|
+
interface EffectsStorage {
|
|
2669
|
+
load(): MediaEffects;
|
|
2670
|
+
save(effects: MediaEffects): void;
|
|
2671
|
+
}
|
|
2271
2672
|
/**
|
|
2272
2673
|
* 🚨 THE SERVER'S WORD, ON TWO CARRIERS (MRI-A11, feedback `7418ef78`).
|
|
2273
2674
|
*
|
|
@@ -2295,6 +2696,63 @@ declare function createRoomEngine(options: RoomEngineOptions): RoomEngine;
|
|
|
2295
2696
|
declare function canModerate(participant: MeetParticipant | undefined): boolean;
|
|
2296
2697
|
declare function hostUserIds(participants: readonly MeetParticipant[]): readonly UserId[];
|
|
2297
2698
|
|
|
2699
|
+
/**
|
|
2700
|
+
* A PARTICIPANT'S OWN MEDIA CHOICES, REMEMBERED (Meet wave 2).
|
|
2701
|
+
*
|
|
2702
|
+
* Noise suppression and the camera background are personal and per device —
|
|
2703
|
+
* Zoom and Meet both remember them — so they live in this browser, never on a
|
|
2704
|
+
* server. Blocked storage means the defaults (suppression on, no background),
|
|
2705
|
+
* never a failed join.
|
|
2706
|
+
*/
|
|
2707
|
+
|
|
2708
|
+
declare function createWebEffectsStorage(key?: string): EffectsStorage;
|
|
2709
|
+
|
|
2710
|
+
/**
|
|
2711
|
+
* THE IN-ROOM SERVER CALLS (Meet wave 2) — host moderation and the SAVED chat.
|
|
2712
|
+
*
|
|
2713
|
+
* 🚨 **Why these are server calls and not data packets.** Through 0.7.x a host's
|
|
2714
|
+
* "Mute" and "Remove" were published on the room's data plane (`mx.host`) and
|
|
2715
|
+
* nothing anywhere listened: the buttons did nothing. A client cannot be the
|
|
2716
|
+
* authority on host power, and a guest cannot write the database. So both go to
|
|
2717
|
+
* aidream (`POST /v1/meet/moderate`, `POST|GET /v1/meet/chat`), which decides the
|
|
2718
|
+
* actor's role from the meeting itself, performs the act through LiveKit's server
|
|
2719
|
+
* API, writes what is durable, and tells the room on its own `matrx.meet.*` topic.
|
|
2720
|
+
*
|
|
2721
|
+
* A guest proves who they are with the room pass this server signed for them, in
|
|
2722
|
+
* `x-meet-room-token` — a header, never a URL.
|
|
2723
|
+
*/
|
|
2724
|
+
|
|
2725
|
+
/** Every host power the server performs. One vocabulary with `services/meet/moderation.py`. */
|
|
2726
|
+
type ModerationAction = "mute" | "stop_video" | "stop_screen" | "mute_all" | "ask_unmute" | "ask_all_unmute" | "spotlight" | "lower_hand" | "lower_all_hands" | "make_cohost" | "revoke_cohost" | "transfer_host" | "rename" | "remove" | "report";
|
|
2727
|
+
declare const MODERATION_ACTIONS: readonly ModerationAction[];
|
|
2728
|
+
interface ModerationRequest {
|
|
2729
|
+
readonly action: ModerationAction;
|
|
2730
|
+
readonly identity?: ParticipantIdentity | null | undefined;
|
|
2731
|
+
readonly name?: string | undefined;
|
|
2732
|
+
readonly reason?: string | undefined;
|
|
2733
|
+
}
|
|
2734
|
+
interface ModerationResult {
|
|
2735
|
+
readonly action: ModerationAction;
|
|
2736
|
+
readonly affected: readonly string[];
|
|
2737
|
+
/** The server's sentence for the actor. */
|
|
2738
|
+
readonly message: string;
|
|
2739
|
+
}
|
|
2740
|
+
interface InRoomClient {
|
|
2741
|
+
moderate(request: ModerationRequest): Promise<ModerationResult>;
|
|
2742
|
+
/** Send a message to EVERYONE. Saved; shows at once as pending, then as saved. */
|
|
2743
|
+
sendChat(text: string): Promise<void>;
|
|
2744
|
+
/** Read the saved chat once per join, so a late joiner sees what was said. */
|
|
2745
|
+
loadChat(): Promise<void>;
|
|
2746
|
+
}
|
|
2747
|
+
interface InRoomClientOptions {
|
|
2748
|
+
api: MeetApi;
|
|
2749
|
+
store: MeetStore;
|
|
2750
|
+
/** The room pass for THIS meeting, or null (a signed-in member needs none). */
|
|
2751
|
+
resolveRoomToken: () => string | null;
|
|
2752
|
+
now?: (() => number) | undefined;
|
|
2753
|
+
}
|
|
2754
|
+
declare function createInRoomClient(options: InRoomClientOptions): InRoomClient;
|
|
2755
|
+
|
|
2298
2756
|
/**
|
|
2299
2757
|
* THE MEETING RECORD — what a meeting IS once the room is gone (MRI-D2).
|
|
2300
2758
|
*
|
|
@@ -2489,4 +2947,4 @@ declare function setGuestRecordAccess(args: {
|
|
|
2489
2947
|
/** What a guest is told when the level shares nothing. Rendered, never hidden. */
|
|
2490
2948
|
declare const GUEST_RECORD_NOT_SHARED: Readonly<Record<"recording" | "transcript" | "notes" | "attendance", string>>;
|
|
2491
2949
|
|
|
2492
|
-
export { type AccessTokenSource, type AdmissionState, type ApplyRoomEventArgs, type AskArgs, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, type CallCenter, type CallCenterOptions, type CallId, type CallInvite, type CallInviteHandlerOptions, type CallInvitePayload, type CallMode, type CallState, type CallablePerson, type ConnectionQuality, type CreateCallInviteInput, type CreateMeetingInput, DATA_TOPICS, DEFAULT_PAGE_SIZE, type DataTopic, type DeviceKind, type DeviceManager, type DeviceManagerOptions, type DeviceSnapshot, type DeviceStorage, type DriverConnectionState, type DriverParticipant, type DriverTrackKind, type DriverTranscription, END_MEETING_NOT_SERVED, type EndMeetingResult, FILE_SESSION_PATH, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, type GuestRecordAccess, type GuestRecordAccessResolution, type GuestRecordAccessSetting, type
|
|
2950
|
+
export { type AccessTokenSource, type AdmissionState, type AnnounceResult, type ApplyRoomEventArgs, type AskArgs, type AudioProcessing, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, type CallCenter, type CallCenterOptions, type CallId, type CallInvite, type CallInviteHandlerOptions, type CallInvitePayload, type CallMode, type CallState, type CallablePerson, type ConnectionQuality, type CreateCallInviteInput, type CreateMeetingInput, DATA_TOPICS, DEFAULT_EFFECTS, DEFAULT_PAGE_SIZE, type DataTopic, type DeviceKind, type DeviceManager, type DeviceManagerOptions, type DeviceSnapshot, type DeviceStorage, type DriverConnectionState, type DriverParticipant, type DriverTrackKind, type DriverTranscription, END_MEETING_NOT_SERVED, type EffectsStorage, type EndMeetingResult, FILE_SESSION_PATH, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, type GuestRecordAccess, type GuestRecordAccessResolution, type GuestRecordAccessSetting, IDLE_MEDIA, IDLE_TRACK, type InRoomClient, type InRoomClientOptions, type InviteeInput, type InviteeRole, type JoinRequest, type JsonObject, type JsonValue, LISTEN_ONLY_NOTICE, type LiveKitDriverOptions, type LobbyEntry, type LocalMediaState, type LocalTrackState, MEETING_INVITE_KIND, MEETING_INVITE_VERSION, MEET_ANSWER_CONTEXT_EVENT, MEET_ANSWER_EVENTS, MEET_EVENTS, MEET_ROUTES, MEET_SCHEMA, MODERATION_ACTIONS, type MediaDevicesLike, type MediaEffects, type MediaUnavailable, type MeetAi, type MeetAiAnswer, type MeetAiOptions, type MeetAnswerCoverage, type MeetApi, type MeetApiOptions, type MeetApiRequest, type MeetDevice, MeetError, type MeetErrorCode, type MeetEvent, type MeetFileMedia, type MeetGrants, type MeetIdentity, type MeetParticipant, type MeetRepository, type MeetRoomDriver, type MeetSnapshot, type MeetStore, type MeetingAttendee, type MeetingChanges, type MeetingId, type MeetingInviteHandlerOptions, type MeetingInvitePayload, type MeetingInvitee, type MeetingKind, type MeetingNote, type MeetingNoteKind, type MeetingOccurrence, type MeetingRecord, type MeetingRecordBundle, type MeetingRecordRestriction, type MeetingSession, type MeetingSessionOptions, type MeetingSettings, type ModerationAction, type ModerationNotice, type ModerationRequest, type ModerationResult, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, type NameBook, type NoteTakerDispatch, type NoteTakerRefusal, type NoteTakerState, type NoteTakerStatus, ORGANIZATION_HEADER, type OccurrenceOverride, type OccurrenceState, type OrganizationId, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, type ParticipantIdentity, type ParticipantRole, REACTION_TTL_MS, REFUSED_ABSENCE, ROLE_RANK, ROOM_EVENTS, ROOM_EVENT_PREFIX, ROOM_TOKEN_HEADER, RPCS, type RecordingController, type RecordingControllerOptions, type RecordingPolicy, type RecordingRecord, type RecordingState, type RepositoryOptions, type RoomChatMessage, type RoomDriverFactory, type RoomDriverHandlers, type RoomEngine, type RoomEngineOptions, type RoomEventOutcome, type RoomEventTopic, type RoomName, type RoomPhase, type RoomReaction, type RoomToken, type RoomTokenStorage, type RsvpAnswer, type RsvpInvitation, type RsvpState, type ScheduleMeetingInput, type Stage, type StageArgs, type StageLayout, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, type TokenClient, type TokenClientOptions, type TokenRequest, type TranscriptBlock, type TranscriptSegment, type TranscriptSource, type UpcomingOccurrence, type UserId, type VideoEffect, type WrapUpAnnouncement, absenceSentence, announceMeeting, applyRoomEvent, asCallId, asMeetingId, asOrganizationId, asParticipantIdentity, asRoomName, asUserId, callInviteAction, callInviteText, callStateLabel, canModerate, canModerateParticipant, canTransition, captionSegment, changesPatch, computeStage, countLabel, createCallCenter, createCallInviteHandler, createDeviceManager, createInRoomClient, createLiveKitDriver, createMeetAi, createMeetApi, createMeetRepository, createMeetStore, createMeetingInviteHandler, createMeetingSession, createMemoryDeviceStorage, createRecordingController, createRoomEngine, createTokenClient, createWebDeviceStorage, createWebEffectsStorage, createWebRoomTokenStorage, displayNameFor, fileDownloadPath, gridColumns, groupTranscript, guestRecordAccessExplanation, guestRecordAccessLabel, guestRecordAccessSetting, hasEnded, hostUserIds, invalidResponse, isGuest, isGuestIdentity, isHostRole, isListenOnly, isNoteTaker, isRealName, isRoomEventTopic, learnName, learnNames, listenOnlyNotice, loadGuestMeetingRecord, loadMeetingRecord, mapConnectionState, mapQuality, meetingInviteAction, meetingLink, meetingPath, meetingSlug, meetingTopic, meetingWhen, mergeCaption, mergeRecord, normalizeDeviceError, normalizeMeetError, normalizeSpoken, noteTakerIdentity, noteTakerLabel, noteTakerParticipant, noteTakerStatus, orderParticipants, parseRoomToken, participantSummary, playableRecordingFileId, projectInvitee, projectNote, projectOccurrence, projectOverride, projectParticipant, projectRsvpInvitation, projectSegment, projectUpcoming, pushMeetingToGoogleCalendar, readServerRefusal, readableTranscript, recordingLabel, recordingNotice, roleOf, roomTopic, setGuestRecordAccess, settingsPatch, snapshotParticipant, unavailableFrom, userTopic, wasRefused };
|