@rapidmx/meet-plugin 0.1.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.
Files changed (108) hide show
  1. package/LICENSE +382 -0
  2. package/README.md +38 -0
  3. package/apps/meet/[token].tsx +144 -0
  4. package/apps/meet/_CallControls.tsx +69 -0
  5. package/apps/meet/_CallView.tsx +338 -0
  6. package/apps/meet/_MeetChrome.tsx +30 -0
  7. package/apps/meet/_MeetLobby.tsx +223 -0
  8. package/apps/meet/_ParticipantTile.tsx +66 -0
  9. package/apps/meet/_layout.tsx +34 -0
  10. package/apps/meet/_meetApi.ts +66 -0
  11. package/apps/meet/index.tsx +22 -0
  12. package/apps/settings-video-conferencing/_PersonalRoomCard.tsx +140 -0
  13. package/apps/settings-video-conferencing/_layout.tsx +47 -0
  14. package/apps/settings-video-conferencing/index.tsx +192 -0
  15. package/apps/shared/media/activeSpeaker.ts +45 -0
  16. package/apps/shared/media/deviceMedia.ts +141 -0
  17. package/apps/shared/media/levelMeter.ts +91 -0
  18. package/apps/shared/push/GuestSignalingClient.ts +338 -0
  19. package/apps/shared/webrtc/MeshConnectionManager.ts +350 -0
  20. package/apps/shared/webrtc/realPeerConnection.ts +37 -0
  21. package/apps/shared/webrtc/types.ts +90 -0
  22. package/dist/apps/meet/[token].d.ts +33 -0
  23. package/dist/apps/meet/[token].js +101 -0
  24. package/dist/apps/meet/_CallControls.d.ts +18 -0
  25. package/dist/apps/meet/_CallControls.js +6 -0
  26. package/dist/apps/meet/_CallView.d.ts +41 -0
  27. package/dist/apps/meet/_CallView.js +225 -0
  28. package/dist/apps/meet/_MeetChrome.d.ts +13 -0
  29. package/dist/apps/meet/_MeetChrome.js +10 -0
  30. package/dist/apps/meet/_MeetLobby.d.ts +29 -0
  31. package/dist/apps/meet/_MeetLobby.js +120 -0
  32. package/dist/apps/meet/_ParticipantTile.d.ts +18 -0
  33. package/dist/apps/meet/_ParticipantTile.js +25 -0
  34. package/dist/apps/meet/_layout.d.ts +9 -0
  35. package/dist/apps/meet/_layout.js +8 -0
  36. package/dist/apps/meet/_meetApi.d.ts +47 -0
  37. package/dist/apps/meet/_meetApi.js +23 -0
  38. package/dist/apps/meet/index.d.ts +5 -0
  39. package/dist/apps/meet/index.js +8 -0
  40. package/dist/apps/settings-video-conferencing/_PersonalRoomCard.d.ts +24 -0
  41. package/dist/apps/settings-video-conferencing/_PersonalRoomCard.js +77 -0
  42. package/dist/apps/settings-video-conferencing/_layout.d.ts +16 -0
  43. package/dist/apps/settings-video-conferencing/_layout.js +8 -0
  44. package/dist/apps/settings-video-conferencing/index.d.ts +16 -0
  45. package/dist/apps/settings-video-conferencing/index.js +92 -0
  46. package/dist/apps/shared/media/activeSpeaker.d.ts +20 -0
  47. package/dist/apps/shared/media/activeSpeaker.js +39 -0
  48. package/dist/apps/shared/media/deviceMedia.d.ts +65 -0
  49. package/dist/apps/shared/media/deviceMedia.js +110 -0
  50. package/dist/apps/shared/media/levelMeter.d.ts +40 -0
  51. package/dist/apps/shared/media/levelMeter.js +61 -0
  52. package/dist/apps/shared/push/GuestSignalingClient.d.ts +89 -0
  53. package/dist/apps/shared/push/GuestSignalingClient.js +291 -0
  54. package/dist/apps/shared/webrtc/MeshConnectionManager.d.ts +97 -0
  55. package/dist/apps/shared/webrtc/MeshConnectionManager.js +262 -0
  56. package/dist/apps/shared/webrtc/realPeerConnection.d.ts +7 -0
  57. package/dist/apps/shared/webrtc/realPeerConnection.js +26 -0
  58. package/dist/apps/shared/webrtc/types.d.ts +94 -0
  59. package/dist/apps/shared/webrtc/types.js +9 -0
  60. package/dist/lib/index.js +25 -0
  61. package/dist/lib/index.js.map +1 -0
  62. package/dist/lib/models/mongo/VideoMeetingInviteeMongo.js +87 -0
  63. package/dist/lib/models/mongo/VideoMeetingInviteeMongo.js.map +1 -0
  64. package/dist/lib/models/mongo/VideoMeetingMongo.js +126 -0
  65. package/dist/lib/models/mongo/VideoMeetingMongo.js.map +1 -0
  66. package/dist/lib/models/sql/VideoMeetingInviteeSQL.js +87 -0
  67. package/dist/lib/models/sql/VideoMeetingInviteeSQL.js.map +1 -0
  68. package/dist/lib/models/sql/VideoMeetingSQL.js +127 -0
  69. package/dist/lib/models/sql/VideoMeetingSQL.js.map +1 -0
  70. package/dist/lib/models/types.js +19 -0
  71. package/dist/lib/models/types.js.map +1 -0
  72. package/dist/lib/mongo.js +13 -0
  73. package/dist/lib/mongo.js.map +1 -0
  74. package/dist/lib/routes/BaseVideoMeetingRoute.js +743 -0
  75. package/dist/lib/routes/BaseVideoMeetingRoute.js.map +1 -0
  76. package/dist/lib/routes/mongo/VideoMeetingRouteMongo.js +31 -0
  77. package/dist/lib/routes/mongo/VideoMeetingRouteMongo.js.map +1 -0
  78. package/dist/lib/routes/sql/VideoMeetingRouteSQL.js +31 -0
  79. package/dist/lib/routes/sql/VideoMeetingRouteSQL.js.map +1 -0
  80. package/dist/lib/sql.js +13 -0
  81. package/dist/lib/sql.js.map +1 -0
  82. package/dist/lib/util/BookingIntegrationUtils.js +115 -0
  83. package/dist/lib/util/BookingIntegrationUtils.js.map +1 -0
  84. package/dist/lib/util/IceServerUtils.js +68 -0
  85. package/dist/lib/util/IceServerUtils.js.map +1 -0
  86. package/dist/lib/util/PublicUrlUtils.js +37 -0
  87. package/dist/lib/util/PublicUrlUtils.js.map +1 -0
  88. package/dist/lib/util/RouteAccessUtils.js +32 -0
  89. package/dist/lib/util/RouteAccessUtils.js.map +1 -0
  90. package/dist/lib/util/TokenUtils.js +33 -0
  91. package/dist/lib/util/TokenUtils.js.map +1 -0
  92. package/dist/types/index.d.ts +20 -0
  93. package/dist/types/models/mongo/VideoMeetingInviteeMongo.d.ts +16 -0
  94. package/dist/types/models/mongo/VideoMeetingMongo.d.ts +23 -0
  95. package/dist/types/models/sql/VideoMeetingInviteeSQL.d.ts +16 -0
  96. package/dist/types/models/sql/VideoMeetingSQL.d.ts +23 -0
  97. package/dist/types/models/types.d.ts +131 -0
  98. package/dist/types/mongo.d.ts +8 -0
  99. package/dist/types/routes/BaseVideoMeetingRoute.d.ts +368 -0
  100. package/dist/types/routes/mongo/VideoMeetingRouteMongo.d.ts +10 -0
  101. package/dist/types/routes/sql/VideoMeetingRouteSQL.d.ts +10 -0
  102. package/dist/types/sql.d.ts +8 -0
  103. package/dist/types/util/BookingIntegrationUtils.d.ts +51 -0
  104. package/dist/types/util/IceServerUtils.d.ts +57 -0
  105. package/dist/types/util/PublicUrlUtils.d.ts +11 -0
  106. package/dist/types/util/RouteAccessUtils.d.ts +8 -0
  107. package/dist/types/util/TokenUtils.d.ts +23 -0
  108. package/package.json +181 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseVideoMeetingRoute.js","sourceRoot":"","sources":["../../../src/routes/BaseVideoMeetingRoute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ ///////////////////////////////////////////////////////////////////////////////
