aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-08-26 16:28:30 -0700
committerAdam Soltys <[email protected]>2024-08-26 16:28:30 -0700
commit00e43ddc0bf3d6dd719fc9295d156567fa2fecfb (patch)
tree9719782a64056ff904c0053223d70547bb7f398c /lib
parent3c611a4e6fbb31fa7d8e32ed256037c45aca1d6d (diff)
downloadcoinos-server-00e43ddc0bf3d6dd719fc9295d156567fa2fecfb.tar.gz
coinos-server-00e43ddc0bf3d6dd719fc9295d156567fa2fecfb.zip
switch to bun
Diffstat (limited to 'lib')
-rw-r--r--lib/app.js13
-rw-r--r--lib/nostr.js20
-rw-r--r--lib/register.js9
-rw-r--r--lib/sockets.js51
-rw-r--r--lib/upload.js5
-rw-r--r--lib/utils.js2
6 files changed, 50 insertions, 50 deletions
diff --git a/lib/app.js b/lib/app.js
index 56584107..03ed3bb0 100644
--- a/lib/app.js
+++ b/lib/app.js
@@ -1,6 +1,5 @@
import config from "$config";
import fastify from "fastify";
-import fastifyWs from "@fastify/websocket";
import fastifyMultipart from "@fastify/multipart";
import fastifyStatic from "@fastify/static";
import fastifyPassport from "@fastify/passport";
@@ -11,7 +10,6 @@ import path from "path";
import pino from "pino";
import { jwtStrategy } from "$lib/auth";
-import { socketServer } from "$lib/sockets";
const app = fastify({
logger: pino(),
@@ -45,23 +43,14 @@ fastifyPassport.use("jwt", jwtStrategy);
app.register(fastifyMultipart, { limits: { fileSize: 10 ** 7 } });
app.register(fastifyStatic, {
- root: path.join("/app/data/uploads"),
+ root: path.join("/home/bun/app/data/uploads"),
prefix: "/public/",
});
-app.register(fastifyWs, {
- errorHandler: (err, conn, req, reply) => {
- console.log("socket error", err);
- conn.destroy(err);
- },
-});
-
await app.register(cors, {
origin: true,
});
-app.register(socketServer);
-
app.setErrorHandler((error, request, reply) => {
if (error instanceof fastify.errorCodes.FST_ERR_BAD_STATUS_CODE) {
reply.status(500).send({ ok: false });
diff --git a/lib/nostr.js b/lib/nostr.js
index 6bb28595..ccfb4e54 100644
--- a/lib/nostr.js
+++ b/lib/nostr.js
@@ -12,6 +12,7 @@ export let coinos;
export let pool;
export let fillPool = () => {
+ try {
pool = RelayPool(config.relays);
pool.on("open", (relay) => {
if (relay.url.includes(config.nostr)) coinos = relay;
@@ -95,6 +96,9 @@ export let fillPool = () => {
console.log(e);
}
});
+ } catch(e) {
+ console.log("POOL", e)
+ }
};
let now = () => Math.round(Date.now() / 1000);
@@ -266,11 +270,11 @@ export async function handleZap(invoice) {
await Promise.allSettled(relays.map((r) => send(ev, r)));
}
-let damus = new Relay("ws://strfry:7777");
-damus.on("open", (relay) => {
- damus.subscribe("nwc", { limit: 1, kinds: [23194] });
-});
-
-damus.on("event", async (sub, ev) => {
- console.log("EV", ev);
-});
+// let damus = new Relay("ws://strfry:7777");
+// damus.on("open", (relay) => {
+// damus.subscribe("nwc", { limit: 1, kinds: [23194] });
+// });
+//
+// damus.on("event", async (sub, ev) => {
+// console.log("EV", ev);
+// });
diff --git a/lib/register.js b/lib/register.js
index 27651abd..49111d96 100644
--- a/lib/register.js
+++ b/lib/register.js
@@ -1,4 +1,3 @@
-import bcrypt from "bcrypt";
import { got } from "got";
import { authenticator } from "otplib";
import { v4 } from "uuid";
@@ -16,7 +15,8 @@ export default async (user, ip, requireChallenge) => {
if (!username) fail("Username required");
username = username.toLowerCase();
- if (!valid.test(username)) fail("Usernames can only have letters and numbers");
+ if (!valid.test(username))
+ fail("Usernames can only have letters and numbers");
let id = v4();
user.id = id;
@@ -25,7 +25,10 @@ export default async (user, ip, requireChallenge) => {
if (exists) fail(`Username ${username} taken`);
if (password) {
- user.password = await bcrypt.hash(password, 1);
+ user.password = await Bun.password.hash(password, {
+ algorithm: "bcrypt",
+ cost: 1,
+ });
}
user.currency = "USD";
diff --git a/lib/sockets.js b/lib/sockets.js
index 2339c06e..b1fc719c 100644
--- a/lib/sockets.js
+++ b/lib/sockets.js
@@ -67,20 +67,21 @@ let track = async (ws, token) => {
ws.user = user;
};
-export async function socketServer(app) {
- let seconds = (n, d = new Date()) => d.setSeconds(d.getSeconds() - n) && d;
-
- app.get("/ws", { websocket: true }, (connection, req) => {
- let { socket: ws } = connection;
- connection.on("error", (e) => err(e.message));
-
- const id = v4();
- ws.id = id;
- ws.beats = 0;
- ws.send(JSON.stringify({ type: "connected", data: id }));
- all[id] = ws;
-
- ws.on("message", async (message) => {
+console.log("starting socket server");
+Bun.serve({
+ hostname: "0.0.0.0",
+ port: 3120,
+ fetch(req, server) {
+ console.log("here we go");
+ // upgrade the request to a WebSocket
+ if (server.upgrade(req)) {
+ console.log("UPGRADING");
+ return; // do not return a Response
+ }
+ return new Response("Upgrade failed", { status: 500 });
+ },
+ websocket: {
+ async message(ws, message) {
let type, data;
try {
@@ -128,11 +129,17 @@ export async function socketServer(app) {
default:
warn("received socket message of unknown type", type, data);
}
- });
-
- ws.on("error", (e) => {});
-
- ws.on("close", function (code, reason) {
+ },
+ open(ws) {
+ console.log("OPENING");
+ const id = v4();
+ ws.id = id;
+ ws.beats = 0;
+ ws.send(JSON.stringify({ type: "connected", data: id }));
+ all[id] = ws;
+ },
+ close(ws) {
+ let { id } = ws;
try {
const uid = users[id];
if (store.sockets[uid] && store.sockets[uid][id]) {
@@ -143,9 +150,9 @@ export async function socketServer(app) {
} catch (e) {
err("problem closing socket", e.message);
}
- });
- });
-}
+ },
+ },
+});
export let sendHeartbeat = () => {
for (const uid in store.sockets) {
diff --git a/lib/upload.js b/lib/upload.js
index 0b558acf..0fb31ea5 100644
--- a/lib/upload.js
+++ b/lib/upload.js
@@ -3,7 +3,6 @@ import pump from "pump";
import Clone from "readable-stream-clone";
import fs from "fs";
import path from "path";
-import sharp from "sharp";
import { pipeline } from "stream";
import { g, s, db } from "$lib/db";
import { bail, fail } from "$lib/utils";
@@ -45,15 +44,13 @@ export default async (req, res) => {
if (format !== "image" && !["jpg", "jpeg", "png"].includes(ext))
fail("unsupported file type");
- let t = sharp({ failOnError: false }).rotate().resize(width).webp();
-
let processedBuffer = await streamToBuffer(s2.pipe(t));
let hash = crypto
.createHash("sha256")
.update(processedBuffer)
.digest("hex");
- let filePath = `/app/data/uploads/${hash}.webp`;
+ let filePath = `/home/bun/app/data/uploads/${hash}.webp`;
fs.writeFileSync(filePath, processedBuffer);
res.send({ hash });
diff --git a/lib/utils.js b/lib/utils.js
index f53b76d2..ada32521 100644
--- a/lib/utils.js
+++ b/lib/utils.js
@@ -70,7 +70,7 @@ export let fields = [
export let getUser = async (username) => {
if (username === "undefined") fail("invalid user");
let user = await migrate(username);
- if (!user.nwc) {
+ if (user && !user.nwc) {
user.nwc = bytesToHex(randomBytes(32));
s(`user:${user.id}`, user);
}