change mailbox behaviour to use reception confirmations

This commit is contained in:
marlon-erler
2026-03-31 22:02:13 +00:00
parent 959dc4d288
commit ec020e6358
21 changed files with 2772 additions and 2476 deletions
+117 -116
View File
@@ -1,21 +1,21 @@
#!/usr/bin/env bun
import {
connectServers,
forgetConnection,
getWebSocketStats,
processMessage,
reconnectServers,
removeExpiredMailboxes,
trackConnection,
connectServers,
forgetConnection,
getWebSocketStats,
processMessage,
reconnectServers,
removeExpiredMailboxes,
trackConnection,
} from "./websocket-handler";
import {
createFileResponse,
getVersionNumber,
writeError,
writeStatNumber,
writeStatString,
writeSuccess,
createFileResponse,
getVersionNumber,
writeError,
writeStatNumber,
writeStatString,
writeSuccess,
} from "./utility";
import Colors from "colors";
@@ -35,120 +35,121 @@ export type WS = ServerWebSocket<unknown> | WebSocket;
// MAIN
async function main() {
// CONFIG
const config = await getConfig();
const versionNumber = await getVersionNumber();
// CONFIG
const config = await getConfig();
const versionNumber = await getVersionNumber();
// SERVER
const server = Bun.serve({
port: config.port,
// SERVER
const server = Bun.serve({
port: config.port,
fetch(request, server) {
// allow websockets
server.upgrade(request);
fetch(request, server) {
// allow websockets
server.upgrade(request);
// respond
const requestPath = new URL(request.url).pathname;
switch (requestPath) {
case "/":
return createFileResponse(DEFAULT_PAGE);
case "/stats":
return new Response(JSON.stringify(getAllStats()));
default:
return createFileResponse(requestPath);
}
},
// respond
const requestPath = new URL(request.url).pathname;
switch (requestPath) {
case "/":
return createFileResponse(DEFAULT_PAGE);
case "/stats":
return new Response(JSON.stringify(getAllStats()));
default:
return createFileResponse(requestPath);
}
},
websocket: {
open(ws) {
try {
trackConnection(ws);
} catch (error) {
writeError(error);
}
},
message(ws, message) {
try {
processMessage(ws, message.toString(), config);
} catch (error) {
writeError(error);
}
},
close(ws) {
try {
forgetConnection(ws);
} catch (error) {
writeError(error);
}
},
},
websocket: {
open(ws) {
try {
trackConnection(ws);
} catch (error) {
writeError(error);
}
},
message(ws, message) {
try {
processMessage(ws, message.toString(), config);
} catch (error) {
writeError(error);
}
},
close(ws) {
try {
forgetConnection(ws);
} catch (error) {
writeError(error);
}
},
},
tls: await (async () => {
const keyFile = Bun.file("./key.pem");
const certFile = Bun.file("./cert.pem");
tls: await (async () => {
const keyFile = Bun.file("./key.pem");
const certFile = Bun.file("./cert.pem");
if (
(await keyFile.exists()) == false ||
(await certFile.exists()) == false
)
return undefined;
if (
(await keyFile.exists()) == false ||
(await certFile.exists()) == false
)
return undefined;
return {
key: keyFile,
cert: certFile,
passphrase: process.env.TLS_PASSPHRASE,
};
})(),
});
return {
key: keyFile,
cert: certFile,
passphrase: process.env.TLS_PASSPHRASE,
};
})(),
});
// OTHER SERVERS
connectServers(config);
// OTHER SERVERS
connectServers(config);
// AUDIT
function getServerStats(): [string, string][] {
return [
["server url", server.url.toString()],
["server ip address", IP.address()],
["server version", versionNumber],
];
}
function getAllStats(): [string, string | number][] {
return [...getServerStats(), ...getWebSocketStats()];
}
// CLI
function updateCLI() {
console.clear();
console.log(Colors.bold.bgWhite("UNIVERSAL DECENTRALIZED NETWORK"));
console.log(
Colors.yellow("relevant output is available in the 'logs' file")
);
console.log();
console.log(new Date().toLocaleString());
console.log();
getServerStats().forEach((entry) => writeStatString(...entry));
console.log();
getWebSocketStats().forEach((entry) => writeStatNumber(...entry));
console.log();
}
// LOOP
setInterval(() => {
if (process.env.DEV != "1") {
updateCLI();
reconnectServers(config);
// AUDIT
function getServerStats(): [string, string][] {
return [
["server url", server.url.toString()],
["server ip address", IP.address()],
["server version", versionNumber],
];
}
removeExpiredMailboxes();
}, 2000);
// FINISH
writeSuccess(`###\nstarted up ${new Date().toLocaleString()}`);
function getAllStats(): [string, string | number][] {
return [...getServerStats(), ...getWebSocketStats()];
}
// CLI
function updateCLI() {
return;
console.clear();
console.log(Colors.bold.bgWhite("UNIVERSAL DECENTRALIZED NETWORK"));
console.log(
Colors.yellow("relevant output is available in the 'logs' file"),
);
console.log();
console.log(new Date().toLocaleString());
console.log();
getServerStats().forEach((entry) => writeStatString(...entry));
console.log();
getWebSocketStats().forEach((entry) => writeStatNumber(...entry));
console.log();
}
// LOOP
setInterval(() => {
if (process.env.DEV != "1") {
updateCLI();
reconnectServers(config);
}
removeExpiredMailboxes();
}, 2000);
// FINISH
writeSuccess(`###\nstarted up ${new Date().toLocaleString()}`);
}
main();