-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
123 lines (104 loc) · 3.28 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT-0
require("dotenv").config();
const express = require("express");
const compression = require("compression");
const { v4: uuidv4 } = require("uuid");
const morganBody = require("morgan-body");
const bodyParser = require("body-parser");
const cors = require("cors");
const { ChimeSDKMeetings } = require("@aws-sdk/client-chime-sdk-meetings");
const port = 8080;
const region = "us-east-1";
const app = express();
app.use(compression());
app.use(express.json());
app.use(bodyParser.json());
morganBody(app);
app.use(
cors({
origin: "http://192.168.0.107:3000", // Replace with your frontend URL if different
methods: ["GET", "POST"], // Specify allowed HTTP methods
allowedHeaders: ["Content-Type"], // Specify allowed headers
})
);
const chimeSDKMeetings = new ChimeSDKMeetings({
region,
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
},
});
const meetingCache = {};
const attendeeCache = {};
app.post("/join", async (req, res) => {
try {
const { title, attendeeName, region = "us-east-1", ns_es } = req.body;
if (!meetingCache[title]) {
const { Meeting } = await chimeSDKMeetings.createMeeting({
ClientRequestToken: uuidv4(),
MediaRegion: region,
ExternalMeetingId: title.substring(0, 64),
MeetingFeatures:
ns_es === "true"
? { Audio: { EchoReduction: "AVAILABLE" } }
: undefined,
});
meetingCache[title] = Meeting;
attendeeCache[title] = {};
}
const { Attendee } = await chimeSDKMeetings.createAttendee({
MeetingId: meetingCache[title].MeetingId,
ExternalUserId: uuidv4(),
});
attendeeCache[title][Attendee.AttendeeId] = {
...Attendee,
Name: attendeeName,
};
const joinInfo = {
JoinInfo: {
Title: title,
Meeting: meetingCache[title],
Attendee: attendeeCache[title][Attendee.AttendeeId],
},
};
res.status(201).json(joinInfo);
} catch (err) {
console.error(`Error creating/joining meeting: ${err}`);
res.status(403).json({ error: err.message });
}
});
app.get("/attendee", (req, res) => {
try {
const { title, attendeeId } = req.query;
const attendee = attendeeCache[title][attendeeId];
res.status(200).json(attendee);
} catch (err) {
console.error(`Error getting attendee information: ${err}`);
res.status(403).json({ error: err.message });
}
});
app.post("/end", async (req, res) => {
try {
const { title } = req.body;
await chimeSDKMeetings.deleteMeeting({
MeetingId: meetingCache[title].MeetingId,
});
res.status(200).json({ message: "meeting ended" });
} catch (err) {
console.error(`Error ending meeting: ${err}`);
res.status(403).json({ error: err.message });
}
});
// Route to receive logs
app.post("/logs", (req, res) => {
console.log("Received logs in the local server");
res.end("Received logs in the local server");
});
// Handle unsupported requests
app.all("*", (req, res) => {
res.status(400).json({ error: "Bad Request - Unsupported Endpoint" });
});
app.listen(port, () => {
console.log(`Server running at http://127.0.0.1:${port}/`);
});