✨ add private and public endpoint
This commit is contained in:
parent
1c49d82400
commit
4b2e93c84b
@ -5,14 +5,14 @@ import { route } from "@fosscord/api";
|
|||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
router.get("/", route({}), (req: Request, res: Response) => {
|
router.get("/", route({}), (req: Request, res: Response) => {
|
||||||
const { endpoint } = Config.get().gateway;
|
const { endpointPublic } = Config.get().gateway;
|
||||||
res.json({ url: endpoint || process.env.GATEWAY || "ws://localhost:3002" });
|
res.json({ url: endpointPublic || process.env.GATEWAY || "ws://localhost:3002" });
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get("/bot", route({}), (req: Request, res: Response) => {
|
router.get("/bot", route({}), (req: Request, res: Response) => {
|
||||||
const { endpoint } = Config.get().gateway;
|
const { endpointPublic } = Config.get().gateway;
|
||||||
res.json({
|
res.json({
|
||||||
url: endpoint || process.env.GATEWAY || "ws://localhost:3002",
|
url: endpointPublic || process.env.GATEWAY || "ws://localhost:3002",
|
||||||
shards: 1,
|
shards: 1,
|
||||||
session_start_limit: {
|
session_start_limit: {
|
||||||
total: 1000,
|
total: 1000,
|
||||||
|
@ -1,53 +0,0 @@
|
|||||||
import { Config } from "@fosscord/util";
|
|
||||||
import FormData from "form-data";
|
|
||||||
import { HTTPError } from "lambert-server";
|
|
||||||
import fetch from "node-fetch";
|
|
||||||
|
|
||||||
export async function uploadFile(path: string, file: Express.Multer.File) {
|
|
||||||
const form = new FormData();
|
|
||||||
form.append("file", file.buffer, {
|
|
||||||
contentType: file.mimetype,
|
|
||||||
filename: file.originalname
|
|
||||||
});
|
|
||||||
|
|
||||||
const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, {
|
|
||||||
headers: {
|
|
||||||
signature: Config.get().security.requestSignature,
|
|
||||||
...form.getHeaders()
|
|
||||||
},
|
|
||||||
method: "POST",
|
|
||||||
body: form
|
|
||||||
});
|
|
||||||
const result = await response.json();
|
|
||||||
|
|
||||||
if (response.status !== 200) throw result;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function handleFile(path: string, body?: string): Promise<string | undefined> {
|
|
||||||
if (!body || !body.startsWith("data:")) return body;
|
|
||||||
try {
|
|
||||||
const mimetype = body.split(":")[1].split(";")[0];
|
|
||||||
const buffer = Buffer.from(body.split(",")[1], "base64");
|
|
||||||
|
|
||||||
// @ts-ignore
|
|
||||||
const { id } = await uploadFile(path, { buffer, mimetype, originalname: "banner" });
|
|
||||||
return id;
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
throw new HTTPError("Invalid " + path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function deleteFile(path: string) {
|
|
||||||
const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, {
|
|
||||||
headers: {
|
|
||||||
signature: Config.get().security.requestSignature
|
|
||||||
},
|
|
||||||
method: "DELETE"
|
|
||||||
});
|
|
||||||
const result = await response.json();
|
|
||||||
|
|
||||||
if (response.status !== 200) throw result;
|
|
||||||
return result;
|
|
||||||
}
|
|
@ -24,16 +24,24 @@ const gateway = new GatewayServer({ server, port, production });
|
|||||||
async function main() {
|
async function main() {
|
||||||
await initDatabase();
|
await initDatabase();
|
||||||
await Config.init();
|
await Config.init();
|
||||||
|
// only set endpointPublic, if not already set
|
||||||
await Config.set({
|
await Config.set({
|
||||||
cdn: {
|
cdn: {
|
||||||
endpointClient: "${location.host}",
|
endpointClient: "${location.host}",
|
||||||
endpoint: `http://localhost:${port}`,
|
endpointPrivate: `http://localhost:${port}`,
|
||||||
|
...(!Config.get().cdn.endpointPublic && {
|
||||||
|
endpointPublic: `http://localhost:${port}`,
|
||||||
|
}),
|
||||||
},
|
},
|
||||||
gateway: {
|
gateway: {
|
||||||
endpointClient: '${location.protocol === "https:" ? "wss://" : "ws://"}${location.host}',
|
endpointClient:
|
||||||
endpoint: `ws://localhost:${port}`,
|
'${location.protocol === "https:" ? "wss://" : "ws://"}${location.host}',
|
||||||
|
endpointPrivate: `ws://localhost:${port}`,
|
||||||
|
...(!Config.get().gateway.endpointPublic && {
|
||||||
|
endpointPublic: `http://localhost:${port}`,
|
||||||
|
}),
|
||||||
},
|
},
|
||||||
});
|
} as any);
|
||||||
|
|
||||||
await Promise.all([api.start(), cdn.start(), gateway.start()]);
|
await Promise.all([api.start(), cdn.start(), gateway.start()]);
|
||||||
console.log(`[Server] listening on port ${port}`);
|
console.log(`[Server] listening on port ${port}`);
|
||||||
|
@ -9,16 +9,20 @@ export function initStats() {
|
|||||||
console.log(`[Process] running with pid: ${process.pid}`);
|
console.log(`[Process] running with pid: ${process.pid}`);
|
||||||
|
|
||||||
setInterval(async () => {
|
setInterval(async () => {
|
||||||
const [cpuUsed, memory, network] = await Promise.all([osu.cpu.usage(), osu.mem.info(), osu.netstat.inOut()]);
|
const [cpuUsed, memory, network] = await Promise.all([
|
||||||
|
osu.cpu.usage(),
|
||||||
|
osu.mem.info(),
|
||||||
|
osu.netstat.inOut(),
|
||||||
|
]);
|
||||||
var networkUsage = "";
|
var networkUsage = "";
|
||||||
if (typeof network === "object") {
|
if (typeof network === "object") {
|
||||||
networkUsage = `| [Network]: in ${network.total.inputMb}mb | out ${network.total.outputMb}mb`;
|
networkUsage = `| [Network]: in ${network.total.inputMb}mb | out ${network.total.outputMb}mb`;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
`[CPU] ${cpuUsed.toFixed(2)}% | [Memory] ${Math.round(
|
`[CPU] ${cpuUsed.toPrecision(3)}% | [Memory] ${Math.round(
|
||||||
process.memoryUsage().rss / 1024 / 1024
|
process.memoryUsage().rss / 1024 / 1024
|
||||||
)}mb/${memory.totalMemMb.toFixed(0)}mb ${networkUsage}`
|
)}mb/${memory.totalMemMb.toFixed(0)}mb ${networkUsage}`
|
||||||
);
|
);
|
||||||
}, 1000 * 30);
|
}, 1000 * 5);
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,8 @@ router.post(
|
|||||||
if (ANIMATED_MIME_TYPES.includes(type.mime)) hash = `a_${hash}`; // animated icons have a_ infront of the hash
|
if (ANIMATED_MIME_TYPES.includes(type.mime)) hash = `a_${hash}`; // animated icons have a_ infront of the hash
|
||||||
|
|
||||||
const path = `avatars/${user_id}/${hash}`;
|
const path = `avatars/${user_id}/${hash}`;
|
||||||
const endpoint = Config.get().cdn.endpoint || "http://localhost:3003";
|
const endpoint =
|
||||||
|
Config.get().cdn.endpointPublic || "http://localhost:3003";
|
||||||
|
|
||||||
await storage.set(path, buffer);
|
await storage.set(path, buffer);
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ export async function uploadFile(path: string, file: Express.Multer.File) {
|
|||||||
filename: file.originalname,
|
filename: file.originalname,
|
||||||
});
|
});
|
||||||
|
|
||||||
const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, {
|
const response = await fetch(`${Config.get().cdn.endpointPrivate || "http://localhost:3003"}${path}`, {
|
||||||
headers: {
|
headers: {
|
||||||
signature: Config.get().security.requestSignature,
|
signature: Config.get().security.requestSignature,
|
||||||
...form.getHeaders(),
|
...form.getHeaders(),
|
||||||
@ -41,7 +41,7 @@ export async function handleFile(path: string, body?: string): Promise<string |
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function deleteFile(path: string) {
|
export async function deleteFile(path: string) {
|
||||||
const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, {
|
const response = await fetch(`${Config.get().cdn.endpointPrivate || "http://localhost:3003"}${path}`, {
|
||||||
headers: {
|
headers: {
|
||||||
signature: Config.get().security.requestSignature,
|
signature: Config.get().security.requestSignature,
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user