@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":"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"}