@rapidmx/meet-plugin 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -4
- package/apps/meet/[token].tsx +8 -8
- package/apps/meet/_CallView.tsx +3 -0
- package/apps/meet/_MeetChrome.tsx +1 -1
- package/apps/meet/_MeetLobby.tsx +14 -4
- package/apps/meet/_ParticipantTile.tsx +12 -2
- package/apps/meet/_layout.tsx +2 -2
- package/apps/meet/_meetApi.ts +1 -1
- package/apps/meet/index.tsx +2 -2
- package/apps/settings-video-conferencing/_PersonalRoomCard.tsx +4 -4
- package/apps/settings-video-conferencing/_layout.tsx +2 -2
- package/apps/settings-video-conferencing/index.tsx +3 -3
- package/apps/shared/media/filters/VideoFilterProcessor.ts +27 -2
- package/apps/shared/push/GuestSignalingClient.ts +4 -4
- package/apps/shared/relay/RelayTransport.ts +1 -1
- package/apps/shared/webrtc/MeshConnectionManager.ts +1 -1
- package/dist/apps/meet/[token].d.ts +3 -3
- package/dist/apps/meet/[token].js +7 -7
- package/dist/apps/meet/_CallView.js +4 -1
- package/dist/apps/meet/_MeetChrome.d.ts +1 -1
- package/dist/apps/meet/_MeetLobby.d.ts +4 -0
- package/dist/apps/meet/_MeetLobby.js +8 -4
- package/dist/apps/meet/_ParticipantTile.d.ts +11 -2
- package/dist/apps/meet/_ParticipantTile.js +9 -3
- package/dist/apps/meet/_layout.d.ts +1 -1
- package/dist/apps/meet/_layout.js +1 -1
- package/dist/apps/meet/_meetApi.js +1 -1
- package/dist/apps/meet/index.js +2 -2
- package/dist/apps/settings-video-conferencing/_PersonalRoomCard.d.ts +1 -1
- package/dist/apps/settings-video-conferencing/_PersonalRoomCard.js +4 -4
- package/dist/apps/settings-video-conferencing/_layout.d.ts +1 -1
- package/dist/apps/settings-video-conferencing/_layout.js +1 -1
- package/dist/apps/settings-video-conferencing/index.d.ts +1 -1
- package/dist/apps/settings-video-conferencing/index.js +3 -3
- package/dist/apps/shared/media/filters/VideoFilterProcessor.d.ts +3 -0
- package/dist/apps/shared/media/filters/VideoFilterProcessor.js +27 -2
- package/dist/apps/shared/push/GuestSignalingClient.d.ts +1 -1
- package/dist/apps/shared/push/GuestSignalingClient.js +3 -3
- package/dist/apps/shared/relay/RelayTransport.js +1 -1
- package/dist/apps/shared/webrtc/MeshConnectionManager.d.ts +1 -1
- package/dist/apps/shared/webrtc/MeshConnectionManager.js +1 -1
- package/dist/lib/routes/BaseVideoMeetingRoute.js +39 -0
- package/dist/lib/routes/BaseVideoMeetingRoute.js.map +1 -1
- package/dist/types/routes/BaseVideoMeetingRoute.d.ts +4 -0
- package/package.json +14 -8
package/README.md
CHANGED
|
@@ -25,7 +25,11 @@ browser (MediaPipe, loaded only when a filter needs it - from public CDNs by def
|
|
|
25
25
|
their browser's `localStorage` for next time.
|
|
26
26
|
|
|
27
27
|
This plugin's `apps/` also ship the public join/lobby/in-call pages and the personal Settings screen - see
|
|
28
|
-
`package.json`'s `rapidmx.plugin.ui` for exactly what's mounted where.
|
|
28
|
+
`package.json`'s `rapidmx.plugin.ui` for exactly what's mounted where. Its `ui.appRail` entry adds a **Meet** button
|
|
29
|
+
to the web client's app rail, shown only for a user who has a personal room: the entry's `resolveFrom`
|
|
30
|
+
(`/mail/video-meetings/personal-room`, i.e. `GET /api/mail/video-meetings/personal-room`) answers
|
|
31
|
+
`{ href: "/meet/<token>", label }` for the caller's personal room (the oldest still-active public meeting of the first
|
|
32
|
+
mailbox they own that has one) or 404 when there is none, in which case the button stays hidden.
|
|
29
33
|
|
|
30
34
|
## What it adds
|
|
31
35
|
|
|
@@ -42,9 +46,9 @@ infrastructure and no UI yet - see `.claude/NOTES.md`'s dated entry for the full
|
|
|
42
46
|
## Development
|
|
43
47
|
|
|
44
48
|
Same layout and tooling as this project's other plugins (`@rapidmx/booking-plugin`, `@rapidmx/mapi-plugin`,
|
|
45
|
-
`@rapidmx/autodiscover-plugin`): `yarn install`, `yarn test:prod`, `yarn build`. `@rapidmx/restapi
|
|
46
|
-
`@rapidmx/
|
|
47
|
-
|
|
49
|
+
`@rapidmx/autodiscover-plugin`): `yarn install`, `yarn test:prod`, `yarn build`. `@rapidmx/restapi` and
|
|
50
|
+
`@rapidmx/web-client` are portal-linked in `package.json`'s `resolutions` during local development against a
|
|
51
|
+
matching working tree of those repos.
|
|
48
52
|
|
|
49
53
|
## License
|
|
50
54
|
|
package/apps/meet/[token].tsx
CHANGED
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
* ## Session-based name prefill - NOT implemented, and why
|
|
11
11
|
*
|
|
12
12
|
* The spec asks this page to prefill the name field from `Profile.givenName` when the visiting browser already
|
|
13
|
-
* holds a RapidMX session (investigating `@rapidmx/
|
|
14
|
-
* plugin's Phase 2 work). That turned out not to be wireable from here: `profileApi.ts`'s `getMyProfile()` needs
|
|
13
|
+
* holds a RapidMX session (investigating `@rapidmx/web-client`'s `lib/profileApi.ts`/`lib/session.ts` was part of
|
|
14
|
+
* this plugin's Phase 2 work). That turned out not to be wireable from here: `profileApi.ts`'s `getMyProfile()` needs
|
|
15
15
|
* an `authServerUrl` to call auth-server (a *different* origin) with, and `session.ts`'s own doc comment confirms
|
|
16
16
|
* `userUid`/`authServerUrl` are supplied only via server-side `fetchProps` on the `www`/admin console hosts
|
|
17
17
|
* (`wwwRoute`/`AdminConsoleRoute` in `@rapidmx/server`) - never on the `public` host this page is mounted on.
|
|
18
18
|
* `PublicPageRoute` (`@rapidmx/server`, this page's actual host route) returns only branding props; it has no
|
|
19
19
|
* concept of the caller's session at all. There is, today, no public-host plugin page anywhere in this codebase
|
|
20
|
-
* that does this, so there was no convention to extend - only two, cross-repo (`@rapidmx/server`/`
|
|
20
|
+
* that does this, so there was no convention to extend - only two, cross-repo (`@rapidmx/server`/`web-client`)
|
|
21
21
|
* ways to add one (flagged in this plugin's Phase 2 report rather than built here, both out of this frontend-only
|
|
22
22
|
* phase's scope):
|
|
23
23
|
*
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
* invitees have no RapidMX account at all), just never prefilled even for a mailbox owner testing their own link.
|
|
31
31
|
*/
|
|
32
32
|
import React, { useState } from "react";
|
|
33
|
-
import useBranding from "@rapidmx/
|
|
34
|
-
import { Branding } from "@rapidmx/
|
|
35
|
-
import { ApiRequestError } from "@rapidmx/
|
|
36
|
-
import Button from "@rapidmx/
|
|
37
|
-
import Alert from "@rapidmx/
|
|
33
|
+
import useBranding from "@rapidmx/web-client/lib/branding/useBranding.js";
|
|
34
|
+
import { Branding } from "@rapidmx/web-client/lib/branding/brandingApi.js";
|
|
35
|
+
import { ApiRequestError } from "@rapidmx/web-client/lib/util/api.js";
|
|
36
|
+
import Button from "@rapidmx/web-client/lib/components/buttons/Button.js";
|
|
37
|
+
import Alert from "@rapidmx/web-client/lib/components/feedback/Alert.js";
|
|
38
38
|
import { MeetCard, MeetPageShell } from "./_MeetChrome.js";
|
|
39
39
|
import { useLocalMedia } from "../shared/media/useLocalMedia.js";
|
|
40
40
|
import MeetLobby from "./_MeetLobby.js";
|
package/apps/meet/_CallView.tsx
CHANGED
|
@@ -354,6 +354,9 @@ export default function CallView({ channel, token, selfUid, selfName, meetingTit
|
|
|
354
354
|
micMuted={!media.micOn}
|
|
355
355
|
handRaised={handRaised}
|
|
356
356
|
status={selfConnecting ? "Connecting…" : undefined}
|
|
357
|
+
// A custom background is a fixed picture, not a live reflection - mirroring it would show it backwards
|
|
358
|
+
// to no one but the participant themselves (see `_ParticipantTile.tsx`'s doc comment).
|
|
359
|
+
mirrored={media.filters.background !== "image"}
|
|
357
360
|
className={className}
|
|
358
361
|
/>
|
|
359
362
|
);
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* same `booking-plugin`'s `_BookingChrome.tsx` shell-component pattern this plugin's Phase 2 spec calls for. Not a
|
|
7
7
|
* page itself: `_`-prefixed files in `apps/` aren't routed. */
|
|
8
8
|
import React, { PropsWithChildren } from "react";
|
|
9
|
-
import { Branding } from "@rapidmx/
|
|
9
|
+
import { Branding } from "@rapidmx/web-client/lib/branding/brandingApi.js";
|
|
10
10
|
import { BrandingFooter, BrandingHeader } from "@rapidmx/web-client/shared/components/layout/BrandingChrome.js";
|
|
11
11
|
|
|
12
12
|
export function MeetPageShell({ branding, children }: PropsWithChildren<{ branding: Branding | null }>) {
|
package/apps/meet/_MeetLobby.tsx
CHANGED
|
@@ -17,14 +17,18 @@
|
|
|
17
17
|
* there is no camera or microphone, the lobby says so and why, and joining is still allowed - a participant with
|
|
18
18
|
* nothing to send can still see and hear the call, and turn a camera or microphone on later from the call controls.
|
|
19
19
|
*
|
|
20
|
+
* The preview is mirrored, like a real mirror, so it feels natural - except with a custom background image, a fixed
|
|
21
|
+
* picture rather than a live reflection: mirroring it would show it backwards to no one but the participant
|
|
22
|
+
* themselves (see `_ParticipantTile.tsx`'s doc comment, which the in-call tile follows for the same reason).
|
|
23
|
+
*
|
|
20
24
|
* Per this plugin's Phase 2 spec, the name field is always editable - it is only ever *prefilled* when a session is
|
|
21
25
|
* genuinely known (see this component's `initialName` prop and `[token].tsx`'s own doc comment on why that never
|
|
22
26
|
* actually happens on this page today).
|
|
23
27
|
*/
|
|
24
28
|
import React, { useEffect, useRef, useState } from "react";
|
|
25
|
-
import Alert from "@rapidmx/
|
|
26
|
-
import Button from "@rapidmx/
|
|
27
|
-
import FormField from "@rapidmx/
|
|
29
|
+
import Alert from "@rapidmx/web-client/lib/components/feedback/Alert.js";
|
|
30
|
+
import Button from "@rapidmx/web-client/lib/components/buttons/Button.js";
|
|
31
|
+
import FormField from "@rapidmx/web-client/lib/components/forms/FormField.js";
|
|
28
32
|
import type { LocalMedia, TrackStatus } from "../shared/media/useLocalMedia.js";
|
|
29
33
|
import type { PublicVideoMeeting } from "./_meetApi.js";
|
|
30
34
|
import { LevelBars } from "./_CallControls.js";
|
|
@@ -101,7 +105,13 @@ export default function MeetLobby({ meeting, media, initialName, onJoin }: MeetL
|
|
|
101
105
|
<div>
|
|
102
106
|
<div className="relative aspect-video bg-[#202124] rounded-lg overflow-hidden flex items-center justify-center">
|
|
103
107
|
{media.videoStream ? (
|
|
104
|
-
<video
|
|
108
|
+
<video
|
|
109
|
+
ref={videoRef}
|
|
110
|
+
autoPlay
|
|
111
|
+
playsInline
|
|
112
|
+
muted
|
|
113
|
+
className={`w-full h-full object-cover ${media.filters.background !== "image" ? "[transform:scaleX(-1)]" : ""}`}
|
|
114
|
+
/>
|
|
105
115
|
) : (
|
|
106
116
|
<p className="px-4 text-center text-white/70 text-sm">{previewMessage(media)}</p>
|
|
107
117
|
)}
|
|
@@ -8,7 +8,13 @@
|
|
|
8
8
|
*
|
|
9
9
|
* A tile never plays sound: its `<video>` is always muted, and what a participant says is played by the call view's
|
|
10
10
|
* own `<audio>` elements (`_CallView.tsx`'s `RemoteAudio`), so a tile that isn't showing video - or isn't on screen
|
|
11
|
-
* in the current layout - can never silence anyone.
|
|
11
|
+
* in the current layout - can never silence anyone.
|
|
12
|
+
*
|
|
13
|
+
* The local tile is shown mirrored (`scaleX(-1)`), like a real mirror, so a participant's own movements feel
|
|
14
|
+
* natural - this is a local display transform only, never applied to the video actually sent to anyone, so
|
|
15
|
+
* everyone else always sees the participant the right way round. `mirrored={false}` (`_CallView.tsx`, when a custom
|
|
16
|
+
* background image is on) turns that off: the picture the participant chose is a fixed reference, not a live
|
|
17
|
+
* reflection, and mirroring it would show it backwards to no one but themselves. */
|
|
12
18
|
import React, { useEffect, useRef } from "react";
|
|
13
19
|
import type { MediaTransport } from "../shared/webrtc/types.js";
|
|
14
20
|
import { MicOffIcon } from "./_icons.js";
|
|
@@ -57,6 +63,9 @@ export interface ParticipantTileProps {
|
|
|
57
63
|
isFocused?: boolean;
|
|
58
64
|
/** Fits the whole picture inside the tile instead of filling it - a shared screen must not be cropped. */
|
|
59
65
|
contain?: boolean;
|
|
66
|
+
/** Whether the local tile is shown mirrored, like a real mirror - ignored for a remote tile, which is never
|
|
67
|
+
* mirrored. Default `true`; see this module's doc comment. */
|
|
68
|
+
mirrored?: boolean;
|
|
60
69
|
onClick?: () => void;
|
|
61
70
|
className?: string;
|
|
62
71
|
}
|
|
@@ -76,6 +85,7 @@ export default function ParticipantTile({
|
|
|
76
85
|
status,
|
|
77
86
|
isFocused,
|
|
78
87
|
contain,
|
|
88
|
+
mirrored = true,
|
|
79
89
|
onClick,
|
|
80
90
|
className,
|
|
81
91
|
}: ParticipantTileProps) {
|
|
@@ -107,7 +117,7 @@ export default function ParticipantTile({
|
|
|
107
117
|
autoPlay
|
|
108
118
|
playsInline
|
|
109
119
|
muted
|
|
110
|
-
className={`w-full h-full ${contain ? "object-contain bg-black" : "object-cover"} ${isLocal && !contain ? "[transform:scaleX(-1)]" : ""}`}
|
|
120
|
+
className={`w-full h-full ${contain ? "object-contain bg-black" : "object-cover"} ${isLocal && !contain && mirrored ? "[transform:scaleX(-1)]" : ""}`}
|
|
111
121
|
/>
|
|
112
122
|
{status && <StatusPill status={status} className="absolute top-2 left-1/2 -translate-x-1/2 whitespace-nowrap" />}
|
|
113
123
|
</>
|
package/apps/meet/_layout.tsx
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { PropsWithChildren } from "react";
|
|
6
|
-
import { Branding } from "@rapidmx/
|
|
7
|
-
import { CUSTOM_STYLESHEET_LINK_ID } from "@rapidmx/
|
|
6
|
+
import { Branding } from "@rapidmx/web-client/lib/branding/brandingApi.js";
|
|
7
|
+
import { CUSTOM_STYLESHEET_LINK_ID } from "@rapidmx/web-client/lib/branding/useBranding.js";
|
|
8
8
|
|
|
9
9
|
export interface LayoutProps {
|
|
10
10
|
/** Supplied by the server's public page route (`PublicPageRoute`), which every `public` plugin app's route
|
package/apps/meet/_meetApi.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* own `tsconfig.apps.json` (bundler resolution, DOM-facing), independent of the backend's `tsconfig.json` (NodeNext),
|
|
10
10
|
* and every other plugin app in this codebase keeps that boundary the same way.
|
|
11
11
|
*/
|
|
12
|
-
import { apiFetch } from "@rapidmx/
|
|
12
|
+
import { apiFetch } from "@rapidmx/web-client/lib/util/api.js";
|
|
13
13
|
|
|
14
14
|
export type VideoMeetingVisibility = "private" | "public";
|
|
15
15
|
export type VideoMeetingStatus = "scheduled" | "active" | "ended" | "cancelled";
|
package/apps/meet/index.tsx
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* lives at `apps/meet/[token].tsx`, `GET /meet/:token`. Mirrors `booking-plugin`'s identical `apps/book/index.tsx`.
|
|
7
7
|
* Replaces this plugin's Phase 1 one-line placeholder page (see `.claude/NOTES.md`). */
|
|
8
8
|
import React from "react";
|
|
9
|
-
import useBranding from "@rapidmx/
|
|
10
|
-
import Alert from "@rapidmx/
|
|
9
|
+
import useBranding from "@rapidmx/web-client/lib/branding/useBranding.js";
|
|
10
|
+
import Alert from "@rapidmx/web-client/lib/components/feedback/Alert.js";
|
|
11
11
|
import { MeetCard, MeetPageShell } from "./_MeetChrome.js";
|
|
12
12
|
|
|
13
13
|
export default function NoMeetingTokenPage() {
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { FormEvent, useEffect, useState } from "react";
|
|
6
|
-
import { ApiRequestError } from "@rapidmx/
|
|
7
|
-
import { VideoMeetingDetail, createVideoMeeting, updateVideoMeeting } from "@rapidmx/
|
|
8
|
-
import Alert from "@rapidmx/
|
|
9
|
-
import Button from "@rapidmx/
|
|
6
|
+
import { ApiRequestError } from "@rapidmx/web-client/lib/util/api.js";
|
|
7
|
+
import { VideoMeetingDetail, createVideoMeeting, updateVideoMeeting } from "@rapidmx/web-client/lib/videoconf/videoMeetingsApi.js";
|
|
8
|
+
import Alert from "@rapidmx/web-client/lib/components/feedback/Alert.js";
|
|
9
|
+
import Button from "@rapidmx/web-client/lib/components/buttons/Button.js";
|
|
10
10
|
|
|
11
11
|
const INPUT_CLASS =
|
|
12
12
|
"w-full text-sm py-2.5 px-3 border border-border rounded-sm bg-surface text-text focus:outline-none focus:border-primary";
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { PropsWithChildren } from "react";
|
|
6
|
-
import { Branding } from "@rapidmx/
|
|
7
|
-
import { CUSTOM_STYLESHEET_LINK_ID } from "@rapidmx/
|
|
6
|
+
import { Branding } from "@rapidmx/web-client/lib/branding/brandingApi.js";
|
|
7
|
+
import { CUSTOM_STYLESHEET_LINK_ID } from "@rapidmx/web-client/lib/branding/useBranding.js";
|
|
8
8
|
|
|
9
9
|
export interface LayoutProps {
|
|
10
10
|
/**
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { useEffect, useState } from "react";
|
|
6
|
-
import { ApiRequestError } from "@rapidmx/
|
|
7
|
-
import { VideoMeetingDetail, listVideoMeetings, updateVideoMeeting } from "@rapidmx/
|
|
6
|
+
import { ApiRequestError } from "@rapidmx/web-client/lib/util/api.js";
|
|
7
|
+
import { VideoMeetingDetail, listVideoMeetings, updateVideoMeeting } from "@rapidmx/web-client/lib/videoconf/videoMeetingsApi.js";
|
|
8
8
|
import SettingsShell, { SettingsShellProps, useSettingsShell } from "@rapidmx/web-client/shared/components/settings/layout/SettingsShell.js";
|
|
9
|
-
import Alert from "@rapidmx/
|
|
9
|
+
import Alert from "@rapidmx/web-client/lib/components/feedback/Alert.js";
|
|
10
10
|
import PersonalRoomCard from "./_PersonalRoomCard.js";
|
|
11
11
|
|
|
12
12
|
/** However many of a mailbox's meetings this page ever needs to see at once - generous enough that a real user's
|
|
@@ -18,6 +18,12 @@
|
|
|
18
18
|
* - **Timing.** Frames are driven by a timer rather than `requestAnimationFrame`, which stops entirely in a
|
|
19
19
|
* background tab - the call would freeze for everyone else the moment the participant switched to another window.
|
|
20
20
|
* Browsers still slow a background tab's timers, so a filtered picture can drop to a low frame rate there.
|
|
21
|
+
* - **The models run at a lower rate than the picture does** (`ML_HOLD_TICKS`), each frame in between reusing the
|
|
22
|
+
* last mask/landmarks rather than asking again. Segmentation and face tracking are synchronous, main-thread calls,
|
|
23
|
+
* and can each take tens of milliseconds - asking on every rendered frame can starve the main thread badly enough to
|
|
24
|
+
* make the WebSocket relay's audio stutter (`AudioSender`/`AudioPlayer` use `ScriptProcessorNode`, which runs its
|
|
25
|
+
* callback on the very same thread and glitches audibly if it misses its deadline) - the mask and the face barely
|
|
26
|
+
* change from one frame to the next, so asking less often costs nothing anyone can see.
|
|
21
27
|
*
|
|
22
28
|
* Everything browser-facing (canvases, the video element, the models) comes in through `deps`, so the tests drive a
|
|
23
29
|
* processor with fakes.
|
|
@@ -67,8 +73,13 @@ const BLUR_DIVISOR = 12;
|
|
|
67
73
|
/** The picture is pixelated into about this many blocks across. */
|
|
68
74
|
const PIXEL_BLOCKS = 80;
|
|
69
75
|
/** How many frames in a row without a detected face before the accessory is taken off - a face is briefly lost when
|
|
70
|
-
* the head turns, and the accessory shouldn't flicker for that.
|
|
76
|
+
* the head turns, and the accessory shouldn't flicker for that. Counts actual detection attempts, not rendered
|
|
77
|
+
* frames - see `ML_HOLD_TICKS`. */
|
|
71
78
|
const FACE_HOLD_FRAMES = 6;
|
|
79
|
+
/** Segmentation and face tracking actually run on one rendered frame out of this many, reusing the previous
|
|
80
|
+
* mask/landmarks the rest of the time - see this module's doc comment. Counted in rendered frames, not wall-clock
|
|
81
|
+
* time, so it behaves the same regardless of the configured frame rate or how slow a tick actually runs. */
|
|
82
|
+
const ML_HOLD_TICKS = 3;
|
|
72
83
|
|
|
73
84
|
const SEGMENTATION_ERROR =
|
|
74
85
|
"The background effect couldn't be loaded, so your background stays hidden. Turn the effect off to show your camera.";
|
|
@@ -124,6 +135,9 @@ export class VideoFilterProcessor {
|
|
|
124
135
|
private faceState: ModelState = "idle";
|
|
125
136
|
private lastFace: FaceLandmark[] | null = null;
|
|
126
137
|
private framesWithoutFace = 0;
|
|
138
|
+
private lastMask: PersonMask | null = null;
|
|
139
|
+
private segmentTicks = 0;
|
|
140
|
+
private faceTicks = 0;
|
|
127
141
|
private maskImage: ImageData | null = null;
|
|
128
142
|
private renderFailed = false;
|
|
129
143
|
private status: FilterStatus = { loading: false, error: null };
|
|
@@ -324,8 +338,14 @@ export class VideoFilterProcessor {
|
|
|
324
338
|
if (!this.segmenter) {
|
|
325
339
|
return null;
|
|
326
340
|
}
|
|
341
|
+
const due = this.segmentTicks % ML_HOLD_TICKS === 0;
|
|
342
|
+
this.segmentTicks++;
|
|
343
|
+
if (!due) {
|
|
344
|
+
return this.lastMask;
|
|
345
|
+
}
|
|
327
346
|
try {
|
|
328
|
-
|
|
347
|
+
this.lastMask = this.segmenter.segment(this.video, now);
|
|
348
|
+
return this.lastMask;
|
|
329
349
|
} catch {
|
|
330
350
|
this.segmenter = null;
|
|
331
351
|
this.segmenterState = "failed";
|
|
@@ -363,6 +383,11 @@ export class VideoFilterProcessor {
|
|
|
363
383
|
if (!this.faceTracker) {
|
|
364
384
|
return null;
|
|
365
385
|
}
|
|
386
|
+
const due = this.faceTicks % ML_HOLD_TICKS === 0;
|
|
387
|
+
this.faceTicks++;
|
|
388
|
+
if (!due) {
|
|
389
|
+
return this.lastFace;
|
|
390
|
+
}
|
|
366
391
|
let found: FaceLandmark[] | null = null;
|
|
367
392
|
try {
|
|
368
393
|
found = this.faceTracker.detect(this.video, now);
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
/**
|
|
6
6
|
* A standalone `SignalingChannel` (`../webrtc/types.js`) over `@rapidrest/service-core`'s `/push` WebSocket -
|
|
7
|
-
* built from scratch rather than reusing `@rapidmx/
|
|
7
|
+
* built from scratch rather than reusing `@rapidmx/web-client`'s `PushClient`/`getPushClient()` (`lib/mail/pushClient.js`).
|
|
8
8
|
*
|
|
9
9
|
* ## Why not `PushClient`
|
|
10
10
|
*
|
|
@@ -63,8 +63,8 @@
|
|
|
63
63
|
* absent, as described above - the browser's real cookie was always going to win that write anyway, so the
|
|
64
64
|
* correct behavior is to not fight it and let it authenticate normally instead.
|
|
65
65
|
*/
|
|
66
|
-
import { apiOrigin } from "@rapidmx/
|
|
67
|
-
import { pushUrl } from "@rapidmx/
|
|
66
|
+
import { apiOrigin } from "@rapidmx/web-client/lib/util/api.js";
|
|
67
|
+
import { pushUrl } from "@rapidmx/web-client/lib/mail/pushClient.js";
|
|
68
68
|
import type { SignalMessage, SignalingChannel } from "../webrtc/types.js";
|
|
69
69
|
|
|
70
70
|
/** The subset of the browser's `WebSocket` this client uses - matches `PushClient`'s own identical seam, so a
|
|
@@ -99,7 +99,7 @@ export interface GuestSignalingClientOptions {
|
|
|
99
99
|
* `Authorization` header at all, relying entirely on the browser's own already-existing `jwt` session cookie
|
|
100
100
|
* for both the WebSocket upgrade and each `POST /push/:id` publish - see this module's doc comment. */
|
|
101
101
|
token?: string;
|
|
102
|
-
/** Defaults to `@rapidmx/
|
|
102
|
+
/** Defaults to `@rapidmx/web-client`'s `pushUrl()` (`lib/mail/pushClient.js`) - the exact URL `PushClient` itself connects to. */
|
|
103
103
|
url?: () => string | undefined;
|
|
104
104
|
createSocket?: PushSocketFactory;
|
|
105
105
|
fetchImpl?: typeof fetch;
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* There is one transport (one socket) per meeting, however many peers use it, and the codecs are fixed - there is no
|
|
17
17
|
* negotiation, because both ends are this same code.
|
|
18
18
|
*/
|
|
19
|
-
import { apiOrigin } from "@rapidmx/
|
|
19
|
+
import { apiOrigin } from "@rapidmx/web-client/lib/util/api.js";
|
|
20
20
|
import { PLAYBACK_SAMPLE_RATE } from "./AudioPlayer.js";
|
|
21
21
|
import { resumeAudioContext } from "./audioResume.js";
|
|
22
22
|
import { RelayClient } from "./RelayClient.js";
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
* ## Join announcement and roster discovery
|
|
33
33
|
*
|
|
34
34
|
* The channel has no history (a push event published while a socket was down is never replayed - see
|
|
35
|
-
* `@rapidmx/
|
|
35
|
+
* `@rapidmx/web-client`'s `lib/mail/pushClient.ts` doc comment for the identical guarantee on the mail push channel this
|
|
36
36
|
* one shares its transport with), so a newcomer's `hello` would only reach participants who happened to already be
|
|
37
37
|
* subscribed *and* who joined before them - never the other way around. Every participant who learns of a
|
|
38
38
|
* genuinely new peer (from any message, not just `hello`) therefore echoes its own `hello` right back, once, the
|
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
* ## Session-based name prefill - NOT implemented, and why
|
|
7
7
|
*
|
|
8
8
|
* The spec asks this page to prefill the name field from `Profile.givenName` when the visiting browser already
|
|
9
|
-
* holds a RapidMX session (investigating `@rapidmx/
|
|
10
|
-
* plugin's Phase 2 work). That turned out not to be wireable from here: `profileApi.ts`'s `getMyProfile()` needs
|
|
9
|
+
* holds a RapidMX session (investigating `@rapidmx/web-client`'s `lib/profileApi.ts`/`lib/session.ts` was part of
|
|
10
|
+
* this plugin's Phase 2 work). That turned out not to be wireable from here: `profileApi.ts`'s `getMyProfile()` needs
|
|
11
11
|
* an `authServerUrl` to call auth-server (a *different* origin) with, and `session.ts`'s own doc comment confirms
|
|
12
12
|
* `userUid`/`authServerUrl` are supplied only via server-side `fetchProps` on the `www`/admin console hosts
|
|
13
13
|
* (`wwwRoute`/`AdminConsoleRoute` in `@rapidmx/server`) - never on the `public` host this page is mounted on.
|
|
14
14
|
* `PublicPageRoute` (`@rapidmx/server`, this page's actual host route) returns only branding props; it has no
|
|
15
15
|
* concept of the caller's session at all. There is, today, no public-host plugin page anywhere in this codebase
|
|
16
|
-
* that does this, so there was no convention to extend - only two, cross-repo (`@rapidmx/server`/`
|
|
16
|
+
* that does this, so there was no convention to extend - only two, cross-repo (`@rapidmx/server`/`web-client`)
|
|
17
17
|
* ways to add one (flagged in this plugin's Phase 2 report rather than built here, both out of this frontend-only
|
|
18
18
|
* phase's scope):
|
|
19
19
|
*
|
|
@@ -11,14 +11,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
11
11
|
* ## Session-based name prefill - NOT implemented, and why
|
|
12
12
|
*
|
|
13
13
|
* The spec asks this page to prefill the name field from `Profile.givenName` when the visiting browser already
|
|
14
|
-
* holds a RapidMX session (investigating `@rapidmx/
|
|
15
|
-
* plugin's Phase 2 work). That turned out not to be wireable from here: `profileApi.ts`'s `getMyProfile()` needs
|
|
14
|
+
* holds a RapidMX session (investigating `@rapidmx/web-client`'s `lib/profileApi.ts`/`lib/session.ts` was part of
|
|
15
|
+
* this plugin's Phase 2 work). That turned out not to be wireable from here: `profileApi.ts`'s `getMyProfile()` needs
|
|
16
16
|
* an `authServerUrl` to call auth-server (a *different* origin) with, and `session.ts`'s own doc comment confirms
|
|
17
17
|
* `userUid`/`authServerUrl` are supplied only via server-side `fetchProps` on the `www`/admin console hosts
|
|
18
18
|
* (`wwwRoute`/`AdminConsoleRoute` in `@rapidmx/server`) - never on the `public` host this page is mounted on.
|
|
19
19
|
* `PublicPageRoute` (`@rapidmx/server`, this page's actual host route) returns only branding props; it has no
|
|
20
20
|
* concept of the caller's session at all. There is, today, no public-host plugin page anywhere in this codebase
|
|
21
|
-
* that does this, so there was no convention to extend - only two, cross-repo (`@rapidmx/server`/`
|
|
21
|
+
* that does this, so there was no convention to extend - only two, cross-repo (`@rapidmx/server`/`web-client`)
|
|
22
22
|
* ways to add one (flagged in this plugin's Phase 2 report rather than built here, both out of this frontend-only
|
|
23
23
|
* phase's scope):
|
|
24
24
|
*
|
|
@@ -31,10 +31,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
31
31
|
* invitees have no RapidMX account at all), just never prefilled even for a mailbox owner testing their own link.
|
|
32
32
|
*/
|
|
33
33
|
import React, { useState } from "react";
|
|
34
|
-
import useBranding from "@rapidmx/
|
|
35
|
-
import { ApiRequestError } from "@rapidmx/
|
|
36
|
-
import Button from "@rapidmx/
|
|
37
|
-
import Alert from "@rapidmx/
|
|
34
|
+
import useBranding from "@rapidmx/web-client/lib/branding/useBranding.js";
|
|
35
|
+
import { ApiRequestError } from "@rapidmx/web-client/lib/util/api.js";
|
|
36
|
+
import Button from "@rapidmx/web-client/lib/components/buttons/Button.js";
|
|
37
|
+
import Alert from "@rapidmx/web-client/lib/components/feedback/Alert.js";
|
|
38
38
|
import { MeetCard, MeetPageShell } from "./_MeetChrome.js";
|
|
39
39
|
import { useLocalMedia } from "../shared/media/useLocalMedia.js";
|
|
40
40
|
import MeetLobby from "./_MeetLobby.js";
|
|
@@ -275,7 +275,10 @@ export default function CallView({ channel, token, selfUid, selfName, meetingTit
|
|
|
275
275
|
// so someone already in the call is not told they are "connecting" each time a newcomer arrives.
|
|
276
276
|
const selfConnecting = !connectError && (!signalingReady || (!alone && participants.every((p) => p.transport === "connecting")));
|
|
277
277
|
const remoteTile = (p, className) => (_jsx(ParticipantTile, { name: p.name, stream: remoteStreams[p.uid] ?? null, cameraOff: !p.videoOn, micMuted: !p.audioOn, handRaised: p.handRaised, transport: p.transport, status: p.transport === "connecting" ? "Awaiting connection…" : undefined, isFocused: mainUid === p.uid, contain: presenterUid === p.uid, className: className, onClick: () => togglePin(p.uid) }, p.uid));
|
|
278
|
-
const selfTile = (className) => (_jsx(ParticipantTile, { name: selfName, stream: media.videoStream, isLocal: true, cameraOff: !media.cameraOn, micMuted: !media.micOn, handRaised: handRaised, status: selfConnecting ? "Connecting…" : undefined,
|
|
278
|
+
const selfTile = (className) => (_jsx(ParticipantTile, { name: selfName, stream: media.videoStream, isLocal: true, cameraOff: !media.cameraOn, micMuted: !media.micOn, handRaised: handRaised, status: selfConnecting ? "Connecting…" : undefined,
|
|
279
|
+
// A custom background is a fixed picture, not a live reflection - mirroring it would show it backwards
|
|
280
|
+
// to no one but the participant themselves (see `_ParticipantTile.tsx`'s doc comment).
|
|
281
|
+
mirrored: media.filters.background !== "image", className: className }));
|
|
279
282
|
const mainParticipant = participants.find((p) => p.uid === mainUid);
|
|
280
283
|
const thumbnails = participants.filter((p) => p.uid !== mainUid);
|
|
281
284
|
let stage;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* same `booking-plugin`'s `_BookingChrome.tsx` shell-component pattern this plugin's Phase 2 spec calls for. Not a
|
|
3
3
|
* page itself: `_`-prefixed files in `apps/` aren't routed. */
|
|
4
4
|
import React, { PropsWithChildren } from "react";
|
|
5
|
-
import { Branding } from "@rapidmx/
|
|
5
|
+
import { Branding } from "@rapidmx/web-client/lib/branding/brandingApi.js";
|
|
6
6
|
export declare function MeetPageShell({ branding, children }: PropsWithChildren<{
|
|
7
7
|
branding: Branding | null;
|
|
8
8
|
}>): React.JSX.Element;
|
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
* there is no camera or microphone, the lobby says so and why, and joining is still allowed - a participant with
|
|
14
14
|
* nothing to send can still see and hear the call, and turn a camera or microphone on later from the call controls.
|
|
15
15
|
*
|
|
16
|
+
* The preview is mirrored, like a real mirror, so it feels natural - except with a custom background image, a fixed
|
|
17
|
+
* picture rather than a live reflection: mirroring it would show it backwards to no one but the participant
|
|
18
|
+
* themselves (see `_ParticipantTile.tsx`'s doc comment, which the in-call tile follows for the same reason).
|
|
19
|
+
*
|
|
16
20
|
* Per this plugin's Phase 2 spec, the name field is always editable - it is only ever *prefilled* when a session is
|
|
17
21
|
* genuinely known (see this component's `initialName` prop and `[token].tsx`'s own doc comment on why that never
|
|
18
22
|
* actually happens on this page today).
|
|
@@ -18,14 +18,18 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
18
18
|
* there is no camera or microphone, the lobby says so and why, and joining is still allowed - a participant with
|
|
19
19
|
* nothing to send can still see and hear the call, and turn a camera or microphone on later from the call controls.
|
|
20
20
|
*
|
|
21
|
+
* The preview is mirrored, like a real mirror, so it feels natural - except with a custom background image, a fixed
|
|
22
|
+
* picture rather than a live reflection: mirroring it would show it backwards to no one but the participant
|
|
23
|
+
* themselves (see `_ParticipantTile.tsx`'s doc comment, which the in-call tile follows for the same reason).
|
|
24
|
+
*
|
|
21
25
|
* Per this plugin's Phase 2 spec, the name field is always editable - it is only ever *prefilled* when a session is
|
|
22
26
|
* genuinely known (see this component's `initialName` prop and `[token].tsx`'s own doc comment on why that never
|
|
23
27
|
* actually happens on this page today).
|
|
24
28
|
*/
|
|
25
29
|
import { useEffect, useRef, useState } from "react";
|
|
26
|
-
import Alert from "@rapidmx/
|
|
27
|
-
import Button from "@rapidmx/
|
|
28
|
-
import FormField from "@rapidmx/
|
|
30
|
+
import Alert from "@rapidmx/web-client/lib/components/feedback/Alert.js";
|
|
31
|
+
import Button from "@rapidmx/web-client/lib/components/buttons/Button.js";
|
|
32
|
+
import FormField from "@rapidmx/web-client/lib/components/forms/FormField.js";
|
|
29
33
|
import { LevelBars } from "./_CallControls.js";
|
|
30
34
|
import EffectsPanel from "./_EffectsPanel.js";
|
|
31
35
|
import { filtersActive } from "../shared/media/filters/filterTypes.js";
|
|
@@ -73,5 +77,5 @@ export default function MeetLobby({ meeting, media, initialName, onJoin }) {
|
|
|
73
77
|
const cameraOk = media.status.video === "live" || media.status.video === "off";
|
|
74
78
|
const needsAccess = media.supported && !media.requesting && (media.status.audio !== "live" || !cameraOk);
|
|
75
79
|
const nothingToSend = !media.audioTrack && !media.videoTrack && !media.requesting;
|
|
76
|
-
return (_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: meeting.title }), meeting.hostDisplayName && _jsxs("p", { className: "text-sm text-text-muted mt-1", children: ["Hosted by ", meeting.hostDisplayName] }), _jsxs("div", { className: "mt-6 grid sm:grid-cols-2 gap-6", children: [_jsxs("div", { children: [_jsxs("div", { className: "relative aspect-video bg-[#202124] rounded-lg overflow-hidden flex items-center justify-center", children: [media.videoStream ? (_jsx("video", { ref: videoRef, autoPlay: true, playsInline: true, muted: true, className:
|
|
80
|
+
return (_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: meeting.title }), meeting.hostDisplayName && _jsxs("p", { className: "text-sm text-text-muted mt-1", children: ["Hosted by ", meeting.hostDisplayName] }), _jsxs("div", { className: "mt-6 grid sm:grid-cols-2 gap-6", children: [_jsxs("div", { children: [_jsxs("div", { className: "relative aspect-video bg-[#202124] rounded-lg overflow-hidden flex items-center justify-center", children: [media.videoStream ? (_jsx("video", { ref: videoRef, autoPlay: true, playsInline: true, muted: true, className: `w-full h-full object-cover ${media.filters.background !== "image" ? "[transform:scaleX(-1)]" : ""}` })) : (_jsx("p", { className: "px-4 text-center text-white/70 text-sm", children: previewMessage(media) })), _jsxs("div", { className: "absolute bottom-3 inset-x-0 flex justify-center gap-3", children: [_jsxs("button", { type: "button", className: `${ROUND_BUTTON} ${media.micOn ? "bg-[#3c4043] text-white hover:bg-[#4b4f53]" : "bg-[#f9dedc] text-[#8c1d18] hover:bg-[#f2c4c0]"}`, "aria-label": media.micOn ? "Mute microphone" : "Unmute microphone", "aria-pressed": !media.micOn, onClick: () => void media.toggleMic(), children: [media.micOn && _jsx(LevelBars, { level: media.audioLevel }), media.micOn ? _jsx(MicIcon, {}) : _jsx(MicOffIcon, {})] }), _jsx("button", { type: "button", className: `${ROUND_BUTTON} ${media.cameraOn ? "bg-[#3c4043] text-white hover:bg-[#4b4f53]" : "bg-[#f9dedc] text-[#8c1d18] hover:bg-[#f2c4c0]"}`, "aria-label": media.cameraOn ? "Turn off camera" : "Turn on camera", "aria-pressed": !media.cameraOn, onClick: () => void media.toggleCamera(), children: media.cameraOn ? _jsx(VideoIcon, {}) : _jsx(VideoOffIcon, {}) })] })] }), !media.supported && (_jsx(Alert, { children: "This browser (or this page's connection) doesn't support camera/microphone access. Try a current browser over HTTPS - a link opened inside another app often needs to be opened in the browser itself." })), media.error && _jsx(Alert, { children: media.error.message }), needsAccess && (_jsx(Button, { type: "button", variant: "secondary", className: "!w-auto mt-3", onClick: () => void requestAccess(), children: media.error ? "Try again" : "Allow camera and microphone" })), nothingToSend && _jsx("p", { className: "text-sm text-text-muted mt-3", children: "You'll join without a camera or microphone." }), media.devices.cameras.length > 1 && (_jsxs("label", { className: "block text-sm mt-3", children: ["Camera", _jsxs("select", { className: `${INPUT_CLASS} mt-1`, value: media.selectedDeviceIds.video ?? "", onChange: (e) => void media.selectDevice("video", e.target.value), children: [!media.selectedDeviceIds.video && _jsx("option", { value: "", children: "Choose a camera" }), media.devices.cameras.map((d, i) => (_jsx("option", { value: d.deviceId, children: d.label || `Camera ${i + 1}` }, d.deviceId)))] })] })), _jsxs("div", { className: "mt-3", children: [_jsx("button", { type: "button", className: "text-sm text-primary underline focus:outline-none focus-visible:ring-2 focus-visible:ring-primary", "aria-expanded": showEffects, onClick: () => setShowEffects((shown) => !shown), children: filtersActive(media.filters) ? "Effects (on)" : "Effects" }), showEffects && (_jsx("div", { className: "mt-2", children: _jsx(EffectsPanel, { media: media, tone: "light" }) }))] }), media.devices.microphones.length > 1 && (_jsxs("label", { className: "block text-sm mt-3", children: ["Microphone", _jsxs("select", { className: `${INPUT_CLASS} mt-1`, value: media.selectedDeviceIds.audio ?? "", onChange: (e) => void media.selectDevice("audio", e.target.value), children: [!media.selectedDeviceIds.audio && _jsx("option", { value: "", children: "Choose a microphone" }), media.devices.microphones.map((d, i) => (_jsx("option", { value: d.deviceId, children: d.label || `Microphone ${i + 1}` }, d.deviceId)))] })] }))] }), _jsxs("div", { className: "flex flex-col justify-center gap-3", children: [_jsx(FormField, { label: "Your name", htmlFor: "meet-name", children: _jsx("input", { id: "meet-name", type: "text", className: INPUT_CLASS, value: name, onChange: (e) => setName(e.target.value), placeholder: "Enter your name" }) }), _jsx(Button, { type: "button", className: "!w-auto", disabled: !name.trim(), onClick: () => onJoin(name.trim()), children: "Join meeting" })] })] })] }));
|
|
77
81
|
}
|
|
@@ -4,7 +4,13 @@
|
|
|
4
4
|
*
|
|
5
5
|
* A tile never plays sound: its `<video>` is always muted, and what a participant says is played by the call view's
|
|
6
6
|
* own `<audio>` elements (`_CallView.tsx`'s `RemoteAudio`), so a tile that isn't showing video - or isn't on screen
|
|
7
|
-
* in the current layout - can never silence anyone.
|
|
7
|
+
* in the current layout - can never silence anyone.
|
|
8
|
+
*
|
|
9
|
+
* The local tile is shown mirrored (`scaleX(-1)`), like a real mirror, so a participant's own movements feel
|
|
10
|
+
* natural - this is a local display transform only, never applied to the video actually sent to anyone, so
|
|
11
|
+
* everyone else always sees the participant the right way round. `mirrored={false}` (`_CallView.tsx`, when a custom
|
|
12
|
+
* background image is on) turns that off: the picture the participant chose is a fixed reference, not a live
|
|
13
|
+
* reflection, and mirroring it would show it backwards to no one but themselves. */
|
|
8
14
|
import React from "react";
|
|
9
15
|
import type { MediaTransport } from "../shared/webrtc/types.js";
|
|
10
16
|
export interface ParticipantTileProps {
|
|
@@ -24,7 +30,10 @@ export interface ParticipantTileProps {
|
|
|
24
30
|
isFocused?: boolean;
|
|
25
31
|
/** Fits the whole picture inside the tile instead of filling it - a shared screen must not be cropped. */
|
|
26
32
|
contain?: boolean;
|
|
33
|
+
/** Whether the local tile is shown mirrored, like a real mirror - ignored for a remote tile, which is never
|
|
34
|
+
* mirrored. Default `true`; see this module's doc comment. */
|
|
35
|
+
mirrored?: boolean;
|
|
27
36
|
onClick?: () => void;
|
|
28
37
|
className?: string;
|
|
29
38
|
}
|
|
30
|
-
export default function ParticipantTile({ name, stream, isLocal, cameraOff, micMuted, handRaised, transport, status, isFocused, contain, onClick, className, }: ParticipantTileProps): React.JSX.Element;
|
|
39
|
+
export default function ParticipantTile({ name, stream, isLocal, cameraOff, micMuted, handRaised, transport, status, isFocused, contain, mirrored, onClick, className, }: ParticipantTileProps): React.JSX.Element;
|
|
@@ -9,7 +9,13 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
9
9
|
*
|
|
10
10
|
* A tile never plays sound: its `<video>` is always muted, and what a participant says is played by the call view's
|
|
11
11
|
* own `<audio>` elements (`_CallView.tsx`'s `RemoteAudio`), so a tile that isn't showing video - or isn't on screen
|
|
12
|
-
* in the current layout - can never silence anyone.
|
|
12
|
+
* in the current layout - can never silence anyone.
|
|
13
|
+
*
|
|
14
|
+
* The local tile is shown mirrored (`scaleX(-1)`), like a real mirror, so a participant's own movements feel
|
|
15
|
+
* natural - this is a local display transform only, never applied to the video actually sent to anyone, so
|
|
16
|
+
* everyone else always sees the participant the right way round. `mirrored={false}` (`_CallView.tsx`, when a custom
|
|
17
|
+
* background image is on) turns that off: the picture the participant chose is a fixed reference, not a live
|
|
18
|
+
* reflection, and mirroring it would show it backwards to no one but themselves. */
|
|
13
19
|
import { useEffect, useRef } from "react";
|
|
14
20
|
import { MicOffIcon } from "./_icons.js";
|
|
15
21
|
/** What a tile says about how its participant's media is arriving, for the paths that are not the ordinary direct one
|
|
@@ -31,7 +37,7 @@ function StatusPill({ status, className }) {
|
|
|
31
37
|
function initialOf(name) {
|
|
32
38
|
return (Array.from(name.trim())[0] ?? "?").toUpperCase();
|
|
33
39
|
}
|
|
34
|
-
export default function ParticipantTile({ name, stream, isLocal, cameraOff, micMuted, handRaised, transport, status, isFocused, contain, onClick, className, }) {
|
|
40
|
+
export default function ParticipantTile({ name, stream, isLocal, cameraOff, micMuted, handRaised, transport, status, isFocused, contain, mirrored = true, onClick, className, }) {
|
|
35
41
|
const badge = transport ? TRANSPORT_BADGES[transport] : undefined;
|
|
36
42
|
const videoRef = useRef(null);
|
|
37
43
|
const showVideo = !!stream && !cameraOff;
|
|
@@ -41,5 +47,5 @@ export default function ParticipantTile({ name, stream, isLocal, cameraOff, micM
|
|
|
41
47
|
videoRef.current.srcObject = stream ?? null;
|
|
42
48
|
}
|
|
43
49
|
}, [stream, showVideo]);
|
|
44
|
-
return (_jsxs("div", { className: `relative overflow-hidden rounded-xl bg-[#3c4043] flex items-center justify-center min-h-[90px] ${isFocused ? "ring-2 ring-[#8ab4f8]" : ""} ${className ?? ""}`, onClick: onClick, role: onClick ? "button" : undefined, tabIndex: onClick ? 0 : undefined, "aria-label": onClick ? `${name}${isLocal ? " (you)" : ""}` : undefined, children: [showVideo ? (_jsxs(_Fragment, { children: [_jsx("video", { ref: videoRef, autoPlay: true, playsInline: true, muted: true, className: `w-full h-full ${contain ? "object-contain bg-black" : "object-cover"} ${isLocal && !contain ? "[transform:scaleX(-1)]" : ""}` }), status && _jsx(StatusPill, { status: status, className: "absolute top-2 left-1/2 -translate-x-1/2 whitespace-nowrap" })] })) : (_jsxs("div", { className: "flex flex-col items-center gap-2 max-w-full px-1", children: [_jsx("div", { className: "w-16 h-16 rounded-full bg-primary text-white flex items-center justify-center text-2xl font-bold", "aria-hidden": "true", children: initialOf(name) }), status && _jsx(StatusPill, { status: status })] })), handRaised && (_jsx("span", { className: "absolute top-2 left-2 flex items-center justify-center w-8 h-8 rounded-full bg-[#a8c7fa] text-base", role: "img", "aria-label": "Hand raised", children: "\u270B" })), micMuted && (_jsx("span", { className: "absolute top-2 right-2 flex items-center justify-center w-7 h-7 rounded-full bg-black/60 text-white", role: "img", "aria-label": "Muted", children: _jsx("span", { className: "w-4 h-4 [&>svg]:w-4 [&>svg]:h-4", children: _jsx(MicOffIcon, {}) }) })), badge && (_jsx("span", { className: `absolute bottom-2 right-2 px-2 py-0.5 rounded text-xs ${transport === "failed" ? "bg-[#601410] text-[#f9dedc]" : "bg-black/60 text-white"}`, title: badge.title, "data-testid": "transport-badge", children: badge.label })), _jsxs("div", { className: "absolute bottom-2 left-2 max-w-[calc(100%-1rem)] truncate px-2 py-0.5 rounded bg-black/60 text-white text-sm", children: [name, isLocal ? " (you)" : ""] })] }));
|
|
50
|
+
return (_jsxs("div", { className: `relative overflow-hidden rounded-xl bg-[#3c4043] flex items-center justify-center min-h-[90px] ${isFocused ? "ring-2 ring-[#8ab4f8]" : ""} ${className ?? ""}`, onClick: onClick, role: onClick ? "button" : undefined, tabIndex: onClick ? 0 : undefined, "aria-label": onClick ? `${name}${isLocal ? " (you)" : ""}` : undefined, children: [showVideo ? (_jsxs(_Fragment, { children: [_jsx("video", { ref: videoRef, autoPlay: true, playsInline: true, muted: true, className: `w-full h-full ${contain ? "object-contain bg-black" : "object-cover"} ${isLocal && !contain && mirrored ? "[transform:scaleX(-1)]" : ""}` }), status && _jsx(StatusPill, { status: status, className: "absolute top-2 left-1/2 -translate-x-1/2 whitespace-nowrap" })] })) : (_jsxs("div", { className: "flex flex-col items-center gap-2 max-w-full px-1", children: [_jsx("div", { className: "w-16 h-16 rounded-full bg-primary text-white flex items-center justify-center text-2xl font-bold", "aria-hidden": "true", children: initialOf(name) }), status && _jsx(StatusPill, { status: status })] })), handRaised && (_jsx("span", { className: "absolute top-2 left-2 flex items-center justify-center w-8 h-8 rounded-full bg-[#a8c7fa] text-base", role: "img", "aria-label": "Hand raised", children: "\u270B" })), micMuted && (_jsx("span", { className: "absolute top-2 right-2 flex items-center justify-center w-7 h-7 rounded-full bg-black/60 text-white", role: "img", "aria-label": "Muted", children: _jsx("span", { className: "w-4 h-4 [&>svg]:w-4 [&>svg]:h-4", children: _jsx(MicOffIcon, {}) }) })), badge && (_jsx("span", { className: `absolute bottom-2 right-2 px-2 py-0.5 rounded text-xs ${transport === "failed" ? "bg-[#601410] text-[#f9dedc]" : "bg-black/60 text-white"}`, title: badge.title, "data-testid": "transport-badge", children: badge.label })), _jsxs("div", { className: "absolute bottom-2 left-2 max-w-[calc(100%-1rem)] truncate px-2 py-0.5 rounded bg-black/60 text-white text-sm", children: [name, isLocal ? " (you)" : ""] })] }));
|
|
45
51
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { PropsWithChildren } from "react";
|
|
2
|
-
import { Branding } from "@rapidmx/
|
|
2
|
+
import { Branding } from "@rapidmx/web-client/lib/branding/brandingApi.js";
|
|
3
3
|
export interface LayoutProps {
|
|
4
4
|
/** Supplied by the server's public page route (`PublicPageRoute`), which every `public` plugin app's route
|
|
5
5
|
* extends - see `booking-plugin`'s `apps/book/_layout.tsx`'s identical `LayoutProps` doc comment for the
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { CUSTOM_STYLESHEET_LINK_ID } from "@rapidmx/
|
|
2
|
+
import { CUSTOM_STYLESHEET_LINK_ID } from "@rapidmx/web-client/lib/branding/useBranding.js";
|
|
3
3
|
export default function Layout({ children, branding }) {
|
|
4
4
|
const title = branding?.title || branding?.companyName ? `${branding?.title || branding?.companyName}: Meet` : "RapidMX: Meet";
|
|
5
5
|
const iconHref = branding?.iconUrl || branding?.logoUrl || "/images/logo.svg";
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* own `tsconfig.apps.json` (bundler resolution, DOM-facing), independent of the backend's `tsconfig.json` (NodeNext),
|
|
10
10
|
* and every other plugin app in this codebase keeps that boundary the same way.
|
|
11
11
|
*/
|
|
12
|
-
import { apiFetch } from "@rapidmx/
|
|
12
|
+
import { apiFetch } from "@rapidmx/web-client/lib/util/api.js";
|
|
13
13
|
/** Resolves a join token (an invitee's own link) or a public meeting's slug to its meeting info, ICE servers, and
|
|
14
14
|
* either a short-lived guest signaling token (the common anonymous case) or confirmation that the caller's own
|
|
15
15
|
* existing session already grants them signaling access (`authenticated: true` - see
|
package/dist/apps/meet/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import useBranding from "@rapidmx/
|
|
3
|
-
import Alert from "@rapidmx/
|
|
2
|
+
import useBranding from "@rapidmx/web-client/lib/branding/useBranding.js";
|
|
3
|
+
import Alert from "@rapidmx/web-client/lib/components/feedback/Alert.js";
|
|
4
4
|
import { MeetCard, MeetPageShell } from "./_MeetChrome.js";
|
|
5
5
|
export default function NoMeetingTokenPage() {
|
|
6
6
|
const { branding } = useBranding();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { VideoMeetingDetail } from "@rapidmx/
|
|
2
|
+
import { VideoMeetingDetail } from "@rapidmx/web-client/lib/videoconf/videoMeetingsApi.js";
|
|
3
3
|
/** The title a freshly created personal room starts with - editable afterward like any other meeting's title. */
|
|
4
4
|
export declare const PERSONAL_ROOM_TITLE = "Personal Meeting Room";
|
|
5
5
|
export interface PersonalRoomCardProps {
|
|
@@ -4,10 +4,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
4
4
|
// SPDX-License-Identifier: MPL-2.0
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { useEffect, useState } from "react";
|
|
7
|
-
import { ApiRequestError } from "@rapidmx/
|
|
8
|
-
import { createVideoMeeting, updateVideoMeeting } from "@rapidmx/
|
|
9
|
-
import Alert from "@rapidmx/
|
|
10
|
-
import Button from "@rapidmx/
|
|
7
|
+
import { ApiRequestError } from "@rapidmx/web-client/lib/util/api.js";
|
|
8
|
+
import { createVideoMeeting, updateVideoMeeting } from "@rapidmx/web-client/lib/videoconf/videoMeetingsApi.js";
|
|
9
|
+
import Alert from "@rapidmx/web-client/lib/components/feedback/Alert.js";
|
|
10
|
+
import Button from "@rapidmx/web-client/lib/components/buttons/Button.js";
|
|
11
11
|
const INPUT_CLASS = "w-full text-sm py-2.5 px-3 border border-border rounded-sm bg-surface text-text focus:outline-none focus:border-primary";
|
|
12
12
|
/** The title a freshly created personal room starts with - editable afterward like any other meeting's title. */
|
|
13
13
|
export const PERSONAL_ROOM_TITLE = "Personal Meeting Room";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { PropsWithChildren } from "react";
|
|
2
|
-
import { Branding } from "@rapidmx/
|
|
2
|
+
import { Branding } from "@rapidmx/web-client/lib/branding/brandingApi.js";
|
|
3
3
|
export interface LayoutProps {
|
|
4
4
|
/**
|
|
5
5
|
* Supplied by the server's `WwwRoute` `fetchProps()`, which every `www` plugin app's route extends. This file
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { CUSTOM_STYLESHEET_LINK_ID } from "@rapidmx/
|
|
2
|
+
import { CUSTOM_STYLESHEET_LINK_ID } from "@rapidmx/web-client/lib/branding/useBranding.js";
|
|
3
3
|
export default function Layout({ children, branding }) {
|
|
4
4
|
const title = branding?.title || branding?.companyName ? `${branding?.title || branding?.companyName}: Mail` : "RapidMX: Mail";
|
|
5
5
|
const iconHref = branding?.iconUrl || branding?.logoUrl || "/images/logo.svg";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { VideoMeetingDetail } from "@rapidmx/
|
|
2
|
+
import { VideoMeetingDetail } from "@rapidmx/web-client/lib/videoconf/videoMeetingsApi.js";
|
|
3
3
|
import { SettingsShellProps } from "@rapidmx/web-client/shared/components/settings/layout/SettingsShell.js";
|
|
4
4
|
export type SettingsVideoConferencingPageProps = Omit<SettingsShellProps, "active">;
|
|
5
5
|
export default function SettingsVideoConferencingPage(props: SettingsVideoConferencingPageProps): React.JSX.Element;
|
|
@@ -4,10 +4,10 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
4
4
|
// SPDX-License-Identifier: MPL-2.0
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { useEffect, useState } from "react";
|
|
7
|
-
import { ApiRequestError } from "@rapidmx/
|
|
8
|
-
import { listVideoMeetings, updateVideoMeeting } from "@rapidmx/
|
|
7
|
+
import { ApiRequestError } from "@rapidmx/web-client/lib/util/api.js";
|
|
8
|
+
import { listVideoMeetings, updateVideoMeeting } from "@rapidmx/web-client/lib/videoconf/videoMeetingsApi.js";
|
|
9
9
|
import SettingsShell, { useSettingsShell } from "@rapidmx/web-client/shared/components/settings/layout/SettingsShell.js";
|
|
10
|
-
import Alert from "@rapidmx/
|
|
10
|
+
import Alert from "@rapidmx/web-client/lib/components/feedback/Alert.js";
|
|
11
11
|
import PersonalRoomCard from "./_PersonalRoomCard.js";
|
|
12
12
|
/** However many of a mailbox's meetings this page ever needs to see at once - generous enough that a real user's
|
|
13
13
|
* whole history fits in one request (this is a personal settings page, not a paged archive), matching
|
|
@@ -18,6 +18,12 @@
|
|
|
18
18
|
* - **Timing.** Frames are driven by a timer rather than `requestAnimationFrame`, which stops entirely in a
|
|
19
19
|
* background tab - the call would freeze for everyone else the moment the participant switched to another window.
|
|
20
20
|
* Browsers still slow a background tab's timers, so a filtered picture can drop to a low frame rate there.
|
|
21
|
+
* - **The models run at a lower rate than the picture does** (`ML_HOLD_TICKS`), each frame in between reusing the
|
|
22
|
+
* last mask/landmarks rather than asking again. Segmentation and face tracking are synchronous, main-thread calls,
|
|
23
|
+
* and can each take tens of milliseconds - asking on every rendered frame can starve the main thread badly enough to
|
|
24
|
+
* make the WebSocket relay's audio stutter (`AudioSender`/`AudioPlayer` use `ScriptProcessorNode`, which runs its
|
|
25
|
+
* callback on the very same thread and glitches audibly if it misses its deadline) - the mask and the face barely
|
|
26
|
+
* change from one frame to the next, so asking less often costs nothing anyone can see.
|
|
21
27
|
*
|
|
22
28
|
* Everything browser-facing (canvases, the video element, the models) comes in through `deps`, so the tests drive a
|
|
23
29
|
* processor with fakes.
|
|
@@ -32,8 +38,13 @@ const BLUR_DIVISOR = 12;
|
|
|
32
38
|
/** The picture is pixelated into about this many blocks across. */
|
|
33
39
|
const PIXEL_BLOCKS = 80;
|
|
34
40
|
/** How many frames in a row without a detected face before the accessory is taken off - a face is briefly lost when
|
|
35
|
-
* the head turns, and the accessory shouldn't flicker for that.
|
|
41
|
+
* the head turns, and the accessory shouldn't flicker for that. Counts actual detection attempts, not rendered
|
|
42
|
+
* frames - see `ML_HOLD_TICKS`. */
|
|
36
43
|
const FACE_HOLD_FRAMES = 6;
|
|
44
|
+
/** Segmentation and face tracking actually run on one rendered frame out of this many, reusing the previous
|
|
45
|
+
* mask/landmarks the rest of the time - see this module's doc comment. Counted in rendered frames, not wall-clock
|
|
46
|
+
* time, so it behaves the same regardless of the configured frame rate or how slow a tick actually runs. */
|
|
47
|
+
const ML_HOLD_TICKS = 3;
|
|
37
48
|
const SEGMENTATION_ERROR = "The background effect couldn't be loaded, so your background stays hidden. Turn the effect off to show your camera.";
|
|
38
49
|
const FACE_ERROR = "The face effect couldn't be loaded.";
|
|
39
50
|
const RENDER_ERROR = "Video effects stopped working.";
|
|
@@ -62,6 +73,9 @@ export class VideoFilterProcessor {
|
|
|
62
73
|
this.faceState = "idle";
|
|
63
74
|
this.lastFace = null;
|
|
64
75
|
this.framesWithoutFace = 0;
|
|
76
|
+
this.lastMask = null;
|
|
77
|
+
this.segmentTicks = 0;
|
|
78
|
+
this.faceTicks = 0;
|
|
65
79
|
this.maskImage = null;
|
|
66
80
|
this.renderFailed = false;
|
|
67
81
|
this.status = { loading: false, error: null };
|
|
@@ -244,8 +258,14 @@ export class VideoFilterProcessor {
|
|
|
244
258
|
if (!this.segmenter) {
|
|
245
259
|
return null;
|
|
246
260
|
}
|
|
261
|
+
const due = this.segmentTicks % ML_HOLD_TICKS === 0;
|
|
262
|
+
this.segmentTicks++;
|
|
263
|
+
if (!due) {
|
|
264
|
+
return this.lastMask;
|
|
265
|
+
}
|
|
247
266
|
try {
|
|
248
|
-
|
|
267
|
+
this.lastMask = this.segmenter.segment(this.video, now);
|
|
268
|
+
return this.lastMask;
|
|
249
269
|
}
|
|
250
270
|
catch {
|
|
251
271
|
this.segmenter = null;
|
|
@@ -282,6 +302,11 @@ export class VideoFilterProcessor {
|
|
|
282
302
|
if (!this.faceTracker) {
|
|
283
303
|
return null;
|
|
284
304
|
}
|
|
305
|
+
const due = this.faceTicks % ML_HOLD_TICKS === 0;
|
|
306
|
+
this.faceTicks++;
|
|
307
|
+
if (!due) {
|
|
308
|
+
return this.lastFace;
|
|
309
|
+
}
|
|
285
310
|
let found = null;
|
|
286
311
|
try {
|
|
287
312
|
found = this.faceTracker.detect(this.video, now);
|
|
@@ -21,7 +21,7 @@ export interface GuestSignalingClientOptions {
|
|
|
21
21
|
* `Authorization` header at all, relying entirely on the browser's own already-existing `jwt` session cookie
|
|
22
22
|
* for both the WebSocket upgrade and each `POST /push/:id` publish - see this module's doc comment. */
|
|
23
23
|
token?: string;
|
|
24
|
-
/** Defaults to `@rapidmx/
|
|
24
|
+
/** Defaults to `@rapidmx/web-client`'s `pushUrl()` (`lib/mail/pushClient.js`) - the exact URL `PushClient` itself connects to. */
|
|
25
25
|
url?: () => string | undefined;
|
|
26
26
|
createSocket?: PushSocketFactory;
|
|
27
27
|
fetchImpl?: typeof fetch;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
/**
|
|
6
6
|
* A standalone `SignalingChannel` (`../webrtc/types.js`) over `@rapidrest/service-core`'s `/push` WebSocket -
|
|
7
|
-
* built from scratch rather than reusing `@rapidmx/
|
|
7
|
+
* built from scratch rather than reusing `@rapidmx/web-client`'s `PushClient`/`getPushClient()` (`lib/mail/pushClient.js`).
|
|
8
8
|
*
|
|
9
9
|
* ## Why not `PushClient`
|
|
10
10
|
*
|
|
@@ -63,8 +63,8 @@
|
|
|
63
63
|
* absent, as described above - the browser's real cookie was always going to win that write anyway, so the
|
|
64
64
|
* correct behavior is to not fight it and let it authenticate normally instead.
|
|
65
65
|
*/
|
|
66
|
-
import { apiOrigin } from "@rapidmx/
|
|
67
|
-
import { pushUrl } from "@rapidmx/
|
|
66
|
+
import { apiOrigin } from "@rapidmx/web-client/lib/util/api.js";
|
|
67
|
+
import { pushUrl } from "@rapidmx/web-client/lib/mail/pushClient.js";
|
|
68
68
|
const SOCKET_OPEN = 1;
|
|
69
69
|
function defaultSocketFactory() {
|
|
70
70
|
return typeof WebSocket === "undefined" ? undefined : (url) => new WebSocket(url);
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* There is one transport (one socket) per meeting, however many peers use it, and the codecs are fixed - there is no
|
|
17
17
|
* negotiation, because both ends are this same code.
|
|
18
18
|
*/
|
|
19
|
-
import { apiOrigin } from "@rapidmx/
|
|
19
|
+
import { apiOrigin } from "@rapidmx/web-client/lib/util/api.js";
|
|
20
20
|
import { PLAYBACK_SAMPLE_RATE } from "./AudioPlayer.js";
|
|
21
21
|
import { resumeAudioContext } from "./audioResume.js";
|
|
22
22
|
import { RelayClient } from "./RelayClient.js";
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* ## Join announcement and roster discovery
|
|
29
29
|
*
|
|
30
30
|
* The channel has no history (a push event published while a socket was down is never replayed - see
|
|
31
|
-
* `@rapidmx/
|
|
31
|
+
* `@rapidmx/web-client`'s `lib/mail/pushClient.ts` doc comment for the identical guarantee on the mail push channel this
|
|
32
32
|
* one shares its transport with), so a newcomer's `hello` would only reach participants who happened to already be
|
|
33
33
|
* subscribed *and* who joined before them - never the other way around. Every participant who learns of a
|
|
34
34
|
* genuinely new peer (from any message, not just `hello`) therefore echoes its own `hello` right back, once, the
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
* ## Join announcement and roster discovery
|
|
33
33
|
*
|
|
34
34
|
* The channel has no history (a push event published while a socket was down is never replayed - see
|
|
35
|
-
* `@rapidmx/
|
|
35
|
+
* `@rapidmx/web-client`'s `lib/mail/pushClient.ts` doc comment for the identical guarantee on the mail push channel this
|
|
36
36
|
* one shares its transport with), so a newcomer's `hello` would only reach participants who happened to already be
|
|
37
37
|
* subscribed *and* who joined before them - never the other way around. Every participant who learns of a
|
|
38
38
|
* genuinely new peer (from any message, not just `hello`) therefore echoes its own `hello` right back, once, the
|
|
@@ -536,6 +536,29 @@ export class BaseVideoMeetingRoute {
|
|
|
536
536
|
const meetings = await this.meetingRepo.find({ mailboxUid: ModelUtils.literal(mailboxUid), limit: parsedLimit, page: parsedPage }, { ignoreACL: true, limit: parsedLimit, page: parsedPage });
|
|
537
537
|
return meetings.map((meeting) => this.withJoinUrls(meeting));
|
|
538
538
|
}
|
|
539
|
+
async personalRoom(user) {
|
|
540
|
+
await this.init();
|
|
541
|
+
if (!user?.uid) {
|
|
542
|
+
throw new ApiError(ApiErrors.AUTH_REQUIRED, 401, ApiErrorMessages.AUTH_REQUIRED);
|
|
543
|
+
}
|
|
544
|
+
const mailboxes = await this.mailboxRepo.find({ ownerUserUid: ModelUtils.literal(user.uid) }, { ignoreACL: true });
|
|
545
|
+
// Oldest mailbox first, so "the first owned mailbox" is the account's original (primary) one.
|
|
546
|
+
mailboxes.sort((a, b) => new Date(a.dateCreated).getTime() - new Date(b.dateCreated).getTime());
|
|
547
|
+
for (const mailbox of mailboxes) {
|
|
548
|
+
if (!(await this.aclUtils.hasPermission(stripTrustedRoles(user, this.trustedRoles), mailbox.uid, ACLAction.LIST))) {
|
|
549
|
+
continue;
|
|
550
|
+
}
|
|
551
|
+
// Same selection as the settings page's `findPersonalRoom()`, and the same page size it lists with.
|
|
552
|
+
const meetings = await this.meetingRepo.find({ mailboxUid: ModelUtils.literal(mailbox.uid), visibility: ModelUtils.literal(VideoMeetingVisibility.PUBLIC), limit: 200 }, { ignoreACL: true, limit: 200 });
|
|
553
|
+
const room = meetings
|
|
554
|
+
.filter((m) => m.visibility === VideoMeetingVisibility.PUBLIC && m.status !== VideoMeetingStatus.CANCELLED && !!m.publicSlug)
|
|
555
|
+
.sort((a, b) => new Date(a.dateCreated).getTime() - new Date(b.dateCreated).getTime())[0];
|
|
556
|
+
if (room) {
|
|
557
|
+
return { href: `/meet/${room.publicSlug}`, label: room.title };
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
throw new ApiError(ApiErrors.NOT_FOUND, 404, ApiErrorMessages.NOT_FOUND);
|
|
561
|
+
}
|
|
539
562
|
async findById(id, user) {
|
|
540
563
|
await this.init();
|
|
541
564
|
const meeting = await this.requireOwnedMeeting(id, user, ACLAction.READ);
|
|
@@ -951,6 +974,22 @@ __decorate([
|
|
|
951
974
|
__metadata("design:paramtypes", [Object, Object, Object, Object]),
|
|
952
975
|
__metadata("design:returntype", Promise)
|
|
953
976
|
], BaseVideoMeetingRoute.prototype, "find", null);
|
|
977
|
+
__decorate([
|
|
978
|
+
Summary("Resolves the caller's personal meeting room."),
|
|
979
|
+
Description("Returns { href, label } for the caller's personal room - the oldest still-active (non-cancelled) PUBLIC " +
|
|
980
|
+
"meeting of the first mailbox the caller OWNS that has one (the same definition the video conferencing " +
|
|
981
|
+
"settings page uses) - where href is the same-origin path '/meet/<public slug>' and label the room's " +
|
|
982
|
+
"title. Answers 404 when the caller owns no mailbox with such a meeting, so a web client can use it " +
|
|
983
|
+
"to decide whether to show a 'Meet' button. Only ever considers mailboxes whose ownerUserUid is the " +
|
|
984
|
+
"caller (a delegated mailbox, or another user's, is never consulted) on which the caller still holds " +
|
|
985
|
+
"LIST; trusted roles do not widen this. Requires authentication (401 otherwise). Declared before " +
|
|
986
|
+
"'/:id' so that path is not captured by it."),
|
|
987
|
+
Get("/personal-room"),
|
|
988
|
+
__param(0, AuthUser),
|
|
989
|
+
__metadata("design:type", Function),
|
|
990
|
+
__metadata("design:paramtypes", [Object]),
|
|
991
|
+
__metadata("design:returntype", Promise)
|
|
992
|
+
], BaseVideoMeetingRoute.prototype, "personalRoom", null);
|
|
954
993
|
__decorate([
|
|
955
994
|
Summary("Retrieves one of the owner's video meetings."),
|
|
956
995
|
Description("Returns the meeting, plus 'organizerJoinUrl' when it has an organizerSlug (every private meeting this " +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseVideoMeetingRoute.js","sourceRoot":"","sources":["../../../src/routes/BaseVideoMeetingRoute.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BaseVideoMeetingRoute.js","sourceRoot":"","sources":["../../../src/routes/BaseVideoMeetingRoute.ts"],"names":[],"mappings":"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"}
|
|
@@ -376,6 +376,10 @@ export declare abstract class BaseVideoMeetingRoute<VM extends VideoMeeting, VMI
|
|
|
376
376
|
organizerJoinUrl?: string;
|
|
377
377
|
publicJoinUrl?: string;
|
|
378
378
|
})[]>;
|
|
379
|
+
personalRoom(user?: JWTUser): Promise<{
|
|
380
|
+
href: string;
|
|
381
|
+
label: string;
|
|
382
|
+
}>;
|
|
379
383
|
findById(id: string, user?: JWTUser): Promise<VM & {
|
|
380
384
|
organizerJoinUrl?: string;
|
|
381
385
|
publicJoinUrl?: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rapidmx/meet-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "RapidMX plugin that provides WebRTC video conferencing, joinable from a calendar invite or a shared link.",
|
|
5
5
|
"repository": "https://github.com/rapidmx/meet-plugin.git",
|
|
6
6
|
"author": "RapidREST <rapidrests@gmail.com>",
|
|
@@ -25,9 +25,8 @@
|
|
|
25
25
|
"@mediapipe/tasks-vision": "^1.0.1"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
|
-
"@rapidmx/react-shared": ">=0.19.0 <1",
|
|
29
28
|
"@rapidmx/restapi": ">=0.23.0 <1",
|
|
30
|
-
"@rapidmx/web-client": ">=0.
|
|
29
|
+
"@rapidmx/web-client": ">=0.22.0 <1",
|
|
31
30
|
"@rapidrest/core": "5.x",
|
|
32
31
|
"@rapidrest/react": ">=2.1.0 <3",
|
|
33
32
|
"@rapidrest/service-core": "2.x",
|
|
@@ -35,9 +34,8 @@
|
|
|
35
34
|
"react-dom": "19.x"
|
|
36
35
|
},
|
|
37
36
|
"devDependencies": {
|
|
38
|
-
"@rapidmx/
|
|
39
|
-
"@rapidmx/
|
|
40
|
-
"@rapidmx/web-client": "^0.21.0",
|
|
37
|
+
"@rapidmx/restapi": "^0.26.0",
|
|
38
|
+
"@rapidmx/web-client": "^0.26.0",
|
|
41
39
|
"@rapidrest/core": "^6.0.0",
|
|
42
40
|
"@rapidrest/react": "^2.1.0",
|
|
43
41
|
"@rapidrest/service-core": "^2.4.0",
|
|
@@ -82,9 +80,8 @@
|
|
|
82
80
|
"winston": "^3.19.0"
|
|
83
81
|
},
|
|
84
82
|
"resolutions": {
|
|
85
|
-
"@rapidmx/react-shared": "^0.19.0",
|
|
86
83
|
"@rapidmx/restapi": "^0.23.0",
|
|
87
|
-
"@rapidmx/web-client": "^0.
|
|
84
|
+
"@rapidmx/web-client": "^0.22.0"
|
|
88
85
|
},
|
|
89
86
|
"packageManager": "yarn@4.5.3",
|
|
90
87
|
"engines": {
|
|
@@ -186,6 +183,15 @@
|
|
|
186
183
|
"dir": "apps/settings-video-conferencing"
|
|
187
184
|
}
|
|
188
185
|
],
|
|
186
|
+
"appRail": [
|
|
187
|
+
{
|
|
188
|
+
"id": "meet",
|
|
189
|
+
"label": "Meet",
|
|
190
|
+
"href": "/meet",
|
|
191
|
+
"icon": "HiOutlineVideoCamera",
|
|
192
|
+
"resolveFrom": "/mail/video-meetings/personal-room"
|
|
193
|
+
}
|
|
194
|
+
],
|
|
189
195
|
"settingsSections": [
|
|
190
196
|
{
|
|
191
197
|
"id": "video-conferencing",
|