-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.ts
154 lines (150 loc) · 5.28 KB
/
index.ts
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
import http from "http";
import { generateWorld } from "./generation/generateWorld";
import { getRecord } from "./routes/get";
import { Surreal } from "surrealdb.js";
import dotenv from "dotenv";
import { generateMaps } from "./generation/generateMaps";
import { generateTown } from "./generation/generateTown";
import select from "./temp-surreal-fixes/select";
dotenv.config();
const PORT = process.env.PORT || 7001;
const db_url = process.env.SURREAL_DB;
const WHITELIST = process.env.WHITELIST;
const surreal_pass = process.env.SURREAL_PASS || "root";
const surreal_user = process.env.SURREAL_USER || "root";
const routes = {
"/api/v1/generateWorld": async (
req: http.IncomingMessage,
res: http.ServerResponse
) => {
if (!req.headers.user) return res.end("no user");
if (typeof req.headers.user !== "string")
return res.end("invalid user");
const db = new Surreal();
if (!db_url) return res.end("no db url");
await db.connect(db_url, {
auth: {
username: surreal_user,
password: surreal_pass,
},
namespace: "test",
database: req.headers.user,
});
await generateWorld(req.headers.user, db);
res.end("world generated");
},
"/api/v1/get": async (
req: http.IncomingMessage,
res: http.ServerResponse
) => {
const db = new Surreal();
try {
if (!db_url) return res.end("no db url");
if (!req.headers.user) return res.end("no user");
if (typeof req.headers.user !== "string")
return res.end("invalid user");
await db.connect(db_url, {
auth: {
username: surreal_user,
password: surreal_pass,
},
namespace: "test",
database: req.headers.user,
});
const requested_record = (req.headers.record as string).toString();
if (requested_record.includes(":")) {
console.log(requested_record);
const [tb, id] = requested_record.split(":");
res.end(JSON.stringify(await getRecord(tb, id, db)));
}
const response = await select(requested_record, req.headers.user);
console.log(response);
res.end(JSON.stringify(response));
} catch (error) {
console.error(error);
res.writeHead(500);
res.end(error.message);
} finally {
await db.close();
}
},
"/api/v1/generateMap": async (
req: http.IncomingMessage,
res: http.ServerResponse
) => {
const db = new Surreal();
try {
if (!db_url) return res.end("no db url");
if (!req.headers.user) return res.end("no user");
if (typeof req.headers.user !== "string")
return res.end("invalid user");
await db.connect(db_url, {
auth: {
username: surreal_user,
password: surreal_pass,
},
namespace: "test",
database: req.headers.user,
});
if (!req.headers.floor) return res.end("no floor");
await generateMaps(db, parseInt(req.headers.floor.toString()));
const response = JSON.stringify(
await getRecord(
"maps",
parseInt(req.headers.floor.toString()),
db
)
);
res.end(response);
} catch (error) {
res.writeHead(500);
res.end(error.message);
} finally {
await db.close();
}
},
"/api/v1/generateTown": async (
req: http.IncomingMessage,
res: http.ServerResponse
) => {
const db = new Surreal();
if (!db_url) return res.end("no db url");
if (!req.headers.user) return res.end("no user");
if (typeof req.headers.user !== "string")
return res.end("invalid user");
await db.connect(db_url, {
auth: {
username: surreal_user,
password: surreal_pass,
},
namespace: "test",
database: req.headers.user,
});
if (!req.headers.floor) return res.end("no floor");
await generateTown(db, parseInt(req.headers.floor.toString()));
res.end(
JSON.stringify(
await getRecord(
"town",
parseInt(req.headers.floor.toString()),
db
)
)
);
},
};
const server = http.createServer(async (req, res) => {
if (!WHITELIST) return res.end("no whitelist");
if (!db_url) return res.end("no db url");
res.setHeader("Access-Control-Allow-Origin", WHITELIST);
res.setHeader("Access-Control-Allow-Headers", "User, Record, Floor");
res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
const route = routes[req.url as string];
if (route && (req.method === "POST" || req.method === "GET")) {
return route(req, res);
}
res.end("404");
});
server.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});