From 00e43ddc0bf3d6dd719fc9295d156567fa2fecfb Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Mon, 26 Aug 2024 16:28:30 -0700 Subject: switch to bun --- lib/app.js | 13 +------------ lib/nostr.js | 20 ++++++++++++-------- lib/register.js | 9 ++++++--- lib/sockets.js | 51 +++++++++++++++++++++++++++++---------------------- lib/upload.js | 5 +---- lib/utils.js | 2 +- 6 files changed, 50 insertions(+), 50 deletions(-) (limited to 'lib') 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); } -- cgit v1.2.3