@rapidmx/meet-plugin 0.13.1 → 0.14.1

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.
Files changed (41) hide show
  1. package/README.md +55 -55
  2. package/apps/meet/[token].tsx +341 -341
  3. package/apps/meet/_CallControls.tsx +463 -394
  4. package/apps/meet/_CallView.tsx +891 -848
  5. package/apps/meet/_DiagnosticsWindow.tsx +80 -0
  6. package/apps/meet/_MeetLobby.tsx +224 -224
  7. package/apps/meet/_ParticipantTile.tsx +169 -169
  8. package/apps/meet/_ParticipantsDrawer.tsx +10 -104
  9. package/apps/meet/_SettingsModal.tsx +152 -0
  10. package/apps/meet/_icons.tsx +80 -82
  11. package/apps/meet/_meetApi.ts +212 -212
  12. package/apps/shared/media/filters/VideoFilterProcessor.ts +408 -408
  13. package/apps/shared/media/filters/mlModels.ts +174 -174
  14. package/apps/shared/push/GuestSignalingClient.ts +359 -359
  15. package/apps/shared/relay/RelayClient.ts +7 -2
  16. package/apps/shared/webrtc/MeshConnectionManager.ts +949 -795
  17. package/apps/shared/webrtc/types.ts +247 -222
  18. package/dist/apps/meet/_CallControls.d.ts +19 -9
  19. package/dist/apps/meet/_CallControls.js +28 -10
  20. package/dist/apps/meet/_CallView.d.ts +14 -2
  21. package/dist/apps/meet/_CallView.js +27 -2
  22. package/dist/apps/meet/_DiagnosticsWindow.d.ts +25 -0
  23. package/dist/apps/meet/_DiagnosticsWindow.js +45 -0
  24. package/dist/apps/meet/_ParticipantsDrawer.d.ts +10 -21
  25. package/dist/apps/meet/_ParticipantsDrawer.js +9 -39
  26. package/dist/apps/meet/_SettingsModal.d.ts +28 -0
  27. package/dist/apps/meet/_SettingsModal.js +59 -0
  28. package/dist/apps/meet/_icons.d.ts +1 -1
  29. package/dist/apps/meet/_icons.js +1 -1
  30. package/dist/apps/shared/relay/RelayClient.d.ts +6 -1
  31. package/dist/apps/shared/relay/RelayClient.js +7 -2
  32. package/dist/apps/shared/webrtc/MeshConnectionManager.d.ts +55 -2
  33. package/dist/apps/shared/webrtc/MeshConnectionManager.js +153 -9
  34. package/dist/apps/shared/webrtc/types.d.ts +25 -1
  35. package/dist/lib/util/RedisRelayBus.js +61 -5
  36. package/dist/lib/util/RedisRelayBus.js.map +1 -1
  37. package/dist/lib/util/RelayHub.js +10 -3
  38. package/dist/lib/util/RelayHub.js.map +1 -1
  39. package/dist/types/util/RedisRelayBus.d.ts +45 -6
  40. package/dist/types/util/RelayHub.d.ts +9 -2
  41. package/package.json +208 -208
