@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.
- package/LICENSE +382 -0
- package/README.md +38 -0
- package/apps/meet/[token].tsx +144 -0
- package/apps/meet/_CallControls.tsx +69 -0
- package/apps/meet/_CallView.tsx +338 -0
- package/apps/meet/_MeetChrome.tsx +30 -0
- package/apps/meet/_MeetLobby.tsx +223 -0
- package/apps/meet/_ParticipantTile.tsx +66 -0
- package/apps/meet/_layout.tsx +34 -0
- package/apps/meet/_meetApi.ts +66 -0
- package/apps/meet/index.tsx +22 -0
- package/apps/settings-video-conferencing/_PersonalRoomCard.tsx +140 -0
- package/apps/settings-video-conferencing/_layout.tsx +47 -0
- package/apps/settings-video-conferencing/index.tsx +192 -0
- package/apps/shared/media/activeSpeaker.ts +45 -0
- package/apps/shared/media/deviceMedia.ts +141 -0
- package/apps/shared/media/levelMeter.ts +91 -0
- package/apps/shared/push/GuestSignalingClient.ts +338 -0
- package/apps/shared/webrtc/MeshConnectionManager.ts +350 -0
- package/apps/shared/webrtc/realPeerConnection.ts +37 -0
- package/apps/shared/webrtc/types.ts +90 -0
- package/dist/apps/meet/[token].d.ts +33 -0
- package/dist/apps/meet/[token].js +101 -0
- package/dist/apps/meet/_CallControls.d.ts +18 -0
- package/dist/apps/meet/_CallControls.js +6 -0
- package/dist/apps/meet/_CallView.d.ts +41 -0
- package/dist/apps/meet/_CallView.js +225 -0
- package/dist/apps/meet/_MeetChrome.d.ts +13 -0
- package/dist/apps/meet/_MeetChrome.js +10 -0
- package/dist/apps/meet/_MeetLobby.d.ts +29 -0
- package/dist/apps/meet/_MeetLobby.js +120 -0
- package/dist/apps/meet/_ParticipantTile.d.ts +18 -0
- package/dist/apps/meet/_ParticipantTile.js +25 -0
- package/dist/apps/meet/_layout.d.ts +9 -0
- package/dist/apps/meet/_layout.js +8 -0
- package/dist/apps/meet/_meetApi.d.ts +47 -0
- package/dist/apps/meet/_meetApi.js +23 -0
- package/dist/apps/meet/index.d.ts +5 -0
- package/dist/apps/meet/index.js +8 -0
- package/dist/apps/settings-video-conferencing/_PersonalRoomCard.d.ts +24 -0
- package/dist/apps/settings-video-conferencing/_PersonalRoomCard.js +77 -0
- package/dist/apps/settings-video-conferencing/_layout.d.ts +16 -0
- package/dist/apps/settings-video-conferencing/_layout.js +8 -0
- package/dist/apps/settings-video-conferencing/index.d.ts +16 -0
- package/dist/apps/settings-video-conferencing/index.js +92 -0
- package/dist/apps/shared/media/activeSpeaker.d.ts +20 -0
- package/dist/apps/shared/media/activeSpeaker.js +39 -0
- package/dist/apps/shared/media/deviceMedia.d.ts +65 -0
- package/dist/apps/shared/media/deviceMedia.js +110 -0
- package/dist/apps/shared/media/levelMeter.d.ts +40 -0
- package/dist/apps/shared/media/levelMeter.js +61 -0
- package/dist/apps/shared/push/GuestSignalingClient.d.ts +89 -0
- package/dist/apps/shared/push/GuestSignalingClient.js +291 -0
- package/dist/apps/shared/webrtc/MeshConnectionManager.d.ts +97 -0
- package/dist/apps/shared/webrtc/MeshConnectionManager.js +262 -0
- package/dist/apps/shared/webrtc/realPeerConnection.d.ts +7 -0
- package/dist/apps/shared/webrtc/realPeerConnection.js +26 -0
- package/dist/apps/shared/webrtc/types.d.ts +94 -0
- package/dist/apps/shared/webrtc/types.js +9 -0
- package/dist/lib/index.js +25 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/models/mongo/VideoMeetingInviteeMongo.js +87 -0
- package/dist/lib/models/mongo/VideoMeetingInviteeMongo.js.map +1 -0
- package/dist/lib/models/mongo/VideoMeetingMongo.js +126 -0
- package/dist/lib/models/mongo/VideoMeetingMongo.js.map +1 -0
- package/dist/lib/models/sql/VideoMeetingInviteeSQL.js +87 -0
- package/dist/lib/models/sql/VideoMeetingInviteeSQL.js.map +1 -0
- package/dist/lib/models/sql/VideoMeetingSQL.js +127 -0
- package/dist/lib/models/sql/VideoMeetingSQL.js.map +1 -0
- package/dist/lib/models/types.js +19 -0
- package/dist/lib/models/types.js.map +1 -0
- package/dist/lib/mongo.js +13 -0
- package/dist/lib/mongo.js.map +1 -0
- package/dist/lib/routes/BaseVideoMeetingRoute.js +743 -0
- package/dist/lib/routes/BaseVideoMeetingRoute.js.map +1 -0
- package/dist/lib/routes/mongo/VideoMeetingRouteMongo.js +31 -0
- package/dist/lib/routes/mongo/VideoMeetingRouteMongo.js.map +1 -0
- package/dist/lib/routes/sql/VideoMeetingRouteSQL.js +31 -0
- package/dist/lib/routes/sql/VideoMeetingRouteSQL.js.map +1 -0
- package/dist/lib/sql.js +13 -0
- package/dist/lib/sql.js.map +1 -0
- package/dist/lib/util/BookingIntegrationUtils.js +115 -0
- package/dist/lib/util/BookingIntegrationUtils.js.map +1 -0
- package/dist/lib/util/IceServerUtils.js +68 -0
- package/dist/lib/util/IceServerUtils.js.map +1 -0
- package/dist/lib/util/PublicUrlUtils.js +37 -0
- package/dist/lib/util/PublicUrlUtils.js.map +1 -0
- package/dist/lib/util/RouteAccessUtils.js +32 -0
- package/dist/lib/util/RouteAccessUtils.js.map +1 -0
- package/dist/lib/util/TokenUtils.js +33 -0
- package/dist/lib/util/TokenUtils.js.map +1 -0
- package/dist/types/index.d.ts +20 -0
- package/dist/types/models/mongo/VideoMeetingInviteeMongo.d.ts +16 -0
- package/dist/types/models/mongo/VideoMeetingMongo.d.ts +23 -0
- package/dist/types/models/sql/VideoMeetingInviteeSQL.d.ts +16 -0
- package/dist/types/models/sql/VideoMeetingSQL.d.ts +23 -0
- package/dist/types/models/types.d.ts +131 -0
- package/dist/types/mongo.d.ts +8 -0
- package/dist/types/routes/BaseVideoMeetingRoute.d.ts +368 -0
- package/dist/types/routes/mongo/VideoMeetingRouteMongo.d.ts +10 -0
- package/dist/types/routes/sql/VideoMeetingRouteSQL.d.ts +10 -0
- package/dist/types/sql.d.ts +8 -0
- package/dist/types/util/BookingIntegrationUtils.d.ts +51 -0
- package/dist/types/util/IceServerUtils.d.ts +57 -0
- package/dist/types/util/PublicUrlUtils.d.ts +11 -0
- package/dist/types/util/RouteAccessUtils.d.ts +8 -0
- package/dist/types/util/TokenUtils.d.ts +23 -0
- package/package.json +181 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoMeetingMongo.js","sourceRoot":"","sources":["../../../../src/models/mongo/VideoMeetingMongo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
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 { BaseEntity, DocDecorators, ModelDecorators, PersistenceDecorators } from "@rapidrest/service-core";
|
|
16
|
+
import { MailboxScopedData } from "@rapidmx/restapi";
|
|
17
|
+
const { Description } = DocDecorators;
|
|
18
|
+
const { DataStore, Protect } = ModelDecorators;
|
|
19
|
+
const { Column, Entity, Index } = PersistenceDecorators;
|
|
20
|
+
const { Nullable } = ObjectDecorators;
|
|
21
|
+
/**
|
|
22
|
+
* Implementation of the `VideoMeetingInvitee` interface for storage in a SQL database. If MongoDB is desired,
|
|
23
|
+
* please use `models.mongo.VideoMeetingInviteeMongo` instead.
|
|
24
|
+
*
|
|
25
|
+
* @author Jean-Philippe Steinmetz
|
|
26
|
+
*/
|
|
27
|
+
let VideoMeetingInviteeSQL = class VideoMeetingInviteeSQL extends BaseEntity {
|
|
28
|
+
constructor(other) {
|
|
29
|
+
super(other);
|
|
30
|
+
this.meetingUid = "";
|
|
31
|
+
this.mailboxUid = "";
|
|
32
|
+
this.email = "";
|
|
33
|
+
this.joinToken = "";
|
|
34
|
+
if (other) {
|
|
35
|
+
this.meetingUid = other.meetingUid !== undefined ? other.meetingUid : this.meetingUid;
|
|
36
|
+
this.mailboxUid = other.mailboxUid !== undefined ? other.mailboxUid : this.mailboxUid;
|
|
37
|
+
this.email = other.email !== undefined ? other.email : this.email;
|
|
38
|
+
this.displayName = "displayName" in other ? other.displayName : this.displayName;
|
|
39
|
+
this.joinToken = other.joinToken !== undefined ? other.joinToken : this.joinToken;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
__decorate([
|
|
44
|
+
Column(),
|
|
45
|
+
Description("The unique identifier of the `VideoMeeting` this invitee belongs to."),
|
|
46
|
+
__metadata("design:type", String)
|
|
47
|
+
], VideoMeetingInviteeSQL.prototype, "meetingUid", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
Column(),
|
|
50
|
+
Description("The unique identifier of the host `Mailbox`, denormalized from the meeting."),
|
|
51
|
+
__metadata("design:type", String)
|
|
52
|
+
], VideoMeetingInviteeSQL.prototype, "mailboxUid", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
Column(),
|
|
55
|
+
Description("The invitee's email address, normalized to lowercase."),
|
|
56
|
+
__metadata("design:type", String)
|
|
57
|
+
], VideoMeetingInviteeSQL.prototype, "email", void 0);
|
|
58
|
+
__decorate([
|
|
59
|
+
Column({ nullable: true }),
|
|
60
|
+
Description("The invitee's display name, if supplied."),
|
|
61
|
+
Nullable,
|
|
62
|
+
__metadata("design:type", String)
|
|
63
|
+
], VideoMeetingInviteeSQL.prototype, "displayName", void 0);
|
|
64
|
+
__decorate([
|
|
65
|
+
Column(),
|
|
66
|
+
Description("The unguessable token embedded in this invitee's join link. Minted server-side, immutable."),
|
|
67
|
+
__metadata("design:type", String)
|
|
68
|
+
], VideoMeetingInviteeSQL.prototype, "joinToken", void 0);
|
|
69
|
+
VideoMeetingInviteeSQL = __decorate([
|
|
70
|
+
DataStore("sql"),
|
|
71
|
+
Entity(),
|
|
72
|
+
MailboxScopedData(),
|
|
73
|
+
Description("One invited participant of a PRIVATE VideoMeeting, identified by an unguessable join token."),
|
|
74
|
+
Index("videomeetinginvitee_join_token", ["joinToken"], { unique: true }),
|
|
75
|
+
Index("videomeetinginvitee_meeting", ["meetingUid"]),
|
|
76
|
+
Index("videomeetinginvitee_mailbox", ["mailboxUid"]),
|
|
77
|
+
Protect({
|
|
78
|
+
uid: "VideoMeetingInvitee",
|
|
79
|
+
records: [
|
|
80
|
+
{ userOrRoleId: "anonymous", actions: [] },
|
|
81
|
+
{ userOrRoleId: ".*", actions: [] },
|
|
82
|
+
],
|
|
83
|
+
}, false),
|
|
84
|
+
__metadata("design:paramtypes", [Object])
|
|
85
|
+
], VideoMeetingInviteeSQL);
|
|
86
|
+
export { VideoMeetingInviteeSQL };
|
|
87
|
+
//# sourceMappingURL=VideoMeetingInviteeSQL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoMeetingInviteeSQL.js","sourceRoot":"","sources":["../../../../src/models/sql/VideoMeetingInviteeSQL.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
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 { BaseEntity, DocDecorators, ModelDecorators, PersistenceDecorators } from "@rapidrest/service-core";
|
|
16
|
+
import { MailboxScopedData } from "@rapidmx/restapi";
|
|
17
|
+
import { VideoMeetingStatus, VideoMeetingVisibility } from "../types.js";
|
|
18
|
+
const { Description } = DocDecorators;
|
|
19
|
+
const { DataStore, Protect } = ModelDecorators;
|
|
20
|
+
const { Column, Entity, Index } = PersistenceDecorators;
|
|
21
|
+
const { Nullable } = ObjectDecorators;
|
|
22
|
+
/**
|
|
23
|
+
* Implementation of the `VideoMeeting` interface for storage in a SQL database. If MongoDB is desired, please use
|
|
24
|
+
* `models.mongo.VideoMeetingMongo` instead.
|
|
25
|
+
*
|
|
26
|
+
* `recordACL: true` - see the `VideoMeeting` interface's own doc comment for why this entity, unlike most of this
|
|
27
|
+
* codebase's mailbox-scoped data, gets its own per-record `AccessControlList`.
|
|
28
|
+
*
|
|
29
|
+
* @author Jean-Philippe Steinmetz
|
|
30
|
+
*/
|
|
31
|
+
let VideoMeetingSQL = class VideoMeetingSQL extends BaseEntity {
|
|
32
|
+
constructor(other) {
|
|
33
|
+
super(other);
|
|
34
|
+
this.mailboxUid = "";
|
|
35
|
+
this.title = "";
|
|
36
|
+
// `type: "varchar"` is required on every enum-typed column - see `BookingSQL.status`'s own comment for the
|
|
37
|
+
// `emitDecoratorMetadata`/TypeORM reason.
|
|
38
|
+
this.visibility = VideoMeetingVisibility.PRIVATE;
|
|
39
|
+
this.status = VideoMeetingStatus.SCHEDULED;
|
|
40
|
+
if (other) {
|
|
41
|
+
this.mailboxUid = other.mailboxUid !== undefined ? other.mailboxUid : this.mailboxUid;
|
|
42
|
+
this.calendarEventUid = "calendarEventUid" in other ? other.calendarEventUid : this.calendarEventUid;
|
|
43
|
+
this.title = other.title !== undefined ? other.title : this.title;
|
|
44
|
+
this.visibility = other.visibility !== undefined ? other.visibility : this.visibility;
|
|
45
|
+
this.publicSlug = "publicSlug" in other ? other.publicSlug : this.publicSlug;
|
|
46
|
+
this.organizerSlug = "organizerSlug" in other ? other.organizerSlug : this.organizerSlug;
|
|
47
|
+
this.status = other.status !== undefined ? other.status : this.status;
|
|
48
|
+
this.startTime = "startTime" in other ? other.startTime : this.startTime;
|
|
49
|
+
this.endTime = "endTime" in other ? other.endTime : this.endTime;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
__decorate([
|
|
54
|
+
Column(),
|
|
55
|
+
Description("The unique identifier of the `Mailbox` that owns this meeting."),
|
|
56
|
+
__metadata("design:type", String)
|
|
57
|
+
], VideoMeetingSQL.prototype, "mailboxUid", void 0);
|
|
58
|
+
__decorate([
|
|
59
|
+
Column({ nullable: true }),
|
|
60
|
+
Description("The unique identifier of the `CalendarEvent` this meeting was minted for, if any."),
|
|
61
|
+
Nullable,
|
|
62
|
+
__metadata("design:type", String)
|
|
63
|
+
], VideoMeetingSQL.prototype, "calendarEventUid", void 0);
|
|
64
|
+
__decorate([
|
|
65
|
+
Column(),
|
|
66
|
+
Description("The meeting's display title."),
|
|
67
|
+
__metadata("design:type", String)
|
|
68
|
+
], VideoMeetingSQL.prototype, "title", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
Column({ type: "varchar" }),
|
|
71
|
+
Description("Whether this meeting is joinable only by its invitees or by anyone holding its public link."),
|
|
72
|
+
__metadata("design:type", String)
|
|
73
|
+
], VideoMeetingSQL.prototype, "visibility", void 0);
|
|
74
|
+
__decorate([
|
|
75
|
+
Column({ nullable: true }),
|
|
76
|
+
Description("The public join link's unique identifier, set only when visibility is PUBLIC."),
|
|
77
|
+
Nullable,
|
|
78
|
+
__metadata("design:type", String)
|
|
79
|
+
], VideoMeetingSQL.prototype, "publicSlug", void 0);
|
|
80
|
+
__decorate([
|
|
81
|
+
Column({ nullable: true }),
|
|
82
|
+
Description("The organizer's own join link identifier, set only when visibility is PRIVATE."),
|
|
83
|
+
Nullable,
|
|
84
|
+
__metadata("design:type", String)
|
|
85
|
+
], VideoMeetingSQL.prototype, "organizerSlug", void 0);
|
|
86
|
+
__decorate([
|
|
87
|
+
Column({ type: "varchar" }),
|
|
88
|
+
Description("The current lifecycle state of this meeting."),
|
|
89
|
+
__metadata("design:type", String)
|
|
90
|
+
], VideoMeetingSQL.prototype, "status", void 0);
|
|
91
|
+
__decorate([
|
|
92
|
+
Column({ nullable: true }),
|
|
93
|
+
Description("Informational only: not used for any availability or conflict checking."),
|
|
94
|
+
Nullable,
|
|
95
|
+
__metadata("design:type", Date)
|
|
96
|
+
], VideoMeetingSQL.prototype, "startTime", void 0);
|
|
97
|
+
__decorate([
|
|
98
|
+
Column({ nullable: true }),
|
|
99
|
+
Description("Informational only: not used for any availability or conflict checking."),
|
|
100
|
+
Nullable,
|
|
101
|
+
__metadata("design:type", Date)
|
|
102
|
+
], VideoMeetingSQL.prototype, "endTime", void 0);
|
|
103
|
+
VideoMeetingSQL = __decorate([
|
|
104
|
+
DataStore("sql"),
|
|
105
|
+
Entity(),
|
|
106
|
+
MailboxScopedData(),
|
|
107
|
+
Description("A WebRTC video meeting, joinable directly or from a calendar invite."),
|
|
108
|
+
Index("videomeeting_mailbox", ["mailboxUid"])
|
|
109
|
+
// Single-field, not `["mailboxUid", "publicSlug"]` - kept identical to the Mongo twin's fix: a compound sparse index
|
|
110
|
+
// still indexes a document carrying at least one of its keys (every row has `mailboxUid`), so two private meetings
|
|
111
|
+
// in one mailbox (both missing `publicSlug`) would collide on `(mailboxUid, null)`. A single-field sparse index
|
|
112
|
+
// skips a document missing the field entirely, matching `join()`'s actual global (not per-mailbox) lookup - see
|
|
113
|
+
// `VideoMeeting.publicSlug`'s own doc comment. `organizerSlug` below hit the identical pitfall, fixed the same way.
|
|
114
|
+
,
|
|
115
|
+
Index("videomeeting_public_slug", ["publicSlug"], { unique: true, sparse: true }),
|
|
116
|
+
Index("videomeeting_organizer_slug", ["organizerSlug"], { unique: true, sparse: true }),
|
|
117
|
+
Protect({
|
|
118
|
+
uid: "VideoMeeting",
|
|
119
|
+
records: [
|
|
120
|
+
{ userOrRoleId: "anonymous", actions: [] },
|
|
121
|
+
{ userOrRoleId: ".*", actions: [] },
|
|
122
|
+
],
|
|
123
|
+
}, true),
|
|
124
|
+
__metadata("design:paramtypes", [Object])
|
|
125
|
+
], VideoMeetingSQL);
|
|
126
|
+
export { VideoMeetingSQL };
|
|
127
|
+
//# sourceMappingURL=VideoMeetingSQL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoMeetingSQL.js","sourceRoot":"","sources":["../../../../src/models/sql/VideoMeetingSQL.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Whether a `VideoMeeting` is joinable only by its explicitly invited `VideoMeetingInvitee`s (each with their
|
|
2
|
+
* own unguessable `joinToken`), or by anyone holding the meeting's single `publicSlug` link. */
|
|
3
|
+
export var VideoMeetingVisibility;
|
|
4
|
+
(function (VideoMeetingVisibility) {
|
|
5
|
+
VideoMeetingVisibility["PRIVATE"] = "private";
|
|
6
|
+
VideoMeetingVisibility["PUBLIC"] = "public";
|
|
7
|
+
})(VideoMeetingVisibility || (VideoMeetingVisibility = {}));
|
|
8
|
+
/** The lifecycle of a `VideoMeeting`. Deliberately minimal for Phase 1 - `ACTIVE` and `ENDED` are not yet set by
|
|
9
|
+
* any code in this package (no signaling event currently transitions a meeting automatically); they exist so the
|
|
10
|
+
* shape doesn't need to change once a later phase starts using them. `CANCELLED` is the one transition
|
|
11
|
+
* `BaseVideoMeetingRoute.update()` actually performs today. */
|
|
12
|
+
export var VideoMeetingStatus;
|
|
13
|
+
(function (VideoMeetingStatus) {
|
|
14
|
+
VideoMeetingStatus["SCHEDULED"] = "scheduled";
|
|
15
|
+
VideoMeetingStatus["ACTIVE"] = "active";
|
|
16
|
+
VideoMeetingStatus["ENDED"] = "ended";
|
|
17
|
+
VideoMeetingStatus["CANCELLED"] = "cancelled";
|
|
18
|
+
})(VideoMeetingStatus || (VideoMeetingStatus = {}));
|
|
19
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/models/types.ts"],"names":[],"mappings":"AAMA;gGACgG;AAChG,MAAM,CAAN,IAAY,sBAGX;AAHD,WAAY,sBAAsB;IAC9B,6CAAmB,CAAA;IACnB,2CAAiB,CAAA;AACrB,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,QAGjC;AAED;;;+DAG+D;AAC/D,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC1B,6CAAuB,CAAA;IACvB,uCAAiB,CAAA;IACjB,qCAAe,CAAA;IACf,6CAAuB,CAAA;AAC3B,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B"}
|
|
@@ -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 `./mongo` entry point: exactly the classes a server host loads for a Mongo 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 { VideoMeetingMongo } from "./models/mongo/VideoMeetingMongo.js";
|
|
11
|
+
export { VideoMeetingInviteeMongo } from "./models/mongo/VideoMeetingInviteeMongo.js";
|
|
12
|
+
export { VideoMeetingRouteMongo } from "./routes/mongo/VideoMeetingRouteMongo.js";
|
|
13
|
+
//# sourceMappingURL=mongo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../src/mongo.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,mCAAmC;AACnC,+EAA+E;AAC/E;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC"}
|