diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ae43c2a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,12 @@ +node_modules/ +dist/ +.git/ +.worktrees/ +.pi/ +logs/ +tmp/ +temp/ +*.log +.env +.env.* +.DS_Store diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..03afcaa --- /dev/null +++ b/Dockerfile @@ -0,0 +1,3 @@ +FROM oven/bun:1-slim +WORKDIR /app +CMD ["/bin/bash"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3f278a5 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,14 @@ +services: + bun: + build: . + container_name: routstrd-bun + working_dir: /app + volumes: + - .:/app + - bun_home:/root/.bun + stdin_open: true + tty: true + command: /bin/bash + +volumes: + bun_home: diff --git a/src/daemon/http/index.ts b/src/daemon/http/index.ts index f12da28..d40c82d 100644 --- a/src/daemon/http/index.ts +++ b/src/daemon/http/index.ts @@ -271,7 +271,7 @@ function makeSdkLogger(prefix?: string): SdkLogger { const fmt = (...args: unknown[]) => (tag ? [tag, ...args] : args); return { log: (...args: unknown[]) => logger.log(...fmt(...args)), - warn: (...args: unknown[]) => logger.log(...fmt(...args)), + warn: (...args: unknown[]) => logger.warn(...fmt(...args)), error: (...args: unknown[]) => logger.error(...fmt(...args)), debug: (...args: unknown[]) => logger.debug(...fmt(...args)), child: (p: string) => makeSdkLogger(prefix ? `${prefix}:${p}` : p), diff --git a/src/daemon/index.ts b/src/daemon/index.ts index 1280cd4..4a4f9c7 100644 --- a/src/daemon/index.ts +++ b/src/daemon/index.ts @@ -17,7 +17,7 @@ function makeSdkLogger(prefix?: string): SdkLogger { const fmt = (...args: unknown[]) => (tag ? [tag, ...args] : args); return { log: (...args: unknown[]) => logger.log(...fmt(...args)), - warn: (...args: unknown[]) => logger.log(...fmt(...args)), + warn: (...args: unknown[]) => logger.warn(...fmt(...args)), error: (...args: unknown[]) => logger.error(...fmt(...args)), debug: (...args: unknown[]) => logger.debug(...fmt(...args)), child: (p: string) => makeSdkLogger(prefix ? `${prefix}:${p}` : p), diff --git a/src/daemon/wallet/index.ts b/src/daemon/wallet/index.ts index 6a64d0a..a1480f6 100644 --- a/src/daemon/wallet/index.ts +++ b/src/daemon/wallet/index.ts @@ -1,4 +1,4 @@ -import { getDecodedToken } from "@cashu/cashu-ts"; +import { getDecodedToken, Amount } from "@cashu/cashu-ts"; import { InsufficientBalanceError } from "@routstr/sdk"; import { logger } from "../../utils/logger"; import { createCocodClient, type CocodClient } from "./cocod-client"; @@ -7,9 +7,9 @@ export function decodeCashuTokenAmount(token: string): { amount: number; unit: "sat" | "msat"; } { - const decoded = getDecodedToken(token); + const decoded = getDecodedToken(token, []); const amount = - decoded?.proofs?.reduce((sum, proof) => sum + proof.amount, 0) ?? 0; + decoded?.proofs?.reduce((sum, proof) => sum + proof.amount.toNumber(), 0) ?? 0; const unit = decoded?.unit === "msat" ? "msat" : "sat"; return { amount, unit }; } diff --git a/src/start-daemon.ts b/src/start-daemon.ts index ac50ade..9d9ea8f 100644 --- a/src/start-daemon.ts +++ b/src/start-daemon.ts @@ -28,7 +28,7 @@ async function startDaemonUnlocked( const startupTimeoutMs = 10 * 60 * 1000; if (await isDaemonHealthy(port)) { - logger.log(`Routstr daemon already running on http://localhost:${port}/v1`); + console.log(`Routstr daemon already running on http://localhost:${port}/v1`); return; } @@ -43,8 +43,8 @@ async function startDaemonUnlocked( const shellCmd = `bun run "${daemonScript}" ${args.map((a) => `'${a}'`).join(" ")}`; const proc = Bun.spawn(["sh", "-c", shellCmd], { - stdout: "inherit", - stderr: "inherit", + stdout: "ignore", + stderr: "ignore", stdin: "ignore", detached: true, }); @@ -67,7 +67,7 @@ async function startDaemonUnlocked( } if (await isDaemonHealthy(port)) { - logger.log(`Routstr daemon started (PID: ${proc.pid}).`); + console.log(`Routstr daemon started (PID: ${proc.pid}).`); return; } } @@ -84,7 +84,7 @@ export async function startDaemon( const startupTimeoutMs = 10 * 60 * 1000; if (await isDaemonHealthy(port)) { - logger.log(`Routstr daemon already running on http://localhost:${port}/v1`); + console.log(`Routstr daemon already running on http://localhost:${port}/v1`); return; } diff --git a/src/utils/logger.ts b/src/utils/logger.ts index af8b9c0..cc317e0 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -48,18 +48,18 @@ async function writeLog(level: string, ...args: unknown[]) { export const logger = { log: (...args: unknown[]) => { - console.log(...args); writeLog("INFO", ...args); }, debug: (...args: unknown[]) => { writeLog("DEBUG", ...args); }, + warn: (...args: unknown[]) => { + writeLog("WARN", ...args); + }, error: (...args: unknown[]) => { - console.error(...args); writeLog("ERROR", ...args); }, info: (...args: unknown[]) => { - console.log(...args); writeLog("INFO", ...args); }, };