@@ -1 +1 @@
1
- {"version":3,"file":"RelayHub.js","sourceRoot":"","sources":["../../../src/util/RelayHub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RelayHub.js","sourceRoot":"","sources":["../../../src/util/RelayHub.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,9 @@ export declare const REDIS_RELAY_ORIGIN_BYTES = 16;
6
6
  /** The least time between two `warn` messages about failing Redis commands; the failures in between are logged at
7
7
  * `debug`, so a Redis outage cannot flood the log at the rate media frames arrive. */
8
8
  export declare const REDIS_RELAY_WARN_INTERVAL_MS = 30000;
9
+ /** How often the bus re-checks, via one batched `PUBSUB NUMSUB`, whether any other replica still has a listener for
10
+ * each of its active rooms - see the class doc comment's "Skipping Redis for a single-replica room" section. */
11
+ export declare const REDIS_RELAY_NUMSUB_POLL_MS = 2000;
9
12
  /** The channel a room's frames are published to. */
10
13
  export declare function redisRelayChannel(roomId: string): string;
11
14
  /** The logger a `RedisRelayBus` writes to - the framework's logger satisfies it. */
@@ -19,14 +22,20 @@ export interface RedisRelayBusOptions {
19
22
  /** The `datastores:events` Redis URL. */
20
23
  url: string;
21
24
  logger: RedisRelayBusLogger;
25
+ /** Overrides `REDIS_RELAY_NUMSUB_POLL_MS` - a test's only reason to set this. */
26
+ numSubPollMs?: number;
22
27
  }
23
28
  /** What the bus counts, for tests and diagnostics. */
24
29
  export interface RedisRelayBusStats {
25
30
  /** Frames published to Redis. */
26
31
  published: number;
27
- /** Frames not published because the publisher was not connected (or the sender id cannot be encoded). */
32
+ /** Frames not published because the publisher was not connected (or the sender id cannot be encoded) - an
33
+ * actual problem, unlike `publishSkippedLocalOnly`. */
28
34
  publishSkipped: number;
29
- /** Redis commands (publish, subscribe, unsubscribe, connect) that failed. */
35
+ /** Frames not published to Redis because `pollLocalOnly()` last confirmed no other replica currently has a
36
+ * listener for the room - the optimization working as intended, not a problem. */
37
+ publishSkippedLocalOnly: number;
38
+ /** Redis commands (publish, subscribe, unsubscribe, connect, `PUBSUB NUMSUB`) that failed. */
30
39
  failures: number;
31
40
  /** Messages received from Redis and handed to local listeners. */
32
41
  received: number;
@@ -84,6 +93,26 @@ export interface RedisRelayBusStats {
84
93
  * server's client-output-buffer limit for pub/sub, after which Redis drops that connection (the client then
85
94
  * reconnects and resubscribes).
86
95
  *
96
+ * ## Skipping Redis for a single-replica room
97
+ *
98
+ * Every room still SUBSCRIBEs the moment it has its first local listener (so a remote replica's room gets this
99
+ * replica's frames the instant it starts caring, with no detection delay), but whether `publish()` also bothers
100
+ * PUBLISHing a frame to Redis in the first place is a separate decision, re-checked on a timer
101
+ * (`pollLocalOnly()`, every `numSubPollMs`/`REDIS_RELAY_NUMSUB_POLL_MS`): one batched `PUBSUB NUMSUB` across every
102
+ * active room's channel tells this bus, authoritatively, how many subscribers across the *whole* Redis deployment
103
+ * each channel has right now. A channel with at most one (this bus's own subscription, and only this bus's own)
104
+ * has no listener on any other replica - there is nobody `publishToRedis()` could possibly be publishing *for* -
105
+ * so a room's `localOnly` flag is set and every frame for it skips the Redis publish entirely until the next poll
106
+ * says otherwise, which is by far the common case for a small/single-instance deployment and for most rooms even in
107
+ * a larger one (most calls never span replicas). A room `localOnly` has not yet been determined for (just created,
108
+ * or the last poll failed) keeps publishing - the safe default, since under-publishing (an unnoticed remote
109
+ * listener goes briefly silent) is a real glitch and over-publishing (a few redundant PUBLISHes with no
110
+ * subscriber) costs only a little Redis traffic. The gap between a remote replica's listener actually arriving and
111
+ * this bus's next poll noticing is therefore bounded by `numSubPollMs` - frames to that listener may be briefly
112
+ * missing right at that boundary, which is the same order of magnitude as, and no worse than, media this transport
113
+ * already tolerates losing under ordinary backpressure (see `RelayHub.RELAY_WS_MAX_BACKPRESSURE_BYTES`'s own doc
114
+ * comment).
115
+ *
87
116
  * @author Jean-Philippe Steinmetz
88
117
  */
89
118
  export declare class RedisRelayBus implements RelayBus {
@@ -95,6 +124,7 @@ export declare class RedisRelayBus implements RelayBus {
95
124
  private publisher?;
96
125
  private subscriber?;
97
126
  private lastWarn;
127
+ private pollTimer?;
98
128
  constructor(options: RedisRelayBusOptions);
99
129
  /** Whether frames are currently being published to Redis: `connect()` was called, the bus is not closed and the
100
130
  * publisher's connection is up. */
@@ -108,15 +138,24 @@ export declare class RedisRelayBus implements RelayBus {
108
138
  */
109
139
  connect(): Promise<void>;
110
140
  /**
111
- * Shuts the bus down: destroys both clients (which ends their connections, and with them every subscription) and
112
- * stops publishing. Local delivery keeps working, as after a failed `connect()`. Safe to call repeatedly.
113
- * Nothing is unsubscribed one by one: the connection going away does that server-side, and an UNSUBSCRIBE could
114
- * only stall behind a Redis that is down.
141
+ * Shuts the bus down: destroys both clients (which ends their connections, and with them every subscription),
142
+ * stops the `pollLocalOnly()` timer and stops publishing. Local delivery keeps working, as after a failed
143
+ * `connect()`. Safe to call repeatedly. Nothing is unsubscribed one by one: the connection going away does that
144
+ * server-side, and an UNSUBSCRIBE could only stall behind a Redis that is down.
115
145
  */
116
146
  close(): void;
117
147
  subscribe(roomId: string, listener: RelayBusListener): () => void;
118
148
  publish(roomId: string, sender: string, frame: Buffer): void;
119
149
  private publishToRedis;
150
+ /** Refreshes every active room's `localOnly` flag with one batched `PUBSUB NUMSUB`, on the publisher client (the
151
+ * subscriber is reserved for buffer-mode subscribe/unsubscribe) - see the class doc comment. Does nothing while
152
+ * there are no rooms or the publisher isn't ready; a failed command is counted and logged, and leaves every
153
+ * room's existing flag untouched, so a transient failure never flips a room's safe-default `undefined`/`false`
154
+ * to a stale `true` it didn't earn. Applies results by walking `this.rooms` fresh *after* the command resolves,
155
+ * not the snapshot queried - a room that left while this was in flight is simply no longer in the map to visit,
156
+ * and one that arrived gets no count back (`undefined`, falling back to the safe default below) and waits for
157
+ * the next poll, with no race to special-case either way. */
158
+ private pollLocalOnly;
120
159
  private redisSubscribe;
121
160
  private redisUnsubscribe;
122
161
  /** Handles one message of a room's channel: parses it defensively and hands its frame to the local listeners,
@@ -11,8 +11,15 @@ export declare const RELAY_MAX_PAYLOAD_BYTES: number;
11
11
  export declare const RELAY_LARGE_PAYLOAD_BYTES: number;
12
12
  /** How many bytes the framework may hold unsent for one relay socket before it drops further messages to it, when the
13
13
  * installed `@rapidrest/service-core` lets a route set that (its default, 64 KiB, is smaller than one key frame's worth
14
- * of headroom and made a briefly slow receiver lose frames constantly). One MiB is roughly two seconds of a 350 kbps
15
- * video stream plus audio. */
14
+ * of headroom and made a briefly slow receiver lose frames constantly). 128 KiB is roughly 2.7 seconds of
15
+ * `VideoSender.VIDEO_BITRATE` (350 kbps) plus `AudioSender.AUDIO_BITRATE` (24 kbps) combined - (350_000 + 24_000) / 8
16
+ * bytes/s ≈ 46.75 KB/s - comfortably more than one key frame but not so much that a receiver whose downlink is
17
+ * briefly slower than the stream is left playing several seconds stale: this was previously 1 MiB (≈22 seconds at
18
+ * this bitrate, not the "roughly two seconds" the comment claimed - a bits-vs-bytes mix-up), which let a receiver's
19
+ * backlog grow essentially without bound before anything was ever dropped, rather than the "briefly slow" case this
20
+ * budget is meant to cover. `apps/shared/relay/`'s own senders can't import this constant (`tsconfig.apps.json`
21
+ * builds `apps/` as its own program - see its own doc comments), so this is a cross-reference, not a shared import:
22
+ * changing either bitrate should revisit this value too. */
16
23
  export declare const RELAY_WS_MAX_BACKPRESSURE_BYTES: number;
17
24
  /** The most sockets (registered or still awaiting their `hello`) one room holds at once. */
18
25
  export declare const RELAY_MAX_SOCKETS_PER_ROOM = 16;
package/package.json CHANGED
@@ -1,208 +1,208 @@
1
- {
2
- "name": "@rapidmx/meet-plugin",
3
- "version": "0.13.1",
4
- "description": "RapidMX plugin that provides WebRTC video conferencing, joinable from a calendar invite or a shared link.",
5
- "repository": "https://github.com/rapidmx/meet-plugin.git",
6
- "author": "RapidREST <rapidrests@gmail.com>",
7
- "license": "MPL-2.0",
8
- "contributors": [
9
- "Jean-Philippe Steinmetz"
10
- ],
11
- "scripts": {
12
- "build": "yarn lint && rimraf dist && tsc && tsc -p tsconfig.apps.json",
13
- "lint": "eslint ./src ./apps ./test",
14
- "local-audit": "yarn install && yarn npm audit -A -R \"$@\"",
15
- "checkup": "yarn dlx @yarnpkg/doctor \"$@\"",
16
- "dependency-check": "yarn dlx depcheck \"$@\"",
17
- "report-coverage": "cat ./coverage/lcov.info | coveralls",
18
- "test": "vitest run",
19
- "test:prod": "npm run lint && vitest run --coverage",
20
- "test:watch": "vitest",
21
- "release": "npx @rapidrest/cli release",
22
- "prepublish": "yarn build"
23
- },
24
- "dependencies": {
25
- "@mediapipe/tasks-vision": "^1.0.1"
26
- },
27
- "peerDependencies": {
28
- "@rapidmx/restapi": ">=0.23.0 <1",
29
- "@rapidmx/web-client": ">=0.22.0 <1",
30
- "@rapidrest/core": "5.x",
31
- "@rapidrest/react": ">=2.1.0 <3",
32
- "@rapidrest/service-core": "2.x",
33
- "react": "19.x",
34
- "react-dom": "19.x"
35
- },
36
- "devDependencies": {
37
- "@rapidmx/restapi": "^0.26.0",
38
- "@rapidmx/web-client": "^0.31.0",
39
- "@rapidrest/core": "^6.0.0",
40
- "@rapidrest/react": "^2.1.0",
41
- "@rapidrest/service-core": "^2.4.0",
42
- "@swc/core": "^1.16.2",
43
- "@testing-library/dom": "^10.4.1",
44
- "@testing-library/jest-dom": "^7.0.1",
45
- "@testing-library/react": "^16.3.3",
46
- "@testing-library/user-event": "^14.6.7",
47
- "@types/nconf": "^0.10.7",
48
- "@types/node": "^26.5.0",
49
- "@types/react": "^19.2.18",
50
- "@types/react-dom": "^19.2.7",
51
- "@typescript-eslint/eslint-plugin": "^8.70.0",
52
- "@typescript-eslint/parser": "^8.70.0",
53
- "@vitest/coverage-v8": "^5.0.0",
54
- "better-sqlite3": "^13.0.3",
55
- "eslint": "^10.10.0",
56
- "eslint-config-prettier": "^10.1.8",
57
- "eslint-plugin-import": "^2.32.0",
58
- "eslint-plugin-jsdoc": "^64.3.6",
59
- "globals": "^17.12.0",
60
- "jsdom": "^30.0.1",
61
- "lodash-es": "^4.18.1",
62
- "mongodb": "^7.6.0",
63
- "mongodb-memory-server": "^11.2.0",
64
- "nconf": "^0.13.0",
65
- "openapi3-ts": "^4.6.1",
66
- "prom-client": "^15.1.3",
67
- "react": "^19.2.8",
68
- "react-dom": "^19.2.8",
69
- "redis": "^6.2.1",
70
- "reflect-metadata": "^0.2.2",
71
- "rimraf": "^6.1.3",
72
- "ts-node": "^10.9.2",
73
- "tsx": "^4.23.13",
74
- "typeorm": "^1.1.1",
75
- "typescript": "^6.0.3",
76
- "unplugin-swc": "^1.6.0",
77
- "uuid": "^14.0.2",
78
- "vite": "^8.2.2",
79
- "vitest": "^5.0.0",
80
- "winston": "^3.19.0"
81
- },
82
- "resolutions": {
83
- "@rapidmx/restapi": "^0.23.0",
84
- "@rapidmx/web-client": "^0.22.0"
85
- },
86
- "packageManager": "yarn@4.5.3",
87
- "engines": {
88
- "node": ">=24.0.0"
89
- },
90
- "publishConfig": {
91
- "registry": "https://registry.npmjs.org/"
92
- },
93
- "type": "module",
94
- "main": "dist/lib/index.js",
95
- "exports": {
96
- ".": {
97
- "import": "./dist/lib/index.js",
98
- "types": "./dist/types/index.d.ts"
99
- },
100
- "./mongo": {
101
- "import": "./dist/lib/mongo.js",
102
- "types": "./dist/types/mongo.d.ts"
103
- },
104
- "./sql": {
105
- "import": "./dist/lib/sql.js",
106
- "types": "./dist/types/sql.d.ts"
107
- }
108
- },
109
- "typings": "dist/types/index.d.ts",
110
- "files": [
111
- "apps",
112
- "dist"
113
- ],
114
- "rapidmx": {
115
- "plugin": {
116
- "apiVersion": 1,
117
- "displayName": "Meet",
118
- "description": "Private and public WebRTC video meetings. A private meeting mints one link per invitee for a calendar invite's location and body; a public meeting shares a single link. Joining needs no account - a guest picks a name, checks their camera and microphone, and enters.",
119
- "mailboxScopedData": true,
120
- "settings": [
121
- {
122
- "key": "mail:videoconf:public_url",
123
- "label": "Public join page URL",
124
- "type": "string",
125
- "default": "https://<host>/meet",
126
- "help": "The address of the public join pages. Filled in with this server's address when the plugin is installed. Calendar invites include a join link only when this is set."
127
- },
128
- {
129
- "key": "mail:videoconf:turn:url",
130
- "label": "TURN server URL",
131
- "type": "string",
132
- "default": "",
133
- "help": "A turn: or turns: URL (e.g. turns:turn.example.com:5349), or several separated by commas (turn:turn.example.com:3478,turns:turn.example.com:5349), relaying media for a participant behind a restrictive NAT or firewall, for whom a direct peer-to-peer connection fails. A plain turn: address is offered over both UDP and TCP (a network that blocks UDP can still use the TCP one); add ?transport=udp or ?transport=tcp to an address to offer only that. Public STUN servers are used for everyone else and need no configuration. Leave empty to serve calls with STUN only - most calls will still connect, but some participants may not."
134
- },
135
- {
136
- "key": "mail:videoconf:turn:username",
137
- "label": "TURN server username",
138
- "type": "string",
139
- "default": "",
140
- "help": "Used as-is unless a shared secret is also set below, in which case it is combined with a per-join expiring credential instead (coturn's time-limited REST credential mechanism) and this value is ignored."
141
- },
142
- {
143
- "key": "mail:videoconf:turn:credential",
144
- "label": "TURN server credential (static)",
145
- "type": "string",
146
- "secret": true,
147
- "default": "",
148
- "help": "The TURN server's password for the username above. Ignored when a shared secret is set below."
149
- },
150
- {
151
- "key": "mail:videoconf:turn:shared_secret",
152
- "label": "TURN server shared secret (for expiring credentials)",
153
- "type": "string",
154
- "secret": true,
155
- "default": "",
156
- "help": "coturn's static-auth-secret, if configured. When set, every join mints its own short-lived username/credential pair (an HMAC-SHA1 of a timestamp with this secret) instead of handing out one permanent password to every participant - the recommended setup. Leave empty to use the static username/credential above instead."
157
- },
158
- {
159
- "key": "mail:videoconf:relay:enabled",
160
- "label": "WebSocket media relay",
161
- "type": "boolean",
162
- "default": true,
163
- "help": "The last-resort tier for a participant whose network blocks both a direct connection and TURN (e.g. a corporate firewall that only allows web traffic): their media travels over a WebSocket this server relays between the meeting's participants. Turn off to serve calls with direct and TURN connections only. With several server replicas it connects participants across them through the same Redis the push system uses; without that Redis it works only between participants on the same replica."
164
- },
165
- {
166
- "key": "mail:videoconf:effects:assets_url",
167
- "label": "Video effects assets URL",
168
- "type": "string",
169
- "default": "",
170
- "help": "Video effects (background blur, custom backgrounds, face accessories) run a small machine-learning model in the participant's browser. By default the model files and their WebAssembly runtime are downloaded, only when a participant turns such an effect on, from cdn.jsdelivr.net and storage.googleapis.com. To serve them yourself instead, set this to the base URL (https://files.example.com/meet-effects, or a path on this server) of a directory holding wasm/ (the contents of the @mediapipe/tasks-vision package's wasm directory), selfie_segmenter.tflite and face_landmarker.task. Leave empty to use the public CDNs."
171
- }
172
- ],
173
- "ui": {
174
- "apps": [
175
- {
176
- "id": "meet",
177
- "host": "public",
178
- "mount": "/meet",
179
- "dir": "apps/meet"
180
- },
181
- {
182
- "id": "video-conferencing",
183
- "host": "www",
184
- "mount": "/settings/video-conferencing",
185
- "dir": "apps/settings-video-conferencing"
186
- }
187
- ],
188
- "appRail": [
189
- {
190
- "id": "meet",
191
- "label": "Meet",
192
- "href": "/meet",
193
- "icon": "HiOutlineVideoCamera",
194
- "resolveFrom": "/mail/video-meetings/personal-room"
195
- }
196
- ],
197
- "settingsSections": [
198
- {
199
- "id": "video-conferencing",
200
- "label": "Video Conferencing",
201
- "href": "/settings/video-conferencing",
202
- "icon": "HiOutlineVideoCamera"
203
- }
204
- ]
205
- }
206
- }
207
- }
208
- }
1
+ {
2
+ "name": "@rapidmx/meet-plugin",
3
+ "version": "0.14.1",
4
+ "description": "RapidMX plugin that provides WebRTC video conferencing, joinable from a calendar invite or a shared link.",
5
+ "repository": "https://github.com/rapidmx/meet-plugin.git",
6
+ "author": "RapidREST <rapidrests@gmail.com>",
7
+ "license": "MPL-2.0",
8
+ "contributors": [
9
+ "Jean-Philippe Steinmetz"
10
+ ],
11
+ "scripts": {
12
+ "build": "yarn lint && rimraf dist && tsc && tsc -p tsconfig.apps.json",
13
+ "lint": "eslint ./src ./apps ./test",
14
+ "local-audit": "yarn install && yarn npm audit -A -R \"$@\"",
15
+ "checkup": "yarn dlx @yarnpkg/doctor \"$@\"",
16
+ "dependency-check": "yarn dlx depcheck \"$@\"",
17
+ "report-coverage": "cat ./coverage/lcov.info | coveralls",
18
+ "test": "vitest run",
19
+ "test:prod": "npm run lint && vitest run --coverage",
20
+ "test:watch": "vitest",
21
+ "release": "npx @rapidrest/cli release",
22
+ "prepublish": "yarn build"
23
+ },
24
+ "dependencies": {
25
+ "@mediapipe/tasks-vision": "^1.0.1"
26
+ },
27
+ "peerDependencies": {
28
+ "@rapidmx/restapi": ">=0.23.0 <1",
29
+ "@rapidmx/web-client": ">=0.22.0 <1",
30
+ "@rapidrest/core": "5.x",
31
+ "@rapidrest/react": ">=2.1.0 <3",
32
+ "@rapidrest/service-core": "2.x",
33
+ "react": "19.x",
34
+ "react-dom": "19.x"
35
+ },
36
+ "devDependencies": {
37
+ "@rapidmx/restapi": "^0.28.1",
38
+ "@rapidmx/web-client": "^0.31.0",
39
+ "@rapidrest/core": "^6.0.0",
40
+ "@rapidrest/react": "^2.1.0",
41
+ "@rapidrest/service-core": "^2.4.0",
42
+ "@swc/core": "^1.16.2",
43
+ "@testing-library/dom": "^10.4.1",
44
+ "@testing-library/jest-dom": "^7.0.1",
45
+ "@testing-library/react": "^16.3.3",
46
+ "@testing-library/user-event": "^14.6.7",
47
+ "@types/nconf": "^0.10.7",
48
+ "@types/node": "^26.5.0",
49
+ "@types/react": "^19.2.18",
50
+ "@types/react-dom": "^19.2.7",
51
+ "@typescript-eslint/eslint-plugin": "^8.70.0",
52
+ "@typescript-eslint/parser": "^8.70.0",
53
+ "@vitest/coverage-v8": "^5.0.0",
54
+ "better-sqlite3": "^13.0.3",
55
+ "eslint": "^10.10.0",
56
+ "eslint-config-prettier": "^10.1.8",
57
+ "eslint-plugin-import": "^2.32.0",
58
+ "eslint-plugin-jsdoc": "^64.3.6",
59
+ "globals": "^17.12.0",
60
+ "jsdom": "^30.0.1",
61
+ "lodash-es": "^4.18.1",
62
+ "mongodb": "^7.6.0",
63
+ "mongodb-memory-server": "^11.2.0",
64
+ "nconf": "^0.13.0",
65
+ "openapi3-ts": "^4.6.1",
66
+ "prom-client": "^15.1.3",
67
+ "react": "^19.2.8",
68
+ "react-dom": "^19.2.8",
69
+ "redis": "^6.2.1",
70
+ "reflect-metadata": "^0.2.2",
71
+ "rimraf": "^6.1.3",
72
+ "ts-node": "^10.9.2",
73
+ "tsx": "^4.23.13",
74
+ "typeorm": "^1.1.1",
75
+ "typescript": "^6.0.3",
76
+ "unplugin-swc": "^1.6.0",
77
+ "uuid": "^14.0.2",
78
+ "vite": "^8.2.2",
79
+ "vitest": "^5.0.0",
80
+ "winston": "^3.19.0"
81
+ },
82
+ "resolutions": {
83
+ "@rapidmx/restapi": "^0.23.0",
84
+ "@rapidmx/web-client": "^0.22.0"
85
+ },
86
+ "packageManager": "yarn@4.5.3",
87
+ "engines": {
88
+ "node": ">=24.0.0"
89
+ },
90
+ "publishConfig": {
91
+ "registry": "https://registry.npmjs.org/"
92
+ },
93
+ "type": "module",
94
+ "main": "dist/lib/index.js",
95
+ "exports": {
96
+ ".": {
97
+ "import": "./dist/lib/index.js",
98
+ "types": "./dist/types/index.d.ts"
99
+ },
100
+ "./mongo": {
101
+ "import": "./dist/lib/mongo.js",
102
+ "types": "./dist/types/mongo.d.ts"
103
+ },
104
+ "./sql": {
105
+ "import": "./dist/lib/sql.js",
106
+ "types": "./dist/types/sql.d.ts"
107
+ }
108
+ },
109
+ "typings": "dist/types/index.d.ts",
110
+ "files": [
111
+ "apps",
112
+ "dist"
113
+ ],
114
+ "rapidmx": {
115
+ "plugin": {
116
+ "apiVersion": 1,
117
+ "displayName": "Meet",
118
+ "description": "Private and public WebRTC video meetings. A private meeting mints one link per invitee for a calendar invite's location and body; a public meeting shares a single link. Joining needs no account - a guest picks a name, checks their camera and microphone, and enters.",
119
+ "mailboxScopedData": true,
120
+ "settings": [
121
+ {
122
+ "key": "mail:videoconf:public_url",
123
+ "label": "Public join page URL",
124
+ "type": "string",
125
+ "default": "https://<host>/meet",
126
+ "help": "The address of the public join pages. Filled in with this server's address when the plugin is installed. Calendar invites include a join link only when this is set."
127
+ },
128
+ {
129
+ "key": "mail:videoconf:turn:url",
130
+ "label": "TURN server URL",
131
+ "type": "string",
132
+ "default": "",
133
+ "help": "A turn: or turns: URL (e.g. turns:turn.example.com:5349), or several separated by commas (turn:turn.example.com:3478,turns:turn.example.com:5349), relaying media for a participant behind a restrictive NAT or firewall, for whom a direct peer-to-peer connection fails. A plain turn: address is offered over both UDP and TCP (a network that blocks UDP can still use the TCP one); add ?transport=udp or ?transport=tcp to an address to offer only that. Public STUN servers are used for everyone else and need no configuration. Leave empty to serve calls with STUN only - most calls will still connect, but some participants may not."
134
+ },
135
+ {
136
+ "key": "mail:videoconf:turn:username",
137
+ "label": "TURN server username",
138
+ "type": "string",
139
+ "default": "",
140
+ "help": "Used as-is unless a shared secret is also set below, in which case it is combined with a per-join expiring credential instead (coturn's time-limited REST credential mechanism) and this value is ignored."
141
+ },
142
+ {
143
+ "key": "mail:videoconf:turn:credential",
144
+ "label": "TURN server credential (static)",
145
+ "type": "string",
146
+ "secret": true,
147
+ "default": "",
148
+ "help": "The TURN server's password for the username above. Ignored when a shared secret is set below."
149
+ },
150
+ {
151
+ "key": "mail:videoconf:turn:shared_secret",
152
+ "label": "TURN server shared secret (for expiring credentials)",
153
+ "type": "string",
154
+ "secret": true,
155
+ "default": "",
156
+ "help": "coturn's static-auth-secret, if configured. When set, every join mints its own short-lived username/credential pair (an HMAC-SHA1 of a timestamp with this secret) instead of handing out one permanent password to every participant - the recommended setup. Leave empty to use the static username/credential above instead."
157
+ },
158
+ {
159
+ "key": "mail:videoconf:relay:enabled",
160
+ "label": "WebSocket media relay",
161
+ "type": "boolean",
162
+ "default": true,
163
+ "help": "The last-resort tier for a participant whose network blocks both a direct connection and TURN (e.g. a corporate firewall that only allows web traffic): their media travels over a WebSocket this server relays between the meeting's participants. Turn off to serve calls with direct and TURN connections only. With several server replicas it connects participants across them through the same Redis the push system uses; without that Redis it works only between participants on the same replica."
164
+ },
165
+ {
166
+ "key": "mail:videoconf:effects:assets_url",
167
+ "label": "Video effects assets URL",
168
+ "type": "string",
169
+ "default": "",
170
+ "help": "Video effects (background blur, custom backgrounds, face accessories) run a small machine-learning model in the participant's browser. By default the model files and their WebAssembly runtime are downloaded, only when a participant turns such an effect on, from cdn.jsdelivr.net and storage.googleapis.com. To serve them yourself instead, set this to the base URL (https://files.example.com/meet-effects, or a path on this server) of a directory holding wasm/ (the contents of the @mediapipe/tasks-vision package's wasm directory), selfie_segmenter.tflite and face_landmarker.task. Leave empty to use the public CDNs."
171
+ }
172
+ ],
173
+ "ui": {
174
+ "apps": [
175
+ {
176
+ "id": "meet",
177
+ "host": "public",
178
+ "mount": "/meet",
179
+ "dir": "apps/meet"
180
+ },
181
+ {
182
+ "id": "video-conferencing",
183
+ "host": "www",
184
+ "mount": "/settings/video-conferencing",
185
+ "dir": "apps/settings-video-conferencing"
186
+ }
187
+ ],
188
+ "appRail": [
189
+ {
190
+ "id": "meet",
191
+ "label": "Meet",
192
+ "href": "/meet",
193
+ "icon": "HiOutlineVideoCamera",
194
+ "resolveFrom": "/mail/video-meetings/personal-room"
195
+ }
196
+ ],
197
+ "settingsSections": [
198
+ {
199
+ "id": "video-conferencing",
200
+ "label": "Video Conferencing",
201
+ "href": "/settings/video-conferencing",
202
+ "icon": "HiOutlineVideoCamera"
203
+ }
204
+ ]
205
+ }
206
+ }
207
+ }
208
+ }