@ai-matrx/meet 0.9.0 → 0.10.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 CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog — `@ai-matrx/meet`
2
2
 
3
+ ## 0.10.0
4
+ ### Unreleased
5
+ ### S4: admission truth — the wait reads the server
6
+
7
+ - **The waiting room reads `GET /v1/meet/state`** (`MEET_ROUTES.state`) on a timer
8
+ (`waiting_poll_seconds`), on every `mx.state.changed` hint, on `online` and on visibility
9
+ return. `snapshot.waiting` holds the row's word; `useWaiting()` exposes it with `withdraw()`
10
+ and `askAgain()`. New phases rendered: `waiting:host_not_started`, `denied`, `knock_expired`,
11
+ `left` (withdrawn); `data-meet-host-present` while waiting.
12
+ - **Admission RPCs** `meet_admit`, `meet_deny`, `meet_undeny`, `meet_admit_all` return rows
13
+ (`repository.decideAdmission`, `repository.admitAll`); `MeetingSession.undeny`.
14
+ - **A token that cannot subscribe never renders the in-call screen.**
15
+ - **Removed (no shim):** `MEET_EVENTS.knock`, `.admission`, `.lock`, `.recording`;
16
+ `MeetingSession.knock`, `useLobby().knock`, the `onDenied` option, `RPCS.admit =
17
+ meet_admit_participant` (dropped from the database). `MEET_EVENTS.stateChanged` is the one
18
+ room-channel event. `AdmissionState` widens to the server's eight states.
19
+
20
+ Consumer action: none for `<MeetingSkinRoot>` consumers; a custom waiting screen reads
21
+ `useWaiting()`.
22
+
3
23
  ## 0.9.0
4
24
  ### S3: the meeting pass, the role/standing vocabulary, refusal phases
5
25
 
@@ -87,7 +87,7 @@ declare function isHostRole(role: ParticipantRole): boolean;
87
87
  * admits or denies. An authenticated member of the meeting's org is `admitted`
88
88
  * on arrival unless the meeting is locked.
89
89
  */
90
- type AdmissionState = "knocking" | "admitted" | "denied" | "removed";
90
+ type AdmissionState = "waiting_host" | "knocking" | "admitted" | "denied" | "expired" | "withdrawn" | "removed" | "ended";
91
91
  interface LobbyEntry {
92
92
  readonly identity: ParticipantIdentity;
93
93
  readonly displayName: string;
@@ -95,6 +95,8 @@ interface LobbyEntry {
95
95
  readonly userId: UserId | null;
96
96
  readonly state: AdmissionState;
97
97
  readonly knockedAt: string;
98
+ /** When an unanswered knock lapses (`knock_timeout_minutes`); null = never. */
99
+ readonly knockExpiresAt?: string | null | undefined;
98
100
  readonly decidedAt: string | null;
99
101
  readonly decidedBy: UserId | null;
100
102
  }
@@ -373,6 +375,9 @@ interface MeetingAttendee {
373
375
  readonly userId: UserId | null;
374
376
  readonly role: ParticipantRole;
375
377
  readonly admissionState: AdmissionState;
378
+ /** When this person knocked, and when an unanswered knock lapses (null = never). */
379
+ readonly knockedAt?: string | null | undefined;
380
+ readonly knockExpiresAt?: string | null | undefined;
376
381
  readonly isAgent: boolean;
377
382
  /** FIRST arrival in the room — a rejoin never moves it. */
378
383
  readonly joinedAt: string | null;
@@ -87,7 +87,7 @@ declare function isHostRole(role: ParticipantRole): boolean;
87
87
  * admits or denies. An authenticated member of the meeting's org is `admitted`
88
88
  * on arrival unless the meeting is locked.
89
89
  */
90
- type AdmissionState = "knocking" | "admitted" | "denied" | "removed";
90
+ type AdmissionState = "waiting_host" | "knocking" | "admitted" | "denied" | "expired" | "withdrawn" | "removed" | "ended";
91
91
  interface LobbyEntry {
92
92
  readonly identity: ParticipantIdentity;
93
93
  readonly displayName: string;
@@ -95,6 +95,8 @@ interface LobbyEntry {
95
95
  readonly userId: UserId | null;
96
96
  readonly state: AdmissionState;
97
97
  readonly knockedAt: string;
98
+ /** When an unanswered knock lapses (`knock_timeout_minutes`); null = never. */
99
+ readonly knockExpiresAt?: string | null | undefined;
98
100
  readonly decidedAt: string | null;
99
101
  readonly decidedBy: UserId | null;
100
102
  }
@@ -373,6 +375,9 @@ interface MeetingAttendee {
373
375
  readonly userId: UserId | null;
374
376
  readonly role: ParticipantRole;
375
377
  readonly admissionState: AdmissionState;
378
+ /** When this person knocked, and when an unanswered knock lapses (null = never). */
379
+ readonly knockedAt?: string | null | undefined;
380
+ readonly knockExpiresAt?: string | null | undefined;
376
381
  readonly isAgent: boolean;
377
382
  /** FIRST arrival in the room — a rejoin never moves it. */
378
383
  readonly joinedAt: string | null;
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { M as MeetingRecord, P as ParticipantIdentity, R as RoomName, a as MeetParticipant } from './collab-B6scmSST.js';
2
+ import { M as MeetingRecord, P as ParticipantIdentity, R as RoomName, a as MeetParticipant } from './collab-C2R-kQnV.js';
3
3
 
4
4
  /**
5
5
  * THE PRODUCT UI (R6/R7). Not a headless kernel with a note telling the host to
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { M as MeetingRecord, P as ParticipantIdentity, R as RoomName, a as MeetParticipant } from './collab-B6scmSST.cjs';
2
+ import { M as MeetingRecord, P as ParticipantIdentity, R as RoomName, a as MeetParticipant } from './collab-C2R-kQnV.cjs';
3
3
 
4
4
  /**
5
5
  * THE PRODUCT UI (R6/R7). Not a headless kernel with a note telling the host to