8
+ // Copyright (C) 2026 Jean-Philippe Steinmetz. All rights reserved.
9
+ // SPDX-License-Identifier: MPL-2.0
10
+ ///////////////////////////////////////////////////////////////////////////////
11
+ import { RouteDecorators } from "@rapidrest/service-core";
12
+ import { MailboxMongo } from "@rapidmx/restapi/mongo";
13
+ import { VideoMeetingMongo } from "../../models/mongo/VideoMeetingMongo.js";
14
+ import { VideoMeetingInviteeMongo } from "../../models/mongo/VideoMeetingInviteeMongo.js";
15
+ import { BaseVideoMeetingRoute } from "../BaseVideoMeetingRoute.js";
16
+ const { ApiRoute, Model } = RouteDecorators;
17
+ /** The owner's video meeting management endpoints and the anonymous join endpoint (`/api/mail/video-meetings`). */
18
+ let VideoMeetingRouteMongo = class VideoMeetingRouteMongo extends BaseVideoMeetingRoute {
19
+ constructor() {
20
+ super(...arguments);
21
+ this.meetingClass = VideoMeetingMongo;
22
+ this.inviteeClass = VideoMeetingInviteeMongo;
23
+ this.mailboxClass = MailboxMongo;
24
+ }
25
+ };
26
+ VideoMeetingRouteMongo = __decorate([
27
+ ApiRoute("mail/video-meetings"),
28
+ Model(VideoMeetingMongo)
29
+ ], VideoMeetingRouteMongo);
30
+ export { VideoMeetingRouteMongo };
31
+ //# sourceMappingURL=VideoMeetingRouteMongo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoMeetingRouteMongo.js","sourceRoot":"","sources":["../../../../src/routes/mongo/VideoMeetingRouteMongo.ts"],"names":[],"mappings":";;;;;;AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC;AAE5C,mHAAmH;AAG5G,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,qBAAgF;IAArH;;QACO,iBAAY,GAAQ,iBAAiB,CAAC;QACtC,iBAAY,GAAQ,wBAAwB,CAAC;QAC7C,iBAAY,GAAQ,YAAY,CAAC;IAC/C,CAAC;CAAA,CAAA;AAJY,sBAAsB;IAFlC,QAAQ,CAAC,qBAAqB,CAAC;IAC/B,KAAK,CAAC,iBAAiB,CAAC;GACZ,sBAAsB,CAIlC"}
@@ -0,0 +1,31 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ ///////////////////////////////////////////////////////////////////////////////
8
+ // Copyright (C) 2026 Jean-Philippe Steinmetz. All rights reserved.
9
+ // SPDX-License-Identifier: MPL-2.0
10
+ ///////////////////////////////////////////////////////////////////////////////
11
+ import { RouteDecorators } from "@rapidrest/service-core";
12
+ import { MailboxSQL } from "@rapidmx/restapi/sql";
13
+ import { VideoMeetingSQL } from "../../models/sql/VideoMeetingSQL.js";
14
+ import { VideoMeetingInviteeSQL } from "../../models/sql/VideoMeetingInviteeSQL.js";
15
+ import { BaseVideoMeetingRoute } from "../BaseVideoMeetingRoute.js";
16
+ const { ApiRoute, Model } = RouteDecorators;
17
+ /** The owner's video meeting management endpoints and the anonymous join endpoint (`/api/mail/video-meetings`). */
18
+ let VideoMeetingRouteSQL = class VideoMeetingRouteSQL extends BaseVideoMeetingRoute {
19
+ constructor() {
20
+ super(...arguments);
21
+ this.meetingClass = VideoMeetingSQL;
22
+ this.inviteeClass = VideoMeetingInviteeSQL;
23
+ this.mailboxClass = MailboxSQL;
24
+ }
25
+ };
26
+ VideoMeetingRouteSQL = __decorate([
27
+ ApiRoute("mail/video-meetings"),
28
+ Model(VideoMeetingSQL)
29
+ ], VideoMeetingRouteSQL);
30
+ export { VideoMeetingRouteSQL };
31
+ //# sourceMappingURL=VideoMeetingRouteSQL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoMeetingRouteSQL.js","sourceRoot":"","sources":["../../../../src/routes/sql/VideoMeetingRouteSQL.ts"],"names":[],"mappings":";;;;;;AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC;AAE5C,mHAAmH;AAG5G,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,qBAA0E;IAA7G;;QACO,iBAAY,GAAQ,eAAe,CAAC;QACpC,iBAAY,GAAQ,sBAAsB,CAAC;QAC3C,iBAAY,GAAQ,UAAU,CAAC;IAC7C,CAAC;CAAA,CAAA;AAJY,oBAAoB;IAFhC,QAAQ,CAAC,qBAAqB,CAAC;IAC/B,KAAK,CAAC,eAAe,CAAC;GACV,oBAAoB,CAIhC"}
@@ -0,0 +1,13 @@
1
+ ///////////////////////////////////////////////////////////////////////////////
2
+ // Copyright (C) 2026 Jean-Philippe Steinmetz. All rights reserved.
3
+ // SPDX-License-Identifier: MPL-2.0
4
+ ///////////////////////////////////////////////////////////////////////////////
5
+ /**
6
+ * This plugin's `./sql` entry point: exactly the classes a server host loads for a SQL deployment - the video
7
+ * meeting models and the route mounted at `/api/mail/video-meetings`. Anything else exported here would be
8
+ * registered by the host too, so the abstract route and utilities stay in the package root.
9
+ */
10
+ export { VideoMeetingSQL } from "./models/sql/VideoMeetingSQL.js";
11
+ export { VideoMeetingInviteeSQL } from "./models/sql/VideoMeetingInviteeSQL.js";
12
+ export { VideoMeetingRouteSQL } from "./routes/sql/VideoMeetingRouteSQL.js";
13
+ //# sourceMappingURL=sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/sql.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,mCAAmC;AACnC,+EAA+E;AAC/E;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC"}
@@ -0,0 +1,115 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ ///////////////////////////////////////////////////////////////////////////////
11
+ // Copyright (C) 2026 Jean-Philippe Steinmetz. All rights reserved.
12
+ // SPDX-License-Identifier: MPL-2.0
13
+ ///////////////////////////////////////////////////////////////////////////////
14
+ import { ObjectDecorators } from "@rapidrest/core";
15
+ import { RepoUtils } from "@rapidrest/service-core";
16
+ import { buildBaseUrl } from "./PublicUrlUtils.js";
17
+ import { mintJoinToken } from "./TokenUtils.js";
18
+ import { VideoMeetingStatus, VideoMeetingVisibility } from "../models/types.js";
19
+ const { Config } = ObjectDecorators;
20
+ /**
21
+ * Mirrors `BaseVideoMeetingRoute`'s own `MAX_TITLE_LENGTH`/`MAX_DISPLAY_NAME_LENGTH` bounds. This function has no
22
+ * HTTP request of its own to reject with a `400` (see the function doc comment below on why a bound is silently
23
+ * clamped here instead), but a caller-supplied title/invitee name is still free text that ends up on a stored row,
24
+ * so the same limits apply.
25
+ */
26
+ const MAX_TITLE_LENGTH = 200;
27
+ const MAX_DISPLAY_NAME_LENGTH = 200;
28
+ /**
29
+ * Resolves `mail:videoconf:public_url` the same way `BaseVideoMeetingRoute` resolves it for its own `publicUrl`
30
+ * field. `createSingleInviteeVideoMeeting()` is a plain function, not a route/injectable class, so it has no
31
+ * `@Config`-decorated field of its own for `ObjectFactory` to populate at construction time - this tiny,
32
+ * `ObjectFactory.initialize()`-able holder exists solely to get the same config resolution `@Config` normally
33
+ * provides. Not exported: nothing outside this file needs it.
34
+ */
35
+ class PublicUrlConfigHolder {
36
+ constructor() {
37
+ this.publicUrl = "";
38
+ }
39
+ }
40
+ __decorate([
41
+ Config("mail:videoconf:public_url", ""),
42
+ __metadata("design:type", String)
43
+ ], PublicUrlConfigHolder.prototype, "publicUrl", void 0);
44
+ /**
45
+ * **The integration surface other plugins call.** This is the one thing `@rapidmx/videoconf-plugin` exposes for
46
+ * another, independently-installed plugin to use in-process: mints a private `VideoMeeting` for exactly one
47
+ * invitee and returns just that invitee's join URL. `booking-plugin` is today's only caller - a video-location
48
+ * booking with no host-preset URL mints one of these automatically (the booker as the sole invitee, matching this
49
+ * plugin's own "one link per invitee" private-meeting design) - see that package's `BaseBookingRoute`/`.claude/
50
+ * NOTES.md` for the calling side, and this plugin's own `.claude/NOTES.md` for the design this integration was
51
+ * built against.
52
+ *
53
+ * This is deliberately the ONLY integration point this package exposes: everything else about `VideoMeeting`/
54
+ * `VideoMeetingInvitee` (routes, signaling, the join flow, cancellation, ...) is reached only through this
55
+ * package's own HTTP API. A caller never gets a `VideoMeeting`/`VideoMeetingInvitee` instance back, only the one
56
+ * value it actually needs, so this package stays free to change anything else about their shape without breaking
57
+ * a caller compiled against an older version.
58
+ *
59
+ * Mirrors `BaseVideoMeetingRoute.create()`'s own private-meeting-plus-single-invitee path exactly, including its
60
+ * `acl: { uid: instance.uid, parentUid: mailboxUid, records: [] }` claim (see that class's doc comment on why
61
+ * `VideoMeeting` needs its own per-record `AccessControlList`) - but skips everything about validating an HTTP
62
+ * request body or checking a caller's own permission on the mailbox: this is an in-process call from code that has
63
+ * already established both by its own means (e.g. `booking-plugin`'s already-authorized, already-validated
64
+ * booking flow).
65
+ *
66
+ * A caller-supplied `title`/`invitee.displayName` longer than this package's own route-level limits is silently
67
+ * truncated rather than rejected - there is no request here to answer with a `400`, and a slightly-shortened title
68
+ * is a far better outcome than throwing back into whatever the caller's own flow was doing. (`booking-plugin`'s own
69
+ * call site additionally wraps this whole function in a `try`/`catch` so even a genuine failure here - a database
70
+ * error, a stale/misconfigured deployment - never blocks the caller's own operation; see its doc comment.)
71
+ *
72
+ * @param objectFactory The caller's own `ObjectFactory` - used exactly as `BaseVideoMeetingRoute` uses its own, to
73
+ * build the repos this needs and to resolve `mail:videoconf:public_url`.
74
+ * @param meetingClass The concrete `VideoMeeting` model class for the caller's own backend (`VideoMeetingMongo`/
75
+ * `VideoMeetingSQL`, from this package's `./mongo`/`./sql` entry points) - this package has no notion of "Mongo" vs.
76
+ * "SQL" itself (see `BaseVideoMeetingRoute`'s identical `meetingClass` constructor parameter), so the caller
77
+ * supplies it, the same way `booking-plugin`'s own `BookingRouteMongo`/`BookingRouteSQL` supply their own concrete
78
+ * classes to `BaseBookingRoute`.
79
+ * @param inviteeClass The concrete `VideoMeetingInvitee` model class for the same backend.
80
+ * @param mailboxUid The mailbox the meeting is minted under - the caller's own already-authorized mailbox.
81
+ * @param title A short, human-readable meeting title (e.g. the caller's own meeting/event name).
82
+ * @param invitee The sole invitee of the new private meeting.
83
+ * @returns The invitee's join URL, or `undefined` when `mail:videoconf:public_url` isn't configured on this
84
+ * deployment - mirroring `VideoMeetingInviteeJoinInfo.joinUrl`'s identical semantics exactly. Never throws for
85
+ * that reason alone; a genuine failure (a bad `objectFactory`, a database error, ...) still propagates.
86
+ */
87
+ export async function createSingleInviteeVideoMeeting(objectFactory, meetingClass, inviteeClass, mailboxUid, title, invitee) {
88
+ const meetingRepo = await objectFactory.newInstance(RepoUtils, { name: meetingClass.name, args: [meetingClass] });
89
+ const inviteeRepo = await objectFactory.newInstance(RepoUtils, { name: inviteeClass.name, args: [inviteeClass] });
90
+ const configHolder = await objectFactory.initialize(new PublicUrlConfigHolder());
91
+ const safeTitle = title.trim().slice(0, MAX_TITLE_LENGTH) || "Video meeting";
92
+ // Constructed before `create()` is called (rather than inline), so its own, already-generated `uid` (every
93
+ // `BaseEntity` mints one on construction) is what `acl.uid` below claims the meeting's own per-record ACL
94
+ // under - see `BaseVideoMeetingRoute.persistMeeting()`'s identical reasoning.
95
+ const meetingInstance = new meetingClass({
96
+ mailboxUid,
97
+ title: safeTitle,
98
+ visibility: VideoMeetingVisibility.PRIVATE,
99
+ status: VideoMeetingStatus.SCHEDULED,
100
+ });
101
+ const meeting = await meetingRepo.create(meetingInstance, {
102
+ ignoreACL: true,
103
+ acl: { uid: meetingInstance.uid, parentUid: mailboxUid, records: [] },
104
+ });
105
+ const inviteeRow = await inviteeRepo.create(new inviteeClass({
106
+ meetingUid: meeting.uid,
107
+ mailboxUid,
108
+ email: invitee.email.trim().toLowerCase(),
109
+ displayName: invitee.displayName?.trim().slice(0, MAX_DISPLAY_NAME_LENGTH) || undefined,
110
+ joinToken: mintJoinToken(),
111
+ }), { ignoreACL: true });
112
+ const base = buildBaseUrl(configHolder.publicUrl);
113
+ return base ? `${base}/${inviteeRow.joinToken}` : undefined;
114
+ }
115
+ //# sourceMappingURL=BookingIntegrationUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BookingIntegrationUtils.js","sourceRoot":"","sources":["../../../src/util/BookingIntegrationUtils.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAiB,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAqC,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACnH,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAQpC;;;;;;GAMG;AACH,MAAM,qBAAqB;IAA3B;QAEW,cAAS,GAAW,EAAE,CAAC;IAClC,CAAC;CAAA;AADU;IADN,MAAM,CAAC,2BAA2B,EAAE,EAAE,CAAC;;wDACV;AAGlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACjD,aAA4B,EAC5B,YAAwC,EACxC,YAAyC,EACzC,UAAkB,EAClB,KAAa,EACb,OAA6B;IAE7B,MAAM,WAAW,GAAkB,MAAM,aAAa,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjI,MAAM,WAAW,GAAmB,MAAM,aAAa,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAClI,MAAM,YAAY,GAA0B,MAAM,aAAa,CAAC,UAAU,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;IAExG,MAAM,SAAS,GAAW,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,IAAI,eAAe,CAAC;IAErF,2GAA2G;IAC3G,0GAA0G;IAC1G,8EAA8E;IAC9E,MAAM,eAAe,GAAO,IAAI,YAAY,CAAC;QACzC,UAAU;QACV,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,sBAAsB,CAAC,OAAO;QAC1C,MAAM,EAAE,kBAAkB,CAAC,SAAS;KACvC,CAAC,CAAC;IACH,MAAM,OAAO,GAAO,MAAM,WAAW,CAAC,MAAM,CAAC,eAAe,EAAE;QAC1D,SAAS,EAAE,IAAI;QACf,GAAG,EAAE,EAAE,GAAG,EAAE,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE;KACxE,CAAC,CAAC;IAEH,MAAM,UAAU,GAAQ,MAAM,WAAW,CAAC,MAAM,CAC5C,IAAI,YAAY,CAAC;QACb,UAAU,EAAE,OAAO,CAAC,GAAG;QACvB,UAAU;QACV,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QACzC,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,IAAI,SAAS;QACvF,SAAS,EAAE,aAAa,EAAE;KAC7B,CAAC,EACF,EAAE,SAAS,EAAE,IAAI,EAAE,CACtB,CAAC;IAEF,MAAM,IAAI,GAAuB,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC"}
@@ -0,0 +1,68 @@
1
+ ///////////////////////////////////////////////////////////////////////////////
2
+ // Copyright (C) 2026 Jean-Philippe Steinmetz. All rights reserved.
3
+ // SPDX-License-Identifier: MPL-2.0
4
+ ///////////////////////////////////////////////////////////////////////////////
5
+ import * as crypto from "crypto";
6
+ /** Always-available, free public STUN servers - discovery only, no media relay. Two independent providers, so a
7
+ * call still has STUN available if one of them is ever unreachable. */
8
+ export const DEFAULT_STUN_SERVERS = [
9
+ { urls: "stun:stun.l.google.com:19302" },
10
+ { urls: "stun:stun.cloudflare.com:3478" },
11
+ ];
12
+ /** How long a minted TURN REST credential remains valid for, in seconds. One hour comfortably covers ICE
13
+ * negotiation and reconnection attempts for the length of a typical call without minting a fresh credential on
14
+ * every join. */
15
+ export const DEFAULT_TURN_CREDENTIAL_TTL_SECONDS = 60 * 60;
16
+ /**
17
+ * Generates a coturn-style time-limited REST API credential: `username` is `<unix-expiry-timestamp>:<userPart>`,
18
+ * and `credential` is `base64(HMAC-SHA1(sharedSecret, username))`. This is coturn's own documented
19
+ * `static-auth-secret` mechanism (the `turnserver -a -X` REST credential algorithm) - implemented here exactly,
20
+ * not guessed at: the TURN server derives the same HMAC independently at connection time using the timestamp
21
+ * embedded in the username it's handed, so no round trip to the TURN server is needed to mint one.
22
+ *
23
+ * @param sharedSecret The operator's `mail:videoconf:turn:shared_secret`.
24
+ * @param userPart The identity portion of the username - the configured `mail:videoconf:turn:username`, or a
25
+ * generated one when that's unset (see `buildIceServers()`).
26
+ * @param ttlSeconds How long the credential remains valid for, from `now`.
27
+ * @param now The time to compute the expiry from. Defaults to the real current time; a test may pass a fixed
28
+ * value for a deterministic assertion.
29
+ */
30
+ export function turnRestCredential(sharedSecret, userPart, ttlSeconds = DEFAULT_TURN_CREDENTIAL_TTL_SECONDS, now = new Date()) {
31
+ const expiry = Math.floor(now.getTime() / 1000) + Math.max(0, Math.floor(ttlSeconds));
32
+ const username = `${expiry}:${userPart}`;
33
+ const credential = crypto.createHmac("sha1", sharedSecret).update(username).digest("base64");
34
+ return { username, credential };
35
+ }
36
+ /**
37
+ * Builds the full ICE server list for a join response: the hardcoded public STUN servers, plus a TURN entry when
38
+ * `settings.url` is configured. When a `sharedSecret` is also configured, the TURN entry carries a fresh,
39
+ * time-limited credential (`turnRestCredential()`) rather than the static `username`/`credential` pair, which is
40
+ * used verbatim only when no shared secret is set. A TURN url with neither a shared secret nor a static
41
+ * credential is still included with no credentials at all - some self-hosted TURN servers are deliberately run
42
+ * without authentication for testing, and it costs nothing to pass the url through as configured.
43
+ *
44
+ * @param settings The `mail:videoconf:turn:*` settings, exactly as configured.
45
+ * @param options `ttlSeconds`/`now` are forwarded to `turnRestCredential()`. `randomUserPart` supplies the
46
+ * generated identity portion of a shared-secret credential's username when `settings.username` is unset -
47
+ * defaults to a fresh random hex string; a test may override it for a deterministic assertion.
48
+ */
49
+ export function buildIceServers(settings, options) {
50
+ const servers = [...DEFAULT_STUN_SERVERS];
51
+ const url = settings.url.trim();
52
+ if (!url) {
53
+ return servers;
54
+ }
55
+ if (settings.sharedSecret.trim()) {
56
+ const userPart = settings.username.trim() || (options?.randomUserPart ?? (() => crypto.randomBytes(8).toString("hex")))();
57
+ const { username, credential } = turnRestCredential(settings.sharedSecret.trim(), userPart, options?.ttlSeconds, options?.now);
58
+ servers.push({ urls: url, username, credential });
59
+ }
60
+ else if (settings.username.trim() && settings.credential.trim()) {
61
+ servers.push({ urls: url, username: settings.username.trim(), credential: settings.credential.trim() });
62
+ }
63
+ else {
64
+ servers.push({ urls: url });
65
+ }
66
+ return servers;
67
+ }
68
+ //# sourceMappingURL=IceServerUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IceServerUtils.js","sourceRoot":"","sources":["../../../src/util/IceServerUtils.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAkBjC;uEACuE;AACvE,MAAM,CAAC,MAAM,oBAAoB,GAA+B;IAC5D,EAAE,IAAI,EAAE,8BAA8B,EAAE;IACxC,EAAE,IAAI,EAAE,+BAA+B,EAAE;CAC5C,CAAC;AAEF;;iBAEiB;AACjB,MAAM,CAAC,MAAM,mCAAmC,GAAW,EAAE,GAAG,EAAE,CAAC;AAEnE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAC9B,YAAoB,EACpB,QAAgB,EAChB,aAAqB,mCAAmC,EACxD,MAAY,IAAI,IAAI,EAAE;IAEtB,MAAM,MAAM,GAAW,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9F,MAAM,QAAQ,GAAW,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAC;IACjD,MAAM,UAAU,GAAW,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AACpC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAC3B,QAAsB,EACtB,OAA4E;IAE5E,MAAM,OAAO,GAAsB,CAAC,GAAG,oBAAoB,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAW,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAW,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAClI,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC/H,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;IACtD,CAAC;SAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5G,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,37 @@
1
+ ///////////////////////////////////////////////////////////////////////////////
2
+ // Copyright (C) 2026 Jean-Philippe Steinmetz. All rights reserved.
3
+ // SPDX-License-Identifier: MPL-2.0
4
+ ///////////////////////////////////////////////////////////////////////////////
5
+ /**
6
+ * Normalizes a `mail:videoconf:public_url`-shaped setting into a base URL (origin plus path, no trailing slash),
7
+ * or `undefined` when it's unset or unsafe to advertise - mirroring `@rapidmx/autodiscover`'s `BaseAutodiscoverRoute`
8
+ * private `baseUrl` getter exactly (that helper isn't exported from `@rapidmx/restapi` for reuse, so this is a
9
+ * small, independent copy of the same validation): the value must parse as a URL, use `https:` (plain `http:` is
10
+ * only tolerated for a loopback host, for local development), and carry no credentials, query string or fragment -
11
+ * any of which would produce a broken or insecure join link once a token is appended.
12
+ *
13
+ * @param rawUrl The configured setting value, e.g. `https://mail.example.com/meet`.
14
+ */
15
+ export function buildBaseUrl(rawUrl) {
16
+ const value = (rawUrl ?? "").trim();
17
+ if (!value) {
18
+ return undefined;
19
+ }
20
+ let url;
21
+ try {
22
+ url = new URL(value);
23
+ }
24
+ catch {
25
+ return undefined;
26
+ }
27
+ const loopback = ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname);
28
+ if (url.protocol !== "https:" && !(url.protocol === "http:" && loopback)) {
29
+ return undefined;
30
+ }
31
+ // Checked on the raw string: `URL.search`/`hash` are empty for a bare trailing `?`/`#`.
32
+ if (value.includes("?") || value.includes("#") || url.username || url.password) {
33
+ return undefined;
34
+ }
35
+ return `${url.origin}${url.pathname.replace(/\/+$/, "")}`;
36
+ }
37
+ //# sourceMappingURL=PublicUrlUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PublicUrlUtils.js","sourceRoot":"","sources":["../../../src/util/PublicUrlUtils.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,mCAAmC;AACnC,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,MAA0B;IACnD,MAAM,KAAK,GAAW,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACD,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,QAAQ,GAAY,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrF,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC;QACvE,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,wFAAwF;IACxF,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC7E,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * A small, self-contained copy of `@rapidmx/restapi`'s internal `util/MailAccessUtils.ts` (`stripTrustedRoles()`/
3
+ * `isTrustedRole()`) - that module is not exported from `@rapidmx/restapi`'s public surface (a plugin can only
4
+ * import what the package's own `src/index.ts` re-exports), so a plugin that wants the same "no role widens
5
+ * access" posture for a mailbox-scoped entity has to reimplement it rather than reuse it.
6
+ *
7
+ * **Why this exists.** `@rapidrest/service-core`'s `ACLUtils.hasPermission()` answers `true` for any caller
8
+ * holding a trusted role ("trusted users always have permission") - the right behavior for administering the
9
+ * platform, the wrong one for a person's private mail data, video meetings included. `BaseVideoMeetingRoute`
10
+ * therefore never hands `aclUtils.hasPermission()` (or `RepoUtils` with `{ user }` and no `ignoreACL`) the caller
11
+ * as given; it always strips trusted roles first via `stripTrustedRoles()` below, so a mailbox is reachable only
12
+ * by its owner or an explicit delegate - the same rule this session's other work established for `/api/acls` and
13
+ * every other mailbox-scoped route in `@rapidmx/restapi` itself.
14
+ */
15
+ /** Whether `role` is one of `trustedRoles` - as itself or org-prefixed (`<orgUid>.<role>`), the form
16
+ * `UserUtils.hasRole()` also accepts. */
17
+ function isTrustedRole(role, trustedRoles) {
18
+ return trustedRoles.some((trusted) => role === trusted || role.endsWith(`.${trusted}`));
19
+ }
20
+ /**
21
+ * `user` without its trusted roles (and without its elevation), for handing to code that would otherwise treat
22
+ * the caller as a superuser: `ACLUtils.hasPermission()`, `RepoUtils` with `{ user }` and no `ignoreACL`. Everything
23
+ * else about the identity - uid, other roles, scopes - is unchanged, so an owner or delegate record still
24
+ * matches. Returns `user` itself when it has nothing to strip.
25
+ */
26
+ export function stripTrustedRoles(user, trustedRoles) {
27
+ if (!user || !Array.isArray(user.roles) || !user.roles.some((role) => isTrustedRole(role, trustedRoles))) {
28
+ return user;
29
+ }
30
+ return { ...user, roles: user.roles.filter((role) => !isTrustedRole(role, trustedRoles)), elevated: -1 };
31
+ }
32
+ //# sourceMappingURL=RouteAccessUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteAccessUtils.js","sourceRoot":"","sources":["../../../src/util/RouteAccessUtils.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;GAaG;AAEH;yCACyC;AACzC,SAAS,aAAa,CAAC,IAAY,EAAE,YAA+B;IAChE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAyB,EAAE,YAA+B;IACxF,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QACvG,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC;AAC7G,CAAC"}
@@ -0,0 +1,33 @@
1
+ ///////////////////////////////////////////////////////////////////////////////
2
+ // Copyright (C) 2026 Jean-Philippe Steinmetz. All rights reserved.
3
+ // SPDX-License-Identifier: MPL-2.0
4
+ ///////////////////////////////////////////////////////////////////////////////
5
+ import * as crypto from "crypto";
6
+ /**
7
+ * The exact shape `mintJoinToken()` produces: 32 random bytes, base64url without padding - mirroring
8
+ * `booking-plugin`'s `Booking.manageToken` shape/entropy exactly (see its `BaseBookingRoute.MANAGE_TOKEN_PATTERN`).
9
+ * Checked before any lookup, so a candidate value is always a plain literal by the time it reaches a query.
10
+ */
11
+ export const JOIN_TOKEN_PATTERN = /^[A-Za-z0-9_-]{43}$/;
12
+ /**
13
+ * The exact shape `mintPublicSlug()` produces: 8 random bytes, base64url without padding - deliberately a
14
+ * different length than `JOIN_TOKEN_PATTERN` (11 characters vs. 43), so the two can never collide and
15
+ * `BaseVideoMeetingRoute.join()` can tell which kind of value it was handed from its length alone, without
16
+ * ambiguity, rather than trying both lookups against a value that only matched one of them (see that method's
17
+ * doc comment for the disambiguation this enables).
18
+ */
19
+ export const PUBLIC_SLUG_PATTERN = /^[A-Za-z0-9_-]{11}$/;
20
+ /** Mints a private meeting invitee's `joinToken`: 32 random bytes, base64url. Matches `JOIN_TOKEN_PATTERN`. */
21
+ export function mintJoinToken() {
22
+ return crypto.randomBytes(32).toString("base64url");
23
+ }
24
+ /**
25
+ * Mints a public meeting's `publicSlug`: 8 random bytes, base64url (~48 bits of entropy). Matches
26
+ * `PUBLIC_SLUG_PATTERN`. Random rather than name-derived (unlike `booking-plugin`'s human-authored
27
+ * `BookingType.slug`) since nothing about a video meeting is memorable or worth choosing by hand - it only ever
28
+ * appears embedded in a link.
29
+ */
30
+ export function mintPublicSlug() {
31
+ return crypto.randomBytes(8).toString("base64url");
32
+ }
33
+ //# sourceMappingURL=TokenUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenUtils.js","sourceRoot":"","sources":["../../../src/util/TokenUtils.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAW,qBAAqB,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAW,qBAAqB,CAAC;AAEjE,+GAA+G;AAC/G,MAAM,UAAU,aAAa;IACzB,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC1B,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Private and public WebRTC video conferencing for a `@rapidmx/restapi`-based mail server: a mailbox owner creates
3
+ * a `VideoMeeting` (private, with one join link per invitee, or public, with a single shareable link), and a
4
+ * participant - the owner or an anonymous guest holding a valid link - joins it and exchanges WebRTC signaling
5
+ * over the server's existing `/push` channel (see `BaseVideoMeetingRoute`'s class doc comment).
6
+ *
7
+ * This module exports only the backend-agnostic surface: the entity interfaces, the pure ICE-server/public-URL/
8
+ * token utilities, the abstract route, and `createSingleInviteeVideoMeeting()` - the small integration function
9
+ * another plugin (`booking-plugin`, today) calls in-process to mint a private meeting without either package
10
+ * taking a hard dependency on the other (see `util/BookingIntegrationUtils.ts`'s doc comment). The concrete
11
+ * Mongo/SQL classes a server loads (models and the route mounted at `/api/mail/video-meetings`) come from this
12
+ * package's `./mongo` and `./sql` entry points.
13
+ */
14
+ export * from "./models/types.js";
15
+ export * from "./util/BookingIntegrationUtils.js";
16
+ export * from "./util/IceServerUtils.js";
17
+ export * from "./util/PublicUrlUtils.js";
18
+ export * from "./util/RouteAccessUtils.js";
19
+ export * from "./util/TokenUtils.js";
20
+ export * from "./routes/BaseVideoMeetingRoute.js";
@@ -0,0 +1,16 @@
1
+ import { BaseMongoEntity } from "@rapidrest/service-core";
2
+ import { VideoMeetingInvitee } from "../types.js";
3
+ /**
4
+ * Implementation of the `VideoMeetingInvitee` interface for storage in a MongoDB database. If SQL is desired,
5
+ * please use `models.sql.VideoMeetingInviteeSQL` instead.
6
+ *
7
+ * @author Jean-Philippe Steinmetz
8
+ */
9
+ export declare class VideoMeetingInviteeMongo extends BaseMongoEntity implements VideoMeetingInvitee {
10
+ meetingUid: string;
11
+ mailboxUid: string;
12
+ email: string;
13
+ displayName?: string;
14
+ joinToken: string;
15
+ constructor(other?: Partial<VideoMeetingInviteeMongo>);
16
+ }
@@ -0,0 +1,23 @@
1
+ import { BaseMongoEntity } from "@rapidrest/service-core";
2
+ import { VideoMeeting, VideoMeetingStatus, VideoMeetingVisibility } from "../types.js";
3
+ /**
4
+ * Implementation of the `VideoMeeting` interface for storage in a MongoDB database. If SQL is desired, please use
5
+ * `models.sql.VideoMeetingSQL` instead.
6
+ *
7
+ * `recordACL: true` - see the `VideoMeeting` interface's own doc comment for why this entity, unlike most of this
8
+ * codebase's mailbox-scoped data, gets its own per-record `AccessControlList`.
9
+ *
10
+ * @author Jean-Philippe Steinmetz
11
+ */
12
+ export declare class VideoMeetingMongo extends BaseMongoEntity implements VideoMeeting {
13
+ mailboxUid: string;
14
+ calendarEventUid?: string;
15
+ title: string;
16
+ visibility: VideoMeetingVisibility;
17
+ publicSlug?: string;
18
+ organizerSlug?: string;
19
+ status: VideoMeetingStatus;
20
+ startTime?: Date;
21
+ endTime?: Date;
22
+ constructor(other?: Partial<VideoMeetingMongo>);
23
+ }
@@ -0,0 +1,16 @@
1
+ import { BaseEntity } from "@rapidrest/service-core";
2
+ import { VideoMeetingInvitee } from "../types.js";
3
+ /**
4
+ * Implementation of the `VideoMeetingInvitee` interface for storage in a SQL database. If MongoDB is desired,
5
+ * please use `models.mongo.VideoMeetingInviteeMongo` instead.
6
+ *
7
+ * @author Jean-Philippe Steinmetz
8
+ */
9
+ export declare class VideoMeetingInviteeSQL extends BaseEntity implements VideoMeetingInvitee {
10
+ meetingUid: string;
11
+ mailboxUid: string;
12
+ email: string;
13
+ displayName?: string;
14
+ joinToken: string;
15
+ constructor(other?: Partial<VideoMeetingInviteeSQL>);
16
+ }
@@ -0,0 +1,23 @@
1
+ import { BaseEntity } from "@rapidrest/service-core";
2
+ import { VideoMeeting, VideoMeetingStatus, VideoMeetingVisibility } from "../types.js";
3
+ /**
4
+ * Implementation of the `VideoMeeting` interface for storage in a SQL database. If MongoDB is desired, please use
5
+ * `models.mongo.VideoMeetingMongo` instead.
6
+ *
7
+ * `recordACL: true` - see the `VideoMeeting` interface's own doc comment for why this entity, unlike most of this
8
+ * codebase's mailbox-scoped data, gets its own per-record `AccessControlList`.
9
+ *
10
+ * @author Jean-Philippe Steinmetz
11
+ */
12
+ export declare class VideoMeetingSQL extends BaseEntity implements VideoMeeting {
13
+ mailboxUid: string;
14
+ calendarEventUid?: string;
15
+ title: string;
16
+ visibility: VideoMeetingVisibility;
17
+ publicSlug?: string;
18
+ organizerSlug?: string;
19
+ status: VideoMeetingStatus;
20
+ startTime?: Date;
21
+ endTime?: Date;
22
+ constructor(other?: Partial<VideoMeetingSQL>);
23
+ }