aboutsummaryrefslogtreecommitdiffstats
path: root/lib/sockets.ts
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-02-28 14:14:30 -0800
committerAdam Soltys <[email protected]>2026-02-28 14:14:30 -0800
commita1632ae402d11fdd7ffc360de97c55e0b4fad677 (patch)
treeaad5a1ea73f95dcd055c1d0b4ebf2708c36b4e01 /lib/sockets.ts
parent76c7e52172f3dc25ee109434157d4d982ad9d2bd (diff)
downloadcoinos-server-a1632ae402d11fdd7ffc360de97c55e0b4fad677.tar.gz
coinos-server-a1632ae402d11fdd7ffc360de97c55e0b4fad677.zip
migrate to hono
Diffstat (limited to 'lib/sockets.ts')
-rw-r--r--lib/sockets.ts137
1 files changed, 63 insertions, 74 deletions
diff --git a/lib/sockets.ts b/lib/sockets.ts
index 88817728..51ba15fa 100644
--- a/lib/sockets.ts
+++ b/lib/sockets.ts
@@ -81,88 +81,77 @@ const track = async (ws, token) => {
ws.user = user;
};
-Bun.serve({
- hostname: "0.0.0.0",
- port: 3120,
- fetch(req, server) {
- // upgrade the request to a WebSocket
- if (server.upgrade(req)) {
- return; // do not return a Response
- }
- return new Response("Upgrade failed", { status: 500 });
- },
- websocket: {
- async message(ws: any, message: string) {
- let type;
- let data;
+export const websocket = {
+ async message(ws: any, message: string) {
+ let type;
+ let data;
- try {
- ({ type, data } = JSON.parse(message));
- } catch (e) {
- err("coudn't parse socket message");
- }
+ try {
+ ({ type, data } = JSON.parse(message));
+ } catch (e) {
+ err("coudn't parse socket message");
+ }
- switch (type) {
- case "heartbeat":
- ws.beats = 0;
- try {
- if (data) await track(ws, data);
- ws.send(JSON.stringify({ type: "id", data: ws.id }));
- } catch (e) {
- // err("Failed to send heartbeat", e.message);
- }
- break;
+ switch (type) {
+ case "heartbeat":
+ ws.beats = 0;
+ try {
+ if (data) await track(ws, data);
+ ws.send(JSON.stringify({ type: "id", data: ws.id }));
+ } catch (e) {
+ // err("Failed to send heartbeat", e.message);
+ }
+ break;
- case "login":
- try {
- if (!data || data === "null" || !jwt.decode(data))
- return ws.close(code, `bad token ${data}`);
+ case "login":
+ try {
+ if (!data || data === "null" || !jwt.decode(data))
+ return ws.close(code, `bad token ${data}`);
- await track(ws, data);
- } catch (e) {
- if (e.message.includes("not found")) ws.send(JSON.stringify({ type: "logout" }));
- setTimeout(() => ws?.close(code, `closing due to error ${e.message}`), 1000);
- }
- break;
- case "token":
- if (!ws.user) return;
- ws.token = data;
- break;
- case "lnurl":
- store.sessions[data] = ws;
- break;
- case "subscribe":
- subscriptions.push({ invoice: data, ws });
- break;
- default:
- // warn("received socket message of unknown type", type, data);
- }
- },
- open(ws: any) {
- const id = v4();
- ws.id = id;
- ws.beats = 0;
- ws.send(JSON.stringify({ type: "connected", data: id }));
- all[id] = ws;
- },
- close(ws: any) {
- const { id } = ws;
- try {
- const uid = users[id];
- if (store.sockets[uid]?.[id]) {
- delete store.sockets[uid][id];
+ await track(ws, data);
+ } catch (e) {
+ if (e.message.includes("not found")) ws.send(JSON.stringify({ type: "logout" }));
+ setTimeout(() => ws?.close(code, `closing due to error ${e.message}`), 1000);
}
+ break;
+ case "token":
+ if (!ws.user) return;
+ ws.token = data;
+ break;
+ case "lnurl":
+ store.sessions[data] = ws;
+ break;
+ case "subscribe":
+ subscriptions.push({ invoice: data, ws });
+ break;
+ default:
+ // warn("received socket message of unknown type", type, data);
+ }
+ },
+ open(ws: any) {
+ const id = v4();
+ ws.id = id;
+ ws.beats = 0;
+ ws.send(JSON.stringify({ type: "connected", data: id }));
+ all[id] = ws;
+ },
+ close(ws: any) {
+ const { id } = ws;
+ try {
+ const uid = users[id];
+ if (store.sockets[uid]?.[id]) {
+ delete store.sockets[uid][id];
+ }
- let i;
- ~(i = subscriptions.findIndex((s) => s.ws.id === id)) && subscriptions.splice(i, 1);
+ let i;
+ ~(i = subscriptions.findIndex((s) => s.ws.id === id)) && subscriptions.splice(i, 1);
- if (all[id]) delete all[id];
- } catch (e) {
- err("problem closing socket", e.message);
- }
- },
+ if (all[id]) delete all[id];
+ } catch (e) {
+ err("problem closing socket", e.message);
+ }
},
-});
+};
export const sendHeartbeat = () => {
for (const uid in store.sockets) {